committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
65 changed files with 3333 additions and 2267 deletions
-
6.flake8
-
4.gitignore
-
2.travis.yml
-
61docs/conf.py
-
1030pytrustnfe/Servidores.py
-
8pytrustnfe/__init__.py
-
12pytrustnfe/certificado.py
-
12pytrustnfe/client.py
-
4pytrustnfe/exceptions.py
-
165pytrustnfe/nfe/__init__.py
-
27pytrustnfe/nfe/assinatura.py
-
352pytrustnfe/nfe/danfce.py
-
1054pytrustnfe/nfe/danfe.py
-
34pytrustnfe/nfe/patch.py
-
43pytrustnfe/nfse/aparecida/__init__.py
-
23pytrustnfe/nfse/assinatura.py
-
76pytrustnfe/nfse/betha/__init__.py
-
51pytrustnfe/nfse/bh/__init__.py
-
21pytrustnfe/nfse/bh/assinatura.py
-
53pytrustnfe/nfse/carioca/__init__.py
-
67pytrustnfe/nfse/dsf/__init__.py
-
94pytrustnfe/nfse/floripa/__init__.py
-
57pytrustnfe/nfse/ginfes/__init__.py
-
40pytrustnfe/nfse/imperial/__init__.py
-
47pytrustnfe/nfse/mga/__init__.py
-
17pytrustnfe/nfse/mga/assinatura.py
-
116pytrustnfe/nfse/natal/__init__.py
-
8pytrustnfe/nfse/natal/templates/EnvelopeSoap.xml
-
111pytrustnfe/nfse/natal/templates/Exemplo_LoteRPS.xml
-
112pytrustnfe/nfse/natal/templates/Rps.xml
-
3pytrustnfe/nfse/natal/templates/cabecalho.xml
-
15pytrustnfe/nfse/natal/templates/cancelarNfse.xml
-
7pytrustnfe/nfse/natal/templates/consultarLoteRps.xml
-
11pytrustnfe/nfse/natal/templates/recepcionarLoteRps.xml
-
68pytrustnfe/nfse/paulistana/__init__.py
-
19pytrustnfe/nfse/paulistana/templates/EnvioLoteRPS.xml
-
50pytrustnfe/nfse/paulistana/templates/EnvioRPS.xml
-
64pytrustnfe/nfse/simpliss/__init__.py
-
34pytrustnfe/nfse/susesu/__init__.py
-
9pytrustnfe/nfse/susesu/templates/EnviarNota.xml
-
262pytrustnfe/urls.py
-
60pytrustnfe/utils.py
-
19pytrustnfe/xml/__init__.py
-
27pytrustnfe/xml/filters.py
-
4pytrustnfe/xml/validate.py
-
4requirements-dev.txt
-
82setup.py
-
154tests/XMLs/natal_sent_xml.xml
-
10tests/XMLs/paulistana_signature.xml
-
1tests/XMLs/xml_send_rps_batch_to_paulistana.xml
-
56tests/const.py
-
68tests/test_assinatura.py
-
110tests/test_certificado.py
-
6tests/test_danfe.py
-
13tests/test_ginfes.py
-
145tests/test_nfse_paulistana.py
-
35tests/test_nfse_paulistana_email_tomador.py
-
54tests/test_nfse_paulistana_endereco_tomador.py
-
29tests/test_nfse_paulistana_para_lote.py
-
60tests/test_nfse_paulistana_tipo_cpfcnpj.py
-
47tests/test_nfse_paulistana_valores_default.py
-
37tests/test_servidores.py
-
118tests/test_utils.py
-
17tests/test_xml.py
-
33tests/test_xml_serializacao.py
@ -0,0 +1,6 @@ |
|||
[flake8] |
|||
ignore = E203, E266, E501, W503, F403, E402, E265, E231 |
|||
max-line-length = 79 |
|||
max-complexity = 18 |
|||
select = B,C,E,F,W,T4,B9 |
|||
exclude = .git,__pycache__,api/specs/,migrations/ |
|||
1030
pytrustnfe/Servidores.py
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1054
pytrustnfe/nfe/danfe.py
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,116 @@ |
|||
# © 2019 Danimar Ribeiro, Trustcode |
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
|||
|
|||
import os |
|||
from OpenSSL import crypto |
|||
from base64 import b64encode |
|||
|
|||
from requests import Session |
|||
from zeep import Client |
|||
from zeep.transports import Transport |
|||
from requests.packages.urllib3 import disable_warnings |
|||
|
|||
from pytrustnfe.xml import render_xml, sanitize_response |
|||
from pytrustnfe.certificado import extract_cert_and_key_from_pfx, save_cert_key |
|||
from pytrustnfe.nfe.assinatura import Assinatura |
|||
from lxml import etree |
|||
|
|||
|
|||
def sign_rps(path, certificado, **kwargs): |
|||
if "nfse" in kwargs: |
|||
lote = "" |
|||
for item in kwargs["nfse"]["lista_rps"]: |
|||
data = {"rps": item} |
|||
xml_rps = render_xml(path, "Rps.xml", True, **data) |
|||
|
|||
signer = Assinatura(certificado.pfx, certificado.password) |
|||
lote += signer.assina_xml( |
|||
xml_rps, f"rps:{item.get('numero')}{item.get('serie')}", getchildren=True |
|||
) |
|||
return lote |
|||
return "" |
|||
|
|||
|
|||
def _render(certificado, method, **kwargs): |
|||
path = os.path.join(os.path.dirname(__file__), "templates") |
|||
parser = etree.XMLParser( |
|||
remove_blank_text=True, remove_comments=True, strip_cdata=False |
|||
) |
|||
|
|||
lote = "" |
|||
referencia = "" |
|||
if method == "RecepcionarLoteRps": |
|||
referencia = "lote" |
|||
lote = sign_rps(path, certificado, **kwargs) |
|||
|
|||
kwargs["lote"] = lote |
|||
xml_send = render_xml(path, "%s.xml" % method, False, **kwargs) |
|||
|
|||
signer = Assinatura(certificado.pfx, certificado.password) |
|||
|
|||
xml_send = signer.assina_xml(etree.fromstring( |
|||
xml_send, parser=parser), f"{referencia}", getchildren=True) |
|||
return xml_send |
|||
|
|||
|
|||
def _send(certificado, method, **kwargs): |
|||
base_url = "" |
|||
if kwargs["ambiente"] == "producao": |
|||
base_url = "https://wsnfsev1.natal.rn.gov.br:8444" |
|||
else: |
|||
base_url = "https://wsnfsev1homologacao.natal.rn.gov.br:8443/axis2/services/NfseWSServiceV1?wsdl" |
|||
|
|||
base_url = "https://wsnfsev1homologacao.natal.rn.gov.br:8443/axis2/services/NfseWSServiceV1?wsdl" |
|||
cert, key = extract_cert_and_key_from_pfx( |
|||
certificado.pfx, certificado.password) |
|||
cert, key = save_cert_key(cert, key) |
|||
|
|||
disable_warnings() |
|||
session = Session() |
|||
session.cert = (cert, key) |
|||
session.verify = False |
|||
transport = Transport(session=session) |
|||
|
|||
client = Client(wsdl=base_url, transport=transport) |
|||
xml_send = {} |
|||
xml_send = { |
|||
"nfseDadosMsg": kwargs["xml"], |
|||
"nfseCabecMsg": """<?xml version="1.0"?> |
|||
<cabecalho xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" versao="1" xmlns="http://www.abrasf.org.br/ABRASF/arquivos/nfse.xsd"> |
|||
<versaoDados>1</versaoDados> |
|||
</cabecalho>""", |
|||
} |
|||
|
|||
response = client.service[method](**xml_send) |
|||
response, obj = sanitize_response(response) |
|||
return {"sent_xml": xml_send, "received_xml": response, "object": obj} |
|||
|
|||
|
|||
def xml_recepcionar_lote_rps(certificado, **kwargs): |
|||
return _render(certificado, "RecepcionarLoteRps", **kwargs) |
|||
|
|||
|
|||
def recepcionar_lote_rps(certificado, **kwargs): |
|||
if "xml" not in kwargs: |
|||
kwargs["xml"] = xml_recepcionar_lote_rps(certificado, **kwargs) |
|||
return _send(certificado, "RecepcionarLoteRps", **kwargs) |
|||
|
|||
|
|||
def xml_consultar_lote_rps(certificado, **kwargs): |
|||
return _render(certificado, "ConsultarLoteRps", **kwargs) |
|||
|
|||
|
|||
def consultar_lote_rps(certificado, **kwargs): |
|||
if "xml" not in kwargs: |
|||
kwargs["xml"] = xml_consultar_lote_rps(certificado, **kwargs) |
|||
return _send(certificado, "ConsultarLoteRps", **kwargs) |
|||
|
|||
|
|||
def xml_cancelar_nfse(certificado, **kwargs): |
|||
return _render(certificado, "cancelarNfse", **kwargs) |
|||
|
|||
|
|||
def cancelar_nfse(certificado, **kwargs): |
|||
if "xml" not in kwargs: |
|||
kwargs["xml"] = xml_cancelar_nfse(certificado, **kwargs) |
|||
return _send(certificado, "cancelarNfse", **kwargs) |
|||
@ -0,0 +1,8 @@ |
|||
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> |
|||
<soap:Body> |
|||
<RecepcionarLoteRpsRequest xmlns="http://nfse.abrasf.org.br"> |
|||
<nfseCabecMsg><![CDATA[{% include 'cabecalho.xml' %}]]></nfseCabecMsg> |
|||
<nfseDadosMsg><![CDATA[{% include 'RecepcionarLoteRps.xml' %}]]></nfseDadosMsg> |
|||
</RecepcionarLoteRpsRequest> |
|||
</soap:Body> |
|||
</soap:Envelope> |
|||
@ -0,0 +1,111 @@ |
|||
<EnviarLoteRpsEnvio xmlns="http://www.abrasf.org.br/ABRASF/arquivos/nfse.xsd"> |
|||
<LoteRps Id="lote"> |
|||
<NumeroLote>1</NumeroLote> |
|||
<Cnpj>27596568000505</Cnpj> |
|||
<InscricaoMunicipal>1000047</InscricaoMunicipal> |
|||
<QuantidadeRps>1</QuantidadeRps> |
|||
<ListaRps> |
|||
<Rps> |
|||
<InfRps Id="rps:1ABCDZ"> |
|||
<IdentificacaoRps> |
|||
<Numero>1</Numero> |
|||
<Serie>ABCDH</Serie> |
|||
<Tipo>1</Tipo> |
|||
</IdentificacaoRps> |
|||
<DataEmissao>2010-06-16T21:00:00</DataEmissao> |
|||
<NaturezaOperacao>1</NaturezaOperacao> |
|||
<RegimeEspecialTributacao>6</RegimeEspecialTributacao> |
|||
<OptanteSimplesNacional>1</OptanteSimplesNacional> |
|||
<IncentivadorCultural>2</IncentivadorCultural> |
|||
<Status>1</Status> |
|||
<Servico> |
|||
<Valores> |
|||
<ValorServicos>1000</ValorServicos> |
|||
<ValorPis>10</ValorPis> |
|||
<ValorCofins>10</ValorCofins> |
|||
<ValorInss>10</ValorInss> |
|||
<ValorIr>10</ValorIr> |
|||
<ValorCsll>10</ValorCsll> |
|||
<IssRetido>1</IssRetido> |
|||
<ValorIss>50</ValorIss> |
|||
<OutrasRetencoes>10</OutrasRetencoes> |
|||
<BaseCalculo>1000</BaseCalculo> |
|||
<Aliquota>0.05</Aliquota> |
|||
</Valores> |
|||
<ItemListaServico>11.01</ItemListaServico> |
|||
<CodigoCnae>4520005</CodigoCnae> |
|||
<Discriminacao>Teste.</Discriminacao> |
|||
<CodigoMunicipio>3106200</CodigoMunicipio> |
|||
</Servico> |
|||
<Prestador> |
|||
<Cnpj>27596568000505</Cnpj> |
|||
<InscricaoMunicipal>1000047</InscricaoMunicipal> |
|||
</Prestador> |
|||
<Tomador> |
|||
<IdentificacaoTomador> |
|||
<CpfCnpj> |
|||
<Cnpj>24533572000102</Cnpj> |
|||
</CpfCnpj> |
|||
<InscricaoMunicipal>1000039</InscricaoMunicipal> |
|||
</IdentificacaoTomador> |
|||
<RazaoSocial>INSCRICAO DE TESTE SIATU - DAGUA -PAULINOS</RazaoSocial> |
|||
<Endereco> |
|||
<Endereco>DA BAHIA</Endereco> |
|||
<Numero>200</Numero> |
|||
<Complemento>ANDAR 14</Complemento> |
|||
<Bairro>CENTRO</Bairro> |
|||
<CodigoMunicipio>2408102</CodigoMunicipio> |
|||
<Uf>RN</Uf> |
|||
<Cep>30160010</Cep> |
|||
</Endereco> |
|||
<Contato> |
|||
<Email>marcelo@teste.com.br</Email> |
|||
</Contato> |
|||
</Tomador> |
|||
<ConstrucaoCivil> |
|||
<CodigoObra>1234</CodigoObra> |
|||
<Art>1234</Art> |
|||
</ConstrucaoCivil> |
|||
</InfRps> |
|||
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> |
|||
<SignedInfo> |
|||
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments" /> |
|||
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /> |
|||
<Reference URI="#rps:1ABCDZ"> |
|||
<Transforms> |
|||
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /> |
|||
</Transforms> |
|||
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> |
|||
<DigestValue>mMyQLAm4psxx52kaD8Jlta3ouPM=</DigestValue> |
|||
</Reference> |
|||
</SignedInfo> |
|||
<SignatureValue>qBKfaNz6RbsYUxCOrjGZ9zrdgiGL7QSBxjlhYRlKDNlDERlDWvM8gi28yus8FoUb0v2CTKKIBz0tzfqxgk60rke4YCMkTzdWfpm7ofMIhYC9VHqbWdInC20znOKygJy5hyIx6JBoyXbejnw/0KF+2E1P1ZehqXJWZqY+KPaIGAY=</SignatureValue> |
|||
<KeyInfo> |
|||
<X509Data> |
|||
<X509Certificate>MIIE7DCCA9SgAwIBAgIQZMlLC9ZEsHWsnvJNdMI2yzANBgkqhkiG9w0BAQUFADBqMQswCQYDVQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDEsMCoGA1UECxMjU2VjcmV0YXJpYSBkYSBSZWNlaXRhIEZlZGVyYWwgLSBTUkYxGDAWBgNVBAMTD0FDIFBST0RFTUdFIFNSRjAeFw0wNzEwMzEwMDAwMDBaFw0xMDEwMzAyMzU5NTlaMIGQMQswCQYDVQQGEwJCUjETMBEGA1UEChQKSUNQLUJyYXNpbDEqMCgGA1UECxQhU2VjcmV0YXJpYSBkYSBSZWNlaXRhIEZlZGVyYWwtU1JGMRIwEAYDVQQLFAlTUkYgZS1DUEYxLDAqBgNVBAMTI0VER0FSIERPIENBUk1PIEZFUlJFSVJBOjQzMjYwMTUyNjg3MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6M+9XT5KLQN3IH8mAr+S6vxiochY/EwF8EhtNoxPTYl+zr0Dh+eZsRG31bN410nr2OrwncrRorMK8Ngq+j3FnNF0nIMigaaa5NAEfIk3Yy4kuqrTUZBpqUJvCqc3mkF3C3XD0MTmtbVTWCvYIk+qn3t5ShHyMnQcuah5Q0ItSbQIDAQABo4IB6TCCAeUwgZUGA1UdEQSBjTCBiqA9BgVgTAEDAaA0BDIyMTAzMTk2NDQzMjYwMTUyNjg3MDAwMDAwMDAwMDAwMDAwMDBNLTI4ODQwODVTU1BNR6AXBgVgTAEDBqAOBAwwMDAwMDAwMDAwMDCgHgYFYEwBAwWgFQQTMDAwMDAwMDAwMDAwMDAwMDAwMIEQZWRnYXJAcGJoLmdvdi5icjAJBgNVHRMEAjAAMF8GA1UdHwRYMFYwVKBSoFCGTmh0dHA6Ly9pY3AtYnJhc2lsLmNlcnRpc2lnbi5jb20uYnIvcmVwb3NpdG9yaW8vbGNyL0FDUFJPREVNR0VTUkYvTGF0ZXN0Q1JMLmNybDAfBgNVHSMEGDAWgBTdO9vtjZcRRUMBQ020Ev0O7niacDAOBgNVHQ8BAf8EBAMCBeAwVQYDVR0gBE4wTDBKBgZgTAECAxQwQDA+BggrBgEFBQcCARYyaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9kcGMwHQYDVR0lBBYwFAYIKwYBBQUHAwQGCCsGAQUFBwMCMDgGCCsGAQUFBwEBBCwwKjAoBggrBgEFBQcwAYYcaHR0cDovL29jc3AuY2VydGlzaWduLmNvbS5icjANBgkqhkiG9w0BAQUFAAOCAQEAYFcjZj4lGVEREHBaHtcRletWS6/mvpkxmodwj3ele5yXsxuqSZd7ebHbKewXx7gkyaWFkFAxFanQhls2tYKjg6haqt2b0AO1FsitVIHkMcxRwkU9G+1ec8yfdxymra2VdXazkxuvqKABgxkqKnaFdHjje7cjWDgwparymH64mTlHkSQz59GutJW0xfwBHcMGx0/9/iIug6pfMQivWf0NMVpFNzxO5ZNPEuOeBhVDxQr4+KB+4B9xDai/3J6f42UNbSy+z3xuB0K8/7V7BsFUYOYFSNnBrXhvbvXtZOtteX65V0r1+RJJX5OK+PAPhZ57T1LEmHMggdo5kli3Nr1KFQ==</X509Certificate> |
|||
</X509Data> |
|||
</KeyInfo> |
|||
</Signature> |
|||
</Rps> |
|||
</ListaRps> |
|||
</LoteRps> |
|||
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#" Id="Ass_lote"> |
|||
<SignedInfo> |
|||
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments" /> |
|||
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /> |
|||
<Reference URI="#lote"> |
|||
<Transforms> |
|||
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /> |
|||
</Transforms> |
|||
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> |
|||
<DigestValue>n42EhtzDSnZ071g+44ZMBCc74UQ=</DigestValue> |
|||
</Reference> |
|||
</SignedInfo> |
|||
<SignatureValue>pQyeXnJ2S9KyUJ1BE3k3PZuDpk7WkD2nMPLoELSLJeNBe9TwmLhImsIUS4inAUreuTsjfrs2BUmChN6jPA0/1cSR0GbblLsHFN+IwPE2dnPN/u0vIOmsan4MuW1OnlH6KexmDHRj/uFwjoXfSJ0JJE1u9bYdbsp5LGlFuc//CCQ=</SignatureValue> |
|||
<KeyInfo> |
|||
<X509Data> |
|||
<X509Certificate>MIIE7DCCA9SgAwIBAgIQZMlLC9ZEsHWsnvJNdMI2yzANBgkqhkiG9w0BAQUFADBqMQswCQYDVQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDEsMCoGA1UECxMjU2VjcmV0YXJpYSBkYSBSZWNlaXRhIEZlZGVyYWwgLSBTUkYxGDAWBgNVBAMTD0FDIFBST0RFTUdFIFNSRjAeFw0wNzEwMzEwMDAwMDBaFw0xMDEwMzAyMzU5NTlaMIGQMQswCQYDVQQGEwJCUjETMBEGA1UEChQKSUNQLUJyYXNpbDEqMCgGA1UECxQhU2VjcmV0YXJpYSBkYSBSZWNlaXRhIEZlZGVyYWwtU1JGMRIwEAYDVQQLFAlTUkYgZS1DUEYxLDAqBgNVBAMTI0VER0FSIERPIENBUk1PIEZFUlJFSVJBOjQzMjYwMTUyNjg3MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6M+9XT5KLQN3IH8mAr+S6vxiochY/EwF8EhtNoxPTYl+zr0Dh+eZsRG31bN410nr2OrwncrRorMK8Ngq+j3FnNF0nIMigaaa5NAEfIk3Yy4kuqrTUZBpqUJvCqc3mkF3C3XD0MTmtbVTWCvYIk+qn3t5ShHyMnQcuah5Q0ItSbQIDAQABo4IB6TCCAeUwgZUGA1UdEQSBjTCBiqA9BgVgTAEDAaA0BDIyMTAzMTk2NDQzMjYwMTUyNjg3MDAwMDAwMDAwMDAwMDAwMDBNLTI4ODQwODVTU1BNR6AXBgVgTAEDBqAOBAwwMDAwMDAwMDAwMDCgHgYFYEwBAwWgFQQTMDAwMDAwMDAwMDAwMDAwMDAwMIEQZWRnYXJAcGJoLmdvdi5icjAJBgNVHRMEAjAAMF8GA1UdHwRYMFYwVKBSoFCGTmh0dHA6Ly9pY3AtYnJhc2lsLmNlcnRpc2lnbi5jb20uYnIvcmVwb3NpdG9yaW8vbGNyL0FDUFJPREVNR0VTUkYvTGF0ZXN0Q1JMLmNybDAfBgNVHSMEGDAWgBTdO9vtjZcRRUMBQ020Ev0O7niacDAOBgNVHQ8BAf8EBAMCBeAwVQYDVR0gBE4wTDBKBgZgTAECAxQwQDA+BggrBgEFBQcCARYyaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9kcGMwHQYDVR0lBBYwFAYIKwYBBQUHAwQGCCsGAQUFBwMCMDgGCCsGAQUFBwEBBCwwKjAoBggrBgEFBQcwAYYcaHR0cDovL29jc3AuY2VydGlzaWduLmNvbS5icjANBgkqhkiG9w0BAQUFAAOCAQEAYFcjZj4lGVEREHBaHtcRletWS6/mvpkxmodwj3ele5yXsxuqSZd7ebHbKewXx7gkyaWFkFAxFanQhls2tYKjg6haqt2b0AO1FsitVIHkMcxRwkU9G+1ec8yfdxymra2VdXazkxuvqKABgxkqKnaFdHjje7cjWDgwparymH64mTlHkSQz59GutJW0xfwBHcMGx0/9/iIug6pfMQivWf0NMVpFNzxO5ZNPEuOeBhVDxQr4+KB+4B9xDai/3J6f42UNbSy+z3xuB0K8/7V7BsFUYOYFSNnBrXhvbvXtZOtteX65V0r1+RJJX5OK+PAPhZ57T1LEmHMggdo5kli3Nr1KFQ==</X509Certificate> |
|||
</X509Data> |
|||
</KeyInfo> |
|||
</Signature> |
|||
</EnviarLoteRpsEnvio> |
|||
@ -0,0 +1,112 @@ |
|||
<Rps> |
|||
<InfRps Id="rps:{{ rps.numero }}{{ rps.serie }}"> |
|||
<IdentificacaoRps> |
|||
<Numero>{{ rps.numero }}</Numero> |
|||
<Serie>{{ rps.serie }}</Serie> |
|||
<Tipo>{{ rps.tipo_rps }}</Tipo> |
|||
</IdentificacaoRps> |
|||
<DataEmissao>{{ rps.data_emissao }}</DataEmissao> |
|||
<NaturezaOperacao>{{ rps.natureza_operacao }}</NaturezaOperacao> |
|||
<RegimeEspecialTributacao>{{ rps.regime_tributacao }}</RegimeEspecialTributacao> |
|||
<OptanteSimplesNacional>{{ rps.optante_simples }}</OptanteSimplesNacional> |
|||
<IncentivadorCultural>{{ rps.incentivador_cultural }}</IncentivadorCultural> |
|||
<Status>{{ rps.status }}</Status> |
|||
<Servico> |
|||
<Valores> |
|||
<ValorServicos>{{ rps.servico.valor_servico }}</ValorServicos> |
|||
<ValorPis>{{ rps.servico.pis }}</ValorPis> |
|||
<ValorCofins>{{ rps.servico.cofins }}</ValorCofins> |
|||
<ValorInss>{{ rps.servico.inss }}</ValorInss> |
|||
<ValorIr>{{ rps.servico.ir }}</ValorIr> |
|||
<ValorCsll>{{ rps.servico.csll }}</ValorCsll> |
|||
<IssRetido>{{ rps.servico.iss_retido }}</IssRetido> |
|||
<ValorIss>{{ rps.servico.iss }}</ValorIss> |
|||
<OutrasRetencoes>{{ rps.servico.retencoes }}</OutrasRetencoes> |
|||
<BaseCalculo>{{ rps.servico.base_calculo }}</BaseCalculo> |
|||
<Aliquota>{{ rps.servico.aliquota }}</Aliquota> |
|||
</Valores> |
|||
<ItemListaServico>{{ rps.servico.codigo_servico }}</ItemListaServico> |
|||
<CodigoCnae>{{ rps.servico.cnae_servico }}</CodigoCnae> |
|||
<Discriminacao>{{ rps.servico.discriminacao }}</Discriminacao> |
|||
<CodigoMunicipio>{{ rps.servico.codigo_municipio }}</CodigoMunicipio> |
|||
</Servico> |
|||
<Prestador> |
|||
<Cnpj>{{ rps.prestador.cnpj }}</Cnpj> |
|||
<InscricaoMunicipal>{{ rps.prestador.inscricao_municipal }}</InscricaoMunicipal> |
|||
<RazaoSocial>{{ rps.prestador.razaosocial }}</RazaoSocial> |
|||
<NomeFantasia>{{ rps.prestador.fantasia }}</NomeFantasia> |
|||
<Endereco> |
|||
<Endereco>{{ rps.prestador.endereco }}</Endereco> |
|||
<Numero>{{ rps.prestador.numero }}</Numero> |
|||
<Complemento>{{ rps.prestador.complemento }}</Complemento> |
|||
<Bairro>{{ rps.prestador.bairro }}</Bairro> |
|||
<CodigoMunicipio>{{ rps.prestador.codigomunicipal }}</CodigoMunicipio> |
|||
<Uf>{{ rps.prestador.uf }}</Uf> |
|||
<Cep>{{ rps.prestador.cep }}</Cep> |
|||
</Endereco> |
|||
<Contato> |
|||
{% if rps.prestador.telefone is defined -%} |
|||
<Telefone>{{ rps.prestador.telefone }}</Telefone> |
|||
{% endif %} |
|||
{% if rps.prestador.email is defined -%} |
|||
<Email>{{ rps.prestador.email }}</Email> |
|||
{% endif %} |
|||
</Contato> |
|||
</Prestador> |
|||
<Tomador> |
|||
<IdentificacaoTomador> |
|||
<CpfCnpj> |
|||
{% if rps.tomador.cpf_cnpj|length == 14 %} |
|||
<Cnpj>{{ rps.tomador.cpf_cnpj }}</Cnpj> |
|||
{% endif %} |
|||
{% if rps.tomador.cpf_cnpj|length == 11 %} |
|||
<Cpf>{{ rps.tomador.cpf_cnpj }}</Cpf> |
|||
{% endif %} |
|||
</CpfCnpj> |
|||
{% if rps.tomador.inscricao_municipal is defined -%} |
|||
<InscricaoMunicipal>{{ rps.tomador.inscricao_municipal }}</InscricaoMunicipal> |
|||
{% endif %} |
|||
</IdentificacaoTomador> |
|||
<RazaoSocial>{{ rps.tomador.razao_social }}</RazaoSocial> |
|||
<Endereco> |
|||
<Endereco>{{ rps.tomador.endereco }}</Endereco> |
|||
<Numero>{{ rps.tomador.numero }}</Numero> |
|||
<Complemento>{{ rps.tomador.complemento }}</Complemento> |
|||
<Bairro>{{ rps.tomador.bairro }}</Bairro> |
|||
<CodigoMunicipio>{{ rps.tomador.codigo_municipio }}</CodigoMunicipio> |
|||
<Uf>{{ rps.tomador.uf }}</Uf> |
|||
<Cep>{{ rps.tomador.cep }}</Cep> |
|||
</Endereco> |
|||
<Contato> |
|||
{% if rps.tomador.telefone is defined -%} |
|||
<Telefone>{{ rps.tomador.telefone }}</Telefone> |
|||
{% endif %} |
|||
{% if rps.tomador.email is defined -%} |
|||
<Email>{{ rps.tomador.email }}</Email> |
|||
{% endif %} |
|||
</Contato> |
|||
{% if rps.tomador.orgao_gerador is defined -%} |
|||
<OrgaoGerador> |
|||
<CodigoMunicipio>{{ rps.tomador.orgao_gerador.codigo_municipio }}</CodigoMunicipio> |
|||
<Uf>{{ rps.tomador.orgao_gerador.uf }}</Uf> |
|||
</OrgaoGerador> |
|||
{% endif %} |
|||
</Tomador> |
|||
{% if rps.intermediario is defined -%} |
|||
<IntermediarioServico> |
|||
<RazaoSocial>{{ rps.intermediario.razao_social }}</RazaoSocial> |
|||
<CpfCnpj> |
|||
<Cnpj>{{ rps.intermediario.cnpj }}</Cnpj> |
|||
</CpfCnpj> |
|||
<InscricaoMunicipal>{{ rps.intermediario.inscricao_municipal }}</InscricaoMunicipal> |
|||
</IntermediarioServico> |
|||
{% endif %} |
|||
{% if rps.construcao_civil is defined -%} |
|||
<ContrucaoCivil> |
|||
<CodigoObra>{{ rps.construcao_civil.codigo_obra }}</CodigoObra> |
|||
<Art>{{ rps.construcao_civil.art }}</Art> |
|||
</ContrucaoCivil> |
|||
{% endif %} |
|||
</InfRps> |
|||
<Signature Id="placeholder"></Signature> |
|||
</Rps> |
|||
@ -0,0 +1,3 @@ |
|||
<cabecalho versao="2.01" xmlns="http://www.abrasf.org.br/nfse.xsd"> |
|||
<versaoDados>2.01</versaoDados> |
|||
</cabecalho> |
|||
@ -0,0 +1,15 @@ |
|||
<CancelarNfseEnvio xmlns="http://nfse.abrasf.org.br"> |
|||
<Pedido> |
|||
<InfPedidoCancelamento Id="1"> |
|||
<IdentificacaoNfse> |
|||
<Numero>{{ cancelamento.numero_nfse }}</Numero> |
|||
<CpfCnpj> |
|||
<Cnpj>{{ cancelamento.cnpj_prestador }}</Cnpj> |
|||
</CpfCnpj> |
|||
<InscricaoMunicipal>{{ cancelamento.inscricao_municipal }}</InscricaoMunicipal> |
|||
<CodigoMunicipio>{{ cancelamento.cidade }}</CodigoMunicipio> |
|||
</IdentificacaoNfse> |
|||
<CodigoCancelamento>{{ cancelamento.codigo_cancelamento }}</CodigoCancelamento> |
|||
</InfPedidoCancelamento> |
|||
</Pedido> |
|||
</CancelarNfseEnvio> |
|||
@ -0,0 +1,7 @@ |
|||
<ConsultarLoteRpsEnvio xmlns="http://www.abrasf.org.br/ABRASF/arquivos/nfse.xsd"> |
|||
<Prestador> |
|||
<Cnpj>{{ consulta.cnpj_prestador }}</Cnpj> |
|||
<InscricaoMunicipal>{{ consulta.inscricao_municipal }}</InscricaoMunicipal> |
|||
</Prestador> |
|||
<Protocolo>{{ consulta.protocolo }}</Protocolo> |
|||
</ConsultarLoteRpsEnvio> |
|||
@ -0,0 +1,11 @@ |
|||
<EnviarLoteRpsEnvio xmlns="http://www.abrasf.org.br/ABRASF/arquivos/nfse.xsd"> |
|||
<LoteRps Id="lote"> |
|||
<NumeroLote>{{ nfse.numero_lote }}</NumeroLote> |
|||
<Cnpj>{{ nfse.cnpj_prestador }}</Cnpj> |
|||
<InscricaoMunicipal>{{ nfse.inscricao_municipal }}</InscricaoMunicipal> |
|||
<QuantidadeRps>{{ nfse.lista_rps|length }}</QuantidadeRps> |
|||
<ListaRps> |
|||
{{lote}} |
|||
</ListaRps> |
|||
</LoteRps> |
|||
</EnviarLoteRpsEnvio> |
|||
@ -0,0 +1,4 @@ |
|||
pytest==5.3.4 |
|||
pytest-cov==2.8.1 |
|||
black==19.10b0 |
|||
flake8==3.7.9 |
|||
@ -0,0 +1,154 @@ |
|||
<?xml version="1.0" ?> |
|||
<EnviarLoteRpsEnvio xmlns="http://www.abrasf.org.br/ABRASF/arquivos/nfse.xsd"> |
|||
<LoteRps Id="lote"> |
|||
<NumeroLote>1</NumeroLote> |
|||
<Cnpj>24533572000102</Cnpj> |
|||
<InscricaoMunicipal>2143992</InscricaoMunicipal> |
|||
<QuantidadeRps>1</QuantidadeRps> |
|||
<ListaRps> |
|||
<Rps> |
|||
<InfRps Id="rps:1UNICA"> |
|||
<IdentificacaoRps> |
|||
<Numero>1</Numero> |
|||
<Serie>UNICA</Serie> |
|||
<Tipo>1</Tipo> |
|||
</IdentificacaoRps> |
|||
<DataEmissao>2010-06-16T21:00:00</DataEmissao> |
|||
<NaturezaOperacao>1</NaturezaOperacao> |
|||
<RegimeEspecialTributacao>1</RegimeEspecialTributacao> |
|||
<OptanteSimplesNacional>1</OptanteSimplesNacional> |
|||
<IncentivadorCultural>2</IncentivadorCultural> |
|||
<Status>1</Status> |
|||
<Servico> |
|||
<Valores> |
|||
<ValorServicos>1.00</ValorServicos> |
|||
<ValorPis>0</ValorPis> |
|||
<ValorCofins>0</ValorCofins> |
|||
<ValorInss>0</ValorInss> |
|||
<ValorIr>0</ValorIr> |
|||
<ValorCsll>0</ValorCsll> |
|||
<IssRetido>2</IssRetido> |
|||
<ValorIss>2</ValorIss> |
|||
<OutrasRetencoes>2</OutrasRetencoes> |
|||
<BaseCalculo>0.00</BaseCalculo> |
|||
<Aliquota>2</Aliquota> |
|||
</Valores> |
|||
<ItemListaServico>01.07</ItemListaServico> |
|||
<CodigoCnae>6209100</CodigoCnae> |
|||
<Discriminacao>Sistema NFSe</Discriminacao> |
|||
<CodigoMunicipio>2408102</CodigoMunicipio> |
|||
</Servico> |
|||
<Prestador> |
|||
<Cnpj>24533572000102</Cnpj> |
|||
<InscricaoMunicipal>2143992</InscricaoMunicipal> |
|||
</Prestador> |
|||
<Tomador> |
|||
<IdentificacaoTomador> |
|||
<CpfCnpj> |
|||
<Cnpj>01812418000166</Cnpj> |
|||
</CpfCnpj> |
|||
<InscricaoMunicipal>2143992</InscricaoMunicipal> |
|||
</IdentificacaoTomador> |
|||
<RazaoSocial>MARIO</RazaoSocial> |
|||
<Endereco> |
|||
<Endereco>RUA GROBEIRO</Endereco> |
|||
<Numero>128</Numero> |
|||
<Complemento>ANDAR 14</Complemento> |
|||
<Bairro>Lagoa Nova</Bairro> |
|||
<CodigoMunicipio>3159506</CodigoMunicipio> |
|||
<Uf>BH</Uf> |
|||
<Cep>30160010</Cep> |
|||
</Endereco> |
|||
<Contato> |
|||
<Email>mario@email.com.br</Email> |
|||
</Contato> |
|||
</Tomador> |
|||
</InfRps> |
|||
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> |
|||
<SignedInfo> |
|||
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"/> |
|||
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/> |
|||
<Reference URI="#rps:1UNICA"> |
|||
<Transforms> |
|||
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/> |
|||
<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"/> |
|||
</Transforms> |
|||
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> |
|||
<DigestValue>CqxPWMfRKwecg6TEoFNA82URG5I=</DigestValue> |
|||
</Reference> |
|||
</SignedInfo> |
|||
<SignatureValue>DIzLfhkM5HaOEMqHZcOXgAnHahgLuvtRF/ArPPyYKT/Dg0sg+ia/MjNchc2pH/eTOiqgj5s5UkxXgYBYHKVSuIvMfDqE+IYEanTYxzDqUhVwBlq4Vv9b8hNuE41D/qWCiC8zJswuOS8bPm+jHntFM/Fr7b6LAZV2Zuc5ITaCrkmRvKZ7HHhsffPk6gkb/NdzwdsYf8nSEbiFhujTXUswqkDWzQYxnwvp0ElU1Ev2SjqDG/oU0EG7vWMhuOP3wyDqVxF75cnEKW9RY1joiTxeiSBsYnivYC8t44MuHk9LAKaB17edlIEta+4MC9bAAmj2mkKxdJJJXjYHJLfw4WCJmg==</SignatureValue> |
|||
<KeyInfo> |
|||
<X509Data> |
|||
<X509Certificate>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</X509Certificate> |
|||
</X509Data> |
|||
</KeyInfo> |
|||
</Signature> |
|||
</Rps> |
|||
</ListaRps> |
|||
</LoteRps> |
|||
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> |
|||
<SignedInfo> |
|||
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"/> |
|||
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/> |
|||
<Reference URI="#lote"> |
|||
<Transforms> |
|||
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/> |
|||
<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"/> |
|||
</Transforms> |
|||
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> |
|||
<DigestValue>3OyPtYPIjU7Vm5azBnCaQVBCBxM=</DigestValue> |
|||
</Reference> |
|||
</SignedInfo> |
|||
<SignatureValue>psdrJW0dE9bnGbK5UJchL/h4vRm5HUWPzkkX4LbCLJopsOAdR0l0M787njoX7b4tWwrPysgdNWfhGngNoiD6iVqXyNhbuHZftUJIlDUudAHIxjhrMJdiNVXQDz8lBYzOta8HMMGQqHzzEg6DCVSZ1zeF5D2Nu2I7UL12P3jTDPtrapLC0YHxcRamGcG48I5tMo1qCKPxtkePkwx13PahkET+aExnb+5sexl+nhzfFJIKC0mfIRtoLyLEidNxalzzfMLbDxwe6WGgJS66+VKOeYNL89Gn2yp17uMZdnS08a6tUKy8t7sZt9W3ktrrjCofRlkwK8dq8jsh/GIw8hXLkg==</SignatureValue> |
|||
<KeyInfo> |
|||
<X509Data> |
|||
<X509Certificate>MIIIMTCCBhmgAwIBAgIIDBYcAk2MYI0wDQYJKoZIhvcNAQELBQAwcjELMAkGA1UE |
|||
BhMCQlIxEzARBgNVBAoTCklDUC1CcmFzaWwxNjA0BgNVBAsTLVNlY3JldGFyaWEg |
|||
ZGEgUmVjZWl0YSBGZWRlcmFsIGRvIEJyYXNpbCAtIFJGQjEWMBQGA1UEAxMNQUMg |
|||
T05MSU5FIFJGQjAeFw0xOTA5MTgwMDAwMjZaFw0yMDA5MTcwMDAwMjZaMIIBADEL |
|||
MAkGA1UEBhMCQlIxCzAJBgNVBAgMAlJOMQ4wDAYDVQQHDAVOQVRBTDETMBEGA1UE |
|||
CgwKSUNQLUJyYXNpbDE2MDQGA1UECwwtU2VjcmV0YXJpYSBkYSBSZWNlaXRhIEZl |
|||
ZGVyYWwgZG8gQnJhc2lsIC0gUkZCMRYwFAYDVQQLDA1SRkIgZS1DTlBKIEExMSIw |
|||
IAYDVQQLDBlBUiBTT0xJTU9FUyBDRVJUSUZJQ0FET1JBMRcwFQYDVQQLDA4yMjc1 |
|||
OTUzMTAwMDEwMzEyMDAGA1UEAwwpVFNNWCBTRVJWSUNPUyBERSBUSSBFSVJFTEk6 |
|||
MjM4MDkwNzAwMDAxOTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDJ |
|||
9LXn3SvQ02Gx9+aGiQh3cJ9A7J7w2eOWRVcjYo147tTsVNbpbJM56D5rvQ4uYLYT |
|||
GEg9gnWRs/xkg/WwKmbC/ax3j/tJG62Boj8DF1QoGkiVfSOQbCYXnO9nDZ7fKRwU |
|||
KXkLnpjNGnsZr/FIt6U3nNv/HJ5uwfmHRi3NPeMIkyQR+HogOUWChu8ZJz2quQu4 |
|||
tpNePV3GhW4h0o0Ggoq2YTIRhAidobjq7FWCu2jYkTEZ08h5fLn2bMLhaUgO1iBo |
|||
JjzE1nD1C5wat4arxtzIz25q8lytp21q1kFD/Lkyh+RMjbngqeS8IBBrnMi0zear |
|||
tgxtOKSdQD7PXzHFcuzzAgMBAAGjggM5MIIDNTCBoQYIKwYBBQUHAQEEgZQwgZEw |
|||
XAYIKwYBBQUHMAKGUGh0dHA6Ly9pY3AtYnJhc2lsLnZwa2kudmFsaWRjZXJ0aWZp |
|||
Y2Fkb3JhLmNvbS5ici9hYy1vbmxpbmVyZmIvYWMtb25saW5lcmZidjIucDdiMDEG |
|||
CCsGAQUFBzABhiVodHRwOi8vb2NzcC52YWxpZGNlcnRpZmljYWRvcmEuY29tLmJy |
|||
MAkGA1UdEwQCMAAwHwYDVR0jBBgwFoAUkZp2jCuokxiYmHoD5MvstbAZJ/8wdQYD |
|||
VR0gBG4wbDBqBgZgTAECATcwYDBeBggrBgEFBQcCARZSaHR0cDovL2ljcC1icmFz |
|||
aWwudnBraS52YWxpZGNlcnRpZmljYWRvcmEuY29tLmJyL2FjLW9ubGluZXJmYi9k |
|||
cGMtYWMtb25saW5lcmZiLnBkZjCCAQYGA1UdHwSB/jCB+zBVoFOgUYZPaHR0cDov |
|||
L2ljcC1icmFzaWwudmFsaWRjZXJ0aWZpY2Fkb3JhLmNvbS5ici9hYy1vbmxpbmVy |
|||
ZmIvbGNyLWFjLW9ubGluZXJmYnYyLmNybDBWoFSgUoZQaHR0cDovL2ljcC1icmFz |
|||
aWwyLnZhbGlkY2VydGlmaWNhZG9yYS5jb20uYnIvYWMtb25saW5lcmZiL2xjci1h |
|||
Yy1vbmxpbmVyZmJ2Mi5jcmwwSqBIoEaGRGh0dHA6Ly9yZXBvc2l0b3Jpby5pY3Bi |
|||
cmFzaWwuZ292LmJyL2xjci9WQUxJRC9sY3ItYWMtb25saW5lcmZidjIuY3JsMA4G |
|||
A1UdDwEB/wQEAwIF4DAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwgbIG |
|||
A1UdEQSBqjCBp4ERdGhpYWdvQHNncC5uZXQuYnKgOAYFYEwBAwSgLwQtMDMwNjE5 |
|||
ODQwNTQ5NzkyODQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwoCQGBWBMAQMC |
|||
oBsEGVRISUFHTyBTQU1QQUlPIE1PTlRFTkVHUk+gGQYFYEwBAwOgEAQOMjM4MDkw |
|||
NzAwMDAxOTCgFwYFYEwBAwegDgQMMDAwMDAwMDAwMDAwMA0GCSqGSIb3DQEBCwUA |
|||
A4ICAQC+cp3UMxJPgs5JYHJmCJrCAw4qq4BMH7JWDUufvhiYKkWfWfhLMRidqRcP |
|||
ez+6u0EML5riw7uH3NoF/Byw5v8RY5/8diI7d5TB/SsM8wl9De3BiL5n9cC2oK5y |
|||
F+OfvTFdMYPx7VnlGpVjeEEDAcflrX2zM6u6D/Me2xu0g0YnbLhYKcjjXBlmkm2f |
|||
Zrn0fo8te4OanvYMDbCiP1MROQUk95hxzn5/dZ8OdLuZ2Q+GwLGADKV4p6CEy6U8 |
|||
U/1Hi2Dt+py2hphRbGHdP/QB59dxayQSYEq38HSsdbgNnWrRe0L8W2xkoAkq2a0U |
|||
0rW3sKae5dlrHs9hIsXrgDXHFl58snjTatz5g17IJ704ztshroRiWCiyJOsP12yv |
|||
c8ildHN/u9li2YBxBr/9F3O3k2MKHYdVe10VNZMtmlhBcUlrC/bECbrJF/uIfGk5 |
|||
UMC9Tx8ROYsI8Rsfs1fS8KnjlOPav6ikoZUnHsZiU75Dp/9i9wxf5txPzjCEqG7U |
|||
wjXEATC2ldlF+F1ZUbmREydeLcAHZu5eMBoRiNvl41E5LHbAfs42cnpI7QXbiqN3 |
|||
0EcNkCVtYlcy04q00fJ4CnI1WANuslfa6srLnaiWVUSCeYiDBK3FS+mwa8ixT7Mj |
|||
hKs/6BOBoYlaDzZm242gbvh1eG8/XcDjT4BAGr5aA/cHnjEiXw== |
|||
</X509Certificate> |
|||
</X509Data> |
|||
</KeyInfo> |
|||
</Signature> |
|||
</EnviarLoteRpsEnvio> |
|||
1
tests/XMLs/xml_send_rps_batch_to_paulistana.xml
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,56 @@ |
|||
LOTE_RPS = [ |
|||
{ |
|||
'assinatura': '123', |
|||
'serie': '1', |
|||
'numero': str(i), |
|||
'data_emissao': '2016-08-29', |
|||
'codigo_atividade': '07498', |
|||
'total_servicos': '2.00', |
|||
'total_deducoes': '3.00', |
|||
'prestador': { |
|||
'inscricao_municipal': '123456' |
|||
}, |
|||
'tomador': { |
|||
'tipo_cpfcnpj': 1, |
|||
'cpf_cnpj': '12345678923256', |
|||
'inscricao_municipal': '123456', |
|||
'razao_social': 'Trustcode', |
|||
'tipo_logradouro': '1', |
|||
'complemento': 'aaa', |
|||
'logradouro': 'Vinicius de Moraes, 42', |
|||
'numero': '42', |
|||
'bairro': 'Corrego', |
|||
'cidade': 'Floripa', |
|||
'uf': 'SC', |
|||
'cep': '88037240', |
|||
'email': 'user@user.com' |
|||
}, |
|||
'codigo_atividade': '07498', |
|||
'aliquota_atividade': '5.00', |
|||
'descricao': 'Venda de servico' |
|||
} for i in range(5) |
|||
] |
|||
|
|||
DEFAULT_RPS = [ |
|||
{ |
|||
'assinatura': '123', |
|||
'serie': '1', |
|||
'numero': '1', |
|||
'data_emissao': '2016-08-29', |
|||
'codigo_atividade': '07498', |
|||
'prestador': { |
|||
'inscricao_municipal': '123456' |
|||
}, |
|||
'tomador': { |
|||
'tipo_cpfcnpj': 1, |
|||
'cpf_cnpj': '12345678923256', |
|||
}, |
|||
} |
|||
] |
|||
|
|||
NFSE = { |
|||
'cpf_cnpj': '12345678901234', |
|||
'data_inicio': '2016-08-29', |
|||
'data_fim': '2016-08-29', |
|||
'lista_rps': [] |
|||
} |
|||
@ -0,0 +1,35 @@ |
|||
# coding=utf-8 |
|||
|
|||
import unittest |
|||
from pytrustnfe.xml import render_xml, sanitize_response |
|||
from tests.const import NFSE, DEFAULT_RPS |
|||
|
|||
template_path = 'pytrustnfe/nfse/paulistana/templates' |
|||
|
|||
|
|||
def _get_nfse(lista_rps): |
|||
nfse = NFSE |
|||
nfse['lista_rps'] = lista_rps |
|||
return nfse |
|||
|
|||
|
|||
def get_objects(nfse): |
|||
xml_rps = render_xml(template_path, 'EnvioRPS.xml', False, nfse=nfse) |
|||
_, obj_rps = sanitize_response(xml_rps) |
|||
|
|||
xml_lote_rps = render_xml(template_path, 'EnvioLoteRPS.xml', False, nfse=nfse) |
|||
_, obj_lote_rps = sanitize_response(xml_lote_rps) |
|||
|
|||
return obj_rps, obj_lote_rps |
|||
|
|||
|
|||
class test_nfse_paulistana_email_tomador(unittest.TestCase): |
|||
|
|||
def test_rps_sem_email(self): |
|||
nfse = _get_nfse(DEFAULT_RPS) |
|||
|
|||
obj_rps, obj_lote_rps = get_objects(nfse) |
|||
|
|||
self.assertFalse(hasattr(obj_rps.RPS, 'EmailTomador')) |
|||
self.assertFalse(hasattr(obj_lote_rps.RPS, 'EmailTomador')) |
|||
|
|||
@ -0,0 +1,54 @@ |
|||
# coding=utf-8 |
|||
|
|||
import unittest |
|||
from pytrustnfe.xml import render_xml, sanitize_response |
|||
from tests.const import NFSE, DEFAULT_RPS |
|||
|
|||
|
|||
attrs = ['TipoLogradouro', 'Logradouro', 'NumeroEndereco', 'ComplementoEndereco', 'Bairro', 'CEP'] |
|||
|
|||
template_path = 'pytrustnfe/nfse/paulistana/templates' |
|||
|
|||
|
|||
def _get_nfse(lista_rps): |
|||
nfse = NFSE |
|||
nfse['lista_rps'] = lista_rps |
|||
return nfse |
|||
|
|||
|
|||
def get_objects(nfse): |
|||
xml_rps = render_xml(template_path, 'EnvioRPS.xml', False, nfse=nfse) |
|||
_, obj_rps = sanitize_response(xml_rps) |
|||
|
|||
xml_lote_rps = render_xml(template_path, 'EnvioLoteRPS.xml', False, nfse=nfse) |
|||
_, obj_lote_rps = sanitize_response(xml_lote_rps) |
|||
|
|||
return obj_rps, obj_lote_rps |
|||
|
|||
|
|||
class test_nfse_paulistana_endereco_tomador(unittest.TestCase): |
|||
|
|||
def test_rps_sem_cidade(self): |
|||
nfse = _get_nfse(DEFAULT_RPS) |
|||
|
|||
obj_rps, obj_lote_rps = get_objects(nfse) |
|||
|
|||
self.assertFalse(hasattr(obj_rps.RPS, 'EnderecoTomador')) |
|||
self.assertFalse(hasattr(obj_lote_rps.RPS, 'EnderecoTomador')) |
|||
|
|||
def test_rps_sem_dados_endereco(self): |
|||
lista_rps = DEFAULT_RPS |
|||
|
|||
for rps in lista_rps: |
|||
rps['tomador']['cidade'] = 'Florianópolis' |
|||
|
|||
nfse = _get_nfse(lista_rps) |
|||
|
|||
obj_rps, obj_lote_rps = get_objects(nfse) |
|||
|
|||
self.assertTrue(hasattr(obj_rps.RPS, 'EnderecoTomador')) |
|||
self.assertTrue(hasattr(obj_lote_rps.RPS, 'EnderecoTomador')) |
|||
|
|||
for attr in attrs: |
|||
self.assertFalse(hasattr(obj_rps.RPS.EnderecoTomador, attr)) |
|||
self.assertFalse(hasattr(obj_lote_rps.RPS.EnderecoTomador, attr)) |
|||
@ -0,0 +1,29 @@ |
|||
# coding=utf-8 |
|||
|
|||
import os.path |
|||
import unittest |
|||
from pytrustnfe.xml import render_xml, sanitize_response |
|||
from tests.const import LOTE_RPS, NFSE |
|||
|
|||
|
|||
def _get_nfse(): |
|||
nfse = NFSE |
|||
nfse['lista_rps'] = LOTE_RPS |
|||
return nfse |
|||
|
|||
|
|||
class test_nfse_paulistana_para_lote(unittest.TestCase): |
|||
xml_path = os.path.join(os.path.dirname(__file__), 'XMLs') |
|||
template_path = 'pytrustnfe/nfse/paulistana/templates' |
|||
BATCH_SIZE = len(LOTE_RPS) |
|||
|
|||
def test_envio_nfse(self): |
|||
nfse = _get_nfse() |
|||
|
|||
xml_send = render_xml(self.template_path, 'EnvioLoteRPS.xml', False, nfse=nfse) |
|||
expected_xml = open(os.path.join(self.xml_path, 'xml_send_rps_batch_to_paulistana.xml'), 'r').read() |
|||
|
|||
_, obj = sanitize_response(xml_send) |
|||
|
|||
self.assertEqual(obj.Cabecalho.QtdRPS, self.BATCH_SIZE) |
|||
self.assertEqual(xml_send, expected_xml) |
|||
@ -0,0 +1,60 @@ |
|||
# coding=utf-8 |
|||
|
|||
import os.path |
|||
import unittest |
|||
from pytrustnfe.xml import render_xml, sanitize_response |
|||
from tests.const import DEFAULT_RPS, NFSE |
|||
|
|||
template_path = 'pytrustnfe/nfse/paulistana/templates' |
|||
|
|||
|
|||
def _get_nfse(tipo_cpfcnpj): |
|||
nfse = NFSE |
|||
lista_rps = DEFAULT_RPS |
|||
|
|||
for rps in lista_rps: |
|||
rps['tomador']['tipo_cpfcnpj'] = tipo_cpfcnpj |
|||
rps['tomador']['cpf_cnpj'] = '12345678923256' |
|||
|
|||
nfse['lista_rps'] = lista_rps |
|||
return nfse |
|||
|
|||
|
|||
def get_objects(nfse): |
|||
xml_rps = render_xml(template_path, 'EnvioRPS.xml', False, nfse=nfse) |
|||
_, obj_rps = sanitize_response(xml_rps) |
|||
|
|||
xml_lote_rps = render_xml(template_path, 'EnvioLoteRPS.xml', False, nfse=nfse) |
|||
_, obj_lote_rps = sanitize_response(xml_lote_rps) |
|||
|
|||
return obj_rps, obj_lote_rps |
|||
|
|||
|
|||
class test_nfse_paulistana_tipo_cpfcnpj(unittest.TestCase): |
|||
|
|||
def test_tipo_cpfcnpj_1(self): |
|||
nfse = _get_nfse(tipo_cpfcnpj=1) |
|||
|
|||
obj_rps, obj_lote_rps = get_objects(nfse) |
|||
|
|||
self.assertTrue(hasattr(obj_rps.RPS, 'CPFCNPJTomador')) |
|||
self.assertTrue(hasattr(obj_rps.RPS.CPFCNPJTomador, 'CPF')) |
|||
self.assertTrue(hasattr(obj_lote_rps.RPS, 'CPFCNPJTomador')) |
|||
self.assertTrue(hasattr(obj_lote_rps.RPS.CPFCNPJTomador, 'CPF')) |
|||
|
|||
def test_tipo_cpfcnpj_2(self): |
|||
nfse = _get_nfse(tipo_cpfcnpj=2) |
|||
|
|||
obj_rps, obj_lote_rps = get_objects(nfse) |
|||
|
|||
self.assertTrue(hasattr(obj_rps.RPS, 'CPFCNPJTomador')) |
|||
self.assertTrue(hasattr(obj_rps.RPS.CPFCNPJTomador, 'CNPJ')) |
|||
self.assertTrue(hasattr(obj_lote_rps.RPS, 'CPFCNPJTomador')) |
|||
self.assertTrue(hasattr(obj_lote_rps.RPS.CPFCNPJTomador, 'CNPJ')) |
|||
|
|||
def test_tipo_cpfcnpj_3(self): |
|||
nfse = _get_nfse(tipo_cpfcnpj=3) |
|||
|
|||
obj_rps, obj_lote_rps = get_objects(nfse) |
|||
|
|||
self.assertFalse(hasattr(obj_rps.RPS, 'CPFCNPJTomador')) |
|||
@ -0,0 +1,47 @@ |
|||
# coding=utf-8 |
|||
|
|||
import os.path |
|||
import unittest |
|||
from pytrustnfe.xml import render_xml, sanitize_response |
|||
from tests.const import DEFAULT_RPS, NFSE |
|||
|
|||
default_values = { |
|||
'TipoRPS': 'RPS', |
|||
'TributacaoRPS': 'T', |
|||
'ValorCOFINS': 0.0, |
|||
'ValorINSS': 0.0, |
|||
'ValorIR': 0.0, |
|||
'ValorPIS': 0.0, |
|||
'ValorCSLL': 0.0, |
|||
'ISSRetido': False |
|||
} |
|||
attrs = ['TipoRPS', 'TributacaoRPS', 'ValorPIS', 'ValorCOFINS', 'ValorINSS', 'ValorIR', 'ValorCSLL', 'ISSRetido'] |
|||
|
|||
|
|||
def _get_nfse(): |
|||
nfse = NFSE |
|||
nfse['lista_rps'] = DEFAULT_RPS |
|||
return nfse |
|||
|
|||
|
|||
class test_nfse_paulistana_valores_default(unittest.TestCase): |
|||
template_path = 'pytrustnfe/nfse/paulistana/templates' |
|||
xml_path = os.path.join(os.path.dirname(__file__), 'XMLs') |
|||
nfse = _get_nfse() |
|||
|
|||
def test_rps_sem_valores(self): |
|||
|
|||
xml_rps = render_xml(self.template_path, 'EnvioRPS.xml', False, nfse=self.nfse) |
|||
|
|||
_, obj = sanitize_response(xml_rps) |
|||
|
|||
for attr in attrs: |
|||
self.assertEqual(getattr(obj.RPS, attr), default_values[attr]) |
|||
|
|||
def test_lote_rps_sem_valores(self): |
|||
xml_lote_rps = render_xml(self.template_path, 'EnvioLoteRPS.xml', False, nfse=self.nfse) |
|||
|
|||
_, obj = sanitize_response(xml_lote_rps) |
|||
|
|||
for attr in attrs: |
|||
self.assertEqual(getattr(obj.RPS, attr), default_values[attr]) |
|||
@ -1,47 +1,46 @@ |
|||
# coding=utf-8 |
|||
''' |
|||
""" |
|||
Created on Jun 14, 2015 |
|||
|
|||
@author: danimar |
|||
''' |
|||
""" |
|||
import unittest |
|||
from pytrustnfe.Servidores import localizar_url, localizar_qrcode |
|||
|
|||
url_ba = 'https://nfe.sefaz.ba.gov.br/webservices/NFeAutorizacao4/NFeAutoriza\ |
|||
cao4.asmx?wsdl' |
|||
url_ba = "https://nfe.sefaz.ba.gov.br/webservices/NFeAutorizacao4/NFeAutoriza\ |
|||
cao4.asmx?wsdl" |
|||
|
|||
url_sp = 'https://nfe.fazenda.sp.gov.br/ws/nfeautorizacao4.asmx?wsdl' |
|||
url_sp = "https://nfe.fazenda.sp.gov.br/ws/nfeautorizacao4.asmx?wsdl" |
|||
|
|||
url_qrcode_homologacao_sp = 'https://homologacao.nfce.fazenda.sp.gov.br/NFCEConsultaPublica/Paginas/ConstultaQRCode.aspx' |
|||
url_qrcode_homologacao_sp = "https://homologacao.nfce.fazenda.sp.gov.br/NFCEConsultaPublica/Paginas/ConstultaQRCode.aspx" |
|||
|
|||
url_sc = 'https://nfe.svrs.rs.gov.br/ws/NfeAutorizacao/NFeAutorizacao4.asmx?wsdl' |
|||
url_sc = "https://nfe.svrs.rs.gov.br/ws/NfeAutorizacao/NFeAutorizacao4.asmx?wsdl" |
|||
|
|||
url_rs = 'https://nfe.sefazrs.rs.gov.br/ws/NfeAutorizacao/NFeAutorizacao4.asmx?wsdl' |
|||
url_rs = "https://nfe.sefazrs.rs.gov.br/ws/NfeAutorizacao/NFeAutorizacao4.asmx?wsdl" |
|||
|
|||
url_cad_rs = 'https://cad.sefazrs.rs.gov.br/ws/cadconsultacadastro/cadconsultacadastro4.asmx?wsdl' |
|||
url_cad_rs = "https://cad.sefazrs.rs.gov.br/ws/cadconsultacadastro/cadconsultacadastro4.asmx?wsdl" |
|||
|
|||
url_cad_sc = 'https://cad.svrs.rs.gov.br/ws/cadconsultacadastro/cadconsulta\ |
|||
cadastro4.asmx?wsdl' |
|||
url_cad_sc = "https://cad.svrs.rs.gov.br/ws/cadconsultacadastro/cadconsulta\ |
|||
cadastro4.asmx?wsdl" |
|||
|
|||
|
|||
class test_servidores(unittest.TestCase): |
|||
|
|||
def test_localizar_url(self): |
|||
url = localizar_url('NfeAutorizacao', '29', ambiente=1) |
|||
url = localizar_url("NfeAutorizacao", "29", ambiente=1) |
|||
self.assertEqual(url, url_ba) |
|||
url = localizar_url('NfeAutorizacao', '35', ambiente=1) |
|||
url = localizar_url("NfeAutorizacao", "35", ambiente=1) |
|||
self.assertEqual(url, url_sp) |
|||
url = localizar_url('NfeAutorizacao', '42', ambiente=1) |
|||
url = localizar_url("NfeAutorizacao", "42", ambiente=1) |
|||
self.assertEqual(url, url_sc) |
|||
url = localizar_url('NfeAutorizacao', '43', ambiente=1) |
|||
url = localizar_url("NfeAutorizacao", "43", ambiente=1) |
|||
self.assertEqual(url, url_rs) |
|||
|
|||
url = localizar_url('NfeConsultaCadastro', '43', ambiente=2) |
|||
url = localizar_url("NfeConsultaCadastro", "43", ambiente=2) |
|||
self.assertEqual(url, url_cad_rs) |
|||
|
|||
url = localizar_url('NfeConsultaCadastro', '42', ambiente=2) |
|||
url = localizar_url("NfeConsultaCadastro", "42", ambiente=2) |
|||
self.assertEqual(url, url_cad_sc) |
|||
|
|||
def test_localizar_qrcode(self): |
|||
url = localizar_qrcode('35') |
|||
url = localizar_qrcode("35") |
|||
self.assertEqual(url, url_qrcode_homologacao_sp) |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue