diff --git a/.gitignore b/.gitignore
index f956822..e09118a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,3 +14,5 @@ docs/_build
.cache
.pytest_cache
.vscode/
+*.pfx
+sent_xml.xml
\ No newline at end of file
diff --git a/nfse-example.py b/nfse-example.py
index 1c3cc81..b734050 100644
--- a/nfse-example.py
+++ b/nfse-example.py
@@ -1,3 +1,4 @@
+import ipdb
import xml.dom.minidom
import os
from pytrustnfe.nfse.natal import recepcionar_lote_rps
@@ -9,46 +10,45 @@ rps_list = [
"numero": "1",
"serie": "UNICA",
"tipo_rps": "1",
- "data_emissao": "2020-01-279",
+ "data_emissao": "2010-06-16T21:00:00",
"natureza_operacao": "1",
"regime_tributacao": "1",
"optante_simples": "1",
"incentivador_cultural": "2",
+ "status": "1",
"servico": {
"valor_servico": "1.00",
+ "pis": "0",
+ "cofins": "0",
+ "inss": "0",
+ "ir": "0",
+ "csll": "0",
"iss_retido": "2",
+ "iss": "2",
+ "retencoes": "2",
"base_calculo": "0.00",
+ "aliquota": "2",
"codigo_servico": "01.07",
"cnae_servico": "6209100",
- "descricao": "Sistema NFSe",
+ "discriminacao": "Sistema NFSe",
"codigo_municipio": "2408102",
},
"prestador": {
"cnpj": "23809070000190",
- "inscricao_municipal": "2143992",
- "razao_social": "SERVICOS DE TI",
- "fantasia": "SERVICOS DE TI",
- "endereco": "AV AMINTAS",
- "numero": "3755",
- "complemento": "SALA 32",
- "bairro": "Lagoa Nova",
- "codigo_municipio": "2408102",
- "uf": "RN",
- "cep": "59075810",
- "telefone": "4132095554",
- "email": "SUPORTE@EMAIL.COM.BR",
+ "inscricao_municipal": "2143992"
},
"tomador": {
"cpf_cnpj": "01812418000166",
+ "inscricao_municipal": "2143992",
"razao_social": "LEONIR",
"endereco": "RUA GROBEIRO",
"numero": "128",
+ "complemento": "ANDAR 14",
"bairro": "Lagoa Nova",
- "cidade": "3159506",
+ "codigo_municipio": "3159506",
"uf": "BH",
- "cep": "1231231313",
+ "cep": "30160010",
"email": "leonir@yahoo.com.br",
- "orgao_gerador": {"codigo_municipio": "3159506"},
},
}
]
@@ -60,15 +60,18 @@ nfse = {
}
caminho = os.path.dirname(__file__)
-pfx_source = open(os.path.join(caminho, "tests/teste.pfx"), "rb").read()
-pfx = Certificado(pfx_source, "123456")
+pfx_source = open(os.path.join(caminho, "tsmx-a1.pfx"), "rb").read()
+pfx = Certificado(pfx_source, "12345678")
retorno = recepcionar_lote_rps(pfx, nfse=nfse, ambiente="homologacao")
-# dom = xml.dom.minidom.parseString(retorno['received_xml'])
-# received_xml = dom.toprettyxml()
-# print(received_xml)
-
-dom = xml.dom.minidom.parseString(retorno.get("sent_xml"))
+dom = xml.dom.minidom.parseString(retorno['sent_xml']['nfseDadosMsg'])
sent_xml = dom.toprettyxml()
print(sent_xml)
+
+myfile = open("sent_xml.xml", "w")
+myfile.write(sent_xml)
+
+dom = xml.dom.minidom.parseString(retorno['received_xml'])
+received_xml = dom.toprettyxml()
+print(received_xml)
diff --git a/pytrustnfe/nfe/assinatura.py b/pytrustnfe/nfe/assinatura.py
index d513967..dea76d4 100644
--- a/pytrustnfe/nfe/assinatura.py
+++ b/pytrustnfe/nfe/assinatura.py
@@ -24,9 +24,10 @@ class Assinatura(object):
method=signxml.methods.enveloped,
signature_algorithm="rsa-sha1",
digest_algorithm="sha1",
- c14n_algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315",
+ c14n_algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments",
)
-
+ #import ipdb
+ #ipdb.set_trace()
ns = {}
ns[None] = signer.namespaces["ds"]
signer.namespaces = ns
@@ -37,11 +38,11 @@ class Assinatura(object):
)
if reference:
element_signed = signed_root.find(".//*[@Id='%s']" % reference)
- signature = signed_root.find(
+ signature = signed_root.findall(
".//{http://www.w3.org/2000/09/xmldsig#}Signature"
)
-
+
if element_signed is not None and signature is not None:
- parent = element_signed.getparent()
- parent.append(signature)
+ element_intern = element_signed.getchildren()
+ element_intern.append(signature)
return etree.tostring(signed_root, encoding=str)
diff --git a/pytrustnfe/nfse/natal/__init__.py b/pytrustnfe/nfse/natal/__init__.py
index cfc9ec5..3998efb 100644
--- a/pytrustnfe/nfse/natal/__init__.py
+++ b/pytrustnfe/nfse/natal/__init__.py
@@ -2,6 +2,9 @@
# 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
@@ -12,24 +15,45 @@ from pytrustnfe.certificado import extract_cert_and_key_from_pfx, save_cert_key
from pytrustnfe.nfe.assinatura import Assinatura
+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')}"
+ )
+ return lote
+ return ""
+
+
def _render(certificado, method, **kwargs):
path = os.path.join(os.path.dirname(__file__), "templates")
- xml_send = render_xml(path, "%s.xml" % method, True, **kwargs)
+ lote = ""
+ if method == "RecepcionarLoteRps":
+ lote = sign_rps(path, certificado, **kwargs)
+
+ kwargs["lote"] = lote
+ xml_send = render_xml(path, "%s.xml" % method, False, **kwargs)
- reference = ""
signer = Assinatura(certificado.pfx, certificado.password)
- xml_send = signer.assina_xml(xml_send, reference)
+ referencia = "lote"
+ xml_send = signer.assina_xml(xml_send, f"{referencia}")
return xml_send
def _send(certificado, method, **kwargs):
base_url = ""
if kwargs["ambiente"] == "producao":
- base_url = "https://aparecida.siltecnologia.com.br/tbw/services/Abrasf10?wsdl"
+ base_url = "" # https://wsnfsev1.natal.rn.gov.br:8444"
else:
- base_url = "https://aparecida.siltecnologia.com.br/tbwhomologacao/services/Abrasf10?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 = extract_cert_and_key_from_pfx(
+ certificado.pfx, certificado.password)
cert, key = save_cert_key(cert, key)
disable_warnings()
@@ -38,24 +62,29 @@ def _send(certificado, method, **kwargs):
session.verify = False
transport = Transport(session=session)
- client = Client(base_url, transport=transport)
-
- xml_send = kwargs["xml"]
- response = client.service[method](xml_send)
+ client = Client(wsdl=base_url, transport=transport)
+ xml_send = {}
+ xml_send = {
+ "nfseDadosMsg": kwargs["xml"],
+ "nfseCabecMsg": """
+
+ 1
+ """,
+ }
+
+ 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)
+ return _render(certificado, "RecepcionarLoteRps", **kwargs)
def recepcionar_lote_rps(certificado, **kwargs):
if "xml" not in kwargs:
kwargs["xml"] = xml_recepcionar_lote_rps(certificado, **kwargs)
- print(kwargs["xml"])
- return {"sent_xml": kwargs["xml"]}
- # return _send(certificado, 'recepcionarLoteRps', **kwargs)
+ return _send(certificado, "RecepcionarLoteRps", **kwargs)
def xml_consultar_lote_rps(certificado, **kwargs):
diff --git a/pytrustnfe/nfse/natal/templates/EnvelopeSoap.xml b/pytrustnfe/nfse/natal/templates/EnvelopeSoap.xml
new file mode 100644
index 0000000..0c99a49
--- /dev/null
+++ b/pytrustnfe/nfse/natal/templates/EnvelopeSoap.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pytrustnfe/nfse/natal/templates/Exemplo_LoteRPS.xml b/pytrustnfe/nfse/natal/templates/Exemplo_LoteRPS.xml
new file mode 100644
index 0000000..1a0c0d0
--- /dev/null
+++ b/pytrustnfe/nfse/natal/templates/Exemplo_LoteRPS.xml
@@ -0,0 +1,111 @@
+
+
+ 1
+ 27596568000505
+ 1000047
+ 1
+
+
+
+
+ 1
+ ABCDH
+ 1
+
+ 2010-06-16T21:00:00
+ 1
+ 6
+ 1
+ 2
+ 1
+
+
+ 1000
+ 10
+ 10
+ 10
+ 10
+ 10
+ 1
+ 50
+ 10
+ 1000
+ 0.05
+
+ 11.01
+ 4520005
+ Teste.
+ 3106200
+
+
+ 27596568000505
+ 1000047
+
+
+
+
+ 24533572000102
+
+ 1000039
+
+ INSCRICAO DE TESTE SIATU - DAGUA -PAULINOS
+
+ DA BAHIA
+ 200
+ ANDAR 14
+ CENTRO
+ 2408102
+ RN
+ 30160010
+
+
+ marcelo@teste.com.br
+
+
+
+ 1234
+ 1234
+
+
+
+
+
+
+
+
+
+
+
+ mMyQLAm4psxx52kaD8Jlta3ouPM=
+
+
+ qBKfaNz6RbsYUxCOrjGZ9zrdgiGL7QSBxjlhYRlKDNlDERlDWvM8gi28yus8FoUb0v2CTKKIBz0tzfqxgk60rke4YCMkTzdWfpm7ofMIhYC9VHqbWdInC20znOKygJy5hyIx6JBoyXbejnw/0KF+2E1P1ZehqXJWZqY+KPaIGAY=
+
+
+ MIIE7DCCA9SgAwIBAgIQZMlLC9ZEsHWsnvJNdMI2yzANBgkqhkiG9w0BAQUFADBqMQswCQYDVQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDEsMCoGA1UECxMjU2VjcmV0YXJpYSBkYSBSZWNlaXRhIEZlZGVyYWwgLSBTUkYxGDAWBgNVBAMTD0FDIFBST0RFTUdFIFNSRjAeFw0wNzEwMzEwMDAwMDBaFw0xMDEwMzAyMzU5NTlaMIGQMQswCQYDVQQGEwJCUjETMBEGA1UEChQKSUNQLUJyYXNpbDEqMCgGA1UECxQhU2VjcmV0YXJpYSBkYSBSZWNlaXRhIEZlZGVyYWwtU1JGMRIwEAYDVQQLFAlTUkYgZS1DUEYxLDAqBgNVBAMTI0VER0FSIERPIENBUk1PIEZFUlJFSVJBOjQzMjYwMTUyNjg3MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6M+9XT5KLQN3IH8mAr+S6vxiochY/EwF8EhtNoxPTYl+zr0Dh+eZsRG31bN410nr2OrwncrRorMK8Ngq+j3FnNF0nIMigaaa5NAEfIk3Yy4kuqrTUZBpqUJvCqc3mkF3C3XD0MTmtbVTWCvYIk+qn3t5ShHyMnQcuah5Q0ItSbQIDAQABo4IB6TCCAeUwgZUGA1UdEQSBjTCBiqA9BgVgTAEDAaA0BDIyMTAzMTk2NDQzMjYwMTUyNjg3MDAwMDAwMDAwMDAwMDAwMDBNLTI4ODQwODVTU1BNR6AXBgVgTAEDBqAOBAwwMDAwMDAwMDAwMDCgHgYFYEwBAwWgFQQTMDAwMDAwMDAwMDAwMDAwMDAwMIEQZWRnYXJAcGJoLmdvdi5icjAJBgNVHRMEAjAAMF8GA1UdHwRYMFYwVKBSoFCGTmh0dHA6Ly9pY3AtYnJhc2lsLmNlcnRpc2lnbi5jb20uYnIvcmVwb3NpdG9yaW8vbGNyL0FDUFJPREVNR0VTUkYvTGF0ZXN0Q1JMLmNybDAfBgNVHSMEGDAWgBTdO9vtjZcRRUMBQ020Ev0O7niacDAOBgNVHQ8BAf8EBAMCBeAwVQYDVR0gBE4wTDBKBgZgTAECAxQwQDA+BggrBgEFBQcCARYyaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9kcGMwHQYDVR0lBBYwFAYIKwYBBQUHAwQGCCsGAQUFBwMCMDgGCCsGAQUFBwEBBCwwKjAoBggrBgEFBQcwAYYcaHR0cDovL29jc3AuY2VydGlzaWduLmNvbS5icjANBgkqhkiG9w0BAQUFAAOCAQEAYFcjZj4lGVEREHBaHtcRletWS6/mvpkxmodwj3ele5yXsxuqSZd7ebHbKewXx7gkyaWFkFAxFanQhls2tYKjg6haqt2b0AO1FsitVIHkMcxRwkU9G+1ec8yfdxymra2VdXazkxuvqKABgxkqKnaFdHjje7cjWDgwparymH64mTlHkSQz59GutJW0xfwBHcMGx0/9/iIug6pfMQivWf0NMVpFNzxO5ZNPEuOeBhVDxQr4+KB+4B9xDai/3J6f42UNbSy+z3xuB0K8/7V7BsFUYOYFSNnBrXhvbvXtZOtteX65V0r1+RJJX5OK+PAPhZ57T1LEmHMggdo5kli3Nr1KFQ==
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ n42EhtzDSnZ071g+44ZMBCc74UQ=
+
+
+ pQyeXnJ2S9KyUJ1BE3k3PZuDpk7WkD2nMPLoELSLJeNBe9TwmLhImsIUS4inAUreuTsjfrs2BUmChN6jPA0/1cSR0GbblLsHFN+IwPE2dnPN/u0vIOmsan4MuW1OnlH6KexmDHRj/uFwjoXfSJ0JJE1u9bYdbsp5LGlFuc//CCQ=
+
+
+ MIIE7DCCA9SgAwIBAgIQZMlLC9ZEsHWsnvJNdMI2yzANBgkqhkiG9w0BAQUFADBqMQswCQYDVQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDEsMCoGA1UECxMjU2VjcmV0YXJpYSBkYSBSZWNlaXRhIEZlZGVyYWwgLSBTUkYxGDAWBgNVBAMTD0FDIFBST0RFTUdFIFNSRjAeFw0wNzEwMzEwMDAwMDBaFw0xMDEwMzAyMzU5NTlaMIGQMQswCQYDVQQGEwJCUjETMBEGA1UEChQKSUNQLUJyYXNpbDEqMCgGA1UECxQhU2VjcmV0YXJpYSBkYSBSZWNlaXRhIEZlZGVyYWwtU1JGMRIwEAYDVQQLFAlTUkYgZS1DUEYxLDAqBgNVBAMTI0VER0FSIERPIENBUk1PIEZFUlJFSVJBOjQzMjYwMTUyNjg3MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6M+9XT5KLQN3IH8mAr+S6vxiochY/EwF8EhtNoxPTYl+zr0Dh+eZsRG31bN410nr2OrwncrRorMK8Ngq+j3FnNF0nIMigaaa5NAEfIk3Yy4kuqrTUZBpqUJvCqc3mkF3C3XD0MTmtbVTWCvYIk+qn3t5ShHyMnQcuah5Q0ItSbQIDAQABo4IB6TCCAeUwgZUGA1UdEQSBjTCBiqA9BgVgTAEDAaA0BDIyMTAzMTk2NDQzMjYwMTUyNjg3MDAwMDAwMDAwMDAwMDAwMDBNLTI4ODQwODVTU1BNR6AXBgVgTAEDBqAOBAwwMDAwMDAwMDAwMDCgHgYFYEwBAwWgFQQTMDAwMDAwMDAwMDAwMDAwMDAwMIEQZWRnYXJAcGJoLmdvdi5icjAJBgNVHRMEAjAAMF8GA1UdHwRYMFYwVKBSoFCGTmh0dHA6Ly9pY3AtYnJhc2lsLmNlcnRpc2lnbi5jb20uYnIvcmVwb3NpdG9yaW8vbGNyL0FDUFJPREVNR0VTUkYvTGF0ZXN0Q1JMLmNybDAfBgNVHSMEGDAWgBTdO9vtjZcRRUMBQ020Ev0O7niacDAOBgNVHQ8BAf8EBAMCBeAwVQYDVR0gBE4wTDBKBgZgTAECAxQwQDA+BggrBgEFBQcCARYyaHR0cDovL2ljcC1icmFzaWwuY2VydGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9kcGMwHQYDVR0lBBYwFAYIKwYBBQUHAwQGCCsGAQUFBwMCMDgGCCsGAQUFBwEBBCwwKjAoBggrBgEFBQcwAYYcaHR0cDovL29jc3AuY2VydGlzaWduLmNvbS5icjANBgkqhkiG9w0BAQUFAAOCAQEAYFcjZj4lGVEREHBaHtcRletWS6/mvpkxmodwj3ele5yXsxuqSZd7ebHbKewXx7gkyaWFkFAxFanQhls2tYKjg6haqt2b0AO1FsitVIHkMcxRwkU9G+1ec8yfdxymra2VdXazkxuvqKABgxkqKnaFdHjje7cjWDgwparymH64mTlHkSQz59GutJW0xfwBHcMGx0/9/iIug6pfMQivWf0NMVpFNzxO5ZNPEuOeBhVDxQr4+KB+4B9xDai/3J6f42UNbSy+z3xuB0K8/7V7BsFUYOYFSNnBrXhvbvXtZOtteX65V0r1+RJJX5OK+PAPhZ57T1LEmHMggdo5kli3Nr1KFQ==
+
+
+
+
\ No newline at end of file
diff --git a/pytrustnfe/nfse/natal/templates/Rps.xml b/pytrustnfe/nfse/natal/templates/Rps.xml
index 9dcd23c..3bec297 100644
--- a/pytrustnfe/nfse/natal/templates/Rps.xml
+++ b/pytrustnfe/nfse/natal/templates/Rps.xml
@@ -1,5 +1,5 @@
-
+
{{ rps.numero }}
{{ rps.serie }}
@@ -10,47 +10,57 @@
{{ rps.regime_tributacao }}
{{ rps.optante_simples }}
{{ rps.incentivador_cultural }}
+ {{ rps.status }}
{{ rps.servico.valor_servico }}
+ {{ rps.servico.pis }}
+ {{ rps.servico.cofins }}
+ {{ rps.servico.inss }}
+ {{ rps.servico.ir }}
+ {{ rps.servico.csll }}
{{ rps.servico.iss_retido }}
+ {{ rps.servico.iss }}
+ {{ rps.servico.retencoes }}
{{ rps.servico.base_calculo }}
+ {{ rps.servico.aliquota }}
{{ rps.servico.codigo_servico }}
- {{ rps.servico.cnae_servico }}
- {{ rps.servico.codigo_tributacao_municipio }}
- {{ rps.servico.descricao }}
+ {{ rps.servico.cnae_servico }}
+ {{ rps.servico.discriminacao }}
{{ rps.servico.codigo_municipio }}
-
-
- {{ rps.prestador.cnpj }}
- {{ rps.prestador.inscricao_municipal }}
-
+
+ {{ rps.prestador.cnpj }}
+ {{ rps.prestador.inscricao_municipal }}
{{ rps.prestador.razaosocial }}
{{ rps.prestador.fantasia }}
- {{ rps.prestador.endereco }}
- {{ rps.prestador.numero }}
- {{ rps.prestador.complemento }}
- {{ rps.prestador.bairro }}
- {{ rps.prestador.codigomunicipal }}
- {{ rps.prestador.uf }}
- {{ rps.prestador.cep }}
+ {{ rps.prestador.endereco }}
+ {{ rps.prestador.numero }}
+ {{ rps.prestador.complemento }}
+ {{ rps.prestador.bairro }}
+ {{ rps.prestador.codigomunicipal }}
+ {{ rps.prestador.uf }}
+ {{ rps.prestador.cep }}
-
- {{ rps.prestador.telefone }}
- {{ rps.prestador.email }}
+
+ {% if rps.prestador.telefone is defined -%}
+ {{ rps.prestador.telefone }}
+ {% endif %}
+ {% if rps.prestador.email is defined -%}
+ {{ rps.prestador.email }}
+ {% endif %}
-
-
+
+
- {% if rps.tomador.cnpj_cpf|length == 14 %}
- {{ rps.tomador.cnpj_cpf }}
+ {% if rps.tomador.cpf_cnpj|length == 14 %}
+ {{ rps.tomador.cpf_cnpj }}
{% endif %}
- {% if rps.tomador.cnpj_cpf|length == 11 %}
- {{ rps.tomador.cnpj_cpf }}
+ {% if rps.tomador.cpf_cnpj|length == 11 %}
+ {{ rps.tomador.cpf_cnpj }}
{% endif %}
{% if rps.tomador.inscricao_municipal is defined -%}
@@ -59,29 +69,29 @@
{{ rps.tomador.razao_social }}
- {{ rps.tomador.logradouro }}
- {{ rps.tomador.numero }}
- {% if rps.tomador.complemento is defined -%}
- {{ rps.tomador.complemento }}
- {% endif %}
- {{ rps.tomador.bairro }}
- {{ rps.tomador.codigo_municipio }}
- {{ rps.tomador.uf }}
- {{ rps.tomador.cep }}
+ {{ rps.tomador.endereco }}
+ {{ rps.tomador.numero }}
+ {{ rps.tomador.complemento }}
+ {{ rps.tomador.bairro }}
+ {{ rps.tomador.codigo_municipio }}
+ {{ rps.tomador.uf }}
+ {{ rps.tomador.cep }}
{% if rps.tomador.telefone is defined -%}
{{ rps.tomador.telefone }}
{% endif %}
{% if rps.tomador.email is defined -%}
- {{ rps.tomador.email }}
+ {{ rps.tomador.email }}
{% endif %}
+ {% if rps.tomador.orgao_gerador is defined -%}
{{ rps.tomador.orgao_gerador.codigo_municipio }}
{{ rps.tomador.orgao_gerador.uf }}
-
+ {% endif %}
+
{% if rps.intermediario is defined -%}
{{ rps.intermediario.razao_social }}
@@ -98,4 +108,5 @@
{% endif %}
-
+
+
\ No newline at end of file
diff --git a/pytrustnfe/nfse/natal/templates/cabecalho.xml b/pytrustnfe/nfse/natal/templates/cabecalho.xml
new file mode 100644
index 0000000..e02734c
--- /dev/null
+++ b/pytrustnfe/nfse/natal/templates/cabecalho.xml
@@ -0,0 +1,3 @@
+
+ 2.01
+
\ No newline at end of file
diff --git a/pytrustnfe/nfse/natal/templates/recepcionarLoteRps.xml b/pytrustnfe/nfse/natal/templates/recepcionarLoteRps.xml
index 0756b0e..5dcd922 100644
--- a/pytrustnfe/nfse/natal/templates/recepcionarLoteRps.xml
+++ b/pytrustnfe/nfse/natal/templates/recepcionarLoteRps.xml
@@ -1,13 +1,11 @@
-
+
{{ nfse.numero_lote }}
{{ nfse.cnpj_prestador }}
{{ nfse.inscricao_municipal }}
{{ nfse.lista_rps|length }}
- {% for rps in nfse.lista_rps -%}
- {% include 'Rps.xml' %}
- {% endfor %}
+ {{lote}}
diff --git a/pytrustnfe/nfse/susesu/templates/EnviarNota.xml b/pytrustnfe/nfse/susesu/templates/EnviarNota.xml
index bf75e03..3b285a2 100644
--- a/pytrustnfe/nfse/susesu/templates/EnviarNota.xml
+++ b/pytrustnfe/nfse/susesu/templates/EnviarNota.xml
@@ -1,5 +1,6 @@
-
-
+
+
+
{{ codigo_prefeitura }}
@@ -10,5 +11,5 @@
{{ cnpj_prestador }}
{{ senha_nfd }}
-
-
+
+
diff --git a/pytrustnfe/xml/__init__.py b/pytrustnfe/xml/__init__.py
index fc261ab..a98283d 100644
--- a/pytrustnfe/xml/__init__.py
+++ b/pytrustnfe/xml/__init__.py
@@ -17,7 +17,8 @@ def recursively_empty(e):
def render_xml(path, template_name, remove_empty, **nfe):
nfe = recursively_normalize(nfe)
- env = Environment(loader=FileSystemLoader(path), extensions=["jinja2.ext.with_"])
+ env = Environment(loader=FileSystemLoader(
+ path), extensions=["jinja2.ext.with_"])
env.filters["normalize"] = filters.strip_line_feed
env.filters["normalize_str"] = filters.normalize_str
env.filters["format_percent"] = filters.format_percent
@@ -41,7 +42,7 @@ def render_xml(path, template_name, remove_empty, **nfe):
if recursively_empty(elem):
parent.remove(elem)
return root
- return etree.tostring(root, encoding=str)
+ return root
def sanitize_response(response):
@@ -53,7 +54,7 @@ def sanitize_response(response):
continue
i = elem.tag.find("}")
if i >= 0:
- elem.tag = elem.tag[i + 1 :]
+ elem.tag = elem.tag[i + 1:]
objectify.deannotate(tree, cleanup_namespaces=True)
return response, objectify.fromstring(etree.tostring(tree))
diff --git a/tests/test_nfse_natal.py b/tests/test_nfse_natal.py
index 2c0a8b3..2bf75c1 100644
--- a/tests/test_nfse_natal.py
+++ b/tests/test_nfse_natal.py
@@ -70,7 +70,7 @@ class test_nfse_natal(unittest.TestCase):
def test_recepcionar_lote_rps(self):
pfx_source = open(os.path.join(self.caminho, "teste.pfx"), "rb").read()
- pfx = Certificado(pfx_source, "123456")
+ pfx = Certificado(pfx_source, "123456", ambiente="homologacao")
nfse = self._get_nfse()
path = os.path.join(os.path.dirname(__file__), "XMLs")