From 3db71b7b9acc2575ae267a7863592951d22e6f07 Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Mon, 7 May 2018 16:14:14 -0300 Subject: [PATCH 01/33] =?UTF-8?q?Nota=20de=20BH=20utiliza=20duas=20assinat?= =?UTF-8?q?uras=20Corre=C3=A7=C3=B5s=20nos=20templates?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pytrustnfe/nfse/bh/__init__.py | 14 ++++++---- pytrustnfe/nfse/bh/assinatura.py | 44 ++++++++++++++++++++++++++++++ pytrustnfe/nfse/bh/templates/GerarNfse.xml | 8 +++--- pytrustnfe/nfse/bh/templates/Rps.xml | 2 +- setup.py | 1 + 5 files changed, 59 insertions(+), 10 deletions(-) create mode 100644 pytrustnfe/nfse/bh/assinatura.py diff --git a/pytrustnfe/nfse/bh/__init__.py b/pytrustnfe/nfse/bh/__init__.py index 4c9fd3f..c5f246b 100644 --- a/pytrustnfe/nfse/bh/__init__.py +++ b/pytrustnfe/nfse/bh/__init__.py @@ -2,14 +2,14 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). import os - +from lxml import etree from requests import Session from zeep import Client from zeep.transports import Transport from pytrustnfe.certificado import extract_cert_and_key_from_pfx, save_cert_key from pytrustnfe.xml import render_xml, sanitize_response -from pytrustnfe.nfe.assinatura import Assinatura +from pytrustnfe.nfse.bh.assinatura import Assinatura def _render(certificado, method, **kwargs): @@ -18,12 +18,14 @@ def _render(certificado, method, **kwargs): reference = '' if method == 'GerarNfse': - reference = 'r%s' % kwargs['rps']['numero'] + reference = 'rps:%s' % kwargs['rps']['numero'] + ref_lote = 'lote%s' % kwargs['rps']['numero_lote'] elif method == 'CancelarNfse': reference = 'Cancelamento_NF%s' % kwargs['cancelamento']['numero_nfse'] signer = Assinatura(certificado.pfx, certificado.password) xml_send = signer.assina_xml(xml_send, reference) + xml_send = signer.assina_xml(etree.fromstring(xml_send), ref_lote) return xml_send.encode('utf-8') @@ -35,7 +37,9 @@ def _send(certificado, method, **kwargs): base_url = 'https://bhisshomologa.pbh.gov.br/bhiss-ws/nfse?wsdl' xml_send = kwargs["xml"].decode('utf-8') - xml_cabecalho = '' + xml_cabecalho = '\ + \ + 1.00' cert, key = extract_cert_and_key_from_pfx( certificado.pfx, certificado.password) @@ -50,7 +54,7 @@ def _send(certificado, method, **kwargs): response = client.service[method](xml_cabecalho, xml_send) - response, obj = sanitize_response(response) + response, obj = sanitize_response(response.encode('utf-8')) return { 'sent_xml': str(xml_send), 'received_xml': str(response), diff --git a/pytrustnfe/nfse/bh/assinatura.py b/pytrustnfe/nfse/bh/assinatura.py new file mode 100644 index 0000000..1831379 --- /dev/null +++ b/pytrustnfe/nfse/bh/assinatura.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +# © 2016 Danimar Ribeiro, Trustcode +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import signxml +from lxml import etree +from pytrustnfe.certificado import extract_cert_and_key_from_pfx +from signxml import XMLSigner + + +class Assinatura(object): + + def __init__(self, arquivo, senha): + self.arquivo = arquivo + self.senha = senha + + def assina_xml(self, xml_element, reference): + cert, key = extract_cert_and_key_from_pfx(self.arquivo, self.senha) + + for element in xml_element.iter("*"): + if element.text is not None and not element.text.strip(): + element.text = None + + signer = XMLSigner( + method=signxml.methods.enveloped, signature_algorithm="rsa-sha1", + digest_algorithm='sha1', + c14n_algorithm='http://www.w3.org/TR/2001/REC-xml-c14n-20010315') + + ns = {} + ns[None] = signer.namespaces['ds'] + signer.namespaces = ns + + ref_uri = ('#%s' % reference) if reference else None + signed_root = signer.sign( + xml_element, key=key.encode(), cert=cert.encode(), + reference_uri=ref_uri) + if reference: + element_signed = signed_root.find(".//*[@Id='%s']" % reference) + signature = signed_root.find(".//*[@URI='#%s']" % reference).getparent().getparent() + + if element_signed is not None and signature is not None: + parent = element_signed.getparent() + parent.append(signature) + return etree.tostring(signed_root, encoding=str) diff --git a/pytrustnfe/nfse/bh/templates/GerarNfse.xml b/pytrustnfe/nfse/bh/templates/GerarNfse.xml index c6ead33..6b35d4d 100644 --- a/pytrustnfe/nfse/bh/templates/GerarNfse.xml +++ b/pytrustnfe/nfse/bh/templates/GerarNfse.xml @@ -1,8 +1,8 @@ - - {{ nfse.numero_lote }} - {{ nfse.cnpj_prestador }} - {{ nfse.inscricao_municipal }} + + {{ rps.numero_lote }} + {{ rps.prestador.cnpj }} + {{ rps.prestador.inscricao_municipal }} 1 {% include 'Rps.xml' %} diff --git a/pytrustnfe/nfse/bh/templates/Rps.xml b/pytrustnfe/nfse/bh/templates/Rps.xml index 7b883af..0dfd0cf 100644 --- a/pytrustnfe/nfse/bh/templates/Rps.xml +++ b/pytrustnfe/nfse/bh/templates/Rps.xml @@ -1,5 +1,5 @@ - + {{ rps.numero }} {{ rps.serie }} diff --git a/setup.py b/setup.py index 17d5399..4bf323b 100644 --- a/setup.py +++ b/setup.py @@ -37,6 +37,7 @@ later (LGPLv2+)', 'nfse/imperial/templates/*xml', 'nfse/floripa/templates/*xml', 'nfse/carioca/templates/*xml', + 'nfse/bh/templates/*xml', 'xml/schemas/*xsd', ]}, url='https://github.com/danimaribeiro/PyTrustNFe', From e712bf0d6aa7edc65773e15d99940899247b8b0b Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Tue, 8 May 2018 16:48:43 -0300 Subject: [PATCH 02/33] =?UTF-8?q?Corre=C3=A7=C3=A3o=20de=20envio=20Ginfes?= =?UTF-8?q?=20-=20Mudan=C3=A7a=20para=20o=20zeep=20para=20webservice=20SOA?= =?UTF-8?q?P?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pytrustnfe/nfse/ginfes/__init__.py | 35 ++++++++++++++++++++--------------- requirements.txt | 1 + setup.py | 3 ++- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/pytrustnfe/nfse/ginfes/__init__.py b/pytrustnfe/nfse/ginfes/__init__.py index 80e969b..fb27677 100644 --- a/pytrustnfe/nfse/ginfes/__init__.py +++ b/pytrustnfe/nfse/ginfes/__init__.py @@ -3,9 +3,12 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). import os -import suds +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.client import get_authenticated_client from pytrustnfe.certificado import extract_cert_and_key_from_pfx, save_cert_key from pytrustnfe.nfe.assinatura import Assinatura @@ -33,19 +36,21 @@ def _send(certificado, method, **kwargs): cert, key = extract_cert_and_key_from_pfx( certificado.pfx, certificado.password) cert, key = save_cert_key(cert, key) - client = get_authenticated_client(base_url, cert, key) - try: - xml_send = kwargs['xml'] - header = '3' #noqa - response = getattr(client.service, method)(header, xml_send) - except suds.WebFault as e: - return { - 'sent_xml': xml_send, - 'received_xml': e.fault.faultstring, - 'object': None - } - - response, obj = sanitize_response(response) + + header = '3' #noqa + + disable_warnings() + session = Session() + session.cert = (cert, key) + session.verify = False + transport = Transport(session=session) + + client = Client(base_url, transport=transport) + + xml_send = kwargs['xml'] + response = client.service[method](header, xml_send) + + response, obj = sanitize_response(response.encode('utf-8')) return { 'sent_xml': xml_send, 'received_xml': response, diff --git a/requirements.txt b/requirements.txt index 92f9079..63f4786 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,3 +15,4 @@ reportlab pytest pytest-cov pytz +zeep diff --git a/setup.py b/setup.py index 4bf323b..c5686a4 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages -VERSION = "0.9.20" +VERSION = "0.9.21" setup( @@ -53,6 +53,7 @@ later (LGPLv2+)', 'suds-jurko-requests >= 1.2', 'reportlab', 'pytz', + 'zeep', ], tests_require=[ 'pytest', From 1d9f4b0776cf7f0370a89109c43d257160fffe37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A1bio=20Luna?= Date: Thu, 1 Mar 2018 10:57:08 -0300 Subject: [PATCH 03/33] [WIP] Implementando NFC-e SVRS # Conflicts: # pytrustnfe/Servidores.py --- pytrustnfe/Servidores.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/pytrustnfe/Servidores.py b/pytrustnfe/Servidores.py index 8a340fe..b38727a 100644 --- a/pytrustnfe/Servidores.py +++ b/pytrustnfe/Servidores.py @@ -97,11 +97,13 @@ def localizar_url(servico, estado, mod='55', ambiente=2): def localizar_qrcode(estado, ambiente=2): sigla = SIGLA_ESTADO[estado] - dominio = ESTADO_WS[sigla]['65'][ambiente]['servidor'] - complemento = ESTADO_WS[sigla]['65'][ambiente][WS_NFCE_QR_CODE] - if 'https://' in complemento: - return complemento - return "https://%s/%s" % (dominio, complemento) + # dominio = ESTADO_WS[sigla][NFCE_MODELO][ambiente]['servidor'] + # complemento = ESTADO_WS[sigla][NFCE_MODELO][ambiente][WS_NFCE_QR_CODE] + ws_qrcode = ESTADO_WS[sigla][NFCE_MODELO][ambiente][WS_NFCE_QR_CODE] + return ws_qrcode + # if 'https://' in ws_qrcode: + # return ws_qrcode + # return "https://%s/" % (ws_qrcode) METODO_WS = { @@ -317,7 +319,7 @@ UFAM = { WS_NFE_INUTILIZACAO: 'nfce-services-nac/services/NfeInutilizacao2', WS_NFE_CONSULTA: 'nfce-services-nac/services/NfeConsulta2', WS_NFE_SITUACAO: 'nfce-services-nac/services/NfeStatusServico2', - WS_NFCE_QR_CODE: 'nfceweb/consultarNFCe.jsp', + WS_NFCE_QR_CODE: 'homnfce.sefaz.am.gov.br/nfceweb/consultarNFCe.jsp', } } } From 4f8b75262685381ca1fcbe3488ad183aeb2bd9aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A1bio=20Luna?= Date: Fri, 2 Mar 2018 14:47:36 -0300 Subject: [PATCH 04/33] [WIP] NFC-e Corrige servidores. Passa modelo do documento para localizar a url. --- pytrustnfe/Servidores.py | 1 - pytrustnfe/nfe/__init__.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/pytrustnfe/Servidores.py b/pytrustnfe/Servidores.py index b38727a..737b81b 100644 --- a/pytrustnfe/Servidores.py +++ b/pytrustnfe/Servidores.py @@ -20,7 +20,6 @@ WS_NFCE_CADASTRO = 'NfeConsultaCadastro' WS_NFCE_RECEPCAO_EVENTO = 'RecepcaoEventoCarta' WS_NFCE_QR_CODE = 'NfeQRCode' WS_NFCE_CONSULTA_DESTINADAS = 'NfeConsultaDest', -WS_NFCE_RET_AUTORIZACAO = 'NFeRetAutorizacao', WS_NFE_CADASTRO = 'NfeConsultaCadastro' diff --git a/pytrustnfe/nfe/__init__.py b/pytrustnfe/nfe/__init__.py index c903014..a5da300 100644 --- a/pytrustnfe/nfe/__init__.py +++ b/pytrustnfe/nfe/__init__.py @@ -184,7 +184,7 @@ def _render(certificado, method, sign, **kwargs): def _send(certificado, method, **kwargs): xml_send = kwargs["xml"] - url = localizar_url(method, kwargs['estado'], '55', + url = localizar_url(method, kwargs['estado'], kwargs['modelo'], kwargs['ambiente']) cabecalho = _build_header(method, **kwargs) From cab13549cc15b39cbbd3a74d95f54a71ed059d48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A1bio=20Luna?= Date: Mon, 5 Mar 2018 17:22:30 -0300 Subject: [PATCH 05/33] =?UTF-8?q?Corre=C3=A7=C3=B5es=20para=20envio=20de?= =?UTF-8?q?=20NFC-e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pytrustnfe/nfe/__init__.py | 6 ++---- pytrustnfe/nfe/templates/NfeAutorizacao.xml | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/pytrustnfe/nfe/__init__.py b/pytrustnfe/nfe/__init__.py index a5da300..ebe3f60 100644 --- a/pytrustnfe/nfe/__init__.py +++ b/pytrustnfe/nfe/__init__.py @@ -89,9 +89,7 @@ def _add_qrCode(xml, **kwargs): valor_total = inf_nfe['total']['vNF'] dest_cpf = 'Inexistente' dest = nfe.find(".//{http://www.portalfiscal.inf.br/nfe}dest") - if dest: - dest_parent = dest.getparent() - dest_parent.remove(dest) + if inf_nfe.get('dest', False): if inf_nfe['dest'].get('CPF', False): dest_cpf = inf_nfe['dest']['CPF'] @@ -99,7 +97,7 @@ def _add_qrCode(xml, **kwargs): cpf = etree.Element('CPF') cpf.text = dest_cpf dest.append(cpf) - dest_parent.append(dest) + icms_total = inf_nfe['total']['vICMS'] dig_val = binascii.hexlify(xml.find( ".//{http://www.w3.org/2000/09/xmldsig#}DigestValue").text.encode()).decode() diff --git a/pytrustnfe/nfe/templates/NfeAutorizacao.xml b/pytrustnfe/nfe/templates/NfeAutorizacao.xml index b135806..d2d82e4 100644 --- a/pytrustnfe/nfe/templates/NfeAutorizacao.xml +++ b/pytrustnfe/nfe/templates/NfeAutorizacao.xml @@ -491,7 +491,6 @@ {% endif %} - {% endif %} {% if imposto.II is defined %} {{ imposto.II.vBC }} @@ -500,6 +499,7 @@ {{ imposto.II.vIOF }} {% endif %} + {% endif %} {% if imposto.PIS.CST in ('01', '02') %} From 5c9908da57286a617ab0fcba2546cb241c89de67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A1bio=20Luna?= Date: Thu, 8 Mar 2018 11:17:32 -0300 Subject: [PATCH 06/33] Insere servidor de cancelamento de NFC-e. # Conflicts: # pytrustnfe/Servidores.py --- pytrustnfe/Servidores.py | 66 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 46 insertions(+), 20 deletions(-) diff --git a/pytrustnfe/Servidores.py b/pytrustnfe/Servidores.py index 737b81b..a165839 100644 --- a/pytrustnfe/Servidores.py +++ b/pytrustnfe/Servidores.py @@ -138,27 +138,53 @@ METODO_WS = { } SVRS = { - NFE_AMBIENTE_PRODUCAO: { - 'servidor': 'nfe.svrs.rs.gov.br', - WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento.asmx', - WS_NFE_CANCELAMENTO: 'ws/recepcaoevento/recepcaoevento.asmx', - WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NfeAutorizacao.asmx', - WS_NFE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NfeRetAutorizacao.asmx', - WS_NFE_CADASTRO: 'ws/CadConsultaCadastro/CadConsultaCadastro2.asmx', - WS_NFE_INUTILIZACAO: 'ws/nfeinutilizacao/nfeinutilizacao2.asmx', - WS_NFE_CONSULTA: 'ws/NfeConsulta/NfeConsulta2.asmx', - WS_NFE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico2.asmx', + NFE_MODELO: { + NFE_AMBIENTE_PRODUCAO: { + 'servidor': 'nfe.svrs.rs.gov.br', + WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento.asmx', + WS_NFE_CANCELAMENTO: 'ws/recepcaoevento/recepcaoevento.asmx', + WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NfeAutorizacao.asmx', + WS_NFE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NfeRetAutorizacao.asmx', + WS_NFE_CADASTRO: 'ws/CadConsultaCadastro/CadConsultaCadastro2.asmx', + WS_NFE_INUTILIZACAO: 'ws/nfeinutilizacao/nfeinutilizacao2.asmx', + WS_NFE_CONSULTA: 'ws/NfeConsulta/NfeConsulta2.asmx', + WS_NFE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico2.asmx', + }, + NFE_AMBIENTE_HOMOLOGACAO: { + 'servidor': 'nfe-homologacao.svrs.rs.gov.br', + WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento.asmx', + WS_NFE_CANCELAMENTO: 'ws/recepcaoevento/recepcaoevento.asmx', + WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NfeAutorizacao.asmx', + WS_NFE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NfeRetAutorizacao.asmx', + WS_NFE_CADASTRO: 'ws/CadConsultaCadastro/CadConsultaCadastro2.asmx', + WS_NFE_INUTILIZACAO: 'ws/nfeinutilizacao/nfeinutilizacao2.asmx', + WS_NFE_CONSULTA: 'ws/NfeConsulta/NfeConsulta2.asmx', + WS_NFE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico2.asmx', + } }, - NFE_AMBIENTE_HOMOLOGACAO: { - 'servidor': 'nfe-homologacao.svrs.rs.gov.br', - WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento.asmx', - WS_NFE_CANCELAMENTO: 'ws/recepcaoevento/recepcaoevento.asmx', - WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NfeAutorizacao.asmx', - WS_NFE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NfeRetAutorizacao.asmx', - WS_NFE_CADASTRO: 'ws/CadConsultaCadastro/CadConsultaCadastro2.asmx', - WS_NFE_INUTILIZACAO: 'ws/nfeinutilizacao/nfeinutilizacao2.asmx', - WS_NFE_CONSULTA: 'ws/NfeConsulta/NfeConsulta2.asmx', - WS_NFE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico2.asmx', + NFCE_MODELO: { + NFCE_AMBIENTE_PRODUCAO: { + 'servidor': 'nfce.svrs.rs.gov.br', + WS_NFCE_INUTILIZACAO: 'ws/nfeinutilizacao/nfeinutilizacao2.asmx', + WS_NFCE_CONSULTA: 'ws/NfeConsulta/NfeConsulta2.asmx', + WS_NFCE_CANCELAMENTO: 'ws/recepcaoevento/recepcaoevento.asmx', + WS_NFCE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico2.asmx', + WS_NFCE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao.asmx', + WS_NFCE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao.asmx', + WS_NFCE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento.asmx', + WS_NFCE_QR_CODE: 'http://dec.fazenda.df.gov.br/ConsultarNFCe.aspx', + }, + NFCE_AMBIENTE_HOMOLOGACAO: { + 'servidor': 'nfce-homologacao.svrs.rs.gov.br', + WS_NFCE_INUTILIZACAO: 'ws/nfeinutilizacao/nfeinutilizacao2.asmx', + WS_NFCE_CONSULTA: 'ws/NfeConsulta/NfeConsulta2.asmx', + WS_NFCE_CANCELAMENTO: 'ws/recepcaoevento/recepcaoevento.asmx', + WS_NFCE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico2.asmx', + WS_NFCE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao.asmx', + WS_NFCE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao.asmx', + WS_NFCE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento.asmx', + WS_NFCE_QR_CODE: 'http://dec.fazenda.df.gov.br/ConsultarNFCe.aspx', + } } } From c7bc21de2a051c610264891b09c1679edf549cb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A1bio=20Luna?= Date: Thu, 8 Mar 2018 12:15:19 -0300 Subject: [PATCH 07/33] =?UTF-8?q?Retira=20lixo=20c=C3=B3digo.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pytrustnfe/Servidores.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/pytrustnfe/Servidores.py b/pytrustnfe/Servidores.py index a165839..9c7090f 100644 --- a/pytrustnfe/Servidores.py +++ b/pytrustnfe/Servidores.py @@ -96,13 +96,8 @@ def localizar_url(servico, estado, mod='55', ambiente=2): def localizar_qrcode(estado, ambiente=2): sigla = SIGLA_ESTADO[estado] - # dominio = ESTADO_WS[sigla][NFCE_MODELO][ambiente]['servidor'] - # complemento = ESTADO_WS[sigla][NFCE_MODELO][ambiente][WS_NFCE_QR_CODE] ws_qrcode = ESTADO_WS[sigla][NFCE_MODELO][ambiente][WS_NFCE_QR_CODE] return ws_qrcode - # if 'https://' in ws_qrcode: - # return ws_qrcode - # return "https://%s/" % (ws_qrcode) METODO_WS = { From 5893a0324bf9212516a37b6cf1f73d175ebc4550 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A1bio=20Luna?= Date: Thu, 8 Mar 2018 16:21:48 -0300 Subject: [PATCH 08/33] =?UTF-8?q?Corre=C3=A7=C3=A3o=20de=20testes.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pytrustnfe/Servidores.py | 2 +- pytrustnfe/nfe/__init__.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pytrustnfe/Servidores.py b/pytrustnfe/Servidores.py index 9c7090f..20d7a37 100644 --- a/pytrustnfe/Servidores.py +++ b/pytrustnfe/Servidores.py @@ -648,7 +648,7 @@ UFSP = { WS_NFCE_SITUACAO: 'ws/nfestatusservico2.asmx', WS_NFCE_CADASTRO: 'ws/cadconsultacadastro2.asmx', WS_NFCE_RECEPCAO_EVENTO: 'ws/recepcaoevento.asmx', - WS_NFCE_QR_CODE: 'NFCEConsultaPublica/Paginas/ConstultaQRCode.aspx', + WS_NFCE_QR_CODE: 'https://homologacao.nfce.fazenda.sp.gov.br/NFCEConsultaPublica/Paginas/ConstultaQRCode.aspx', } } } diff --git a/pytrustnfe/nfe/__init__.py b/pytrustnfe/nfe/__init__.py index ebe3f60..ec1de27 100644 --- a/pytrustnfe/nfe/__init__.py +++ b/pytrustnfe/nfe/__init__.py @@ -267,6 +267,7 @@ def xml_consulta_cadastro(certificado, **kwargs): def consulta_cadastro(certificado, **kwargs): if "xml" not in kwargs: kwargs['xml'] = xml_consulta_cadastro(certificado, **kwargs) + kwargs['modelo'] = '55' return _send(certificado, 'NfeConsultaCadastro', **kwargs) From c0dd5d02dd8b1631aa4dfb61c4fbdc8ba4e2fde7 Mon Sep 17 00:00:00 2001 From: carcaroff Date: Wed, 28 Mar 2018 17:33:08 -0300 Subject: [PATCH 09/33] =?UTF-8?q?Implementa=C3=A7=C3=A3o=20da=20danfe=20pa?= =?UTF-8?q?ra=20NFC-e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pytrustnfe/nfe/danfce.py | 456 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 456 insertions(+) create mode 100644 pytrustnfe/nfe/danfce.py diff --git a/pytrustnfe/nfe/danfce.py b/pytrustnfe/nfe/danfce.py new file mode 100644 index 0000000..21cd50b --- /dev/null +++ b/pytrustnfe/nfe/danfce.py @@ -0,0 +1,456 @@ +# -*- coding: utf-8 -*- +# © 2017 Johny Chen Jy, Trustcode +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from textwrap import wrap +from io import BytesIO + +from reportlab.lib import utils +from reportlab.pdfgen import canvas +from reportlab.lib.units import cm, mm +from reportlab.graphics.barcode import qr +from reportlab.graphics import renderPDF +from reportlab.graphics.shapes import Drawing +from reportlab.platypus import Table, TableStyle, Paragraph, Image +from reportlab.lib.enums import TA_CENTER +from reportlab.lib.styles import ParagraphStyle + + +def format_cnpj_cpf(value): + if len(value) < 12: # CPF + cValue = '%s.%s.%s-%s' % (value[:-8], value[-8:-5], + value[-5:-2], value[-2:]) + else: + cValue = '%s.%s.%s/%s-%s' % (value[:-12], value[-12:-9], + value[-9:-6], value[-6:-2], value[-2:]) + return cValue + + +def getdateUTC(cDateUTC): + cDt = cDateUTC[0:10].split('-') + cDt.reverse() + return '/'.join(cDt), cDateUTC[11:16] + + +def format_number(cNumber, precision=0, group_sep='.', decimal_sep=','): + if cNumber: + number = float(cNumber) + return ("{:,." + str(precision) + "f}").format(number).\ + replace(",", "X").replace(".", ",").replace("X", ".") + return "" + + +def tagtext(oNode=None, cTag=None): + try: + xpath = ".//{http://www.portalfiscal.inf.br/nfe}%s" % (cTag) + cText = oNode.find(xpath).text + except: + cText = '' + return cText + + +def get_image(path, width=1 * cm): + img = utils.ImageReader(path) + iw, ih = img.getSize() + aspect = ih / float(iw) + return Image(path, width=width, height=(width * aspect)) + + +def format_telefone(numero_telefone): + if len(numero_telefone) == 10: + telefone = '(%s) %s-%s' % (numero_telefone[0:2], + numero_telefone[2:6], + numero_telefone[6:]) + else: + telefone = '(%s) %s-%s' % (numero_telefone[0:2], + numero_telefone[2:7], + numero_telefone[7:]) + return telefone + + +class danfce(object): + + def __init__(self, list_xml, logo=None): + + self.current_font_size = 7 + self.current_font_name = 'NimbusSanL-Regu' + + self.max_height = 840 + self.min_height = 1 + self.min_width = 5 + self.max_width = 200 + self.current_height = 840 + + self.oPDF_IO = BytesIO() + self.canvas = canvas.Canvas(self.oPDF_IO, pagesize=(7.2 * cm, 30 * cm)) + self.canvas.setTitle('DANFCE') + self.canvas.setLineWidth(.5) + self.canvas.setFont(self.current_font_name, self.current_font_size) + + self.list_xml = list_xml + self.logo = logo + + self.nfce_generate() + + def ide_emit(self, oXML=None): + + elem_emit = oXML.find(".//{http://www.portalfiscal.inf.br/nfe}emit") + + # Razão Social emitente + nomeEmpresa = tagtext(oNode=elem_emit, cTag='xFant') + self.drawTitle(nomeEmpresa, 10) + + if self.logo: + img = get_image(self.logo, width=10 * mm) + img.drawOn(self.canvas, 5, 830) + + cEnd = tagtext(oNode=elem_emit, cTag="xNome") + '
' + cEnd += "CNPJ: %s " % (format_cnpj_cpf( + tagtext(oNode=elem_emit, cTag='CNPJ'))) + cEnd += "IE: %s" % (tagtext(oNode=elem_emit, cTag="IE")) + '
' + cEnd += tagtext(oNode=elem_emit, cTag='xLgr') + ', ' + tagtext( + oNode=elem_emit, cTag='nro') + ' - ' + cEnd += tagtext(oNode=elem_emit, cTag='xBairro') + '
' + tagtext( + oNode=elem_emit, cTag='xMun') + ' - ' + cEnd += tagtext(oNode=elem_emit, cTag='UF') + ' - ' + tagtext( + oNode=elem_emit, cTag='CEP') + '
' + cEnd += 'Fone: ' + format_telefone(tagtext( + oNode=elem_emit, cTag='fone')) + + self._drawCenteredParagraph(cEnd) + self.drawLine() + + def danfce_information(self): + self.drawTitle( + "DANFE NFC-e - Documento Auxiliar da Nota Fiscal de", + 7, 'NimbusSanL-Bold') + + self.drawTitle("Consumidor Eletrônica", 7, 'NimbusSanL-Bold') + + self.drawString( + "NFC-e não permite aproveitamento de crédito de ICMS", True) + self.drawLine() + + def produtos(self, oXML=None, el_det=None, oPaginator=None, + list_desc=None, list_cod_prod=None): + + rows = [['Codigo', 'Descricao', 'Qtde', 'Un', 'Vl Unit', 'Vl Total']] + colWidths = (25, 90, 15, 15, 25, 25) + rowHeights = [7] + + for id in range(oPaginator[0], oPaginator[1]): + + item = el_det[id] + el_prod = item.find(".//{http://www.portalfiscal.inf.br/nfe}prod") + + cod = tagtext(oNode=el_prod, cTag='cProd') + descricao = tagtext(oNode=el_prod, cTag='xProd') + Un = tagtext(oNode=el_prod, cTag='uCom') + qtde = format_number(tagtext(oNode=el_prod, cTag='qCom'), + precision=2) + vl_unit = format_number(tagtext(oNode=el_prod, cTag='vUnCom'), + precision=2) + vl_total = format_number( + tagtext(oNode=el_prod, cTag='vProd'), precision=2) + + new_row = [cod, descricao, qtde, Un, vl_unit, vl_total] + + rows.append(new_row) + rowHeights.append(self.current_font_size + 2) + + self._draw_product_table(rows, colWidths, rowHeights) + + def _draw_product_table(self, rows, colWidths, rowHeights): + table = Table(rows, colWidths, tuple(rowHeights)) + table.setStyle(TableStyle([ + ('FONTSIZE', (0, 0), (-1, -1), 7), + ('FONT', (0, 1), (-1, -1), 'NimbusSanL-Regu'), + ('FONT', (0, 0), (-1, 0), 'NimbusSanL-Bold'), + ('ALIGN', (0, 0), (-1, 0), "LEFT"), + ('ALIGN', (1, 0), (-1, 0), "LEFT"), + ('ALIGN', (2, 0), (-1, 0), "CENTER"), + ('ALIGN', (3, 0), (-1, 0), "CENTER"), + ('ALIGN', (0, 1), (-1, -1), "LEFT"), + ('ALIGN', (1, 1), (-1, -1), "LEFT"), + ('ALIGN', (2, 1), (-1, -1), "CENTER"), + ('ALIGN', (3, 1), (-1, -1), "CENTER"), + ])) + + w, h = table.wrapOn(self.canvas, 200, 450) + table.drawOn(self.canvas, 0, self.current_height - (h * 1.2)) + self.current_height -= (h * 1.1) + + def totais(self, oXML=None): + # Impostos + el_total = oXML.find(".//{http://www.portalfiscal.inf.br/nfe}total") + + total_tributo = format_number(tagtext(oNode=el_total, cTag='vTotTrib'), + precision=2) + valor_total = format_number(tagtext(oNode=el_total, cTag='vProd'), + precision=2) + desconto = format_number(tagtext(oNode=el_total, cTag='vDesc'), + precision=2) + valor_a_pagar = format_number(tagtext(oNode=el_total, cTag='vNF'), + precision=2) + el_pag = oXML.find(".//{http://www.portalfiscal.inf.br/nfe}pag") + troco = format_number(tagtext(oNode=el_pag, cTag="vTroco")) + + payment_method_list = {'01': 'Dinheiro', + '02': 'Cheque', + '03': 'Cartão de Crédito', + '04': 'Cartão de Débito', + "05": "Crédito Loja", + '10': 'Vale Alimentação', + '11': 'Vale Refeição', + '12': 'Vale Presente', + '13': 'Vale Combustível', + '14': 'Duplicata Mercantil', + '15': 'Boleto Bancario', + '90': 'Sem Pagamento', + '99': 'Outros'} + quant_produtos = len(oXML.findall( + ".//{http://www.portalfiscal.inf.br/nfe}det")) + + payment_methods = [] + + for pagId, item in enumerate(el_pag): + if 'tPag' not in item.tag: + continue + + payment = [] + method = payment_method_list[item.text] + + payment.append(method) + payment.append(format_number(item.getnext().text, precision=2)) + payment_methods.append(payment) + + values = {'quantidade_itens': quant_produtos, + 'total_tributo': total_tributo, + 'valor_total': valor_total, + 'desconto': desconto, + 'valor_a_pagar': valor_a_pagar, + 'formas_de_pagamento': payment_methods, + 'troco': troco, + } + + self.draw_totals_table(values) + + self.drawLine() + + def draw_totals_table(self, values): + rowHeights = [7, 7, 7, 7, 10] + data = [['QTD.TOTAL DE ITENS', values['quantidade_itens']], + ['VALOR TOTAL R$', values['valor_total']], + ['DESCONTO R$', values['desconto']], + ['VALOR A PAGAR R$', values['valor_a_pagar']], + ['FORMA DE PAGAMENTO', 'VALOR PAGO R$'], + ] + + for item in values['formas_de_pagamento']: + data.append([item[0], item[1]]) + rowHeights.append(7) + data.append(['TROCO', format_number(values['troco'], precision=2)]) + rowHeights.append(7) + + table2 = Table(data, colWidths=(150, 50), rowHeights=tuple(rowHeights)) + table2.setStyle(TableStyle([ + ('FONTSIZE', (0, 0), (-1, -1), 7), + ('FONT', (0, 0), (1, -1), 'NimbusSanL-Regu'), + ('FONT', (0, 4), (1, 4), 'NimbusSanL-Bold'), + ('ALIGN', (1, 0), (1, -1), "RIGHT") + ])) + w, h = table2.wrapOn(self.canvas, 200, 450) + table2.drawOn(self.canvas, 0, self.current_height - (h * 1.1)) + self.current_height -= h + + def inf_authentication(self, oXML=None): + el_infNFe = oXML.find(".//{http://www.portalfiscal.inf.br/nfe}infNFe") + # n nfce, serie e data de solicitacao + el_ide = oXML.find(".//{http://www.portalfiscal.inf.br/nfe}ide") + + el_NFeSupl = oXML.find( + ".//{http://www.portalfiscal.inf.br/nfe}infNFeSupl") + + el_dest = el_infNFe.find(".//{http://www.portalfiscal.inf.br/nfe}dest") + # chave, n protocolo, data autorizacao + el_prot_nfe = oXML.find( + ".//{http://www.portalfiscal.inf.br/nfe}protNFe") + + el_infAdic = oXML.find( + ".//{http://www.portalfiscal.inf.br/nfe}infAdic") + + url_chave = tagtext(oNode=el_NFeSupl, cTag='urlChave') + access_key = tagtext(oNode=el_prot_nfe, cTag="chNFe") + + frase_chave_acesso = 'Consulte pela Chave de Acesso em:
\ +%s
%s' % (url_chave, access_key) + + qrcode = tagtext(oNode=el_NFeSupl, cTag='qrCode') + + cnpj = tagtext(oNode=el_dest, cTag='CNPJ') + cpf = tagtext(oNode=el_dest, cTag='CPF') + if cnpj: + cnpj_cpf = format_cnpj_cpf(cnpj) + cnpj_cpf = "CONSUMIDOR CNPJ: %s" % (cnpj) + elif cpf: + cnpj_cpf = format_cnpj_cpf(cpf) + cnpj_cpf = "CONSUMIDOR CPF: %s" % (cpf) + else: + cnpj_cpf = u"CONSUMIDOR NÃO IDENTIFICADO" + + nNFC = tagtext(oNode=el_ide, cTag="nNF") + serie = tagtext(oNode=el_ide, cTag='serie') + + dataSolicitacao = getdateUTC(tagtext(oNode=el_ide, cTag="dhEmi")) + dataSolicitacao = dataSolicitacao[0] + " " + dataSolicitacao[1] + + numProtocolo = tagtext(oNode=el_prot_nfe, cTag="nProt") + + dataAutorizacao = getdateUTC(tagtext(oNode=el_prot_nfe, + cTag='dhRecbto')) + dataAutorizacao = dataAutorizacao[0] + " " + dataAutorizacao[1] + + text = u"%s
%s
NFC-e nº%s Série %s %s
\ +Protocolo de autorização: %s
Data de autorização %s
\ +" % (frase_chave_acesso, cnpj_cpf, nNFC, serie, dataSolicitacao, + numProtocolo, dataAutorizacao) + + self._drawCenteredParagraph(text) + + self.draw_qr_code(qrcode) + + infAdFisco = tagtext(oNode=el_infAdic, cTag='infAdFisco') + self._drawCenteredParagraph(infAdFisco) + + infCpl = tagtext(oNode=el_infAdic, cTag='infCpl') + self._drawCenteredParagraph(infCpl) + + def _drawCenteredParagraph(self, text): + + style = ParagraphStyle( + name='Normal', + fontName='NimbusSanL-Regu', + fontSize=7, + alignment=TA_CENTER, + leading=7, + ) + + paragraph = Paragraph(text, style=style) + w, h = paragraph.wrapOn(self.canvas, 180, 300) + paragraph.drawOn(self.canvas, 10, self.current_height - h) + self.current_height -= (h*1.1) + + def drawString(self, string, centered=False): + if centered: + self.canvas.drawCentredString( + self.max_width / 2, self.current_height, string) + self.current_height -= self.current_font_size + else: + self.canvas.drawString(self.min_width, self.current_height, string) + self.current_height -= self.current_font_size + + def drawTitle(self, string, size, font='NimbusSanL-Regu'): + self.canvas.setFont(font, size) + self.canvas.drawCentredString( + self.max_width / 2, self.current_height, string) + self.current_height -= self.current_font_size + self.canvas.setFont(self.current_font_name, self.current_font_size) + + def drawLine(self): + self.canvas.line(self.min_width, self.current_height, + self.max_width, self.current_height) + self.current_height -= self.current_font_size + + def draw_qr_code(self, string): + qr_code = qr.QrCodeWidget(string) + drawing = Drawing(23 * mm, 23 * mm) + drawing.add(qr_code) + renderPDF.draw(drawing, self.canvas, 20 * mm, self.current_height - 85) + self.current_height -= 85 + + def newpage(self): + self.current_height = self.max_height + self.Page += 1 + self.canvas.showPage() + + def nfce_generate(self): + for oXML in self.list_xml: + oXML_cobr = oXML.find( + ".//{http://www.portalfiscal.inf.br/nfe}cobr") + + self.NrPages = 1 + self.Page = 1 + + # Calculando total linhas usadas para descrições dos itens + # Com bloco fatura, apenas 29 linhas para itens na primeira folha + nNr_Lin_Pg_1 = 34 if oXML_cobr is None else 30 + # [ rec_ini , rec_fim , lines , limit_lines ] + oPaginator = [[0, 0, 0, nNr_Lin_Pg_1]] + el_det = oXML.findall(".//{http://www.portalfiscal.inf.br/nfe}det") + if el_det is not None: + list_desc = [] + list_cod_prod = [] + nPg = 0 + for nId, item in enumerate(el_det): + el_prod = item.find( + ".//{http://www.portalfiscal.inf.br/nfe}prod") + infAdProd = item.find( + ".//{http://www.portalfiscal.inf.br/nfe}infAdProd") + + list_ = wrap(tagtext(oNode=el_prod, cTag='xProd'), 56) + if infAdProd is not None: + list_.extend(wrap(infAdProd.text, 56)) + list_desc.append(list_) + + list_cProd = wrap(tagtext(oNode=el_prod, cTag='cProd'), 14) + list_cod_prod.append(list_cProd) + + # Nr linhas necessárias p/ descrição item + nLin_Itens = len(list_) + + if (oPaginator[nPg][2] + nLin_Itens) >= oPaginator[nPg][3]: + oPaginator.append([0, 0, 0, 77]) + nPg += 1 + oPaginator[nPg][0] = nId + oPaginator[nPg][1] = nId + 1 + oPaginator[nPg][2] = nLin_Itens + else: + # adiciona-se 1 pelo funcionamento de xrange + oPaginator[nPg][1] = nId + 1 + oPaginator[nPg][2] += nLin_Itens + + self.NrPages = len(oPaginator) # Calculando nr. páginas + + self.ide_emit(oXML=oXML) + # self.destinatario(oXML=oXML) + self.danfce_information() + + self.produtos(oXML=oXML, el_det=el_det, oPaginator=oPaginator[0], + list_desc=list_desc, list_cod_prod=list_cod_prod) + + self.drawLine() + + self.totais(oXML=oXML) + + self.inf_authentication(oXML=oXML) + + # Gera o restante das páginas do XML + for oPag in oPaginator[1:]: + if oPag: + self.newpage() + self.ide_emit(oXML=oXML) + # self.destinatario(oXML=oXML) + self.produtos(oXML=oXML, el_det=el_det, oPaginator=oPag, + list_desc=list_desc, + list_cod_prod=list_cod_prod) + self.totais(oXML=oXML) + self.inf_authentication(oXML=oXML) + + self.newpage() + + self.canvas.save() + + def writeto_pdf(self, fileObj): + pdf_out = self.oPDF_IO.getvalue() + self.oPDF_IO.close() + fileObj.write(pdf_out) From 4f25b76ec86b570d4a363b6a1c1888bd00ece3f4 Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Wed, 28 Mar 2018 21:02:26 -0300 Subject: [PATCH 10/33] Ajuste na url do qrcode amazonas --- pytrustnfe/Servidores.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pytrustnfe/Servidores.py b/pytrustnfe/Servidores.py index 20d7a37..beef15f 100644 --- a/pytrustnfe/Servidores.py +++ b/pytrustnfe/Servidores.py @@ -339,7 +339,7 @@ UFAM = { WS_NFE_INUTILIZACAO: 'nfce-services-nac/services/NfeInutilizacao2', WS_NFE_CONSULTA: 'nfce-services-nac/services/NfeConsulta2', WS_NFE_SITUACAO: 'nfce-services-nac/services/NfeStatusServico2', - WS_NFCE_QR_CODE: 'homnfce.sefaz.am.gov.br/nfceweb/consultarNFCe.jsp', + WS_NFCE_QR_CODE: 'https://homnfce.sefaz.am.gov.br/nfceweb/consultarNFCe.jsp', } } } From b474ec99136650e3abaf50e22535ee984447ce90 Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Thu, 29 Mar 2018 22:09:23 -0300 Subject: [PATCH 11/33] =?UTF-8?q?Pequenos=20ajustes=20na=20impress=C3=A3o?= =?UTF-8?q?=20do=20danfce?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pytrustnfe/Servidores.py | 2 +- pytrustnfe/nfe/danfce.py | 24 ++++++++++++++---------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/pytrustnfe/Servidores.py b/pytrustnfe/Servidores.py index beef15f..0ddc8d4 100644 --- a/pytrustnfe/Servidores.py +++ b/pytrustnfe/Servidores.py @@ -339,7 +339,7 @@ UFAM = { WS_NFE_INUTILIZACAO: 'nfce-services-nac/services/NfeInutilizacao2', WS_NFE_CONSULTA: 'nfce-services-nac/services/NfeConsulta2', WS_NFE_SITUACAO: 'nfce-services-nac/services/NfeStatusServico2', - WS_NFCE_QR_CODE: 'https://homnfce.sefaz.am.gov.br/nfceweb/consultarNFCe.jsp', + WS_NFCE_QR_CODE: 'http://homnfce.sefaz.am.gov.br/nfceweb/consultarNFCe.jsp', } } } diff --git a/pytrustnfe/nfe/danfce.py b/pytrustnfe/nfe/danfce.py index 21cd50b..e245ada 100644 --- a/pytrustnfe/nfe/danfce.py +++ b/pytrustnfe/nfe/danfce.py @@ -2,6 +2,7 @@ # © 2017 Johny Chen Jy, Trustcode # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +import re from textwrap import wrap from io import BytesIO @@ -56,15 +57,16 @@ def get_image(path, width=1 * cm): return Image(path, width=width, height=(width * aspect)) -def format_telefone(numero_telefone): - if len(numero_telefone) == 10: - telefone = '(%s) %s-%s' % (numero_telefone[0:2], - numero_telefone[2:6], - numero_telefone[6:]) - else: - telefone = '(%s) %s-%s' % (numero_telefone[0:2], - numero_telefone[2:7], - numero_telefone[7:]) +def format_telefone(telefone): + telefone = re.sub('[^0-9]', '', telefone) + if len(telefone) == 10: + telefone = '(%s) %s-%s' % (telefone[0:2], + telefone[2:6], + telefone[6:]) + elif len(telefone) == 11: + telefone = '(%s) %s-%s' % (telefone[0:2], + telefone[2:7], + telefone[7:]) return telefone @@ -134,7 +136,7 @@ class danfce(object): def produtos(self, oXML=None, el_det=None, oPaginator=None, list_desc=None, list_cod_prod=None): - rows = [['Codigo', 'Descricao', 'Qtde', 'Un', 'Vl Unit', 'Vl Total']] + rows = [['Cód', 'Descrição', 'Qtde', 'Un', 'Unit.', 'Total']] colWidths = (25, 90, 15, 15, 25, 25) rowHeights = [7] @@ -145,7 +147,9 @@ class danfce(object): cod = tagtext(oNode=el_prod, cTag='cProd') descricao = tagtext(oNode=el_prod, cTag='xProd') + descricao = (descricao[:20] + '..') if len(descricao) > 20 else descricao Un = tagtext(oNode=el_prod, cTag='uCom') + Un = (Un[:2]) if len(Un) > 2 else Un qtde = format_number(tagtext(oNode=el_prod, cTag='qCom'), precision=2) vl_unit = format_number(tagtext(oNode=el_prod, cTag='vUnCom'), From 8f4cf56a29c0b60f3bd441467a3e2ffa3b0f6071 Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Mon, 14 May 2018 15:36:55 -0300 Subject: [PATCH 12/33] =?UTF-8?q?Adi=C3=A7=C3=A3o=20das=20tags=20do=20ve?= =?UTF-8?q?=C3=ADculo=20de=20transporte=20no=20danfe?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pytrustnfe/nfe/danfe.py | 8 ++++++++ setup.py | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/pytrustnfe/nfe/danfe.py b/pytrustnfe/nfe/danfe.py index 6561538..5b578bc 100644 --- a/pytrustnfe/nfe/danfe.py +++ b/pytrustnfe/nfe/danfe.py @@ -584,6 +584,8 @@ obsCont[@xCampo='NomeVendedor']") def transportes(self, oXML=None): el_transp = oXML.find(".//{http://www.portalfiscal.inf.br/nfe}transp") + veic_transp = oXML.find( + ".//{http://www.portalfiscal.inf.br/nfe}veicTransp") nMr = self.width - self.nRight self.canvas.setFont('NimbusSanL-Bold', 7) @@ -627,6 +629,12 @@ obsCont[@xCampo='NomeVendedor']") tagtext(oNode=el_transp, cTag='xNome')[:40]) self.string(self.nLeft + 71, self.nlin + 7.7, self.oFrete[tagtext(oNode=el_transp, cTag='modFrete')]) + self.string(self.nLeft + 99, self.nlin + 7.7, + tagtext(oNode=el_transp, cTag='RNTC')) + self.string(self.nLeft + 116, self.nlin + 7.7, + tagtext(oNode=el_transp, cTag='placa')) + self.string(self.nLeft + 142, self.nlin + 7.7, + tagtext(oNode=veic_transp, cTag='UF')) self.string(nMr - 39, self.nlin + 7.7, format_cnpj_cpf(tagtext(oNode=el_transp, cTag='CNPJ'))) self.string(self.nLeft + 1, self.nlin + 14.2, diff --git a/setup.py b/setup.py index c5686a4..ddf92cc 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages -VERSION = "0.9.21" +VERSION = "0.9.22" setup( From 44bcedc33ba025eae1ffcb0d4b54a0d8c200e79a Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Mon, 14 May 2018 19:44:43 -0300 Subject: [PATCH 13/33] =?UTF-8?q?Realiza=20a=20convers=C3=A3o=20do=20retor?= =?UTF-8?q?no=20corretamente=20com=20decode=20-=20BH?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pytrustnfe/nfse/bh/__init__.py | 4 ++-- setup.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pytrustnfe/nfse/bh/__init__.py b/pytrustnfe/nfse/bh/__init__.py index c5f246b..f96f89c 100644 --- a/pytrustnfe/nfse/bh/__init__.py +++ b/pytrustnfe/nfse/bh/__init__.py @@ -56,8 +56,8 @@ def _send(certificado, method, **kwargs): response, obj = sanitize_response(response.encode('utf-8')) return { - 'sent_xml': str(xml_send), - 'received_xml': str(response), + 'sent_xml': xml_send, + 'received_xml': response.decode('utf-8'), 'object': obj } diff --git a/setup.py b/setup.py index ddf92cc..a9a30f7 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages -VERSION = "0.9.22" +VERSION = "0.9.23" setup( From 966ba5f795ebaac6a13c601bead7248233a645fe Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Mon, 21 May 2018 13:11:57 -0300 Subject: [PATCH 14/33] [FIX] XML NFSe maringa and percent difal --- pytrustnfe/nfe/templates/NfeAutorizacao.xml | 2 +- pytrustnfe/nfse/mga/__init__.py | 82 +++++++++++++++++++++++ pytrustnfe/nfse/mga/assinatura.py | 44 +++++++++++++ pytrustnfe/nfse/mga/templates/CancelarNfse.xml | 13 ++++ pytrustnfe/nfse/mga/templates/GerarNfse.xml | 11 ++++ pytrustnfe/nfse/mga/templates/Rps.xml | 91 ++++++++++++++++++++++++++ setup.py | 3 +- 7 files changed, 244 insertions(+), 2 deletions(-) create mode 100644 pytrustnfe/nfse/mga/__init__.py create mode 100644 pytrustnfe/nfse/mga/assinatura.py create mode 100644 pytrustnfe/nfse/mga/templates/CancelarNfse.xml create mode 100644 pytrustnfe/nfse/mga/templates/GerarNfse.xml create mode 100644 pytrustnfe/nfse/mga/templates/Rps.xml diff --git a/pytrustnfe/nfe/templates/NfeAutorizacao.xml b/pytrustnfe/nfe/templates/NfeAutorizacao.xml index d2d82e4..f7c6395 100644 --- a/pytrustnfe/nfe/templates/NfeAutorizacao.xml +++ b/pytrustnfe/nfe/templates/NfeAutorizacao.xml @@ -608,7 +608,7 @@ {{ imposto.ICMSUFDest.vBCUFDest }} {{ imposto.ICMSUFDest.pFCPUFDest }} - {{ imposto.ICMSUFDest.pICMSInter }} + {{ imposto.ICMSUFDest.pICMSUFDest }} {{ imposto.ICMSUFDest.pICMSInter }} {{ imposto.ICMSUFDest.pICMSInterPart }} {{ imposto.ICMSUFDest.vFCPUFDest }} diff --git a/pytrustnfe/nfse/mga/__init__.py b/pytrustnfe/nfse/mga/__init__.py new file mode 100644 index 0000000..a3d207f --- /dev/null +++ b/pytrustnfe/nfse/mga/__init__.py @@ -0,0 +1,82 @@ +# © 2018 Danimar Ribeiro, Trustcode +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import os +from lxml import etree +from requests import Session +from zeep import Client +from zeep.transports import Transport + +from pytrustnfe.certificado import extract_cert_and_key_from_pfx, save_cert_key +from pytrustnfe.xml import render_xml, sanitize_response +from pytrustnfe.nfse.mga.assinatura import Assinatura + + +def _render(certificado, method, **kwargs): + path = os.path.join(os.path.dirname(__file__), 'templates') + xml_send = render_xml(path, '%s.xml' % method, True, **kwargs) + + reference = '' + if method == 'GerarNfse': + reference = 'rps:%s' % kwargs['rps']['numero'] + ref_lote = 'lote%s' % kwargs['rps']['numero_lote'] + elif method == 'CancelarNfse': + reference = 'Cancelamento_NF%s' % kwargs['cancelamento']['numero_nfse'] + + signer = Assinatura(certificado.pfx, certificado.password) + xml_send = signer.assina_xml(xml_send, reference) + xml_send = signer.assina_xml(etree.fromstring(xml_send), ref_lote) + return xml_send.encode('utf-8') + + +def _send(certificado, method, **kwargs): + base_url = '' + if kwargs['ambiente'] == 'producao': + base_url = 'https://isse.maringa.gov.br/ws/?wsdl' + else: + base_url = 'https://isseteste.maringa.gov.br/ws/?wsdl' + + xml_send = kwargs["xml"].decode('utf-8') + xml_cabecalho = '\ + \ + 1.00' + + cert, key = extract_cert_and_key_from_pfx( + certificado.pfx, certificado.password) + cert, key = save_cert_key(cert, key) + + session = Session() + session.cert = (cert, key) + session.verify = False + transport = Transport(session=session) + + client = Client(base_url, transport=transport) + + response = client.service[method](xml_cabecalho, xml_send) + + response, obj = sanitize_response(response.encode('utf-8')) + return { + 'sent_xml': str(xml_send), + 'received_xml': str(response), + 'object': obj + } + + +def xml_gerar_nfse(certificado, **kwargs): + return _render(certificado, 'GerarNfse', **kwargs) + + +def gerar_nfse(certificado, **kwargs): + if "xml" not in kwargs: + kwargs['xml'] = xml_gerar_nfse(certificado, **kwargs) + return _send(certificado, 'GerarNfse', **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) diff --git a/pytrustnfe/nfse/mga/assinatura.py b/pytrustnfe/nfse/mga/assinatura.py new file mode 100644 index 0000000..1831379 --- /dev/null +++ b/pytrustnfe/nfse/mga/assinatura.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +# © 2016 Danimar Ribeiro, Trustcode +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import signxml +from lxml import etree +from pytrustnfe.certificado import extract_cert_and_key_from_pfx +from signxml import XMLSigner + + +class Assinatura(object): + + def __init__(self, arquivo, senha): + self.arquivo = arquivo + self.senha = senha + + def assina_xml(self, xml_element, reference): + cert, key = extract_cert_and_key_from_pfx(self.arquivo, self.senha) + + for element in xml_element.iter("*"): + if element.text is not None and not element.text.strip(): + element.text = None + + signer = XMLSigner( + method=signxml.methods.enveloped, signature_algorithm="rsa-sha1", + digest_algorithm='sha1', + c14n_algorithm='http://www.w3.org/TR/2001/REC-xml-c14n-20010315') + + ns = {} + ns[None] = signer.namespaces['ds'] + signer.namespaces = ns + + ref_uri = ('#%s' % reference) if reference else None + signed_root = signer.sign( + xml_element, key=key.encode(), cert=cert.encode(), + reference_uri=ref_uri) + if reference: + element_signed = signed_root.find(".//*[@Id='%s']" % reference) + signature = signed_root.find(".//*[@URI='#%s']" % reference).getparent().getparent() + + if element_signed is not None and signature is not None: + parent = element_signed.getparent() + parent.append(signature) + return etree.tostring(signed_root, encoding=str) diff --git a/pytrustnfe/nfse/mga/templates/CancelarNfse.xml b/pytrustnfe/nfse/mga/templates/CancelarNfse.xml new file mode 100644 index 0000000..137897e --- /dev/null +++ b/pytrustnfe/nfse/mga/templates/CancelarNfse.xml @@ -0,0 +1,13 @@ + + + + + {{ cancelamento.numero_nfse }} + {{ cancelamento.cnpj_prestador }} + {{ cancelamento.inscricao_municipal }} + {{ cancelamento.cidade }} + + 1 + + + diff --git a/pytrustnfe/nfse/mga/templates/GerarNfse.xml b/pytrustnfe/nfse/mga/templates/GerarNfse.xml new file mode 100644 index 0000000..6b35d4d --- /dev/null +++ b/pytrustnfe/nfse/mga/templates/GerarNfse.xml @@ -0,0 +1,11 @@ + + + {{ rps.numero_lote }} + {{ rps.prestador.cnpj }} + {{ rps.prestador.inscricao_municipal }} + 1 + + {% include 'Rps.xml' %} + + + diff --git a/pytrustnfe/nfse/mga/templates/Rps.xml b/pytrustnfe/nfse/mga/templates/Rps.xml new file mode 100644 index 0000000..0dfd0cf --- /dev/null +++ b/pytrustnfe/nfse/mga/templates/Rps.xml @@ -0,0 +1,91 @@ + + + + {{ rps.numero }} + {{ rps.serie }} + {{ rps.tipo_rps }} + + {{ rps.data_emissao }} + {{ rps.natureza_operacao }} + {{ rps.regime_tributacao }} + {{ rps.optante_simples }} + {{ rps.incentivador_cultural }} + {{ rps.status }} + + {{ rps.numero_substituido }} + {{ rps.serie_substituido }} + {{ rps.tipo_substituido }} + + + + {{ rps.valor_servico }} + {{ rps.valor_deducao }} + {{ rps.valor_pis }} + {{ rps.valor_cofins }} + {{ rps.valor_inss }} + {{ rps.valor_ir }} + {{ rps.valor_csll }} + {{ rps.iss_retido }} + {{ rps.valor_iss }} + {{ rps.valor_iss_retido }} + {{ rps.outras_retencoes }} + {{ rps.base_calculo }} + {{ rps.aliquota_issqn }} + {{ rps.valor_liquido_nfse }} + {{ rps.desconto_incondicionado }} + {{ rps.desconto_condicionado }} + + {{ rps.codigo_servico }} + {{ rps.cnae_servico }} + {{ rps.codigo_tributacao_municipio }} + {{ rps.descricao }} + {{ rps.codigo_municipio }} + + + {{ rps.prestador.cnpj }} + {{ rps.prestador.inscricao_municipal }} + + + + + {% if rps.tomador.cnpj_cpf|length == 14 %} + {{ rps.tomador.cnpj_cpf }} + {% endif %} + {% if rps.tomador.cnpj_cpf|length == 11 %} + {{ rps.tomador.cnpj_cpf }} + {% endif %} + + {{ rps.tomador.inscricao_municipal }} + + {{ rps.tomador.razao_social }} + + {{ rps.tomador.logradouro }} + {{ rps.tomador.numero }} + {{ rps.tomador.complemento }} + {{ rps.tomador.bairro }} + {{ rps.tomador.cidade }} + {{ rps.tomador.uf }} + {{ rps.tomador.cep }} + + + {{ rps.tomador.telefone }} + {{ rps.tomador.email }} + + + {% if rps.intermediario is defined -%} + + {{ rps.intermediario.razao_social }} + + {{ rps.intermediario.cnpj }} + + {{ rps.intermediario.inscricao_municipal }} + + {% endif %} + {% if rps.construcao_civil is defined -%} + + {{ rps.construcao_civil.codigo_obra }} + {{ rps.construcao_civil.art }} + + {% endif %} + + diff --git a/setup.py b/setup.py index a9a30f7..9337653 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages -VERSION = "0.9.23" +VERSION = "0.9.24" setup( @@ -38,6 +38,7 @@ later (LGPLv2+)', 'nfse/floripa/templates/*xml', 'nfse/carioca/templates/*xml', 'nfse/bh/templates/*xml', + 'nfse/mga/templates/*xml', 'xml/schemas/*xsd', ]}, url='https://github.com/danimaribeiro/PyTrustNFe', From cbf17ee87d98c17803a175c7bb14a60ccc2698b2 Mon Sep 17 00:00:00 2001 From: "Carlos R. Silveira" Date: Thu, 7 Jun 2018 16:35:08 -0300 Subject: [PATCH 15/33] Adicionado campos novos da Nfe 4.0 --- pytrustnfe/nfe/templates/NfeAutorizacao.xml | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/pytrustnfe/nfe/templates/NfeAutorizacao.xml b/pytrustnfe/nfe/templates/NfeAutorizacao.xml index f7c6395..80402cf 100644 --- a/pytrustnfe/nfe/templates/NfeAutorizacao.xml +++ b/pytrustnfe/nfe/templates/NfeAutorizacao.xml @@ -1,15 +1,14 @@ - + {{ idLote }} {{ indSinc }} {% for NFe in NFes %} - + {% with ide = NFe.infNFe.ide %} {{ ide.cUF }} {{ ide.cNF }} {{ ide.natOp }} - {{ ide.indPag }} {{ ide.mod }} {{ ide.serie }} {{ ide.nNF }} @@ -614,6 +613,16 @@ {{ imposto.ICMSUFDest.vFCPUFDest }} {{ imposto.ICMSUFDest.vICMSUFDest }} {{ imposto.ICMSUFDest.vICMSUFRemet }} + {{ imposto.ICMSUFDest.vBCFCP }} + {{ imposto.ICMSUFDest.pFCP }} + {{ imposto.ICMSUFDest.pFCP }} + {{ imposto.ICMSUFDest.vBCFCPST }} + {{ imposto.ICMSUFDest.pFCPST }} + {{ imposto.ICMSUFDest.vFCPST }} + {{ imposto.ICMSUFDest.pFCPSTRet }} + {{ imposto.ICMSUFDest.vFCPSTRet }} + {{ imposto.ICMSUFDest.pST }} + {{ imposto.ICMSUFDest.vBCFCPUFDest }} {% endif %} {% endwith %} @@ -647,8 +656,12 @@ {{ total.vDesc }} {{ total.vII }} {{ total.vIPI }} + {{ total.vIPIDevol }} {{ total.vPIS }} {{ total.vCOFINS }} + {{ total.vFCP }} + {{ total.vFCPST }} + {{ total.vFCPSTRet }} {{ total.vOutro }} {{ total.vNF }} {{ total.vTotTrib }} From 3180759fd92ccbe3aa4f5f186dd6e838ede1e69e Mon Sep 17 00:00:00 2001 From: "Carlos R. Silveira" Date: Sat, 9 Jun 2018 15:26:33 -0300 Subject: [PATCH 16/33] =?UTF-8?q?Ajustando=20conforme=20valida=C3=A7=C3=A3?= =?UTF-8?q?o.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pytrustnfe/nfe/templates/NfeAutorizacao.xml | 42 ++++++++++++++++------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/pytrustnfe/nfe/templates/NfeAutorizacao.xml b/pytrustnfe/nfe/templates/NfeAutorizacao.xml index 80402cf..89f6eac 100644 --- a/pytrustnfe/nfe/templates/NfeAutorizacao.xml +++ b/pytrustnfe/nfe/templates/NfeAutorizacao.xml @@ -360,12 +360,18 @@ {{ imposto.ICMS.pRedBC }} {{ imposto.ICMS.pICMS }} {{ imposto.ICMS.vICMS }} + {{ imposto.ICMS.vBCFCP }} + {{ imposto.ICMS.pFCP }} + {{ imposto.ICMS.pFCP }} {{ imposto.ICMS.modBCST }} {{ imposto.ICMS.pMVAST }} {{ imposto.ICMS.pRedBCST }} {{ imposto.ICMS.vBCST }} {{ imposto.ICMS.pICMSST }} {{ imposto.ICMS.vICMSST }} + {{ imposto.ICMS.vBCFCPST }} + {{ imposto.ICMS.pFCPST }} + {{ imposto.ICMS.vFCPST }} {{ imposto.ICMS.vICMSDeson }} {{ imposto.ICMS.motDesICMS }} @@ -379,14 +385,21 @@ {{ imposto.ICMSPart.pRedBC }} {{ imposto.ICMSPart.pICMS }} {{ imposto.ICMSPart.vICMS }} + {{ imposto.ICMS.vBCST }} {{ imposto.ICMSPart.modBCST }} {{ imposto.ICMSPart.pMVAST }} {{ imposto.ICMSPart.pRedBCST }} - {{ imposto.ICMSPart.vBCST }} - {{ imposto.ICMSPart.pICMSST }} - {{ imposto.ICMSPart.vICMSST }} {{ imposto.ICMSPart.pBCOp }} {{ imposto.ICMSPart.UFST }} + {{ imposto.ICMSPart.pFCP }} + {{ imposto.ICMSPart.pFCP }} + {{ imposto.ICMSPart.vBCFCP }} + {{ imposto.ICMSPart.vBCFCPST }} + {{ imposto.ICMSPart.pFCPST }} + {{ imposto.ICMSPart.vFCPST }} + {{ imposto.ICMSPart.pFCPSTRet }} + {{ imposto.ICMSPart.vFCPSTRet }} + {{ imposto.ICMSPart.pST }} {% endif %} {% if imposto.ICMSST is defined -%} @@ -613,15 +626,6 @@ {{ imposto.ICMSUFDest.vFCPUFDest }} {{ imposto.ICMSUFDest.vICMSUFDest }} {{ imposto.ICMSUFDest.vICMSUFRemet }} - {{ imposto.ICMSUFDest.vBCFCP }} - {{ imposto.ICMSUFDest.pFCP }} - {{ imposto.ICMSUFDest.pFCP }} - {{ imposto.ICMSUFDest.vBCFCPST }} - {{ imposto.ICMSUFDest.pFCPST }} - {{ imposto.ICMSUFDest.vFCPST }} - {{ imposto.ICMSUFDest.pFCPSTRet }} - {{ imposto.ICMSUFDest.vFCPSTRet }} - {{ imposto.ICMSUFDest.pST }} {{ imposto.ICMSUFDest.vBCFCPUFDest }} {% endif %} @@ -648,8 +652,11 @@ {{ total.vFCPUFDest }} {{ total.vICMSUFDest }} {{ total.vICMSUFRemet }} + {{ total.vFCP }} {{ total.vBCST }} {{ total.vST }} + {{ total.vFCPST }} + {{ total.vFCPSTRet }} {{ total.vProd }} {{ total.vFrete }} {{ total.vSeg }} @@ -659,9 +666,6 @@ {{ total.vIPIDevol }} {{ total.vPIS }} {{ total.vCOFINS }} - {{ total.vFCP }} - {{ total.vFCPST }} - {{ total.vFCPSTRet }} {{ total.vOutro }} {{ total.vNF }} {{ total.vTotTrib }} @@ -762,8 +766,8 @@ {% endif %} {% endif %} - {% if NFe.infNFe.pag is defined %} - {% for pag in NFe.infNFe.pag %} + {{ pag.tPag }} {{ pag.vPag }} @@ -775,8 +779,8 @@ {% endif %} - {% endfor %} - {% endif %} + {{ NFe.infNFe.infAdic.infAdFisco|normalize|escape }} {{ NFe.infNFe.infAdic.infCpl|normalize|escape }} From f4bcbb071c93936716e8970eff60f49999f0e783 Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Thu, 14 Jun 2018 23:34:59 -0300 Subject: [PATCH 17/33] =?UTF-8?q?[WIP]=20Finaliza=C3=A7=C3=A3o=20do=20layo?= =?UTF-8?q?ut=20do=20xml,=20usando=20zeep=20para=20fazer=20chamada=20SOAP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pytrustnfe/Servidores.py | 353 +- pytrustnfe/nfe/__init__.py | 49 +- pytrustnfe/nfe/comunicacao.py | 4 +- pytrustnfe/nfe/templates/NfeAutorizacao.xml | 102 +- pytrustnfe/nfe/templates/NfeInutilizacao.xml | 2 +- pytrustnfe/nfe/templates/NfeRetAutorizacao.xml | 2 +- pytrustnfe/nfe/templates/NfeStatusServico.xml | 4 +- pytrustnfe/xml/schemas/enviNFe_v4.00.xsd | 9 + pytrustnfe/xml/schemas/leiauteNFe_v4.00.xsd | 6427 ++++++++++++++++++++++++ pytrustnfe/xml/schemas/nfe_v4.00.xsd | 9 + pytrustnfe/xml/schemas/tiposBasico_v4.00.xsd | 589 +++ pytrustnfe/xml/validate.py | 2 +- 12 files changed, 7279 insertions(+), 273 deletions(-) create mode 100755 pytrustnfe/xml/schemas/enviNFe_v4.00.xsd create mode 100755 pytrustnfe/xml/schemas/leiauteNFe_v4.00.xsd create mode 100755 pytrustnfe/xml/schemas/nfe_v4.00.xsd create mode 100755 pytrustnfe/xml/schemas/tiposBasico_v4.00.xsd diff --git a/pytrustnfe/Servidores.py b/pytrustnfe/Servidores.py index 0ddc8d4..62cfd91 100644 --- a/pytrustnfe/Servidores.py +++ b/pytrustnfe/Servidores.py @@ -2,40 +2,29 @@ # © 2016 Danimar Ribeiro # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -WS_NFE_AUTORIZACAO = 'NfeAutorizacao' -WS_NFE_RET_AUTORIZACAO = 'NfeRetAutorizacao' -WS_NFE_CANCELAMENTO = 'RecepcaoEventoCancelamento' +# Consultas básicas da NF-e WS_NFE_INUTILIZACAO = 'NfeInutilizacao' WS_NFE_CONSULTA = 'NfeConsultaProtocolo' WS_NFE_SITUACAO = 'NfeStatusServico' -WS_NFE_CADASTRO = 'NfeConsultaCadastro' - -WS_NFCE_AUTORIZACAO = 'NfeAutorizacao' -WS_NFCE_RET_AUTORIZACAO = 'NfeRetAutorizacao' -WS_NFCE_CANCELAMENTO = 'RecepcaoEventoCancelamento' -WS_NFCE_INUTILIZACAO = 'NfeInutilizacao' -WS_NFCE_CONSULTA = 'NfeConsultaProtocolo' -WS_NFCE_SITUACAO = 'NfeStatusServico' -WS_NFCE_CADASTRO = 'NfeConsultaCadastro' -WS_NFCE_RECEPCAO_EVENTO = 'RecepcaoEventoCarta' -WS_NFCE_QR_CODE = 'NfeQRCode' -WS_NFCE_CONSULTA_DESTINADAS = 'NfeConsultaDest', - +WS_NFE_RECEPCAO_EVENTO = 'RecepcaoEvento' +WS_NFE_AUTORIZACAO = 'NfeAutorizacao' +WS_NFE_RET_AUTORIZACAO = 'NfeRetAutorizacao' +# Alguns estados possuem essa consulta não todos WS_NFE_CADASTRO = 'NfeConsultaCadastro' -WS_DPEC_RECEPCAO = 'RecepcaoEventoEPEC' -WS_DPEC_CONSULTA = 8 -WS_NFE_RECEPCAO_EVENTO = 'RecepcaoEventoCarta' -WS_NFE_RECEPCAO_EVENTO_MANIFESTO = 'RecepcaoEventoManifesto' + +# Ambiente nacional +WS_NFCE_QR_CODE = 'NfeQRCode' +WS_NFCE_CONSULTA_DESTINADAS = 'NfeConsultaDest' WS_DFE_DISTRIBUICAO = 'NFeDistribuicaoDFe' WS_DOWNLOAD_NFE = 'nfeDistDFeInteresse' -NFE_AMBIENTE_PRODUCAO = 1 -NFE_AMBIENTE_HOMOLOGACAO = 2 -NFCE_AMBIENTE_PRODUCAO = 1 -NFCE_AMBIENTE_HOMOLOGACAO = 2 +# Códigos do ambiente de homologação e produção +AMBIENTE_PRODUCAO = 1 +AMBIENTE_HOMOLOGACAO = 2 +# Modelos dos documentos eletrônicos NFE_MODELO = '55' NFCE_MODELO = '65' @@ -74,8 +63,7 @@ def localizar_url(servico, estado, mod='55', ambiente=2): sigla = SIGLA_ESTADO[estado] ws = ESTADO_WS[sigla] - if servico in (WS_DFE_DISTRIBUICAO, WS_DOWNLOAD_NFE, - WS_NFE_RECEPCAO_EVENTO_MANIFESTO): + if servico in (WS_DFE_DISTRIBUICAO, WS_DOWNLOAD_NFE): ws = AN if mod in ws: @@ -119,7 +107,6 @@ METODO_WS = { }, WS_NFE_SITUACAO: { 'webservice': 'NfeStatusServico2', - 'metodo': 'nfeStatusServicoNF2', }, WS_NFE_CADASTRO: { @@ -134,57 +121,54 @@ METODO_WS = { SVRS = { NFE_MODELO: { - NFE_AMBIENTE_PRODUCAO: { + AMBIENTE_PRODUCAO: { 'servidor': 'nfe.svrs.rs.gov.br', - WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento.asmx', - WS_NFE_CANCELAMENTO: 'ws/recepcaoevento/recepcaoevento.asmx', - WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NfeAutorizacao.asmx', - WS_NFE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NfeRetAutorizacao.asmx', - WS_NFE_CADASTRO: 'ws/CadConsultaCadastro/CadConsultaCadastro2.asmx', - WS_NFE_INUTILIZACAO: 'ws/nfeinutilizacao/nfeinutilizacao2.asmx', - WS_NFE_CONSULTA: 'ws/NfeConsulta/NfeConsulta2.asmx', - WS_NFE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico2.asmx', + WS_NFE_INUTILIZACAO: 'ws/nfeinutilizacao/nfeinutilizacao4.asmx', + WS_NFE_CONSULTA: 'ws/NfeConsulta/NfeConsulta4.asmx', + WS_NFE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico4.asmx', + WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento4.asmx', + WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao4.asmx', + WS_NFE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao4.asmx', # noqa + WS_NFE_CADASTRO: 'ws/cadconsultacadastro/cadconsultacadastro2.asmx', # noqa }, - NFE_AMBIENTE_HOMOLOGACAO: { + AMBIENTE_HOMOLOGACAO: { 'servidor': 'nfe-homologacao.svrs.rs.gov.br', - WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento.asmx', - WS_NFE_CANCELAMENTO: 'ws/recepcaoevento/recepcaoevento.asmx', - WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NfeAutorizacao.asmx', - WS_NFE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NfeRetAutorizacao.asmx', - WS_NFE_CADASTRO: 'ws/CadConsultaCadastro/CadConsultaCadastro2.asmx', - WS_NFE_INUTILIZACAO: 'ws/nfeinutilizacao/nfeinutilizacao2.asmx', - WS_NFE_CONSULTA: 'ws/NfeConsulta/NfeConsulta2.asmx', - WS_NFE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico2.asmx', + WS_NFE_INUTILIZACAO: 'ws/nfeinutilizacao/nfeinutilizacao4.asmx', + WS_NFE_CONSULTA: 'ws/NfeConsulta/NfeConsulta4.asmx', + WS_NFE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico4.asmx', + WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento4.asmx', + WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao4.asmx', + WS_NFE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao4.asmx', # noqa + WS_NFE_CADASTRO: 'ws/cadconsultacadastro/cadconsultacadastro2.asmx', # noqa } }, NFCE_MODELO: { - NFCE_AMBIENTE_PRODUCAO: { + AMBIENTE_PRODUCAO: { 'servidor': 'nfce.svrs.rs.gov.br', - WS_NFCE_INUTILIZACAO: 'ws/nfeinutilizacao/nfeinutilizacao2.asmx', - WS_NFCE_CONSULTA: 'ws/NfeConsulta/NfeConsulta2.asmx', - WS_NFCE_CANCELAMENTO: 'ws/recepcaoevento/recepcaoevento.asmx', - WS_NFCE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico2.asmx', - WS_NFCE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao.asmx', - WS_NFCE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao.asmx', - WS_NFCE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento.asmx', + WS_NFE_INUTILIZACAO: 'ws/nfeinutilizacao/nfeinutilizacao4.asmx', + WS_NFE_CONSULTA: 'ws/NfeConsulta/NfeConsulta4.asmx', + WS_NFE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico4.asmx', + WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento4.asmx', + WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao4.asmx', + WS_NFE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao4.asmx', # noqa WS_NFCE_QR_CODE: 'http://dec.fazenda.df.gov.br/ConsultarNFCe.aspx', }, - NFCE_AMBIENTE_HOMOLOGACAO: { + AMBIENTE_HOMOLOGACAO: { 'servidor': 'nfce-homologacao.svrs.rs.gov.br', - WS_NFCE_INUTILIZACAO: 'ws/nfeinutilizacao/nfeinutilizacao2.asmx', - WS_NFCE_CONSULTA: 'ws/NfeConsulta/NfeConsulta2.asmx', - WS_NFCE_CANCELAMENTO: 'ws/recepcaoevento/recepcaoevento.asmx', - WS_NFCE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico2.asmx', - WS_NFCE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao.asmx', - WS_NFCE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao.asmx', - WS_NFCE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento.asmx', + WS_NFE_INUTILIZACAO: 'ws/nfeinutilizacao/nfeinutilizacao4.asmx', + WS_NFE_CONSULTA: 'ws/NfeConsulta/NfeConsulta4.asmx', + WS_NFE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico4.asmx', + WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento4.asmx', + WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao4.asmx', + WS_NFE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao4.asmx', # noqa WS_NFCE_QR_CODE: 'http://dec.fazenda.df.gov.br/ConsultarNFCe.aspx', } } } +# TODO Daqui pra frente tem que revisar SVAN = { - NFE_AMBIENTE_PRODUCAO: { + AMBIENTE_PRODUCAO: { 'servidor': 'www.sefazvirtual.fazenda.gov.br', WS_NFE_RECEPCAO_EVENTO: 'RecepcaoEvento/RecepcaoEvento.asmx', WS_NFE_AUTORIZACAO: 'NfeAutorizacao/NfeAutorizacao.asmx', @@ -193,7 +177,7 @@ SVAN = { WS_NFE_CONSULTA: 'NfeConsulta2/NfeConsulta2.asmx', WS_NFE_SITUACAO: 'NfeStatusServico2/NfeStatusServico2.asmx', }, - NFE_AMBIENTE_HOMOLOGACAO: { + AMBIENTE_HOMOLOGACAO: { 'servidor': 'hom.sefazvirtual.fazenda.gov.br', WS_NFE_RECEPCAO_EVENTO: 'RecepcaoEvento/RecepcaoEvento.asmx', WS_NFE_AUTORIZACAO: 'NfeAutorizacao/NfeAutorizacao.asmx', @@ -205,7 +189,7 @@ SVAN = { } SCAN = { - NFE_AMBIENTE_PRODUCAO: { + AMBIENTE_PRODUCAO: { 'servidor': 'www.scan.fazenda.gov.br', WS_NFE_RECEPCAO_EVENTO: 'RecepcaoEvento/RecepcaoEvento.asmx', WS_NFE_AUTORIZACAO: 'NfeAutorizacao/NfeAutorizacao.asmx', @@ -214,7 +198,7 @@ SCAN = { WS_NFE_CONSULTA: 'NfeConsulta2/NfeConsulta2.asmx', WS_NFE_SITUACAO: 'NfeStatusServico2/NfeStatusServico2.asmx' }, - NFE_AMBIENTE_HOMOLOGACAO: { + AMBIENTE_HOMOLOGACAO: { 'servidor': 'hom.nfe.fazenda.gov.br', WS_NFE_RECEPCAO_EVENTO: 'RecepcaoEvento/RecepcaoEvento.asmx', WS_NFE_AUTORIZACAO: 'NfeAutorizacao/NfeAutorizacao.asmx', @@ -226,7 +210,7 @@ SCAN = { } SVC_AN = { - NFE_AMBIENTE_PRODUCAO: { + AMBIENTE_PRODUCAO: { 'servidor': 'www.svc.fazenda.gov.br', WS_NFE_RECEPCAO_EVENTO: 'RecepcaoEvento/RecepcaoEvento.asmx', WS_NFE_AUTORIZACAO: 'NfeAutorizacao/NfeAutorizacao.asmx', @@ -234,7 +218,7 @@ SVC_AN = { WS_NFE_CONSULTA: 'NfeConsulta2/NfeConsulta2.asmx', WS_NFE_SITUACAO: 'NfeStatusServico2/NfeStatusServico2.asmx' }, - NFE_AMBIENTE_HOMOLOGACAO: { + AMBIENTE_HOMOLOGACAO: { 'servidor': 'hom.nfe.fazenda.gov.br', WS_NFE_RECEPCAO_EVENTO: 'RecepcaoEvento/RecepcaoEvento.asmx', WS_NFE_AUTORIZACAO: 'NfeAutorizacao/NfeAutorizacao.asmx', @@ -245,7 +229,7 @@ SVC_AN = { } SVC_RS = { - NFE_AMBIENTE_PRODUCAO: { + AMBIENTE_PRODUCAO: { 'servidor': 'nfe.sefazvirtual.rs.gov.br', WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento.asmx', WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NfeAutorizacao.asmx', @@ -253,7 +237,7 @@ SVC_RS = { WS_NFE_CONSULTA: 'ws/NfeConsulta/NfeConsulta2.asmx', WS_NFE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico2.asmx', }, - NFE_AMBIENTE_HOMOLOGACAO: { + AMBIENTE_HOMOLOGACAO: { 'servidor': 'homologacao.nfe.sefazvirtual.rs.gov.br', WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento.asmx', WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NfeAutorizacao.asmx', @@ -263,42 +247,28 @@ SVC_RS = { } } -DPEC = { - NFE_AMBIENTE_PRODUCAO: { - 'servidor': 'www.nfe.fazenda.gov.br', - WS_DPEC_CONSULTA: 'SCERecepcaoRFB/SCERecepcaoRFB.asmx', - WS_DPEC_RECEPCAO: 'SCEConsultaRFB/SCEConsultaRFB.asmx' - }, - NFE_AMBIENTE_HOMOLOGACAO: { - 'servidor': 'hom.nfe.fazenda.gov.br', - WS_DPEC_CONSULTA: 'SCERecepcaoRFB/SCERecepcaoRFB.asmx', - WS_DPEC_RECEPCAO: 'SCEConsultaRFB/SCEConsultaRFB.asmx' - } -} - AN = { - NFE_AMBIENTE_PRODUCAO: { + AMBIENTE_PRODUCAO: { 'servidor': 'www1.nfe.fazenda.gov.br', WS_NFE_RECEPCAO_EVENTO: 'RecepcaoEvento/RecepcaoEvento.asmx', WS_DFE_DISTRIBUICAO: 'NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx', WS_DOWNLOAD_NFE: 'NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx', - WS_NFE_RECEPCAO_EVENTO_MANIFESTO: 'RecepcaoEvento/RecepcaoEvento.asmx', + WS_NFE_RECEPCAO_EVENTO: 'RecepcaoEvento/RecepcaoEvento.asmx', }, - NFE_AMBIENTE_HOMOLOGACAO: { + AMBIENTE_HOMOLOGACAO: { 'servidor': 'hom.nfe.fazenda.gov.br', WS_NFE_RECEPCAO_EVENTO: 'RecepcaoEvento/RecepcaoEvento.asmx', WS_DFE_DISTRIBUICAO: 'NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx', WS_DOWNLOAD_NFE: 'NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx', - WS_NFE_RECEPCAO_EVENTO_MANIFESTO: 'RecepcaoEvento/RecepcaoEvento.asmx', + WS_NFE_RECEPCAO_EVENTO: 'RecepcaoEvento/RecepcaoEvento.asmx', }, } UFAM = { NFE_MODELO: { - NFE_AMBIENTE_PRODUCAO: { + AMBIENTE_PRODUCAO: { 'servidor': 'nfe.sefaz.am.gov.br', WS_NFE_RECEPCAO_EVENTO: 'services2/services/RecepcaoEvento', - WS_NFE_CANCELAMENTO: 'services2/services/RecepcaoEvento', WS_NFE_AUTORIZACAO: 'services2/services/NfeAutorizacao', WS_NFE_RET_AUTORIZACAO: 'services2/services/NfeRetAutorizacao', WS_NFE_INUTILIZACAO: 'services2/services/NfeInutilizacao2', @@ -306,10 +276,9 @@ UFAM = { WS_NFE_SITUACAO: 'services2/services/NfeStatusServico2', WS_NFE_CADASTRO: 'services2/services/cadconsultacadastro2', }, - NFE_AMBIENTE_HOMOLOGACAO: { + AMBIENTE_HOMOLOGACAO: { 'servidor': 'homnfe.sefaz.am.gov.br', WS_NFE_RECEPCAO_EVENTO: 'services2/services/RecepcaoEvento', - WS_NFE_CANCELAMENTO: 'services2/services/RecepcaoEvento', WS_NFE_AUTORIZACAO: 'services2/services/NfeAutorizacao', WS_NFE_RET_AUTORIZACAO: 'services2/services/NfeRetAutorizacao', WS_NFE_INUTILIZACAO: 'services2/services/NfeInutilizacao2', @@ -319,10 +288,9 @@ UFAM = { } }, NFCE_MODELO: { - NFE_AMBIENTE_PRODUCAO: { + AMBIENTE_PRODUCAO: { 'servidor': 'nfe.sefaz.am.gov.br', WS_NFE_RECEPCAO_EVENTO: 'services2/services/RecepcaoEvento', - WS_NFE_CANCELAMENTO: 'services2/services/RecepcaoEvento', WS_NFE_AUTORIZACAO: 'services2/services/NfeAutorizacao', WS_NFE_RET_AUTORIZACAO: 'services2/services/NfeRetAutorizacao', WS_NFE_INUTILIZACAO: 'services2/services/NfeInutilizacao2', @@ -330,10 +298,9 @@ UFAM = { WS_NFE_SITUACAO: 'services2/services/NfeStatusServico2', WS_NFE_CADASTRO: 'services2/services/cadconsultacadastro2', }, - NFE_AMBIENTE_HOMOLOGACAO: { + AMBIENTE_HOMOLOGACAO: { 'servidor': 'homnfce.sefaz.am.gov.br', WS_NFE_RECEPCAO_EVENTO: 'nfce-services-nac/services/RecepcaoEvento', - WS_NFE_CANCELAMENTO: 'nfce-services-nac/services/RecepcaoEvento', WS_NFE_AUTORIZACAO: 'nfce-services-nac/services/NfeAutorizacao', WS_NFE_RET_AUTORIZACAO: 'nfce-services-nac/services/NfeRetAutorizacao', WS_NFE_INUTILIZACAO: 'nfce-services-nac/services/NfeInutilizacao2', @@ -345,7 +312,7 @@ UFAM = { } UFBA = { - NFE_AMBIENTE_PRODUCAO: { + AMBIENTE_PRODUCAO: { 'servidor': 'nfe.sefaz.ba.gov.br', WS_NFE_AUTORIZACAO: 'webservices/NfeAutorizacao/NfeAutorizacao.asmx', WS_NFE_RET_AUTORIZACAO: @@ -355,9 +322,8 @@ UFBA = { WS_NFE_INUTILIZACAO: 'webservices/nfenw/nfeinutilizacao2.asmx', WS_NFE_CADASTRO: 'webservices/nfenw/CadConsultaCadastro2.asmx', WS_NFE_RECEPCAO_EVENTO: 'webservices/sre/recepcaoevento.asmx', - WS_NFE_CANCELAMENTO: 'webservices/sre/recepcaoevento.asmx', }, - NFE_AMBIENTE_HOMOLOGACAO: { + AMBIENTE_HOMOLOGACAO: { 'servidor': 'hnfe.sefaz.ba.gov.br', WS_NFE_AUTORIZACAO: 'webservices/NfeAutorizacao/NfeAutorizacao.asmx', WS_NFE_RET_AUTORIZACAO: @@ -367,12 +333,11 @@ UFBA = { WS_NFE_INUTILIZACAO: 'webservices/nfenw/nfeinutilizacao2.asmx', WS_NFE_CADASTRO: 'webservices/nfenw/CadConsultaCadastro2.asmx', WS_NFE_RECEPCAO_EVENTO: 'webservices/sre/recepcaoevento.asmx', - WS_NFE_CANCELAMENTO: 'webservices/sre/recepcaoevento.asmx', } } UFCE = { - NFE_AMBIENTE_PRODUCAO: { + AMBIENTE_PRODUCAO: { 'servidor': 'nfe.sefaz.ce.gov.br', WS_NFE_AUTORIZACAO: 'nfe2/services/NfeAutorizacao', WS_NFE_RET_AUTORIZACAO: 'nfe2/services/NfeRetAutorizacao', @@ -381,9 +346,8 @@ UFCE = { WS_NFE_SITUACAO: 'nfe2/services/NfeStatusServico2', WS_NFE_CADASTRO: 'nfe2/services/CadConsultaCadastro2', WS_NFE_RECEPCAO_EVENTO: 'nfe2/services/RecepcaoEvento', - WS_NFE_CANCELAMENTO: 'nfe2/services/RecepcaoEvento', }, - NFE_AMBIENTE_HOMOLOGACAO: { + AMBIENTE_HOMOLOGACAO: { 'servidor': 'nfeh.sefaz.ce.gov.br', WS_NFE_AUTORIZACAO: 'nfe2/services/NfeAutorizacao', WS_NFE_RET_AUTORIZACAO: 'nfe2/services/NfeRetAutorizacao', @@ -392,13 +356,12 @@ UFCE = { WS_NFE_SITUACAO: 'nfe2/services/NfeStatusServico2', WS_NFE_CADASTRO: 'nfe2/services/CadConsultaCadastro2', WS_NFE_RECEPCAO_EVENTO: 'nfe2/services/RecepcaoEvento', - WS_NFE_CANCELAMENTO: 'nfe2/services/RecepcaoEvento', } } UFGO = { - NFE_AMBIENTE_PRODUCAO: { + AMBIENTE_PRODUCAO: { 'servidor': 'nfe.sefaz.go.gov.br', WS_NFE_RECEPCAO_EVENTO: 'nfe/services/v2/RecepcaoEvento', WS_NFE_AUTORIZACAO: 'nfe/services/v2/NfeAutorizacao', @@ -407,9 +370,8 @@ UFGO = { WS_NFE_CONSULTA: 'nfe/services/v2/NfeConsulta2', WS_NFE_SITUACAO: 'nfe/services/v2/NfeStatusServico2', WS_NFE_CADASTRO: 'nfe/services/v2/CadConsultaCadastro2', - WS_NFE_CANCELAMENTO: 'nfe/services/v2/RecepcaoEvento', }, - NFE_AMBIENTE_HOMOLOGACAO: { + AMBIENTE_HOMOLOGACAO: { 'servidor': 'homolog.sefaz.go.gov.br', WS_NFE_RECEPCAO_EVENTO: 'nfe/services/v2/RecepcaoEvento', WS_NFE_AUTORIZACAO: 'nfe/services/v2/NfeAutorizacao', @@ -418,13 +380,12 @@ UFGO = { WS_NFE_CONSULTA: 'nfe/services/v2/NfeConsulta2', WS_NFE_SITUACAO: 'nfe/services/v2/NfeStatusServico2', WS_NFE_CADASTRO: 'nfe/services/v2/CadConsultaCadastro2', - WS_NFE_CANCELAMENTO: 'nfe/services/v2/RecepcaoEvento', } } UFMT = { - NFE_AMBIENTE_PRODUCAO: { + AMBIENTE_PRODUCAO: { 'servidor': 'nfe.sefaz.mt.gov.br', WS_NFE_AUTORIZACAO: 'nfews/v2/services/NfeAutorizacao', WS_NFE_RET_AUTORIZACAO: 'nfews/v2/services/NfeRetAutorizacao', @@ -433,9 +394,8 @@ UFMT = { WS_NFE_SITUACAO: 'nfews/v2/services/NfeStatusServico2', WS_NFE_CADASTRO: 'nfews/v2/services/CadConsultaCadastro2', WS_NFE_RECEPCAO_EVENTO: 'nfews/v2/services/RecepcaoEvento', - WS_NFE_CANCELAMENTO: 'nfews/v2/services/RecepcaoEvento', }, - NFE_AMBIENTE_HOMOLOGACAO: { + AMBIENTE_HOMOLOGACAO: { 'servidor': 'homologacao.sefaz.mt.gov.br', WS_NFE_AUTORIZACAO: 'nfews/v2/services/NfeAutorizacao', WS_NFE_RET_AUTORIZACAO: 'nfews/v2/services/NfeRetAutorizacao', @@ -444,12 +404,11 @@ UFMT = { WS_NFE_SITUACAO: 'nfews/v2/services/NfeStatusServico2', WS_NFE_CADASTRO: 'nfews/v2/services/CadConsultaCadastro2', WS_NFE_RECEPCAO_EVENTO: 'nfews/v2/services/RecepcaoEvento', - WS_NFE_CANCELAMENTO: 'nfews/v2/services/RecepcaoEvento', } } UFMS = { - NFE_AMBIENTE_PRODUCAO: { + AMBIENTE_PRODUCAO: { 'servidor': 'nfe.fazenda.ms.gov.br', WS_NFE_RECEPCAO_EVENTO: 'producao/services2/RecepcaoEvento', WS_NFE_AUTORIZACAO: 'producao/services2/NfeAutorizacao', @@ -458,9 +417,8 @@ UFMS = { WS_NFE_INUTILIZACAO: 'producao/services2/NfeInutilizacao2', WS_NFE_CONSULTA: 'producao/services2/NfeConsulta2', WS_NFE_SITUACAO: 'producao/services2/NfeStatusServico2', - WS_NFE_CANCELAMENTO: 'producao/services2/RecepcaoEvento', }, - NFE_AMBIENTE_HOMOLOGACAO: { + AMBIENTE_HOMOLOGACAO: { 'servidor': 'homologacao.nfe.ms.gov.br', WS_NFE_RECEPCAO_EVENTO: 'homologacao/services2/RecepcaoEvento', WS_NFE_AUTORIZACAO: 'homologacao/services2/NfeAutorizacao', @@ -469,37 +427,35 @@ UFMS = { WS_NFE_INUTILIZACAO: 'homologacao/services2/NfeInutilizacao2', WS_NFE_CONSULTA: 'homologacao/services2/NfeConsulta2', WS_NFE_SITUACAO: 'homologacao/services2/NfeStatusServico2', - WS_NFE_CANCELAMENTO: 'homologacao/services2/RecepcaoEvento', } } UFMG = { - NFE_AMBIENTE_PRODUCAO: { + AMBIENTE_PRODUCAO: { 'servidor': 'nfe.fazenda.mg.gov.br', - WS_NFE_AUTORIZACAO: 'nfe2/services/NfeAutorizacao', - WS_NFE_RET_AUTORIZACAO: 'nfe2/services/NfeRetAutorizacao', - WS_NFE_INUTILIZACAO: 'nfe2/services/NfeInutilizacao2', - WS_NFE_CONSULTA: 'nfe2/services/NfeConsulta2', - WS_NFE_SITUACAO: 'nfe2/services/NfeStatus2', - WS_NFE_CADASTRO: 'nfe2/services/cadconsultacadastro2', - WS_NFE_RECEPCAO_EVENTO: 'nfe2/services/RecepcaoEvento', - WS_NFE_CANCELAMENTO: 'nfe2/services/RecepcaoEvento', + WS_NFE_INUTILIZACAO: 'nfe2/services/NFeInutilizacao4?wsdl', + WS_NFE_CONSULTA: 'nfe2/services/NFeConsultaProtocolo4?wsdl', + WS_NFE_SITUACAO: 'nfe2/services/NFeStatusServico4?wsdl', + WS_NFE_RECEPCAO_EVENTO: 'nfe2/services/NFeRecepcaoEvento4?wsdl', + WS_NFE_AUTORIZACAO: 'nfe2/services/NFeAutorizacao4?wsdl', + WS_NFE_RET_AUTORIZACAO: 'nfe2/services/NFeRetAutorizacao4?wsdl', + WS_NFE_CADASTRO: 'nfe2/services/cadconsultacadastro2?wsdl', + }, - NFE_AMBIENTE_HOMOLOGACAO: { + AMBIENTE_HOMOLOGACAO: { 'servidor': 'hnfe.fazenda.mg.gov.br', - WS_NFE_AUTORIZACAO: 'nfe2/services/NfeAutorizacao', - WS_NFE_RET_AUTORIZACAO: 'nfe2/services/NfeRetAutorizacao', - WS_NFE_INUTILIZACAO: 'nfe2/services/NfeInutilizacao2', - WS_NFE_CONSULTA: 'nfe2/services/NfeConsulta2', - WS_NFE_SITUACAO: 'nfe2/services/NfeStatus2', - WS_NFE_CADASTRO: 'nfe2/services/cadconsultacadastro2', - WS_NFE_RECEPCAO_EVENTO: 'nfe2/services/RecepcaoEvento', - WS_NFE_CANCELAMENTO: 'nfe2/services/RecepcaoEvento', + WS_NFE_INUTILIZACAO: 'nfe2/services/NFeInutilizacao4?wsdl', + WS_NFE_CONSULTA: 'nfe2/services/NFeConsultaProtocolo4?wsdl', + WS_NFE_SITUACAO: 'nfe2/services/NFeStatusServico4?wsdl', + WS_NFE_RECEPCAO_EVENTO: 'nfe2/services/NFeRecepcaoEvento4?wsdl', + WS_NFE_AUTORIZACAO: 'nfe2/services/NFeAutorizacao4?wsdl', + WS_NFE_RET_AUTORIZACAO: 'nfe2/services/NFeRetAutorizacao4?wsdl', + WS_NFE_CADASTRO: 'nfe2/services/cadconsultacadastro2?wsdl', } } UFPR = { - NFE_AMBIENTE_PRODUCAO: { + AMBIENTE_PRODUCAO: { 'servidor': 'nfe.fazenda.pr.gov.br', WS_NFE_AUTORIZACAO: 'nfe/NFeAutorizacao3', WS_NFE_RET_AUTORIZACAO: 'nfe/NFeRetAutorizacao3', @@ -508,9 +464,8 @@ UFPR = { WS_NFE_SITUACAO: 'nfe/NFeStatusServico3', WS_NFE_CADASTRO: 'nfe/CadConsultaCadastro2', WS_NFE_RECEPCAO_EVENTO: 'nfe-evento/NFeRecepcaoEvento', - WS_NFE_CANCELAMENTO: 'nfe-evento/NFeRecepcaoEvento', }, - NFE_AMBIENTE_HOMOLOGACAO: { + AMBIENTE_HOMOLOGACAO: { 'servidor': 'homologacao.nfe.fazenda.pr.gov.br', WS_NFE_AUTORIZACAO: 'nfe/NFeAutorizacao3', WS_NFE_RET_AUTORIZACAO: 'nfe/NFeRetAutorizacao3', @@ -519,15 +474,13 @@ UFPR = { WS_NFE_SITUACAO: 'nfe/NFeStatusServico3', WS_NFE_CADASTRO: 'nfe/CadConsultaCadastro2', WS_NFE_RECEPCAO_EVENTO: 'nfe-evento/NFeRecepcaoEvento', - WS_NFE_CANCELAMENTO: 'nfe-evento/NFeRecepcaoEvento', } } UFPE = { - NFE_AMBIENTE_PRODUCAO: { + AMBIENTE_PRODUCAO: { 'servidor': 'nfe.sefaz.pe.gov.br', WS_NFE_RECEPCAO_EVENTO: 'nfe-service/services/RecepcaoEvento', - WS_NFE_CANCELAMENTO: 'nfe-service/services/RecepcaoEvento', WS_NFE_AUTORIZACAO: 'nfe-service/services/NfeAutorizacao', WS_NFE_RET_AUTORIZACAO: 'nfe-service/services/NfeRetAutorizacao', WS_NFE_INUTILIZACAO: 'nfe-service/services/NfeInutilizacao2', @@ -535,10 +488,9 @@ UFPE = { WS_NFE_SITUACAO: 'nfe-service/services/NfeStatusServico2', WS_NFE_CADASTRO: 'nfe-service/services/CadConsultaCadastro2', }, - NFE_AMBIENTE_HOMOLOGACAO: { + AMBIENTE_HOMOLOGACAO: { 'servidor': 'nfehomolog.sefaz.pe.gov.br', WS_NFE_RECEPCAO_EVENTO: 'nfe-service/services/RecepcaoEvento', - WS_NFE_CANCELAMENTO: 'nfe-service/services/RecepcaoEvento', WS_NFE_AUTORIZACAO: 'nfe-service/services/NfeAutorizacao', WS_NFE_RET_AUTORIZACAO: 'nfe-service/services/NfeRetAutorizacao', WS_NFE_INUTILIZACAO: 'nfe-service/services/NfeInutilizacao2', @@ -551,7 +503,7 @@ UFPE = { UFRS = { NFE_MODELO: { - NFE_AMBIENTE_PRODUCAO: { + AMBIENTE_PRODUCAO: { 'servidor': 'nfe.sefazrs.rs.gov.br', WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento.asmx', WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao.asmx', @@ -560,9 +512,8 @@ UFRS = { WS_NFE_INUTILIZACAO: 'ws/NfeInutilizacao/NfeInutilizacao2.asmx', WS_NFE_CONSULTA: 'ws/NfeConsulta/NfeConsulta2.asmx', WS_NFE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico2.asmx', - WS_NFE_CANCELAMENTO: 'ws/recepcaoevento/recepcaoevento.asmx', }, - NFE_AMBIENTE_HOMOLOGACAO: { + AMBIENTE_HOMOLOGACAO: { 'servidor': 'nfe-homologacao.sefazrs.rs.gov.br', WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento.asmx', WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao.asmx', @@ -571,32 +522,29 @@ UFRS = { WS_NFE_INUTILIZACAO: 'ws/NfeInutilizacao/NfeInutilizacao2.asmx', WS_NFE_CONSULTA: 'ws/NfeConsulta/NfeConsulta2.asmx', WS_NFE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico2.asmx', - WS_NFE_CANCELAMENTO: 'ws/recepcaoevento/recepcaoevento.asmx', } }, NFCE_MODELO: { - NFE_AMBIENTE_PRODUCAO: { + AMBIENTE_PRODUCAO: { 'servidor': 'nfce.sefazrs.rs.gov.br', - WS_NFCE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento.asmx', - WS_NFCE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao.asmx', - WS_NFCE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao.asmx', - WS_NFCE_CADASTRO: 'ws/cadconsultacadastro/cadconsultacadastro2.asmx', - WS_NFCE_INUTILIZACAO: 'ws/NfeInutilizacao/NfeInutilizacao2.asmx', - WS_NFCE_CONSULTA: 'ws/NfeConsulta/NfeConsulta2.asmx', - WS_NFCE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico2.asmx', - WS_NFCE_CANCELAMENTO: 'ws/recepcaoevento/recepcaoevento.asmx', + WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento.asmx', + WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao.asmx', + WS_NFE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao.asmx', + WS_NFE_CADASTRO: 'ws/cadconsultacadastro/cadconsultacadastro2.asmx', + WS_NFE_INUTILIZACAO: 'ws/NfeInutilizacao/NfeInutilizacao2.asmx', + WS_NFE_CONSULTA: 'ws/NfeConsulta/NfeConsulta2.asmx', + WS_NFE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico2.asmx', WS_NFCE_QR_CODE: 'https://www.sefaz.rs.gov.br/NFCE/NFCE-COM.aspx', }, - NFE_AMBIENTE_HOMOLOGACAO: { + AMBIENTE_HOMOLOGACAO: { 'servidor': 'nfce-homologacao.sefazrs.rs.gov.br', - WS_NFCE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento.asmx', - WS_NFCE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao.asmx', - WS_NFCE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao.asmx', - WS_NFCE_CADASTRO: 'ws/cadconsultacadastro/cadconsultacadastro2.asmx', - WS_NFCE_INUTILIZACAO: 'ws/NfeInutilizacao/NfeInutilizacao2.asmx', - WS_NFCE_CONSULTA: 'ws/NfeConsulta/NfeConsulta2.asmx', - WS_NFCE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico2.asmx', - WS_NFCE_CANCELAMENTO: 'ws/recepcaoevento/recepcaoevento.asmx', + WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento.asmx', + WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao.asmx', + WS_NFE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao.asmx', + WS_NFE_CADASTRO: 'ws/cadconsultacadastro/cadconsultacadastro2.asmx', + WS_NFE_INUTILIZACAO: 'ws/NfeInutilizacao/NfeInutilizacao2.asmx', + WS_NFE_CONSULTA: 'ws/NfeConsulta/NfeConsulta2.asmx', + WS_NFE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico2.asmx', WS_NFCE_QR_CODE: 'https://www.sefaz.rs.gov.br/NFCE/NFCE-COM.aspx' } } @@ -604,7 +552,7 @@ UFRS = { UFSP = { NFE_MODELO: { - NFE_AMBIENTE_PRODUCAO: { + AMBIENTE_PRODUCAO: { 'servidor': 'nfe.fazenda.sp.gov.br', WS_NFE_AUTORIZACAO: 'ws/nfeautorizacao.asmx', WS_NFE_RET_AUTORIZACAO: 'ws/nferetautorizacao.asmx', @@ -613,9 +561,8 @@ UFSP = { WS_NFE_SITUACAO: 'ws/nfestatusservico2.asmx', WS_NFE_CADASTRO: 'ws/cadconsultacadastro2.asmx', WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento.asmx', - WS_NFE_CANCELAMENTO: 'ws/recepcaoevento.asmx', }, - NFE_AMBIENTE_HOMOLOGACAO: { + AMBIENTE_HOMOLOGACAO: { 'servidor': 'homologacao.nfe.fazenda.sp.gov.br', WS_NFE_AUTORIZACAO: 'ws/nfeautorizacao.asmx', WS_NFE_RET_AUTORIZACAO: 'ws/nferetautorizacao.asmx', @@ -624,30 +571,29 @@ UFSP = { WS_NFE_SITUACAO: 'ws/nfestatusservico2.asmx', WS_NFE_CADASTRO: 'ws/cadconsultacadastro2.asmx', WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento.asmx', - WS_NFE_CANCELAMENTO: 'ws/recepcaoevento.asmx', } }, NFCE_MODELO: { - NFCE_AMBIENTE_PRODUCAO: { + AMBIENTE_PRODUCAO: { 'servidor': 'nfce.fazenda.sp.gov.br', - WS_NFCE_AUTORIZACAO: 'ws/nfeautorizacao.asmx', - WS_NFCE_RET_AUTORIZACAO: 'ws/nferetautorizacao.asmx', - WS_NFCE_INUTILIZACAO: 'ws/nfeinutilizacao2.asmx', - WS_NFCE_CONSULTA: 'ws/nfeconsulta2.asmx', - WS_NFCE_SITUACAO: 'ws/nfestatusservico2.asmx', - WS_NFCE_CADASTRO: 'ws/cadconsultacadastro2.asmx', - WS_NFCE_RECEPCAO_EVENTO: 'ws/recepcaoevento.asmx', + WS_NFE_AUTORIZACAO: 'ws/nfeautorizacao.asmx', + WS_NFE_RET_AUTORIZACAO: 'ws/nferetautorizacao.asmx', + WS_NFE_INUTILIZACAO: 'ws/nfeinutilizacao2.asmx', + WS_NFE_CONSULTA: 'ws/nfeconsulta2.asmx', + WS_NFE_SITUACAO: 'ws/nfestatusservico2.asmx', + WS_NFE_CADASTRO: 'ws/cadconsultacadastro2.asmx', + WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento.asmx', WS_NFCE_QR_CODE: '', }, - NFCE_AMBIENTE_HOMOLOGACAO: { + AMBIENTE_HOMOLOGACAO: { 'servidor': 'homologacao.nfce.fazenda.sp.gov.br', - WS_NFCE_AUTORIZACAO: 'ws/nfeautorizacao.asmx', - WS_NFCE_RET_AUTORIZACAO: 'ws/nferetautorizacao.asmx', - WS_NFCE_INUTILIZACAO: 'ws/nfeinutilizacao2.asmx', - WS_NFCE_CONSULTA: 'ws/nfeconsulta2.asmx', - WS_NFCE_SITUACAO: 'ws/nfestatusservico2.asmx', - WS_NFCE_CADASTRO: 'ws/cadconsultacadastro2.asmx', - WS_NFCE_RECEPCAO_EVENTO: 'ws/recepcaoevento.asmx', + WS_NFE_AUTORIZACAO: 'ws/nfeautorizacao.asmx', + WS_NFE_RET_AUTORIZACAO: 'ws/nferetautorizacao.asmx', + WS_NFE_INUTILIZACAO: 'ws/nfeinutilizacao2.asmx', + WS_NFE_CONSULTA: 'ws/nfeconsulta2.asmx', + WS_NFE_SITUACAO: 'ws/nfestatusservico2.asmx', + WS_NFE_CADASTRO: 'ws/cadconsultacadastro2.asmx', + WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento.asmx', WS_NFCE_QR_CODE: 'https://homologacao.nfce.fazenda.sp.gov.br/NFCEConsultaPublica/Paginas/ConstultaQRCode.aspx', } } @@ -683,46 +629,3 @@ ESTADO_WS = { 'SP': UFSP, 'TO': SVRS, } - - -# -# Informação obtida em -# http://www.nfe.fazenda.gov.br/portal/webServices.aspx -# Última verificação: 15/08/2014 16:22 -# -# Autorizadores em contingência: -# - UF que utilizam a SVC-AN - Sefaz Virtual de Contingência Ambiente Nacional: -# AC, AL, AP, DF, ES, MG, PB, RJ, RN, RO, RR, RS, SC, SE, SP, TO -# - UF que utilizam a SVC-RS - Sefaz Virtual de Contingência Rio Grande do Sul: -# AM, BA, CE, GO, MA, MS, MT, PA, PE, PI, PR -# - -ESTADO_WS_CONTINGENCIA = { - 'AC': SVC_AN, - 'AL': SVC_AN, - 'AM': SVC_RS, - 'AP': SVC_AN, - 'BA': SVC_RS, - 'CE': SVC_RS, - 'DF': SVC_AN, - 'ES': SVC_AN, - 'GO': SVC_RS, - 'MA': SVC_RS, - 'MG': SVC_AN, - 'MS': SVC_RS, - 'MT': SVC_RS, - 'PA': SVC_RS, - 'PB': SVC_AN, - 'PE': SVC_RS, - 'PI': SVC_RS, - 'PR': SVC_RS, - 'RJ': SVC_AN, - 'RN': SVC_AN, - 'RO': SVC_AN, - 'RR': SVC_AN, - 'RS': SVC_AN, - 'SC': SVC_AN, - 'SE': SVC_AN, - 'SP': SVC_AN, - 'TO': SVC_AN, -} diff --git a/pytrustnfe/nfe/__init__.py b/pytrustnfe/nfe/__init__.py index ec1de27..fdf8a44 100644 --- a/pytrustnfe/nfe/__init__.py +++ b/pytrustnfe/nfe/__init__.py @@ -9,12 +9,18 @@ import binascii from lxml import etree from .comunicacao import executar_consulta from .assinatura import Assinatura -from pytrustnfe.xml import render_xml +from pytrustnfe.xml import render_xml, sanitize_response from pytrustnfe.utils import CabecalhoSoap from pytrustnfe.utils import gerar_chave, ChaveNFe from pytrustnfe.Servidores import localizar_url, localizar_qrcode from pytrustnfe.xml.validate import valida_nfe from pytrustnfe.exceptions import NFeValidationException +from pytrustnfe.certificado import extract_cert_and_key_from_pfx, save_cert_key + +# Zeep +from requests import Session +from zeep import Client +from zeep.transports import Transport def _build_header(method, **kwargs): @@ -182,21 +188,32 @@ def _render(certificado, method, sign, **kwargs): def _send(certificado, method, **kwargs): xml_send = kwargs["xml"] - url = localizar_url(method, kwargs['estado'], kwargs['modelo'], - kwargs['ambiente']) - cabecalho = _build_header(method, **kwargs) - - send_raw = False - if method == 'NFeDistribuicaoDFe': - send_raw = True - - response, obj = executar_consulta(certificado, url, cabecalho, xml_send, - send_raw=send_raw) - return { - 'sent_xml': xml_send, - 'received_xml': response.decode(), - 'object': obj - } + base_url = localizar_url(method, kwargs['estado'], kwargs['modelo'], + kwargs['ambiente']) + + cert, key = extract_cert_and_key_from_pfx( + certificado.pfx, certificado.password) + cert, key = save_cert_key(cert, key) + + session = Session() + session.cert = (cert, key) + session.verify = False + transport = Transport(session=session) + + xml = etree.fromstring(xml_send) + client = Client(base_url, transport=transport) + + port = next(iter(client.wsdl.port_types)) + first_operation = next(iter(client.wsdl.port_types[port].operations)) + with client.options(raw_response=True): + response = client.service[first_operation](xml) + response, obj = sanitize_response(response.text) + + return { + 'sent_xml': xml_send, + 'received_xml': response, + 'object': obj.Body.nfeResultMsg + } def xml_autorizar_nfe(certificado, **kwargs): diff --git a/pytrustnfe/nfe/comunicacao.py b/pytrustnfe/nfe/comunicacao.py index 34c550e..e3d82ed 100644 --- a/pytrustnfe/nfe/comunicacao.py +++ b/pytrustnfe/nfe/comunicacao.py @@ -11,9 +11,7 @@ from ..xml import sanitize_response def _soap_xml(body, cabecalho): xml = '' - xml += '' - xml += '' - xml += '' + cabecalho.estado + '' + cabecalho.versao + '' + xml += '' xml += '' xml += body xml += '' diff --git a/pytrustnfe/nfe/templates/NfeAutorizacao.xml b/pytrustnfe/nfe/templates/NfeAutorizacao.xml index 89f6eac..bf1cc8b 100644 --- a/pytrustnfe/nfe/templates/NfeAutorizacao.xml +++ b/pytrustnfe/nfe/templates/NfeAutorizacao.xml @@ -181,6 +181,9 @@ {{ prod.NCM }} {{ prod.NVE }} {{ prod.CEST }} + {{ prod.indEscala }} + {{ prod.CNPJFab }} + {{ prod.cBenef }} {{ prod.EXTIPI }} {{ prod.CFOP }} {{ prod.uCom }} @@ -243,6 +246,21 @@ {{ prod.xPed }} {{ prod.nItemPed }} {{ prod.nFCI }} + {% for rastro in prod.rastro %} + + {{ rastro.nLote }} + {{ rastro.qLote }} + {{ rastro.dFab }} + {{ rastro.dVal }} + {{ rastro.cAgreg }} + + {% endfor %} + {% for med in prod.med %} + + {{ med.cProdANVISA }} + {{ med.vPMC }} + + {% endfor %} {% endwith %} @@ -257,6 +275,8 @@ {{ imposto.ICMS.vBC }} {{ imposto.ICMS.pICMS }} {{ imposto.ICMS.vICMS }} + {{ imposto.ICMS.pFCP }} + {{ imposto.ICMS.vFCP }} {% endif %} {% if imposto.ICMS.CST == '10' -%} @@ -267,12 +287,18 @@ {{ imposto.ICMS.vBC }} {{ imposto.ICMS.pICMS }} {{ imposto.ICMS.vICMS }} + {{ imposto.ICMS.vBCFCP }} + {{ imposto.ICMS.pFCP }} + {{ imposto.ICMS.vFCP }} {{ imposto.ICMS.modBCST }} {{ imposto.ICMS.pMVAST }} {{ imposto.ICMS.pRedBCST }} {{ imposto.ICMS.vBCST }} {{ imposto.ICMS.pICMSST }} {{ imposto.ICMS.vICMSST }} + {{ imposto.ICMS.vBCFCPST }} + {{ imposto.ICMS.pFCPST }} + {{ imposto.ICMS.vFCPST }} {% endif %} {% if imposto.ICMS.CST == '20' -%} @@ -284,6 +310,9 @@ {{ imposto.ICMS.vBC }} {{ imposto.ICMS.pICMS }} {{ imposto.ICMS.vICMS }} + {{ imposto.ICMS.vBCFCP }} + {{ imposto.ICMS.pFCP }} + {{ imposto.ICMS.vFCP }} {{ imposto.ICMS.vICMSDeson }} {{ imposto.ICMS.motDesICMS }} @@ -298,6 +327,9 @@ {{ imposto.ICMS.vBCST }} {{ imposto.ICMS.pICMSST }} {{ imposto.ICMS.vICMSST }} + {{ imposto.ICMS.vBCFCPST }} + {{ imposto.ICMS.pFCPST }} + {{ imposto.ICMS.vFCPST }} {{ imposto.ICMS.vICMSDeson }} {{ imposto.ICMS.motDesICMS }} @@ -322,6 +354,9 @@ {{ imposto.ICMS.pDif }} {{ imposto.ICMS.vICMSDif }} {{ imposto.ICMS.vICMS }} + {{ imposto.ICMS.vBCFCP }} + {{ imposto.ICMS.pFCP }} + {{ imposto.ICMS.vFCP }} {% endif %} {% if imposto.ICMS.CST == '60' -%} @@ -329,7 +364,11 @@ {{ imposto.ICMS.orig }} {{ imposto.ICMS.CST }} {{ imposto.ICMS.vBCSTRet }} + {{ imposto.ICMS.pST }} {{ imposto.ICMS.vICMSSTRet }} + {{ imposto.ICMS.vBCFCPSTRet }} + {{ imposto.ICMS.pFCPSTRet }} + {{ imposto.ICMS.vFCPSTRet }} {% endif %} {% if imposto.ICMS.CST == '70' -%} @@ -341,12 +380,18 @@ {{ imposto.ICMS.vBC }} {{ imposto.ICMS.pICMS }} {{ imposto.ICMS.vICMS }} + {{ imposto.ICMS.vBCFCP }} + {{ imposto.ICMS.pFCP }} + {{ imposto.ICMS.vFCP }} {{ imposto.ICMS.modBCST }} {{ imposto.ICMS.pMVAST }} {{ imposto.ICMS.pRedBCST }} {{ imposto.ICMS.vBCST }} {{ imposto.ICMS.pICMSST }} {{ imposto.ICMS.vICMSST }} + {{ imposto.ICMS.vBCFCPST }} + {{ imposto.ICMS.pFCPST }} + {{ imposto.ICMS.vFCPST }} {{ imposto.ICMS.vICMSDeson }} {{ imposto.ICMS.motDesICMS }} @@ -362,7 +407,7 @@ {{ imposto.ICMS.vICMS }} {{ imposto.ICMS.vBCFCP }} {{ imposto.ICMS.pFCP }} - {{ imposto.ICMS.pFCP }} + {{ imposto.ICMS.pFCP }} {{ imposto.ICMS.modBCST }} {{ imposto.ICMS.pMVAST }} {{ imposto.ICMS.pRedBCST }} @@ -391,15 +436,6 @@ {{ imposto.ICMSPart.pRedBCST }} {{ imposto.ICMSPart.pBCOp }} {{ imposto.ICMSPart.UFST }} - {{ imposto.ICMSPart.pFCP }} - {{ imposto.ICMSPart.pFCP }} - {{ imposto.ICMSPart.vBCFCP }} - {{ imposto.ICMSPart.vBCFCPST }} - {{ imposto.ICMSPart.pFCPST }} - {{ imposto.ICMSPart.vFCPST }} - {{ imposto.ICMSPart.pFCPSTRet }} - {{ imposto.ICMSPart.vFCPSTRet }} - {{ imposto.ICMSPart.pST }} {% endif %} {% if imposto.ICMSST is defined -%} @@ -436,6 +472,9 @@ {{ imposto.ICMS.vBCST }} {{ imposto.ICMS.pICMSST }} {{ imposto.ICMS.vICMSST }} + {{ imposto.ICMS.vBCFCPST }} + {{ imposto.ICMS.pFCPST }} + {{ imposto.ICMS.vFCPST }} {{ imposto.ICMS.pCredSN }} {{ imposto.ICMS.vCredICMSSN }} @@ -450,6 +489,9 @@ {{ imposto.ICMS.vBCST }} {{ imposto.ICMS.pICMSST }} {{ imposto.ICMS.vICMSST }} + {{ imposto.ICMS.vBCFCPST }} + {{ imposto.ICMS.pFCPST }} + {{ imposto.ICMS.vFCPST }} {% endif %} {% if imposto.ICMS.CST == '500' -%} @@ -457,7 +499,11 @@ {{ imposto.ICMS.orig }} {{ imposto.ICMS.CST }} {{ imposto.ICMS.vBCSTRet }} + {{ imposto.ICMS.pST }} {{ imposto.ICMS.vICMSSTRet }} + {{ imposto.ICMS.vBCFCPSTRet }} + {{ imposto.ICMS.pFCPSTRet }} + {{ imposto.ICMS.pFCPSTRet }} {% endif %} {% if imposto.ICMS.CST == '900' -%} @@ -475,6 +521,9 @@ {{ imposto.ICMS.vBCST }} {{ imposto.ICMS.pICMSST }} {{ imposto.ICMS.vICMSST }} + {{ imposto.ICMS.vBCFCPST }} + {{ imposto.ICMS.pFCPST }} + {{ imposto.ICMS.vFCPST }} {{ imposto.ICMS.pCredSN }} {{ imposto.ICMS.vCredICMSSN }} @@ -619,6 +668,7 @@ {% if imposto.ICMSUFDest is defined %} {{ imposto.ICMSUFDest.vBCUFDest }} + {{ imposto.ICMSUFDest.vBCFCPUFDest }} {{ imposto.ICMSUFDest.pFCPUFDest }} {{ imposto.ICMSUFDest.pICMSUFDest }} {{ imposto.ICMSUFDest.pICMSInter }} @@ -626,7 +676,6 @@ {{ imposto.ICMSUFDest.vFCPUFDest }} {{ imposto.ICMSUFDest.vICMSUFDest }} {{ imposto.ICMSUFDest.vICMSUFRemet }} - {{ imposto.ICMSUFDest.vBCFCPUFDest }} {% endif %} {% endwith %} @@ -766,21 +815,26 @@ {% endif %} {% endif %} - + {% if NFe.infNFe.pag is defined %} - {{ pag.tPag }} - {{ pag.vPag }} - {% if pag.card is defined %} - - {{ pag.card.CNPJ }} - {{ pag.card.tBand }} - {{ pag.card.cAut }} - - {% endif %} + {% for pag in NFe.infNFe.pag %} + + {{ pag.indPag }} + {{ pag.tPag }} + {{ pag.vPag }} + {% if pag.card is defined %} + + {{ pag.card.tpIntegra }} + {{ pag.card.CNPJ }} + {{ pag.card.tBand }} + {{ pag.card.cAut }} + + {% endif %} + {{ pag.vTroco }} + + {% endfor %} - + {% endif %} {{ NFe.infNFe.infAdic.infAdFisco|normalize|escape }} {{ NFe.infNFe.infAdic.infCpl|normalize|escape }} diff --git a/pytrustnfe/nfe/templates/NfeInutilizacao.xml b/pytrustnfe/nfe/templates/NfeInutilizacao.xml index d495f82..d8a7739 100644 --- a/pytrustnfe/nfe/templates/NfeInutilizacao.xml +++ b/pytrustnfe/nfe/templates/NfeInutilizacao.xml @@ -1,4 +1,4 @@ - + {{ obj.ambiente }} INUTILIZAR diff --git a/pytrustnfe/nfe/templates/NfeRetAutorizacao.xml b/pytrustnfe/nfe/templates/NfeRetAutorizacao.xml index 7eb4729..c2f07f1 100644 --- a/pytrustnfe/nfe/templates/NfeRetAutorizacao.xml +++ b/pytrustnfe/nfe/templates/NfeRetAutorizacao.xml @@ -1,4 +1,4 @@ - + {{ obj.ambiente }} {{ obj.numero_recibo }} diff --git a/pytrustnfe/nfe/templates/NfeStatusServico.xml b/pytrustnfe/nfe/templates/NfeStatusServico.xml index 1d41a30..ae84f20 100644 --- a/pytrustnfe/nfe/templates/NfeStatusServico.xml +++ b/pytrustnfe/nfe/templates/NfeStatusServico.xml @@ -1,6 +1,6 @@ - + {{ obj.ambiente }} {{ obj.estado }} STATUS - \ No newline at end of file + diff --git a/pytrustnfe/xml/schemas/enviNFe_v4.00.xsd b/pytrustnfe/xml/schemas/enviNFe_v4.00.xsd new file mode 100755 index 0000000..05ee5dc --- /dev/null +++ b/pytrustnfe/xml/schemas/enviNFe_v4.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do Pedido de Concessão de Autorização da Nota Fiscal Eletrônica + + + diff --git a/pytrustnfe/xml/schemas/leiauteNFe_v4.00.xsd b/pytrustnfe/xml/schemas/leiauteNFe_v4.00.xsd new file mode 100755 index 0000000..f389699 --- /dev/null +++ b/pytrustnfe/xml/schemas/leiauteNFe_v4.00.xsd @@ -0,0 +1,6427 @@ + + + + + + + + + + + + + + + Tipo Nota Fiscal Eletrônica + + + + + Informações da Nota Fiscal eletrônica + + + + + + identificação da NF-e + + + + + + Código da UF do emitente do Documento Fiscal. Utilizar a Tabela do IBGE. + + + + + Código numérico que compõe a Chave de Acesso. Número aleatório gerado pelo emitente para cada NF-e. + + + + + + + + + + + Descrição da Natureza da Operação + + + + + + + + + + + Código do modelo do Documento Fiscal. 55 = NF-e; 65 = NFC-e. + + + + + Série do Documento Fiscal +série normal 0-889 +Avulsa Fisco 890-899 +SCAN 900-999 + + + + + Número do Documento Fiscal + + + + + Data e Hora de emissão do Documento Fiscal (AAAA-MM-DDThh:mm:ssTZD) ex.: 2012-09-01T13:00:00-03:00 + + + + + Data e Hora da saída ou de entrada da mercadoria / produto (AAAA-MM-DDTHH:mm:ssTZD) + + + + + Tipo do Documento Fiscal (0 - entrada; 1 - saída) + + + + + + + + + + + + Identificador de Local de destino da operação (1-Interna;2-Interestadual;3-Exterior) + + + + + + + + + + + + + Código do Município de Ocorrência do Fato Gerador (utilizar a tabela do IBGE) + + + + + Formato de impressão do DANFE (0-sem DANFE;1-DANFe Retrato; 2-DANFe Paisagem;3-DANFe Simplificado; + 4-DANFe NFC-e;5-DANFe NFC-e em mensagem eletrônica) + + + + + + + + + + + + + + + + Forma de emissão da NF-e +1 - Normal; +2 - Contingência FS +3 - Contingência SCAN +4 - Contingência DPEC +5 - Contingência FSDA +6 - Contingência SVC - AN +7 - Contingência SVC - RS +9 - Contingência off-line NFC-e + + + + + + + + + + + + + + + + + + Digito Verificador da Chave de Acesso da NF-e + + + + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Finalidade da emissão da NF-e: +1 - NFe normal +2 - NFe complementar +3 - NFe de ajuste +4 - Devolução/Retorno + + + + + Indica operação com consumidor final (0-Não;1-Consumidor Final) + + + + + + + + + + + + Indicador de presença do comprador no estabelecimento comercial no momento da oepração + (0-Não se aplica (ex.: Nota Fiscal complementar ou de ajuste;1-Operação presencial;2-Não presencial, internet;3-Não presencial, teleatendimento;4-NFC-e entrega em domicílio;5-Operação presencial, fora do estabelecimento;9-Não presencial, outros) + + + + + + + + + + + + + + + + + Processo de emissão utilizado com a seguinte codificação: +0 - emissão de NF-e com aplicativo do contribuinte; +1 - emissão de NF-e avulsa pelo Fisco; +2 - emissão de NF-e avulsa, pelo contribuinte com seu certificado digital, através do site +do Fisco; +3- emissão de NF-e pelo contribuinte com aplicativo fornecido pelo Fisco. + + + + + versão do aplicativo utilizado no processo de +emissão + + + + + + + + + + + Informar apenas +para tpEmis diferente de 1 + + + + Informar a data e hora de entrada em contingência contingência no formato (AAAA-MM-DDThh:mm:ssTZD) ex.: 2012-09-01T13:00:00-03:00. + + + + + Informar a Justificativa da entrada + + + + + + + + + + + + Grupo de infromações da NF referenciada + + + + + + Chave de acesso das NF-e referenciadas. Chave de acesso compostas por Código da UF (tabela do IBGE) + AAMM da emissão + CNPJ do Emitente + modelo, série e número da NF-e Referenciada + Código Numérico + DV. + + + + + Dados da NF modelo 1/1A referenciada ou NF modelo 2 referenciada + + + + + + Código da UF do emitente do Documento Fiscal. Utilizar a Tabela do IBGE. + + + + + AAMM da emissão + + + + + + + + + + + CNPJ do emitente do documento fiscal referenciado + + + + + Código do modelo do Documento Fiscal. Utilizar 01 para NF modelo 1/1A e 02 para NF modelo 02 + + + + + + + + + + + + Série do Documento Fiscal, informar zero se inexistente + + + + + Número do Documento Fiscal + + + + + + + + Grupo com as informações NF de produtor referenciada + + + + + + Código da UF do emitente do Documento FiscalUtilizar a Tabela do IBGE (Anexo IV - Tabela de UF, Município e País) + + + + + AAMM da emissão da NF de produtor + + + + + + + + + + + + CNPJ do emitente da NF de produtor + + + + + CPF do emitente da NF de produtor + + + + + + IE do emitente da NF de Produtor + + + + + Código do modelo do Documento Fiscal - utilizar 04 para NF de produtor ou 01 para NF Avulsa + + + + + + + + + + + + Série do Documento Fiscal, informar zero se inexistentesérie + + + + + Número do Documento Fiscal - 1 – 999999999 + + + + + + + + Utilizar esta TAG para referenciar um CT-e emitido anteriormente, vinculada a NF-e atual + + + + + Grupo do Cupom Fiscal vinculado à NF-e + + + + + + Código do modelo do Documento Fiscal +Preencher com "2B", quando se tratar de Cupom Fiscal emitido por máquina registradora (não ECF), com "2C", quando se tratar de Cupom Fiscal PDV, ou "2D", quando se tratar de Cupom Fiscal (emitido por ECF) + + + + + + + + + + + + + Informar o número de ordem seqüencial do ECF que emitiu o Cupom Fiscal vinculado à NF-e + + + + + + + + + + + Informar o Número do Contador de Ordem de Operação - COO vinculado à NF-e + + + + + + + + + + + + + + + + + + + + Identificação do emitente + + + + + + + Número do CNPJ do emitente + + + + + Número do CPF do emitente + + + + + + Razão Social ou Nome do emitente + + + + + + + + + + + Nome fantasia + + + + + + + + + + + Endereço do emitente + + + + + Inscrição Estadual do Emitente + + + + + Inscricao Estadual do Substituto Tributário + + + + + Grupo de informações de interesse da Prefeitura + + + + Inscrição Municipal + + + + + + + + + + + CNAE Fiscal + + + + + + + + + + + + Código de Regime Tributário. +Este campo será obrigatoriamente preenchido com: +1 – Simples Nacional; +2 – Simples Nacional – excesso de sublimite de receita bruta; +3 – Regime Normal. + + + + + + + + + + + + + + + + Emissão de avulsa, informar os dados do Fisco emitente + + + + + + CNPJ do Órgão emissor + + + + + Órgão emitente + + + + + + + + + + + Matrícula do agente + + + + + + + + + + + Nome do agente + + + + + + + + + + + Telefone + + + + + + + + + + + Sigla da Unidade da Federação + + + + + Número do Documento de Arrecadação de Receita + + + + + + + + + + + Data de emissão do DAR (AAAA-MM-DD) + + + + + Valor Total constante no DAR + + + + + Repartição Fiscal emitente + + + + + + + + + + + Data de pagamento do DAR (AAAA-MM-DD) + + + + + + + + Identificação do Destinatário + + + + + + + Número do CNPJ + + + + + Número do CPF + + + + + Identificador do destinatário, em caso de comprador estrangeiro + + + + + + + + + + + + Razão Social ou nome do destinatário + + + + + + + + + + + Dados do endereço + + + + + Indicador da IE do destinatário: +1 – Contribuinte ICMSpagamento à vista; +2 – Contribuinte isento de inscrição; +9 – Não Contribuinte + + + + + + + + + + + + + Inscrição Estadual (obrigatório nas operações com contribuintes do ICMS) + + + + + Inscrição na SUFRAMA (Obrigatório nas operações com as áreas com benefícios de incentivos fiscais sob controle da SUFRAMA) PL_005d - 11/08/09 - alterado para aceitar 8 ou 9 dígitos + + + + + + + + + + + Inscrição Municipal do tomador do serviço + + + + + + + + + + + Informar o e-mail do destinatário. O campo pode ser utilizado para informar o e-mail +de recepção da NF-e indicada pelo destinatário + + + + + + + + + + + + + + + Identificação do Local de Retirada (informar apenas quando for diferente do endereço do remetente) + + + + + Identificação do Local de Entrega (informar apenas quando for diferente do endereço do destinatário) + + + + + Pessoas autorizadas para o download do XML da NF-e + + + + + + CNPJ Autorizado + + + + + CPF Autorizado + + + + + + + + Dados dos detalhes da NF-e + + + + + + Dados dos produtos e serviços da NF-e + + + + + + Código do produto ou serviço. Preencher com CFOP caso se trate de itens não relacionados com mercadorias/produto e que o contribuinte não possua codificação própria +Formato ”CFOP9999”. + + + + + + + + + + + GTIN (Global Trade Item Number) do produto, antigo código EAN ou código de barras + + + + + + + + + + + Descrição do produto ou serviço + + + + + + + + + + + Código NCM (8 posições), será permitida a informação do gênero (posição do capítulo do NCM) quando a operação não for de comércio exterior (importação/exportação) ou o produto não seja tributado pelo IPI. Em caso de item de serviço ou item que não tenham produto (Ex. transferência de crédito, crédito do ativo imobilizado, etc.), informar o código 00 (zeros) (v2.0) + + + + + + + + + + + Nomenclatura de Valor aduaneio e Estatístico + + + + + + + + + + + + Codigo especificador da Substuicao Tributaria - CEST, que identifica a mercadoria sujeita aos regimes de substituicao tributária e de antecipação do recolhimento do imposto + + + + + + + + + + + + + + + + + + + CNPJ do Fabricante da Mercadoria, obrigatório para produto em escala NÃO relevante. + + + + + + + + + + + + + Código EX TIPI (3 posições) + + + + + + + + + + + Cfop + + + + + + + + + + + Unidade comercial + + + + + + + + + + + Quantidade Comercial do produto, alterado para aceitar de 0 a 4 casas decimais e 11 inteiros. + + + + + Valor unitário de comercialização - alterado para aceitar 0 a 10 casas decimais e 11 inteiros + + + + + Valor bruto do produto ou serviço. + + + + + GTIN (Global Trade Item Number) da unidade tributável, antigo código EAN ou código de barras + + + + + + + + + + + Unidade Tributável + + + + + + + + + + + Quantidade Tributável - alterado para aceitar de 0 a 4 casas decimais e 11 inteiros + + + + + Valor unitário de tributação - - alterado para aceitar 0 a 10 casas decimais e 11 inteiros + + + + + Valor Total do Frete + + + + + Valor Total do Seguro + + + + + Valor do Desconto + + + + + Outras despesas acessórias + + + + + Este campo deverá ser preenchido com: + 0 – o valor do item (vProd) não compõe o valor total da NF-e (vProd) + 1 – o valor do item (vProd) compõe o valor total da NF-e (vProd) + + + + + + + + + + + + Delcaração de Importação +(NT 2011/004) + + + + + + Numero do Documento de Importação DI/DSI/DA/DRI-E (DI/DSI/DA/DRI-E) (NT2011/004) + + + + + + + + + + + Data de registro da DI/DSI/DA (AAAA-MM-DD) + + + + + Local do desembaraço aduaneiro + + + + + + + + + + + UF onde ocorreu o desembaraço aduaneiro + + + + + Data do desembaraço aduaneiro (AAAA-MM-DD) + + + + + Via de transporte internacional informada na DI + 1-Maritima;2-Fluvial;3-Lacustre;4-Aerea;5-Postal;6-Ferroviaria;7-Rodoviaria;8-Conduto;9-Meios Proprios;10-Entrada/Saida Ficta. + + + + + + + + + + + + + + + + + + + + + + Valor Adicional ao frete para renovação de marinha mercante + + + + + Forma de Importação quanto a intermediação + 1-por conta propria;2-por conta e ordem;3-encomenda + + + + + + + + + + + + + CNPJ do adquirente ou do encomendante + + + + + Sigla da UF do adquirente ou do encomendante + + + + + Código do exportador (usado nos sistemas internos de informação do emitente da NF-e) + + + + + + + + + + + Adições (NT 2011/004) + + + + + + Número da Adição + + + + + + + + + + + Número seqüencial do item dentro da Adição + + + + + + + + + + + Código do fabricante estrangeiro (usado nos sistemas internos de informação do emitente da NF-e) + + + + + + + + + + + Valor do desconto do item da DI – adição + + + + + Número do ato concessório de Drawback + + + + + + + + + + + + + + + + + Detalhe da exportação + + + + + + Número do ato concessório de Drawback + + + + + + + + + + + Exportação indireta + + + + + + Registro de exportação + + + + + + + + + + + Chave de acesso da NF-e recebida para exportação + + + + + Quantidade do item efetivamente exportado + + + + + + + + + + + pedido de compra - Informação de interesse do emissor para controle do B2B. + + + + + + + + + + + Número do Item do Pedido de Compra - Identificação do número do item do pedido de Compra + + + + + + + + + + + Número de controle da FCI - Ficha de Conteúdo de Importação. + + + + + + + + Número do lote do produto. + + + + + + + + + + + Quantidade de produto no lote. + + + + + Data de fabricação/produção. Formato "AAAA-MM-DD". + + + + + Data de validade. Informar o último dia do mês caso a validade não especifique o dia. Formato "AAAA-MM-DD". + + + + + + + + + + + + + + + + Informações específicas de produtos e serviços + + + + Veículos novos + + + + + + Tipo da Operação (1 - Venda concessionária; 2 - Faturamento direto; 3 - Venda direta; 0 - Outros) + + + + + + + + + + + + + + Chassi do veículo - VIN (código-identificação-veículo) + + + + + + + + + + + + Cor do veículo (código de cada montadora) + + + + + + + + + + + Descrição da cor + + + + + + + + + + + Potência máxima do motor do veículo em cavalo vapor (CV). (potência-veículo) + + + + + + + + + + + Capacidade voluntária do motor expressa em centímetros cúbicos (CC). (cilindradas) + + + + + + + + + + + Peso líquido + + + + + + + + + + + Peso bruto + + + + + + + + + + + Serial (série) + + + + + + + + + + + Tipo de combustível-Tabela RENAVAM: 01-Álcool; 02-Gasolina; 03-Diesel; 16-Álcool/Gas.; 17-Gas./Álcool/GNV; 18-Gasolina/Elétrico + + + + + + + + + + + Número do motor + + + + + + + + + + + CMT-Capacidade Máxima de Tração - em Toneladas 4 casas decimais + + + + + + + + + + + Distância entre eixos + + + + + + + + + + + Ano Modelo de Fabricação + + + + + + + + + + + Ano de Fabricação + + + + + + + + + + + Tipo de pintura + + + + + + + + + + Tipo de veículo (utilizar tabela RENAVAM) + + + + + + + + + + + Espécie de veículo (utilizar tabela RENAVAM) + + + + + + + + + + + Informa-se o veículo tem VIN (chassi) remarcado. +R-Remarcado +N-NormalVIN + + + + + + + + + + + + Condição do veículo (1 - acabado; 2 - inacabado; 3 - semi-acabado) + + + + + + + + + + + + + Código Marca Modelo (utilizar tabela RENAVAM) + + + + + + + + + + + Código da Cor Segundo as regras de pré-cadastro do DENATRAN: 01-AMARELO;02-AZUL;03-BEGE;04-BRANCA;05-CINZA;06-DOURADA;07-GRENA +08-LARANJA;09-MARROM;10-PRATA;11-PRETA;12-ROSA;13-ROXA;14-VERDE;15-VERMELHA;16-FANTASIA + + + + + + + + + + + + + Quantidade máxima de permitida de passageiros sentados, inclusive motorista. + + + + + + + + + + + + + Restrição +0 - Não há; +1 - Alienação Fiduciária; +2 - Arrendamento Mercantil; +3 - Reserva de Domínio; +4 - Penhor de Veículos; +9 - outras. + + + + + + + + + + + + + + + + + + + grupo do detalhamento de Medicamentos e de matérias-primas farmacêuticas + + + + + + Código de Produto da ANVISA. Utilizar o número do registro do produto da Câmara de Regulação do Mercado de Medicamento – CMED. + + + + + + + + + + Preço Máximo ao Consumidor. + + + + + + + + Armamentos + + + + + + Indicador do tipo de arma de fogo (0 - Uso permitido; 1 - Uso restrito) + + + + + + + + + + + + Número de série da arma + + + + + + + + + + + Número de série do cano + + + + + + + + + + + Descrição completa da arma, compreendendo: calibre, marca, capacidade, tipo de funcionamento, comprimento e demais elementos que permitam a sua perfeita identificação. + + + + + + + + + + + + + + Informar apenas para operações com combustíveis líquidos + + + + + + Código de produto da ANP. codificação de produtos do SIMP (http://www.anp.gov.br) + + + + + + + + + + + Descrição do Produto conforme ANP. Utilizar a descrição de produtos do Sistema de Informações de Movimentação de Produtos - SIMP (http://www.anp.gov.br/simp/). + + + + + + + + + + + Percentual do GLP derivado do petróleo no produto GLP (cProdANP=210203001). Informar em número decimal o percentual do GLP derivado de petróleo no produto GLP. Valores 0 a 100. + + + + + Percentual de gás natural nacional - GLGNn para o produto GLP (cProdANP=210203001). Informar em número decimal o percentual do Gás Natural Nacional - GLGNn para o produto GLP. Valores de 0 a 100. + + + + + Percentual de gás natural importado GLGNi para o produto GLP (cProdANP=210203001). Informar em número deciaml o percentual do Gás Natural Importado - GLGNi para o produto GLP. Valores de 0 a 100. + + + + + Valor de partida (cProdANP=210203001). Deve ser informado neste campo o valor por quilograma sem ICMS. + + + + + Código de autorização / registro do CODIF. Informar apenas quando a UF utilizar o CODIF (Sistema de Controle do Diferimento do Imposto nas Operações com AEAC - Álcool Etílico Anidro Combustível). + + + + + + + + + + + Quantidade de combustível +faturada à temperatura ambiente. +Informar quando a quantidade +faturada informada no campo +qCom (I10) tiver sido ajustada para +uma temperatura diferente da +ambiente. + + + + + Sigla da UF de Consumo + + + + + CIDE Combustíveis + + + + + + BC do CIDE ( Quantidade comercializada) + + + + + Alíquota do CIDE (em reais) + + + + + Valor do CIDE + + + + + + + + Informações do grupo de "encerrante" + + + + + + Numero de identificação do Bico utilizado no abastecimento + + + + + + + + + + + Numero de identificação da bomba ao qual o bico está interligado + + + + + + + + + + + Numero de identificação do tanque ao qual o bico está interligado + + + + + + + + + + + Valor do Encerrante no ínicio do abastecimento + + + + + Valor do Encerrante no final do abastecimento + + + + + + + + + + + Número do RECOPI + + + + + + + + + + + + + + + + Tributos incidentes nos produtos ou serviços da NF-e + + + + + + Valor estimado total de impostos federais, estaduais e municipais + + + + + + + Dados do ICMS Normal e ST + + + + + + Tributação pelo ICMS +00 - Tributada integralmente + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + Tributção pelo ICMS +00 - Tributada integralmente + + + + + + + + + + + Modalidade de determinação da BC do ICMS: +0 - Margem Valor Agregado (%); +1 - Pauta (valor); +2 - Preço Tabelado Máximo (valor); +3 - Valor da Operação. + + + + + + + + + + + + + + Valor da BC do ICMS + + + + + Alíquota do ICMS + + + + + Valor do ICMS + + + + + + Percentual de ICMS relativo ao Fundo de Combate à Pobreza (FCP). + + + + + Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP). + + + + + + + + + Tributação pelo ICMS +10 - Tributada e com cobrança do ICMS por substituição tributária + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + 10 - Tributada e com cobrança do ICMS por substituição tributária + + + + + + + + + + + Modalidade de determinação da BC do ICMS: +0 - Margem Valor Agregado (%); +1 - Pauta (valor); +2 - Preço Tabelado Máximo (valor); +3 - Valor da Operação. + + + + + + + + + + + + + + Valor da BC do ICMS + + + + + Alíquota do ICMS + + + + + Valor do ICMS + + + + + + Valor da Base de cálculo do FCP. + + + + + Percentual de ICMS relativo ao Fundo de Combate à Pobreza (FCP). + + + + + Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP). + + + + + + Modalidade de determinação da BC do ICMS ST: +0 – Preço tabelado ou máximo sugerido; +1 - Lista Negativa (valor); +2 - Lista Positiva (valor); +3 - Lista Neutra (valor); +4 - Margem Valor Agregado (%); +5 - Pauta (valor); + + + + + + + + + + + + + + + + Percentual da Margem de Valor Adicionado ICMS ST + + + + + Percentual de redução da BC ICMS ST + + + + + Valor da BC do ICMS ST + + + + + Alíquota do ICMS ST + + + + + Valor do ICMS ST + + + + + + Valor da Base de cálculo do FCP retido por substituicao tributaria. + + + + + Percentual de FCP retido por substituição tributária. + + + + + Valor do FCP retido por substituição tributária. + + + + + + + + + Tributção pelo ICMS +20 - Com redução de base de cálculo + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + Tributção pelo ICMS +20 - Com redução de base de cálculo + + + + + + + + + + + Modalidade de determinação da BC do ICMS: +0 - Margem Valor Agregado (%); +1 - Pauta (valor); +2 - Preço Tabelado Máximo (valor); +3 - Valor da Operação. + + + + + + + + + + + + + + Percentual de redução da BC + + + + + Valor da BC do ICMS + + + + + Alíquota do ICMS + + + + + Valor do ICMS + + + + + + Valor da Base de cálculo do FCP. + + + + + Percentual de ICMS relativo ao Fundo de Combate à Pobreza (FCP). + + + + + Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP). + + + + + + Grupo desoneração + + + + Valor do ICMS de desoneração + + + + + Motivo da desoneração do ICMS:3-Uso na agropecuária;9-Outros;12-Fomento agropecuário + + + + + + + + + + + + + + + + + Tributação pelo ICMS +30 - Isenta ou não tributada e com cobrança do ICMS por substituição tributária + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + Tributção pelo ICMS +30 - Isenta ou não tributada e com cobrança do ICMS por substituição tributária + + + + + + + + + + + Modalidade de determinação da BC do ICMS ST: +0 – Preço tabelado ou máximo sugerido; +1 - Lista Negativa (valor); +2 - Lista Positiva (valor); +3 - Lista Neutra (valor); +4 - Margem Valor Agregado (%); +5 - Pauta (valor). + + + + + + + + + + + + + + + + Percentual da Margem de Valor Adicionado ICMS ST + + + + + Percentual de redução da BC ICMS ST + + + + + Valor da BC do ICMS ST + + + + + Alíquota do ICMS ST + + + + + Valor do ICMS ST + + + + + + Valor da Base de cálculo do FCP. + + + + + Percentual de FCP retido por substituição tributária. + + + + + Valor do FCP retido por substituição tributária. + + + + + + Grupo desoneração + + + + Valor do ICMS de desoneração + + + + + Motivo da desoneração do ICMS:6-Utilitários Motocicleta AÁrea Livre;7-SUFRAMA;9-Outros + + + + + + + + + + + + + + + + + Tributação pelo ICMS +40 - Isenta +41 - Não tributada +50 - Suspensão + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + Tributação pelo ICMS +40 - Isenta +41 - Não tributada +50 - Suspensão +51 - Diferimento + + + + + + + + + + + + + + O valor do ICMS será informado apenas nas operações com veículos beneficiados com a desoneração condicional do ICMS. + + + + + Este campo será preenchido quando o campo anterior estiver preenchido. +Informar o motivo da desoneração: +1 – Táxi; +3 – Produtor Agropecuário; +4 – Frotista/Locadora; +5 – Diplomático/Consular; +6 – Utilitários e Motocicletas da Amazônia Ocidental e Áreas de Livre Comércio (Resolução 714/88 e 790/94 – CONTRAN e suas alterações); +7 – SUFRAMA; +8 - Venda a órgão Público; +9 – Outros +10- Deficiente Condutor +11- Deficiente não condutor +16 - Olimpíadas Rio 2016 +90 - Solicitado pelo Fisco + + + + + + + + + + + + + + + + + + + + + + + + + + + Tributção pelo ICMS +51 - Diferimento +A exigência do preenchimento das informações do ICMS diferido fica à critério de cada UF. + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + Tributção pelo ICMS +20 - Com redução de base de cálculo + + + + + + + + + + + Modalidade de determinação da BC do ICMS: +0 - Margem Valor Agregado (%); +1 - Pauta (valor); +2 - Preço Tabelado Máximo (valor); +3 - Valor da Operação. + + + + + + + + + + + + + + Percentual de redução da BC + + + + + Valor da BC do ICMS + + + + + Alíquota do imposto + + + + + Valor do ICMS da Operação + + + + + Percentual do diferemento + + + + + Valor do ICMS da diferido + + + + + Valor do ICMS + + + + + + Valor da Base de cálculo do FCP. + + + + + Percentual de ICMS relativo ao Fundo de Combate à Pobreza (FCP). + + + + + Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP). + + + + + + + + + Tributação pelo ICMS +60 - ICMS cobrado anteriormente por substituição tributária + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + Tributação pelo ICMS +60 - ICMS cobrado anteriormente por substituição tributária + + + + + + + + + + + NT2010/004 + + + + Valor da BC do ICMS ST retido anteriormente + + + + + Aliquota suportada pelo consumidor final. + + + + + Valor do ICMS ST retido anteriormente + + + + + + + Valor da Base de cálculo do FCP retido anteriormente por ST. + + + + + Percentual de FCP retido anteriormente por substituição tributária. + + + + + Valor do FCP retido por substituição tributária. + + + + + + + + + Tributação pelo ICMS +70 - Com redução de base de cálculo e cobrança do ICMS por substituição tributária + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + Tributção pelo ICMS +70 - Com redução de base de cálculo e cobrança do ICMS por substituição tributária + + + + + + + + + + + Modalidade de determinação da BC do ICMS: +0 - Margem Valor Agregado (%); +1 - Pauta (valor); +2 - Preço Tabelado Máximo (valor); +3 - Valor da Operação. + + + + + + + + + + + + + + Percentual de redução da BC + + + + + Valor da BC do ICMS + + + + + Alíquota do ICMS + + + + + Valor do ICMS + + + + + + Valor da Base de cálculo do FCP. + + + + + Percentual de ICMS relativo ao Fundo de Combate à Pobreza (FCP). + + + + + Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP). + + + + + + Modalidade de determinação da BC do ICMS ST: +0 – Preço tabelado ou máximo sugerido; +1 - Lista Negativa (valor); +2 - Lista Positiva (valor); +3 - Lista Neutra (valor); +4 - Margem Valor Agregado (%); +5 - Pauta (valor). + + + + + + + + + + + + + + + + Percentual da Margem de Valor Adicionado ICMS ST + + + + + Percentual de redução da BC ICMS ST + + + + + Valor da BC do ICMS ST + + + + + Alíquota do ICMS ST + + + + + Valor do ICMS ST + + + + + + Valor da Base de cálculo do FCP retido por substituição tributária. + + + + + Percentual de FCP retido por substituição tributária. + + + + + Valor do FCP retido por substituição tributária. + + + + + + Grupo desoneração + + + + Valor do ICMS de desoneração + + + + + Motivo da desoneração do ICMS:3-Uso na agropecuária;9-Outros;12-Fomento agropecuário + + + + + + + + + + + + + + + + + Tributação pelo ICMS +90 - Outras + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + Tributção pelo ICMS +90 - Outras + + + + + + + + + + + + Modalidade de determinação da BC do ICMS: +0 - Margem Valor Agregado (%); +1 - Pauta (valor); +2 - Preço Tabelado Máximo (valor); +3 - Valor da Operação. + + + + + + + + + + + + + + Valor da BC do ICMS + + + + + Percentual de redução da BC + + + + + Alíquota do ICMS + + + + + Valor do ICMS + + + + + + Valor da Base de cálculo do FCP. + + + + + Percentual de ICMS relativo ao Fundo de Combate à Pobreza (FCP). + + + + + Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP). + + + + + + + + Modalidade de determinação da BC do ICMS ST: +0 – Preço tabelado ou máximo sugerido; +1 - Lista Negativa (valor); +2 - Lista Positiva (valor); +3 - Lista Neutra (valor); +4 - Margem Valor Agregado (%); +5 - Pauta (valor). + + + + + + + + + + + + + + + + Percentual da Margem de Valor Adicionado ICMS ST + + + + + Percentual de redução da BC ICMS ST + + + + + Valor da BC do ICMS ST + + + + + Alíquota do ICMS ST + + + + + Valor do ICMS ST + + + + + + Valor da Base de cálculo do FCP. + + + + + Percentual de FCP retido por substituição tributária. + + + + + Valor do FCP retido por substituição tributária. + + + + + + + Grupo desoneração + + + + Valor do ICMS de desoneração + + + + + Motivo da desoneração do ICMS:3-Uso na agropecuária;9-Outros;12-Fomento agropecuário + + + + + + + + + + + + + + + + + Partilha do ICMS entre a UF de origem e UF de destino ou a UF definida na legislação +Operação interestadual para consumidor final com partilha do ICMS devido na operação entre a UF de origem e a UF do destinatário ou ou a UF definida na legislação. (Ex. UF da concessionária de entrega do veículos) + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + Tributação pelo ICMS +10 - Tributada e com cobrança do ICMS por substituição tributária; +90 – Outros. + + + + + + + + + + + + Modalidade de determinação da BC do ICMS: +0 - Margem Valor Agregado (%); +1 - Pauta (valor); +2 - Preço Tabelado Máximo (valor); +3 - Valor da Operação. + + + + + + + + + + + + + + Valor da BC do ICMS + + + + + Percentual de redução da BC + + + + + Alíquota do ICMS + + + + + Valor do ICMS + + + + + Modalidade de determinação da BC do ICMS ST: +0 – Preço tabelado ou máximo sugerido; +1 - Lista Negativa (valor); +2 - Lista Positiva (valor); +3 - Lista Neutra (valor); +4 - Margem Valor Agregado (%); +5 - Pauta (valor). + + + + + + + + + + + + + + + + Percentual da Margem de Valor Adicionado ICMS ST + + + + + Percentual de redução da BC ICMS ST + + + + + Valor da BC do ICMS ST + + + + + Alíquota do ICMS ST + + + + + Valor do ICMS ST + + + + + Percentual para determinação do valor da Base de Cálculo da operação própria. + + + + + Sigla da UF para qual é devido o ICMS ST da operação. + + + + + + + + Grupo de informação do ICMSST devido para a UF de destino, nas operações interestaduais de produtos que tiveram retenção antecipada de ICMS por ST na UF do remetente. Repasse via Substituto Tributário. + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + Tributção pelo ICMS +41-Não Tributado. +60-Cobrado anteriormente por substituição tributária. + + + + + + + + + + + + Informar o valor da BC do ICMS ST retido na UF remetente + + + + + Informar o valor do ICMS ST retido na UF remetente (iv2.0)) + + + + + Informar o valor da BC do ICMS ST da UF destino + + + + + Informar o valor da BC do ICMS ST da UF destino (v2.0) + + + + + + + + Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=101 (v.2.0) + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno +(v2.0) + + + + + 101- Tributada pelo Simples Nacional com permissão de crédito. (v.2.0) + + + + + + + + + + + Alíquota aplicável de cálculo do crédito (Simples Nacional). (v2.0) + + + + + Valor crédito do ICMS que pode ser aproveitado nos termos do art. 23 da LC 123 (Simples Nacional) (v2.0) + + + + + + + + Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=102, 103, 300 ou 400 (v.2.0)) + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno +(v2.0) + + + + + 102- Tributada pelo Simples Nacional sem permissão de crédito. +103 – Isenção do ICMS no Simples Nacional para faixa de receita bruta. +300 – Imune. +400 – Não tributda pelo Simples Nacional (v.2.0) (v.2.0) + + + + + + + + + + + + + + + + + Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=201 (v.2.0) + + + + + + Origem da mercadoria: +0 – Nacional; +1 – Estrangeira – Importação direta; +2 – Estrangeira – Adquirida no mercado interno. (v2.0) + + + + + 201- Tributada pelo Simples Nacional com permissão de crédito e com cobrança do ICMS por Substituição Tributária (v.2.0) + + + + + + + + + + + Modalidade de determinação da BC do ICMS ST: +0 – Preço tabelado ou máximo sugerido; +1 - Lista Negativa (valor); +2 - Lista Positiva (valor); +3 - Lista Neutra (valor); +4 - Margem Valor Agregado (%); +5 - Pauta (valor). (v2.0) + + + + + + + + + + + + + + + + Percentual da Margem de Valor Adicionado ICMS ST (v2.0) + + + + + Percentual de redução da BC ICMS ST (v2.0) + + + + + Valor da BC do ICMS ST (v2.0) + + + + + Alíquota do ICMS ST (v2.0) + + + + + Valor do ICMS ST (v2.0) + + + + + + Valor da Base de cálculo do FCP. + + + + + Percentual de FCP retido por substituição tributária. + + + + + Valor do FCP retido por substituição tributária. + + + + + + Alíquota aplicável de cálculo do crédito (Simples Nacional). (v2.0) + + + + + Valor crédito do ICMS que pode ser aproveitado nos termos do art. 23 da LC 123 (Simples Nacional) (v2.0) + + + + + + + + Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=202 ou 203 (v.2.0) + + + + + + Origem da mercadoria: +0 – Nacional; +1 – Estrangeira – Importação direta; +2 – Estrangeira – Adquirida no mercado interno. (v2.0) + + + + + 202- Tributada pelo Simples Nacional sem permissão de crédito e com cobrança do ICMS por Substituição Tributária; +203- Isenção do ICMS nos Simples Nacional para faixa de receita bruta e com cobrança do ICMS por Substituição Tributária (v.2.0) + + + + + + + + + + + + Modalidade de determinação da BC do ICMS ST: +0 – Preço tabelado ou máximo sugerido; +1 - Lista Negativa (valor); +2 - Lista Positiva (valor); +3 - Lista Neutra (valor); +4 - Margem Valor Agregado (%); +5 - Pauta (valor). (v2.0) + + + + + + + + + + + + + + + + Percentual da Margem de Valor Adicionado ICMS ST (v2.0) + + + + + Percentual de redução da BC ICMS ST (v2.0) + + + + + Valor da BC do ICMS ST (v2.0) + + + + + Alíquota do ICMS ST (v2.0) + + + + + Valor do ICMS ST (v2.0) + + + + + + Valor da Base de cálculo do FCP. + + + + + Percentual de FCP retido por substituição tributária. + + + + + Valor do FCP retido por substituição tributária. + + + + + + + + + Tributação do ICMS pelo SIMPLES NACIONAL,CRT=1 – Simples Nacional e CSOSN=500 (v.2.0) + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + 500 – ICMS cobrado anterirmente por substituição tributária (substituído) ou por antecipação +(v.2.0) + + + + + + + + + + + + Valor da BC do ICMS ST retido anteriormente (v2.0) + + + + + Aliquota suportada pelo consumidor final. + + + + + Valor do ICMS ST retido anteriormente (v2.0) + + + + + + + Valor da Base de cálculo do FCP retido anteriormente. + + + + + Percentual de FCP retido anteriormente por substituição tributária. + + + + + Valor do FCP retido por substituição tributária. + + + + + + + + + Tributação do ICMS pelo SIMPLES NACIONAL, CRT=1 – Simples Nacional e CSOSN=900 (v2.0) + + + + + + origem da mercadoria: 0 - Nacional +1 - Estrangeira - Importação direta +2 - Estrangeira - Adquirida no mercado interno + + + + + Tributação pelo ICMS 900 - Outros(v2.0) + + + + + + + + + + + + Modalidade de determinação da BC do ICMS: +0 - Margem Valor Agregado (%); +1 - Pauta (valor); +2 - Preço Tabelado Máximo (valor); +3 - Valor da Operação. + + + + + + + + + + + + + + Valor da BC do ICMS + + + + + Percentual de redução da BC + + + + + Alíquota do ICMS + + + + + Valor do ICMS + + + + + + + Modalidade de determinação da BC do ICMS ST: +0 – Preço tabelado ou máximo sugerido; +1 - Lista Negativa (valor); +2 - Lista Positiva (valor); +3 - Lista Neutra (valor); +4 - Margem Valor Agregado (%); +5 - Pauta (valor). + + + + + + + + + + + + + + + + Percentual da Margem de Valor Adicionado ICMS ST + + + + + Percentual de redução da BC ICMS ST + + + + + Valor da BC do ICMS ST + + + + + Alíquota do ICMS ST + + + + + Valor do ICMS ST + + + + + + Valor da Base de cálculo do FCP. + + + + + Percentual de FCP retido por substituição tributária. + + + + + Valor do FCP retido por substituição tributária. + + + + + + + + Alíquota aplicável de cálculo do crédito (Simples Nacional). (v2.0) + + + + + Valor crédito do ICMS que pode ser aproveitado nos termos do art. 23 da LC 123 (Simples Nacional) (v2.0) + + + + + + + + + + + + + Dados do Imposto de Importação + + + + + + Base da BC do Imposto de Importação + + + + + Valor das despesas aduaneiras + + + + + Valor do Imposto de Importação + + + + + Valor do Imposto sobre Operações Financeiras + + + + + + + + + + + ISSQN + + + + + + Valor da BC do ISSQN + + + + + Alíquota do ISSQN + + + + + Valor da do ISSQN + + + + + Informar o município de ocorrência do fato gerador do ISSQN. Utilizar a Tabela do IBGE (Anexo VII - Tabela de UF, Município e País). “Atenção, não vincular com os campos B12, C10 ou E10” v2.0 + + + + + Informar o Item da lista de serviços da LC 116/03 em que se classifica o serviço. + + + + + Valor dedução para redução da base de cálculo + + + + + Valor outras retenções + + + + + Valor desconto incondicionado + + + + + Valor desconto condicionado + + + + + Valor Retenção ISS + + + + + Exibilidade do ISS:1-Exigível;2-Não incidente;3-Isenção;4-Exportação;5-Imunidade;6-Exig.Susp. Judicial;7-Exig.Susp. ADM + + + + + + + + + + + + + + + + + Código do serviço prestado dentro do município + + + + + + + + + + + + Código do Município de Incidência do Imposto + + + + + Código de Pais + + + + + + + + + + + Número do Processo administrativo ou judicial de suspenção do processo + + + + + + + + + + + + Indicador de Incentivo Fiscal. 1=Sim; 2=Não + + + + + + + + + + + + + + + + + Dados do PIS + + + + + + Código de Situação Tributária do PIS. + 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo); +02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada); + + + + + + Código de Situação Tributária do PIS. + 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo); +02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada); + + + + + + + + + + + + Valor da BC do PIS + + + + + Alíquota do PIS (em percentual) + + + + + Valor do PIS + + + + + + + + Código de Situação Tributária do PIS. +03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto; + + + + + + Código de Situação Tributária do PIS. +03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto; + + + + + + + + + + + Quantidade Vendida (NT2011/004) + + + + + Alíquota do PIS (em reais) (NT2011/004) + + + + + Valor do PIS + + + + + + + + Código de Situação Tributária do PIS. +04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero); +06 - Operação Tributável - Alíquota Zero; +07 - Operação Isenta da contribuição; +08 - Operação Sem Incidência da contribuição; +09 - Operação com suspensão da contribuição; + + + + + + Código de Situação Tributária do PIS. +04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero); +05 - Operação Tributável (ST); +06 - Operação Tributável - Alíquota Zero; +07 - Operação Isenta da contribuição; +08 - Operação Sem Incidência da contribuição; +09 - Operação com suspensão da contribuição; + + + + + + + + + + + + + + + + + + + Código de Situação Tributária do PIS. +99 - Outras Operações. + + + + + + Código de Situação Tributária do PIS. +99 - Outras Operações. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Valor da BC do PIS + + + + + Alíquota do PIS (em percentual) + + + + + + + Quantidade Vendida (NT2011/004) + + + + + Alíquota do PIS (em reais) (NT2011/004) + + + + + + + Valor do PIS + + + + + + + + + + + Dados do PIS Substituição Tributária + + + + + + + + Valor da BC do PIS ST + + + + + Alíquota do PIS ST (em percentual) + + + + + + + Quantidade Vendida + + + + + Alíquota do PIS ST (em reais) + + + + + + + Valor do PIS ST + + + + + + + + Dados do COFINS + + + + + + Código de Situação Tributária do COFINS. + 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo); +02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada); + + + + + + Código de Situação Tributária do COFINS. + 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo); +02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada); + + + + + + + + + + + + Valor da BC do COFINS + + + + + Alíquota do COFINS (em percentual) + + + + + Valor do COFINS + + + + + + + + Código de Situação Tributária do COFINS. +03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto; + + + + + + Código de Situação Tributária do COFINS. +03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto; + + + + + + + + + + Quantidade Vendida (NT2011/004) + + + + + Alíquota do COFINS (em reais) (NT2011/004) + + + + + Valor do COFINS + + + + + + + + Código de Situação Tributária do COFINS: +04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero); +06 - Operação Tributável - Alíquota Zero; +07 - Operação Isenta da contribuição; +08 - Operação Sem Incidência da contribuição; +09 - Operação com suspensão da contribuição; + + + + + + Código de Situação Tributária do COFINS: +04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero); +05 - Operação Tributável (ST); +06 - Operação Tributável - Alíquota Zero; +07 - Operação Isenta da contribuição; +08 - Operação Sem Incidência da contribuição; +09 - Operação com suspensão da contribuição; + + + + + + + + + + + + + + + + + + + Código de Situação Tributária do COFINS: +49 - Outras Operações de Saída +50 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita Tributada no Mercado Interno +51 - Operação com Direito a Crédito – Vinculada Exclusivamente a Receita Não Tributada no Mercado Interno +52 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita de Exportação +53 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno +54 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas no Mercado Interno e de Exportação +55 - Operação com Direito a Crédito - Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação +56 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação +60 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Tributada no Mercado Interno +61 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Não-Tributada no Mercado Interno +62 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita de Exportação +63 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno +64 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas no Mercado Interno e de Exportação +65 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação +66 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação +67 - Crédito Presumido - Outras Operações +70 - Operação de Aquisição sem Direito a Crédito +71 - Operação de Aquisição com Isenção +72 - Operação de Aquisição com Suspensão +73 - Operação de Aquisição a Alíquota Zero +74 - Operação de Aquisição sem Incidência da Contribuição +75 - Operação de Aquisição por Substituição Tributária +98 - Outras Operações de Entrada +99 - Outras Operações. + + + + + + Código de Situação Tributária do COFINS: +49 - Outras Operações de Saída +50 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita Tributada no Mercado Interno +51 - Operação com Direito a Crédito – Vinculada Exclusivamente a Receita Não Tributada no Mercado Interno +52 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita de Exportação +53 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno +54 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas no Mercado Interno e de Exportação +55 - Operação com Direito a Crédito - Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação +56 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação +60 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Tributada no Mercado Interno +61 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Não-Tributada no Mercado Interno +62 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita de Exportação +63 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno +64 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas no Mercado Interno e de Exportação +65 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação +66 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação +67 - Crédito Presumido - Outras Operações +70 - Operação de Aquisição sem Direito a Crédito +71 - Operação de Aquisição com Isenção +72 - Operação de Aquisição com Suspensão +73 - Operação de Aquisição a Alíquota Zero +74 - Operação de Aquisição sem Incidência da Contribuição +75 - Operação de Aquisição por Substituição Tributária +98 - Outras Operações de Entrada +99 - Outras Operações. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Valor da BC do COFINS + + + + + Alíquota do COFINS (em percentual) + + + + + + + Quantidade Vendida (NT2011/004) + + + + + Alíquota do COFINS (em reais) (NT2011/004) + + + + + + + Valor do COFINS + + + + + + + + + + + Dados do COFINS da +Substituição Tributaria; + + + + + + + + Valor da BC do COFINS ST + + + + + Alíquota do COFINS ST(em percentual) + + + + + + + Quantidade Vendida + + + + + Alíquota do COFINS ST(em reais) + + + + + + + Valor do COFINS ST + + + + + + + + Grupo a ser informado nas vendas interestarduais para consumidor final, não contribuinte de ICMS + + + + + + Valor da Base de Cálculo do ICMS na UF do destinatário. + + + + + Valor da Base de Cálculo do FCP na UF do destinatário. + + + + + Percentual adicional inserido na alíquota interna da UF de destino, relativo ao Fundo de Combate à Pobreza (FCP) naquela UF. + + + + + Alíquota adotada nas operações internas na UF do destinatário para o produto / mercadoria. + + + + + Alíquota interestadual das UF envolvidas: - 4% alíquota interestadual para produtos importados; - 7% para os Estados de origem do Sul e Sudeste (exceto ES), destinado para os Estados do Norte e Nordeste ou ES; - 12% para os demais casos. + + + + + + + + + + + + + Percentual de partilha para a UF do destinatário: - 40% em 2016; - 60% em 2017; - 80% em 2018; - 100% a partir de 2019. + + + + + Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP) da UF de destino. + + + + + Valor do ICMS de partilha para a UF do destinatário. + + + + + Valor do ICMS de partilha para a UF do remetente. Nota: A partir de 2019, este valor será zero. + + + + + + + + + + + + + + Percentual de mercadoria devolvida + + + + + Informação de IPI devolvido + + + + + + Valor do IPI devolvido + + + + + + + + + + + Informações adicionais do produto (norma referenciada, informações complementares, etc) + + + + + + + + + + + + Número do item do NF + + + + + + + + + + + + + Dados dos totais da NF-e + + + + + + Totais referentes ao ICMS + + + + + + BC do ICMS + + + + + Valor Total do ICMS + + + + + Valor Total do ICMS desonerado + + + + + Valor total do ICMS relativo ao Fundo de Combate à Pobreza (FCP) para a UF de destino. + + + + + Valor total do ICMS de partilha para a UF do destinatário + + + + + Valor total do ICMS de partilha para a UF do remetente + + + + + Valor Total do FCP (Fundo de Combate à Pobreza). + + + + + BC do ICMS ST + + + + + Valor Total do ICMS ST + + + + + Valor Total do FCP (Fundo de Combate à Pobreza) retido por substituição tributária. + + + + + Valor Total do FCP (Fundo de Combate à Pobreza) retido anteriormente por substituição tributária. + + + + + Valor Total dos produtos e serviços + + + + + Valor Total do Frete + + + + + Valor Total do Seguro + + + + + Valor Total do Desconto + + + + + Valor Total do II + + + + + Valor Total do IPI + + + + + Valor Total do IPI devolvido. Deve ser informado quando preenchido o Grupo Tributos Devolvidos na emissão de nota finNFe=4 (devolução) nas operações com não contribuintes do IPI. Corresponde ao total da soma dos campos id: UA04. + + + + + Valor do PIS + + + + + Valor do COFINS + + + + + Outras Despesas acessórias + + + + + Valor Total da NF-e + + + + + Valor estimado total de impostos federais, estaduais e municipais + + + + + + + + Totais referentes ao ISSQN + + + + + + Valor Total dos Serviços sob não-incidência ou não tributados pelo ICMS + + + + + Base de Cálculo do ISS + + + + + Valor Total do ISS + + + + + Valor do PIS sobre serviços + + + + + Valor do COFINS sobre serviços + + + + + Data da prestação do serviço (AAAA-MM-DD) + + + + + Valor dedução para redução da base de cálculo + + + + + Valor outras retenções + + + + + Valor desconto incondicionado + + + + + Valor desconto condicionado + + + + + Valor Total Retenção ISS + + + + + Código do regime especial de tributação + + + + + + + + + + + + + + + + + + + Retenção de Tributos Federais + + + + + + Valor Retido de PIS + + + + + Valor Retido de COFINS + + + + + Valor Retido de CSLL + + + + + Base de Cálculo do IRRF + + + + + Valor Retido de IRRF + + + + + Base de Cálculo da Retenção da Previdêncica Social + + + + + Valor da Retenção da Previdêncica Social + + + + + + + + + + + Dados dos transportes da NF-e + + + + + + Modalidade do frete +0- Contratação do Frete por conta do Remetente (CIF); +1- Contratação do Frete por conta do destinatário/remetente (FOB); +2- Contratação do Frete por conta de terceiros; +3- Transporte próprio por conta do remetente; +4- Transporte próprio por conta do destinatário; +9- Sem Ocorrência de transporte. + + + + + + + + + + + + + + + + Dados do transportador + + + + + + + CNPJ do transportador + + + + + CPF do transportador + + + + + + Razão Social ou nome do transportador + + + + + + + + + + + Inscrição Estadual (v2.0) + + + + + Endereço completo + + + + + + + + + + + Nome do munícipio + + + + + + + + + + + Sigla da UF + + + + + + + + Dados da retenção ICMS do Transporte + + + + + + Valor do Serviço + + + + + BC da Retenção do ICMS + + + + + Alíquota da Retenção + + + + + Valor do ICMS Retido + + + + + Código Fiscal de Operações e Prestações + + + + + + + + + + + Código do Município de Ocorrência do Fato Gerador (utilizar a tabela do IBGE) + + + + + + + + + + Dados do veículo + + + + + Dados do reboque/Dolly (v2.0) + + + + + + Identificação do vagão (v2.0) + + + + + + + + + + + Identificação da balsa (v2.0) + + + + + + + + + + + + Dados dos volumes + + + + + + Quantidade de volumes transportados + + + + + + + + + + + Espécie dos volumes transportados + + + + + + + + + + + Marca dos volumes transportados + + + + + + + + + + + Numeração dos volumes transportados + + + + + + + + + + + Peso líquido (em kg) + + + + + Peso bruto (em kg) + + + + + + + + Número dos Lacres + + + + + + + + + + + + + + + + + + + + Dados da cobrança da NF-e + + + + + + Dados da fatura + + + + + + Número da fatura + + + + + + + + + + + Valor original da fatura + + + + + Valor do desconto da fatura + + + + + Valor líquido da fatura + + + + + + + + Dados das duplicatas NT 2011/004 + + + + + + Número da duplicata + + + + + + + + + + + Data de vencimento da duplicata (AAAA-MM-DD) + + + + + Valor da duplicata + + + + + + + + + + + Dados de Pagamento. Obrigatório apenas para (NFC-e) NT 2012/004 + + + + + + Grupo de detalhamento da forma de pagamento. + + + + + + Indicador da Forma de Pagamento:0-Pagamento à Vista;1-Pagamento à Prazo; + + + + + + + + + + + + Forma de Pagamento:01-Dinheiro;02-Cheque;03-Cartão de Crédito;04-Cartão de Débito;05-Crédito Loja;10-Vale Alimentação;11-Vale Refeição;12-Vale Presente;13-Vale Combustível;14 - Duplicata Mercantil;15 - Boleto Bancario;90 - Sem Pagamento;99 - Outros + + + + + + + + + + + + + + + + + + + + + + + Valor do Pagamento. Esta tag poderá ser omitida quando a tag tPag=90 (Sem Pagamento), caso contrário deverá ser preenchida. + + + + + Grupo de Cartões + + + + + + Tipo de Integração do processo de pagamento com o sistema de automação da empresa/ + 1=Pagamento integrado com o sistema de automação da empresa Ex. equipamento TEF , Comercio Eletronico + 2=Pagamento não integrado com o sistema de automação da empresa Ex: equipamento POS + + + + + + + + + + + + CNPJ da credenciadora de cartão de crédito/débito + + + + + Bandeira da operadora de cartão de crédito/débito:01–Visa; 02–Mastercard; 03–American Express; 04–Sorocred;05-Diners Club;06-Elo;07-Hipercard;08-Aura;09-Cabal;99–Outros + + + + + + + + + + + + + + + + + + + + Número de autorização da operação cartão de crédito/débito + + + + + + + + + + + + + + + + + Valor do Troco. + + + + + + + + Informações adicionais da NF-e + + + + + + Informações adicionais de interesse do Fisco (v2.0) + + + + + + + + + + + Informações complementares de interesse do Contribuinte + + + + + + + + + + + Campo de uso livre do contribuinte +informar o nome do campo no atributo xCampo +e o conteúdo do campo no xTexto + + + + + + + + + + + + + + + + + + + + + + + + + Campo de uso exclusivo do Fisco +informar o nome do campo no atributo xCampo +e o conteúdo do campo no xTexto + + + + + + + + + + + + + + + + + + + + + + + + + Grupo de informações do processo referenciado + + + + + + Indentificador do processo ou ato +concessório + + + + + + + + + + + Origem do processo, informar com: +0 - SEFAZ; +1 - Justiça Federal; +2 - Justiça Estadual; +3 - Secex/RFB; +9 - Outros + + + + + + + + + + + + + + + + + + + + + Informações de exportação + + + + + + Sigla da UF de Embarque ou de transposição de fronteira + + + + + Local de Embarque ou de transposição de fronteira + + + + + + + + + + + Descrição do local de despacho + + + + + + + + + + + + + + Informações de compras (Nota de Empenho, Pedido e Contrato) + + + + + + Informação da Nota de Empenho de compras públicas (NT2011/004) + + + + + + + + + + + Informação do pedido + + + + + + + + + + + Informação do contrato + + + + + + + + + + + + + + Informações de registro aquisições de cana + + + + + + Identificação da safra + + + + + + + + + + + Mês e Ano de Referência, formato: MM/AAAA + + + + + + + + + + + Fornecimentos diários + + + + + + Quantidade em quilogramas - peso líquido + + + + + + Número do dia + + + + + + + + + + + + + + + + + Total do mês + + + + + Total Anterior + + + + + Total Geral + + + + + Deduções - Taxas e Contribuições + + + + + + Descrição da Dedução + + + + + + + + + + + valor da dedução + + + + + + + + Valor dos fornecimentos + + + + + Valor Total das Deduções + + + + + Valor Líquido dos fornecimentos + + + + + + + + + Versão do leiaute (v4.00) + + + + + PL_005d - 11/08/09 - validação do Id + + + + + + + + + + + + + + + + Informações suplementares Nota Fiscal + + + + + + Texto com o QR-Code impresso no DANFE NFC-e + + + + + + + + + + + + + Informar a URL da "Consulta por chave de acesso da NFC-e". A mesma URL que deve estar informada no DANFE NFC-e para consulta por chave de acesso. + + + + + + + + + + + + + + + + + Tipo Protocolo de status resultado do processamento da NF-e + + + + + Dados do protocolo de status + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que processou a NF-e + + + + + Chaves de acesso da NF-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, série e número da NF-e e código numérico+DV. + + + + + Data e hora de processamento, no formato AAAA-MM-DDTHH:MM:SSTZD. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Lote de NF-e enviado. + + + + + Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - códiga da UF - 2 posições ano; 10 seqüencial no ano. + + + + + Digest Value da NF-e processada. Utilizado para conferir a integridade da NF-e original. + + + + + Código do status da mensagem enviada. + + + + + Descrição literal do status do serviço solicitado. + + + + + + + + + + + + + Tipo Pedido de Concessão de Autorização da Nota Fiscal Eletrônica + + + + + + Indicador de processamento síncrono. 0=NÃO; 1=SIM=Síncrono + + + + + + + + + + + + + + + + Tipo Retorno do Pedido de Autorização da Nota Fiscal Eletrônica + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Lote. + + + + + Código do status da mensagem enviada. + + + + + Descrição literal do status do serviço solicitado. + + + + + código da UF de atendimento + + + + + Data e hora do recebimento, no formato AAAA-MM-DDTHH:MM:SSTZD + + + + + + Dados do Recibo do Lote + + + + + + Número do Recibo + + + + + Tempo médio de resposta do serviço (em segundos) dos últimos 5 minutos + + + + + + + + Protocolo de status resultado do processamento sincrono da NFC-e + + + + + + + + + Tipo Pedido de Consulta do Recido do Lote de Notas Fiscais Eletrônicas + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Número do Recibo + + + + + + + + Tipo Retorno do Pedido de Consulta do Recido do Lote de Notas Fiscais Eletrônicas + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que processou a NF-e + + + + + Número do Recibo Consultado + + + + + Código do status da mensagem enviada. + + + + + Descrição literal do status do serviço solicitado. + + + + + código da UF de atendimento + + + + + Data e hora de processamento, no formato AAAA-MM-DDTHH:MM:SSTZD. Em caso de Rejeição, com data e hora do recebimento do Lote de NF-e enviado. + + + + + + Código da Mensagem (v2.0) +alterado para tamanho variavel 1-4. (NT2011/004) + + + + + + + + + + + Mensagem da SEFAZ para o emissor. (v2.0) + + + + + + + + + + + + Protocolo de status resultado do processamento da NF-e + + + + + + + + Tipo da NF-e processada + + + + + + + + + + Tipo Dados do Endereço // 24/10/08 - tamanho mínimo + + + + + Logradouro + + + + + + + + + + + Número + + + + + + + + + + + Complemento + + + + + + + + + + + Bairro + + + + + + + + + + + Código do município (utilizar a tabela do IBGE), informar 9999999 para operações com o exterior. + + + + + Nome do município, informar EXTERIOR para operações com o exterior. + + + + + + + + + + + Sigla da UF, informar EX para operações com o exterior. + + + + + CEP + + + + + + + + + + + Código de Pais + + + + + + + + + + + Nome do país + + + + + + + + + + + Telefone, preencher com Código DDD + número do telefone , nas operações com exterior é permtido informar o código do país + código da localidade + número do telefone + + + + + + + + + + + + + Tipo Dados do Endereço do Emitente // 24/10/08 - desmembrado / tamanho mínimo + + + + + Logradouro + + + + + + + + + + + Número + + + + + + + + + + + Complemento + + + + + + + + + + + Bairro + + + + + + + + + + + Código do município + + + + + Nome do município + + + + + + + + + + + Sigla da UF + + + + + CEP - NT 2011/004 + + + + + + + + + + + Código do país + + + + + + + + + + Nome do país + + + + + + + + + + + Preencher com Código DDD + número do telefone (v.2.0) + + + + + + + + + + + + + Tipo Dados do Local de Retirada ou Entrega // 24/10/08 - tamanho mínimo // v2.0 + + + + + + CNPJ + + + + + CPF (v2.0) + + + + + + Logradouro + + + + + + + + + + + Número + + + + + + + + + + + Complemento + + + + + + + + + + + Bairro + + + + + + + + + + + Código do município (utilizar a tabela do IBGE) + + + + + Nome do município + + + + + + + + + + + Sigla da UF + + + + + + + Tipo Dados do Veículo + + + + + Placa do veículo (NT2011/004) + + + + + + + + + + + Sigla da UF + + + + + Registro Nacional de Transportador de Carga (ANTT) + + + + + + + + + + + + + Tipo Origem da mercadoria CST ICMS origem da mercadoria: 0-Nacional exceto as indicadas nos códigos 3, 4, 5 e 8; +1-Estrangeira - Importação direta; 2-Estrangeira - Adquirida no mercado interno; 3-Nacional, conteudo superior 40% e inferior ou igual a 70%; 4-Nacional, processos produtivos básicos; 5-Nacional, conteudo inferior 40%; 6-Estrangeira - Importação direta, com similar nacional, lista CAMEX; 7-Estrangeira - mercado interno, sem simular,lista CAMEX;8-Nacional, Conteúdo de Importação superior a 70%. + + + + + + + + + + + + + + + + + Tipo Finalidade da NF-e (1=Normal; 2=Complementar; 3=Ajuste; 4=Devolução/Retorno) + + + + + + + + + + + + Tipo processo de emissão da NF-e + + + + + + + + + + + + Tipo Código da Lista de Serviços LC 116/2003 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Identificação de Lote + + + + + + + + + Tipo Versão da NF-e - 4.00 + + + + + + + + + Identificador único (Globally Unique Identifier) + + + + + + + + + Tipo: Dados do IPI + + + + + CNPJ do produtor da mercadoria, quando diferente do emitente. Somente para os casos de exportação direta ou indireta. + + + + + Código do selo de controle do IPI + + + + + + + + + + + Quantidade de selo de controle do IPI + + + + + + + + + + + Código de Enquadramento Legal do IPI (tabela a ser criada pela RFB) + + + + + + + + + + + + + + + Código da Situação Tributária do IPI: +00-Entrada com recuperação de crédito +49 - Outras entradas +50-Saída tributada +99-Outras saídas + + + + + + + + + + + + + + + + Valor da BC do IPI + + + + + Alíquota do IPI + + + + + + + Quantidade total na unidade padrão para tributação + + + + + Valor por Unidade Tributável. Informar o valor do imposto Pauta por unidade de medida. + + + + + + + Valor do IPI + + + + + + + + + + + Código da Situação Tributária do IPI: +01-Entrada tributada com alíquota zero +02-Entrada isenta +03-Entrada não-tributada +04-Entrada imune +05-Entrada com suspensão +51-Saída tributada com alíquota zero +52-Saída isenta +53-Saída não-tributada +54-Saída imune +55-Saída com suspensão + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pytrustnfe/xml/schemas/nfe_v4.00.xsd b/pytrustnfe/xml/schemas/nfe_v4.00.xsd new file mode 100755 index 0000000..4fe917a --- /dev/null +++ b/pytrustnfe/xml/schemas/nfe_v4.00.xsd @@ -0,0 +1,9 @@ + + + + + + Nota Fiscal Eletrônica + + + diff --git a/pytrustnfe/xml/schemas/tiposBasico_v4.00.xsd b/pytrustnfe/xml/schemas/tiposBasico_v4.00.xsd new file mode 100755 index 0000000..dc7aaf5 --- /dev/null +++ b/pytrustnfe/xml/schemas/tiposBasico_v4.00.xsd @@ -0,0 +1,589 @@ + + + + + + Tipo Código da UF da tabela do IBGE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Código do Município da tabela do IBGE + + + + + + + + + Tipo Chave da Nota Fiscal Eletrônica + + + + + + + + + + Tipo Número do Protocolo de Status + + + + + + + + + + Tipo Número do Recibo do envio de lote de NF-e + + + + + + + + + + Tipo Código da Mensagem enviada + + + + + + + + + + Tipo Número do CNPJ + + + + + + + + + + Tipo Número do CNPJ tmanho varíavel (3-14) + + + + + + + + + + Tipo Número do CNPJ Opcional + + + + + + + + + + Tipo Número do CPF + + + + + + + + + + Tipo Número do CPF de tamanho variável (3-11) + + + + + + + + + + Tipo Decimal com até 1 dígitos inteiros, podendo ter de 1 até 4 decimais + + + + + + + + + Tipo Decimal com até 2 dígitos inteiros, podendo ter de 1 até 4 decimais + + + + + + + + + Tipo Decimal com até 3 dígitos inteiros, podendo ter de 2 até 4 decimais + + + + + + + + + Tipo Decimal com até 3 dígitos inteiros e 2 até 4 decimais. Utilizados em TAGs opcionais, não aceita valor zero. + + + + + + + + + Tipo Decimal com 3 inteiros (no máximo 100), com 2 decimais + + + + + + + + + Tipo Decimal com 3 inteiros (no máximo 100), com 4 decimais + + + + + + + + + Tipo Decimal com 3 inteiros (no máximo 100), com até 4 decimais + + + + + + + + + Tipo Decimal com 8 inteiros, podendo ter de 1 até 3 decimais + + + + + + + + + Tipo Decimal com 11 inteiros, podendo ter 4 decimais + + + + + + + + + Tipo Decimal com 11 inteiros, podendo ter de 1 até 4 decimais + + + + + + + + + Tipo Decimal com 11 inteiros, podendo ter 4 decimais (utilizado em tags opcionais) + + + + + + + + + Tipo Decimal com 11 inteiros, podendo ter de 1 até 10 decimais + + + + + + + + + Tipo Decimal com 12 inteiros, podendo ter 3 decimais + + + + + + + + + Tipo Decimal com 12 inteiros e 4 decimais + + + + + + + + + Tipo Decimal com 12 inteiros de 1 até 4 decimais + + + + + + + + + Tipo Decimal com 12 inteiros com 1 até 4 decimais + + + + + + + + + Tipo Decimal com 12 inteiros, 1 a 4 decimais + + + + + + + + + Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais + + + + + + + + + Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais, utilizado em tags opcionais + + + + + + + + + Tipo Inscrição Estadual do Destinatário // alterado para aceitar vazio ou ISENTO - maio/2010 v2.0 + + + + + + + + + + Tipo Inscrição Estadual do Destinatário // alterado para aceitar vazio ou ISENTO - maio/2010 v2.0 + + + + + + + + + + Tipo Inscrição Estadual do ST // acrescentado EM 24/10/08 + + + + + + + + + + Tipo Inscrição Estadual do Emitente // alterado EM 24/10/08 para aceitar ISENTO + + + + + + + + + + Tipo Modelo Documento Fiscal + + + + + + + + + + Tipo Número do Documento Fiscal + + + + + + + + + Tipo Série do Documento Fiscal + + + + + + + + + Tipo Sigla da UF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Sigla da UF de emissor // acrescentado em 24/10/08 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Ambiente + + + + + + + + + + Tipo Versão do Aplicativo + + + + + + + + + Tipo Motivo + + + + + + + + + Tipo Justificativa + + + + + + + + + Tipo Serviço solicitado + + + + + + Tipo ano + + + + + + + + + Tipo temp médio em segundos + + + + + + + + + Tipo string genérico + + + + + + + + + Tipo data AAAA-MM-DD + + + + + + + + + Tipo hora HH:MM:SS // tipo acrescentado na v2.0 + + + + + + + + + Data e Hora, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm) + + + + + + + + + + + + + + + Tipo Código de orgão (UF da tabela do IBGE + 90 RFB) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pytrustnfe/xml/validate.py b/pytrustnfe/xml/validate.py index 3306b57..3f672ba 100644 --- a/pytrustnfe/xml/validate.py +++ b/pytrustnfe/xml/validate.py @@ -7,7 +7,7 @@ import os from lxml import etree PATH = os.path.dirname(os.path.abspath(__file__)) -SCHEMA = os.path.join(PATH, 'schemas/enviNFe_v3.10.xsd') +SCHEMA = os.path.join(PATH, 'schemas/enviNFe_v4.00.xsd') def valida_nfe(xml_nfe): From 5cbdd146f524695ba0cc636f9617830233975719 Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Wed, 20 Jun 2018 19:46:34 -0300 Subject: [PATCH 18/33] [WIP] Cleanup of useless code, using zeep for NFe soap, adjust xml files --- pytrustnfe/Servidores.py | 86 +++++++++++----------- pytrustnfe/nfe/__init__.py | 63 ++-------------- pytrustnfe/nfe/comunicacao.py | 32 -------- pytrustnfe/nfe/templates/NfeConsultaProtocolo.xml | 5 +- pytrustnfe/nfe/templates/RecepcaoEvento.xml | 23 ++++++ .../nfe/templates/RecepcaoEventoCancelamento.xml | 22 ------ pytrustnfe/nfe/templates/RecepcaoEventoCarta.xml | 21 ------ pytrustnfe/nfe/templates/RecepcaoEventoEPEC.xml | 31 -------- pytrustnfe/utils.py | 9 --- pytrustnfe/xml/__init__.py | 15 +--- tests/test_comunicacao.py | 20 ----- tests/test_servidores.py | 12 +-- 12 files changed, 83 insertions(+), 256 deletions(-) delete mode 100644 pytrustnfe/nfe/comunicacao.py create mode 100644 pytrustnfe/nfe/templates/RecepcaoEvento.xml delete mode 100644 pytrustnfe/nfe/templates/RecepcaoEventoCancelamento.xml delete mode 100644 pytrustnfe/nfe/templates/RecepcaoEventoCarta.xml delete mode 100644 pytrustnfe/nfe/templates/RecepcaoEventoEPEC.xml delete mode 100644 tests/test_comunicacao.py diff --git a/pytrustnfe/Servidores.py b/pytrustnfe/Servidores.py index 62cfd91..e6a5bad 100644 --- a/pytrustnfe/Servidores.py +++ b/pytrustnfe/Servidores.py @@ -314,25 +314,23 @@ UFAM = { UFBA = { AMBIENTE_PRODUCAO: { 'servidor': 'nfe.sefaz.ba.gov.br', - WS_NFE_AUTORIZACAO: 'webservices/NfeAutorizacao/NfeAutorizacao.asmx', - WS_NFE_RET_AUTORIZACAO: - 'webservices/NfeRetAutorizacao/NfeRetAutorizacao.asmx', - WS_NFE_CONSULTA: 'webservices/NfeConsulta/NfeConsulta.asmx', - WS_NFE_SITUACAO: 'webservices/NfeStatusServico/NfeStatusServico.asmx', - WS_NFE_INUTILIZACAO: 'webservices/nfenw/nfeinutilizacao2.asmx', - WS_NFE_CADASTRO: 'webservices/nfenw/CadConsultaCadastro2.asmx', - WS_NFE_RECEPCAO_EVENTO: 'webservices/sre/recepcaoevento.asmx', + WS_NFE_INUTILIZACAO: 'webservices/NFeInutilizacao4/NFeInutilizacao4.asmx?wsdl', + WS_NFE_CONSULTA: 'webservices/NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx?wsdl', + WS_NFE_SITUACAO: 'webservices/NFeStatusServico4/NFeStatusServico4.asmx?wsdl', + WS_NFE_RECEPCAO_EVENTO: 'webservices/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx?wsdl', + WS_NFE_AUTORIZACAO: 'webservices/NFeAutorizacao4/NFeAutorizacao4.asmx?wsdl', + WS_NFE_RET_AUTORIZACAO: 'webservices/NFeRetAutorizacao4/NFeRetAutorizacao4.asmx?wsdl', + WS_NFE_CADASTRO: 'webservices/CadConsultaCadastro4/CadConsultaCadastro4.asmx?wsdl', }, AMBIENTE_HOMOLOGACAO: { 'servidor': 'hnfe.sefaz.ba.gov.br', - WS_NFE_AUTORIZACAO: 'webservices/NfeAutorizacao/NfeAutorizacao.asmx', - WS_NFE_RET_AUTORIZACAO: - 'webservices/NfeRetAutorizacao/NfeRetAutorizacao.asmx', - WS_NFE_CONSULTA: 'webservices/NfeConsulta/NfeConsulta.asmx', - WS_NFE_SITUACAO: 'webservices/NfeStatusServico/NfeStatusServico.asmx', - WS_NFE_INUTILIZACAO: 'webservices/nfenw/nfeinutilizacao2.asmx', - WS_NFE_CADASTRO: 'webservices/nfenw/CadConsultaCadastro2.asmx', - WS_NFE_RECEPCAO_EVENTO: 'webservices/sre/recepcaoevento.asmx', + WS_NFE_INUTILIZACAO: 'webservices/NFeInutilizacao4/NFeInutilizacao4.asmx?wsdl', + WS_NFE_CONSULTA: 'webservices/NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx?wsdl', + WS_NFE_SITUACAO: 'webservices/NFeStatusServico4/NFeStatusServico4.asmx?wsdl', + WS_NFE_RECEPCAO_EVENTO: 'webservices/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx?wsdl', + WS_NFE_AUTORIZACAO: 'webservices/NFeAutorizacao4/NFeAutorizacao4.asmx?wsdl', + WS_NFE_RET_AUTORIZACAO: 'webservices/NFeRetAutorizacao4/NFeRetAutorizacao4.asmx?wsdl', + WS_NFE_CADASTRO: 'webservices/CadConsultaCadastro4/CadConsultaCadastro4.asmx?wsdl', } } @@ -363,23 +361,23 @@ UFCE = { UFGO = { AMBIENTE_PRODUCAO: { 'servidor': 'nfe.sefaz.go.gov.br', - WS_NFE_RECEPCAO_EVENTO: 'nfe/services/v2/RecepcaoEvento', - WS_NFE_AUTORIZACAO: 'nfe/services/v2/NfeAutorizacao', - WS_NFE_RET_AUTORIZACAO: 'nfe/services/v2/NfeRetAutorizacao', - WS_NFE_INUTILIZACAO: 'nfe/services/v2/NfeInutilizacao2', - WS_NFE_CONSULTA: 'nfe/services/v2/NfeConsulta2', - WS_NFE_SITUACAO: 'nfe/services/v2/NfeStatusServico2', - WS_NFE_CADASTRO: 'nfe/services/v2/CadConsultaCadastro2', + WS_NFE_INUTILIZACAO: 'nfe/services/NFeInutilizacao4?wsdl', + WS_NFE_CONSULTA: 'nfe/services/NFeConsultaProtocolo4?wsdl', + WS_NFE_SITUACAO: 'nfe/services/NFeStatusServico4?wsdl', + WS_NFE_RECEPCAO_EVENTO: 'nfe/services/NFeRecepcaoEvento4?wsdl', + WS_NFE_AUTORIZACAO: 'nfe/services/NFeAutorizacao4?wsdl', + WS_NFE_RET_AUTORIZACAO: 'nfe/services/NFeRetAutorizacao4?wsdl', + WS_NFE_CADASTRO: 'nfe/services/CadConsultaCadastro4?wsdl', }, AMBIENTE_HOMOLOGACAO: { 'servidor': 'homolog.sefaz.go.gov.br', - WS_NFE_RECEPCAO_EVENTO: 'nfe/services/v2/RecepcaoEvento', - WS_NFE_AUTORIZACAO: 'nfe/services/v2/NfeAutorizacao', - WS_NFE_RET_AUTORIZACAO: 'nfe/services/v2/NfeRetAutorizacao', - WS_NFE_INUTILIZACAO: 'nfe/services/v2/NfeInutilizacao2', - WS_NFE_CONSULTA: 'nfe/services/v2/NfeConsulta2', - WS_NFE_SITUACAO: 'nfe/services/v2/NfeStatusServico2', - WS_NFE_CADASTRO: 'nfe/services/v2/CadConsultaCadastro2', + WS_NFE_INUTILIZACAO: 'nfe/services/NFeInutilizacao4?wsdl', + WS_NFE_CONSULTA: 'nfe/services/NFeConsultaProtocolo4?wsdl', + WS_NFE_SITUACAO: 'nfe/services/NFeStatusServico4?wsdl', + WS_NFE_RECEPCAO_EVENTO: 'nfe/services/NFeRecepcaoEvento4?wsdl', + WS_NFE_AUTORIZACAO: 'nfe/services/NFeAutorizacao4?wsdl', + WS_NFE_RET_AUTORIZACAO: 'nfe/services/NFeRetAutorizacao4?wsdl', + WS_NFE_CADASTRO: 'nfe/services/CadConsultaCadastro4?wsdl', } } @@ -554,23 +552,23 @@ UFSP = { NFE_MODELO: { AMBIENTE_PRODUCAO: { 'servidor': 'nfe.fazenda.sp.gov.br', - WS_NFE_AUTORIZACAO: 'ws/nfeautorizacao.asmx', - WS_NFE_RET_AUTORIZACAO: 'ws/nferetautorizacao.asmx', - WS_NFE_INUTILIZACAO: 'ws/nfeinutilizacao2.asmx', - WS_NFE_CONSULTA: 'ws/nfeconsulta2.asmx', - WS_NFE_SITUACAO: 'ws/nfestatusservico2.asmx', - WS_NFE_CADASTRO: 'ws/cadconsultacadastro2.asmx', - WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento.asmx', + WS_NFE_INUTILIZACAO: 'ws/nfeinutilizacao4.asmx?wsdl', + WS_NFE_CONSULTA: 'ws/nfeconsultaprotocolo4.asmx?wsdl', + WS_NFE_SITUACAO: 'ws/nfestatusservico4.asmx?wsdl', + WS_NFE_RECEPCAO_EVENTO: 'ws/nferecepcaoevento4.asmx?wsdl', + WS_NFE_AUTORIZACAO: 'ws/nfeautorizacao4.asmx?wsdl', + WS_NFE_RET_AUTORIZACAO: 'ws/nferetautorizacao4.asmx?wsdl', + WS_NFE_CADASTRO: 'ws/cadconsultacadastro4.asmx?wsdl', }, AMBIENTE_HOMOLOGACAO: { 'servidor': 'homologacao.nfe.fazenda.sp.gov.br', - WS_NFE_AUTORIZACAO: 'ws/nfeautorizacao.asmx', - WS_NFE_RET_AUTORIZACAO: 'ws/nferetautorizacao.asmx', - WS_NFE_INUTILIZACAO: 'ws/nfeinutilizacao2.asmx', - WS_NFE_CONSULTA: 'ws/nfeconsulta2.asmx', - WS_NFE_SITUACAO: 'ws/nfestatusservico2.asmx', - WS_NFE_CADASTRO: 'ws/cadconsultacadastro2.asmx', - WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento.asmx', + WS_NFE_INUTILIZACAO: 'ws/nfeinutilizacao4.asmx?wsdl', + WS_NFE_CONSULTA: 'ws/nfeconsultaprotocolo4.asmx?wsdl', + WS_NFE_SITUACAO: 'ws/nfestatusservico4.asmx?wsdl', + WS_NFE_RECEPCAO_EVENTO: 'ws/nferecepcaoevento4.asmx?wsdl', + WS_NFE_AUTORIZACAO: 'ws/nfeautorizacao4.asmx?wsdl', + WS_NFE_RET_AUTORIZACAO: 'ws/nferetautorizacao4.asmx?wsdl', + WS_NFE_CADASTRO: 'ws/cadconsultacadastro4.asmx?wsdl', } }, NFCE_MODELO: { diff --git a/pytrustnfe/nfe/__init__.py b/pytrustnfe/nfe/__init__.py index fdf8a44..c9ecdff 100644 --- a/pytrustnfe/nfe/__init__.py +++ b/pytrustnfe/nfe/__init__.py @@ -7,14 +7,10 @@ import os import hashlib import binascii from lxml import etree -from .comunicacao import executar_consulta from .assinatura import Assinatura from pytrustnfe.xml import render_xml, sanitize_response -from pytrustnfe.utils import CabecalhoSoap from pytrustnfe.utils import gerar_chave, ChaveNFe from pytrustnfe.Servidores import localizar_url, localizar_qrcode -from pytrustnfe.xml.validate import valida_nfe -from pytrustnfe.exceptions import NFeValidationException from pytrustnfe.certificado import extract_cert_and_key_from_pfx, save_cert_key # Zeep @@ -23,26 +19,6 @@ from zeep import Client from zeep.transports import Transport -def _build_header(method, **kwargs): - action = { - 'NfeAutorizacao': ('NfeAutorizacao', '3.10', 'NfeAutorizacao/nfeAutorizacaoLote'), - 'NfeRetAutorizacao': ('NfeRetAutorizacao', '3.10', 'NfeRetAutorizacao/nfeRetAutorizacaoLote'), - 'NfeConsultaCadastro': ('CadConsultaCadastro2', '2.00', 'CadConsultaCadastro2/consultaCadastro2'), - 'NfeInutilizacao': ('NfeInutilizacao2', '3.10', 'NfeInutilizacao2/nfeInutilizacaoNF2'), - 'RecepcaoEventoCancelamento': ('RecepcaoEvento', '1.00', 'RecepcaoEvento/nfeRecepcaoEvento'), - 'RecepcaoEventoCarta': ('RecepcaoEvento', '1.00', 'RecepcaoEvento/nfeRecepcaoEvento'), - 'NFeDistribuicaoDFe': ('NFeDistribuicaoDFe/nfeDistDFeInteresse', '1.00', 'NFeDistribuicaoDFe/nfeDistDFeInteresse'), - 'RecepcaoEventoManifesto': ('RecepcaoEvento', '1.00', 'RecepcaoEvento/nfeRecepcaoEvento'), - } - vals = { - 'estado': kwargs['estado'], - 'method': action[method][0], - 'soap_action': action[method][2], - 'versao': action[method][1] - } - return CabecalhoSoap(**vals) - - def _generate_nfe_id(**kwargs): for item in kwargs['NFes']: vals = { @@ -136,18 +112,6 @@ def _render(certificado, method, sign, **kwargs): modelo = xmlElem_send.find(".//{http://www.portalfiscal.inf.br/nfe}mod") modelo = modelo.text if modelo is not None else '55' - if modelo == '65': - pagamento = etree.Element('pag') - tipo_pagamento = etree.Element('tPag') - valor = etree.Element('vPag') - valor_pago = kwargs['NFes'][0]['infNFe']['total']['vNF'] - metodo_pagamento = kwargs['NFes'][0]['infNFe']['pagamento'] - tipo_pagamento.text, valor.text = metodo_pagamento, valor_pago - pagamento.append(tipo_pagamento) - pagamento.append(valor) - transp = xmlElem_send.find( - ".//{http://www.portalfiscal.inf.br/nfe}transp") - transp.addnext(pagamento) if sign: # Caso for autorização temos que adicionar algumas tags tipo @@ -161,19 +125,9 @@ def _render(certificado, method, sign, **kwargs): if method == 'NfeAutorizacao': xml_send = signer.assina_xml( xmlElem_send, kwargs['NFes'][0]['infNFe']['Id']) - if 'validate' in kwargs: - erros = valida_nfe(xml_send) - if erros: - raise NFeValidationException('Erro ao validar NFe', - erros=erros, - sent_xml=xml_send) - elif method == 'RecepcaoEventoCancelamento': + elif method == 'RecepcaoEvento': xml_send = signer.assina_xml( xmlElem_send, kwargs['eventos'][0]['Id']) - - if method == 'RecepcaoEventoCarta': - xml_send = signer.assina_xml( - xmlElem_send, kwargs['Id']) elif method == 'RecepcaoEventoManifesto': xml_send = signer.assina_xml( xmlElem_send, kwargs['manifesto']['identificador']) @@ -188,8 +142,8 @@ def _render(certificado, method, sign, **kwargs): def _send(certificado, method, **kwargs): xml_send = kwargs["xml"] - base_url = localizar_url(method, kwargs['estado'], kwargs['modelo'], - kwargs['ambiente']) + base_url = localizar_url( + method, kwargs['estado'], kwargs['modelo'], kwargs['ambiente']) cert, key = extract_cert_and_key_from_pfx( certificado.pfx, certificado.password) @@ -208,7 +162,6 @@ def _send(certificado, method, **kwargs): with client.options(raw_response=True): response = client.service[first_operation](xml) response, obj = sanitize_response(response.text) - return { 'sent_xml': xml_send, 'received_xml': response, @@ -238,13 +191,13 @@ def retorno_autorizar_nfe(certificado, **kwargs): def xml_recepcao_evento_cancelamento(certificado, **kwargs): # Assinar - return _render(certificado, 'RecepcaoEventoCancelamento', True, **kwargs) + return _render(certificado, 'RecepcaoEvento', True, **kwargs) def recepcao_evento_cancelamento(certificado, **kwargs): # Assinar if "xml" not in kwargs: kwargs['xml'] = xml_recepcao_evento_cancelamento(certificado, **kwargs) - return _send(certificado, 'RecepcaoEventoCancelamento', **kwargs) + return _send(certificado, 'RecepcaoEvento', **kwargs) def xml_inutilizar_nfe(certificado, **kwargs): @@ -258,7 +211,7 @@ def inutilizar_nfe(certificado, **kwargs): def xml_consultar_protocolo_nfe(certificado, **kwargs): - return _render(certificado, 'NfeConsultaProtocolo', True, **kwargs) + return _render(certificado, 'NfeConsultaProtocolo', False, **kwargs) def consultar_protocolo_nfe(certificado, **kwargs): @@ -289,14 +242,14 @@ def consulta_cadastro(certificado, **kwargs): def xml_recepcao_evento_carta_correcao(certificado, **kwargs): # Assinar - return _render(certificado, 'RecepcaoEventoCarta', True, **kwargs) + return _render(certificado, 'RecepcaoEvento', True, **kwargs) def recepcao_evento_carta_correcao(certificado, **kwargs): # Assinar if "xml" not in kwargs: kwargs['xml'] = xml_recepcao_evento_carta_correcao( certificado, **kwargs) - return _send(certificado, 'RecepcaoEventoCarta', **kwargs) + return _send(certificado, 'RecepcaoEvento', **kwargs) def xml_recepcao_evento_manifesto(certificado, **kwargs): # Assinar diff --git a/pytrustnfe/nfe/comunicacao.py b/pytrustnfe/nfe/comunicacao.py deleted file mode 100644 index e3d82ed..0000000 --- a/pytrustnfe/nfe/comunicacao.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- -# © 2016 Danimar Ribeiro, Trustcode -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). - - -from pytrustnfe.client import HttpClient -from pytrustnfe.certificado import save_cert_key, extract_cert_and_key_from_pfx - -from ..xml import sanitize_response - - -def _soap_xml(body, cabecalho): - xml = '' - xml += '' - xml += '' - xml += body - xml += '' - return xml.rstrip('\n') - - -def executar_consulta(certificado, url, cabecalho, xmlEnviar, send_raw=False): - cert, key = extract_cert_and_key_from_pfx( - certificado.pfx, certificado.password) - cert_path, key_path = save_cert_key(cert, key) - client = HttpClient(url, cert_path, key_path) - - xml_enviar = _soap_xml(xmlEnviar, cabecalho) - if send_raw: - xml = '' + xmlEnviar.rstrip('\n') - xml_enviar = xml - xml_retorno = client.post_soap(xml_enviar, cabecalho, send_raw) - return sanitize_response(xml_retorno.encode()) diff --git a/pytrustnfe/nfe/templates/NfeConsultaProtocolo.xml b/pytrustnfe/nfe/templates/NfeConsultaProtocolo.xml index 0156d9e..588c6d8 100644 --- a/pytrustnfe/nfe/templates/NfeConsultaProtocolo.xml +++ b/pytrustnfe/nfe/templates/NfeConsultaProtocolo.xml @@ -1,6 +1,5 @@ - - + {{ obj.ambiente }} CONSULTAR {{ obj.chave_nfe }} - \ No newline at end of file + diff --git a/pytrustnfe/nfe/templates/RecepcaoEvento.xml b/pytrustnfe/nfe/templates/RecepcaoEvento.xml new file mode 100644 index 0000000..b49a043 --- /dev/null +++ b/pytrustnfe/nfe/templates/RecepcaoEvento.xml @@ -0,0 +1,23 @@ + + {{ idLote }} + {% for evento in eventos %} + + + {{ evento.cOrgao }} + {{ evento.tpAmb }} + {{ evento.CNPJ }} + {{ evento.chNFe }} + {{ evento.dhEvento }} + {{ evento.tpEvento }} + {{ evento.nSeqEvento }} + 1.00 + + {{ evento.descEvento }} + {{ evento.nProt }} + {{ evento.xJust|normalize|escape }} + {{ evento.xCondUso }}. + + + + {% endfor %} + diff --git a/pytrustnfe/nfe/templates/RecepcaoEventoCancelamento.xml b/pytrustnfe/nfe/templates/RecepcaoEventoCancelamento.xml deleted file mode 100644 index 35d587e..0000000 --- a/pytrustnfe/nfe/templates/RecepcaoEventoCancelamento.xml +++ /dev/null @@ -1,22 +0,0 @@ - - {{ idLote }} - {% for evento in eventos %} - - - {{ evento.cOrgao }} - {{ evento.tpAmb }} - {{ evento.CNPJ }} - {{ evento.chNFe }} - {{ evento.dhEvento }} - 110111 - {{ evento.nSeqEvento }} - 1.00 - - Cancelamento - {{ evento.nProt }} - {{ evento.xJust|normalize|escape }} - - - - {% endfor %} - diff --git a/pytrustnfe/nfe/templates/RecepcaoEventoCarta.xml b/pytrustnfe/nfe/templates/RecepcaoEventoCarta.xml deleted file mode 100644 index ced435c..0000000 --- a/pytrustnfe/nfe/templates/RecepcaoEventoCarta.xml +++ /dev/null @@ -1,21 +0,0 @@ - - {{ idLote }} - - - {{ cOrgao }} - {{ tpAmb }} - {{ CNPJ }} - {{ CPF }} - {{ chNFe }} - {{ dhEvento }} - {{ tpEvento }} - {{ nSeqEvento }} - 1.00 - - Carta de Correcao - {{ xCorrecao|normalize|escape }} - A Carta de Correcao e disciplinada pelo paragrafo 1o-A do art. 7o do Convenio S/N, de 15 de dezembro de 1970 e pode ser utilizada para regularizacao de erro ocorrido na emissao de documento fiscal, desde que o erro nao esteja relacionado com: I - as variaveis que determinam o valor do imposto tais como: base de calculo, aliquota, diferenca de preco, quantidade, valor da operacao ou da prestacao; II - a correcao de dados cadastrais que implique mudanca do remetente ou do destinatario; III - a data de emissao ou de saida. - - - - diff --git a/pytrustnfe/nfe/templates/RecepcaoEventoEPEC.xml b/pytrustnfe/nfe/templates/RecepcaoEventoEPEC.xml deleted file mode 100644 index 12a8478..0000000 --- a/pytrustnfe/nfe/templates/RecepcaoEventoEPEC.xml +++ /dev/null @@ -1,31 +0,0 @@ - - 00106151340701 - - - 91 - 2 - 10142785000190 - 35140810142785000190550010010615134079599952 - 2014-08-07T04:52:51-03:00 - 110140 - 1 - 1.00 - - EPEC - 35 - 1 - 1.26 - 2014-08-07T00:00:00-03:00 - 1 - 495171423115 - - SP - 00000000191 - 86.00 - 6.02 - 0 - - - - - \ No newline at end of file diff --git a/pytrustnfe/utils.py b/pytrustnfe/utils.py index b5964ae..540fbb9 100644 --- a/pytrustnfe/utils.py +++ b/pytrustnfe/utils.py @@ -8,15 +8,6 @@ from datetime import date, datetime import lxml.etree as ET -class CabecalhoSoap(object): - - def __init__(self, **kwargs): - self.versao = kwargs.pop('versao', '') - self.estado = kwargs.pop('estado', '') - self.method = kwargs.pop('method', '') - self.soap_action = kwargs.pop('soap_action', '') - - class ChaveNFe(object): def __init__(self, **kwargs): diff --git a/pytrustnfe/xml/__init__.py b/pytrustnfe/xml/__init__.py index 5cf7454..fd870a2 100644 --- a/pytrustnfe/xml/__init__.py +++ b/pytrustnfe/xml/__init__.py @@ -15,18 +15,6 @@ def recursively_empty(e): return all((recursively_empty(c) for c in e.iterchildren())) -def recursively_normalize(vals): - for item in vals: - if type(vals[item]) is str: - vals[item] = vals[item].strip() - elif type(vals[item]) is dict: - recursively_normalize(vals[item]) - elif type(vals[item]) is list: - for a in vals[item]: - recursively_normalize(a) - return vals - - def render_xml(path, template_name, remove_empty, **nfe): nfe = recursively_normalize(nfe) env = Environment( @@ -58,7 +46,8 @@ def render_xml(path, template_name, remove_empty, **nfe): def sanitize_response(response): - tree = etree.fromstring(response) + parser = etree.XMLParser(encoding='utf-8') + tree = etree.fromstring(response.encode('UTF-8'), parser=parser) # Remove namespaces inuteis na resposta for elem in tree.getiterator(): if not hasattr(elem.tag, 'find'): diff --git a/tests/test_comunicacao.py b/tests/test_comunicacao.py deleted file mode 100644 index b47c3a1..0000000 --- a/tests/test_comunicacao.py +++ /dev/null @@ -1,20 +0,0 @@ -# coding=utf-8 -''' -Created on Jun 16, 2015 - -@author: danimar -''' -import unittest -import os.path - - -XML_RETORNO = '103' \ - '42' - - -class test_comunicacao(unittest.TestCase): - - caminho = os.path.dirname(__file__) - - def test_envio_nfe(self): - pass diff --git a/tests/test_servidores.py b/tests/test_servidores.py index 2083f2c..69d4bce 100644 --- a/tests/test_servidores.py +++ b/tests/test_servidores.py @@ -7,22 +7,22 @@ Created on Jun 14, 2015 import unittest from pytrustnfe.Servidores import localizar_url, localizar_qrcode -url_ba = 'https://nfe.sefaz.ba.gov.br/webservices/NfeAutorizacao/NfeAutoriza\ -cao.asmx' +url_ba = 'https://nfe.sefaz.ba.gov.br/webservices/NFeAutorizacao4/NFeAutoriza\ +cao4.asmx?wsdl' -url_sp = 'https://nfe.fazenda.sp.gov.br/ws/nfeautorizacao.asmx' +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_sc = 'https://nfe.svrs.rs.gov.br/ws/NfeAutorizacao/NfeAutorizacao.asmx' +url_sc = 'https://nfe.svrs.rs.gov.br/ws/NfeAutorizacao/NFeAutorizacao4.asmx' url_rs = 'https://nfe.sefazrs.rs.gov.br/ws/NfeAutorizacao/NFeAutorizacao.asmx' url_cad_rs = 'https://cad.sefazrs.rs.gov.br/ws/cadconsultacadastro/cadcon\ sultacadastro2.asmx' -url_cad_sc = 'https://cad.svrs.rs.gov.br/ws/CadConsultaCadastro/CadConsult\ -aCadastro2.asmx' +url_cad_sc = 'https://cad.svrs.rs.gov.br/ws/cadconsultacadastro/cadconsulta\ +cadastro2.asmx' class test_servidores(unittest.TestCase): From 4572b99fcbdbc7b0c8678267eedf58b74a2015a3 Mon Sep 17 00:00:00 2001 From: carcaroff Date: Thu, 14 Jun 2018 17:05:10 -0300 Subject: [PATCH 19/33] [WIP]NFS-e Maringa --- pytrustnfe/nfse/mga/__init__.py | 13 ++---- pytrustnfe/nfse/mga/assinatura.py | 19 ++++----- pytrustnfe/nfse/mga/templates/CancelarNfse.xml | 6 ++- pytrustnfe/nfse/mga/templates/GerarNfse.xml | 10 +---- pytrustnfe/nfse/mga/templates/Rps.xml | 56 +++++++++++--------------- setup.py | 2 +- 6 files changed, 42 insertions(+), 64 deletions(-) diff --git a/pytrustnfe/nfse/mga/__init__.py b/pytrustnfe/nfse/mga/__init__.py index a3d207f..ee0cbbc 100644 --- a/pytrustnfe/nfse/mga/__init__.py +++ b/pytrustnfe/nfse/mga/__init__.py @@ -2,7 +2,6 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). import os -from lxml import etree from requests import Session from zeep import Client from zeep.transports import Transport @@ -19,27 +18,22 @@ def _render(certificado, method, **kwargs): reference = '' if method == 'GerarNfse': reference = 'rps:%s' % kwargs['rps']['numero'] - ref_lote = 'lote%s' % kwargs['rps']['numero_lote'] elif method == 'CancelarNfse': reference = 'Cancelamento_NF%s' % kwargs['cancelamento']['numero_nfse'] signer = Assinatura(certificado.pfx, certificado.password) xml_send = signer.assina_xml(xml_send, reference) - xml_send = signer.assina_xml(etree.fromstring(xml_send), ref_lote) return xml_send.encode('utf-8') def _send(certificado, method, **kwargs): base_url = '' if kwargs['ambiente'] == 'producao': - base_url = 'https://isse.maringa.gov.br/ws/?wsdl' + base_url = 'https://isse.maringa.pr.gov.br/ws/?wsdl' else: - base_url = 'https://isseteste.maringa.gov.br/ws/?wsdl' + base_url = 'https://isseteste.maringa.pr.gov.br/ws/?wsdl' xml_send = kwargs["xml"].decode('utf-8') - xml_cabecalho = '\ - \ - 1.00' cert, key = extract_cert_and_key_from_pfx( certificado.pfx, certificado.password) @@ -51,8 +45,7 @@ def _send(certificado, method, **kwargs): transport = Transport(session=session) client = Client(base_url, transport=transport) - - response = client.service[method](xml_cabecalho, xml_send) + response = client.service[method](xml_send) response, obj = sanitize_response(response.encode('utf-8')) return { diff --git a/pytrustnfe/nfse/mga/assinatura.py b/pytrustnfe/nfse/mga/assinatura.py index 1831379..3b302fe 100644 --- a/pytrustnfe/nfse/mga/assinatura.py +++ b/pytrustnfe/nfse/mga/assinatura.py @@ -22,23 +22,24 @@ class Assinatura(object): element.text = None signer = XMLSigner( - method=signxml.methods.enveloped, signature_algorithm="rsa-sha1", - digest_algorithm='sha1', - c14n_algorithm='http://www.w3.org/TR/2001/REC-xml-c14n-20010315') + method=signxml.methods.enveloped, signature_algorithm=u"rsa-sha1", + digest_algorithm=u'sha1', + c14n_algorithm=u'http://www.w3.org/TR/2001/REC-xml-c14n-20010315') ns = {} ns[None] = signer.namespaces['ds'] signer.namespaces = ns + element_to_be_signed = xml_element.getchildren()[0].getchildren()[0] - ref_uri = ('#%s' % reference) if reference else None signed_root = signer.sign( - xml_element, key=key.encode(), cert=cert.encode(), - reference_uri=ref_uri) + element_to_be_signed, key=key.encode(), cert=cert.encode()) if reference: element_signed = signed_root.find(".//*[@Id='%s']" % reference) - signature = signed_root.find(".//*[@URI='#%s']" % reference).getparent().getparent() + + signature = signed_root.find( + ".//{http://www.w3.org/2000/09/xmldsig#}Signature") if element_signed is not None and signature is not None: - parent = element_signed.getparent() + parent = xml_element.getchildren()[0] parent.append(signature) - return etree.tostring(signed_root, encoding=str) + return etree.tostring(xml_element, encoding=str) diff --git a/pytrustnfe/nfse/mga/templates/CancelarNfse.xml b/pytrustnfe/nfse/mga/templates/CancelarNfse.xml index 137897e..6c95398 100644 --- a/pytrustnfe/nfse/mga/templates/CancelarNfse.xml +++ b/pytrustnfe/nfse/mga/templates/CancelarNfse.xml @@ -1,9 +1,11 @@ - + {{ cancelamento.numero_nfse }} - {{ cancelamento.cnpj_prestador }} + + {{ cancelamento.cnpj_prestador }} + {{ cancelamento.inscricao_municipal }} {{ cancelamento.cidade }} diff --git a/pytrustnfe/nfse/mga/templates/GerarNfse.xml b/pytrustnfe/nfse/mga/templates/GerarNfse.xml index 6b35d4d..ae702fd 100644 --- a/pytrustnfe/nfse/mga/templates/GerarNfse.xml +++ b/pytrustnfe/nfse/mga/templates/GerarNfse.xml @@ -1,11 +1,3 @@ - - {{ rps.numero_lote }} - {{ rps.prestador.cnpj }} - {{ rps.prestador.inscricao_municipal }} - 1 - - {% include 'Rps.xml' %} - - + {% include 'Rps.xml' %} diff --git a/pytrustnfe/nfse/mga/templates/Rps.xml b/pytrustnfe/nfse/mga/templates/Rps.xml index 0dfd0cf..489db01 100644 --- a/pytrustnfe/nfse/mga/templates/Rps.xml +++ b/pytrustnfe/nfse/mga/templates/Rps.xml @@ -1,21 +1,15 @@ - - - {{ rps.numero }} - {{ rps.serie }} - {{ rps.tipo_rps }} - - {{ rps.data_emissao }} - {{ rps.natureza_operacao }} - {{ rps.regime_tributacao }} - {{ rps.optante_simples }} - {{ rps.incentivador_cultural }} - {{ rps.status }} - - {{ rps.numero_substituido }} - {{ rps.serie_substituido }} - {{ rps.tipo_substituido }} - + + + + {{ rps.numero }} + {{ rps.serie }} + {{ rps.tipo_rps }} + + {{ rps.data_emissao }} + {{ rps.status }} + + {{ rps.data_emissao }} {{ rps.valor_servico }} @@ -25,24 +19,25 @@ {{ rps.valor_inss }} {{ rps.valor_ir }} {{ rps.valor_csll }} - {{ rps.iss_retido }} - {{ rps.valor_iss }} - {{ rps.valor_iss_retido }} {{ rps.outras_retencoes }} - {{ rps.base_calculo }} + {{ rps.valor_iss }} {{ rps.aliquota_issqn }} - {{ rps.valor_liquido_nfse }} {{ rps.desconto_incondicionado }} {{ rps.desconto_condicionado }} + {{ rps.iss_retido }} {{ rps.codigo_servico }} {{ rps.cnae_servico }} {{ rps.codigo_tributacao_municipio }} {{ rps.descricao }} {{ rps.codigo_municipio }} + {{ rps.codigo_pais }} + {{ rps.exigibilidade_iss}} - {{ rps.prestador.cnpj }} + + {{ rps.prestador.cnpj }} + {{ rps.prestador.inscricao_municipal }} @@ -65,6 +60,7 @@ {{ rps.tomador.bairro }} {{ rps.tomador.cidade }} {{ rps.tomador.uf }} + {{ rps.tomador.codigo_pais }} {{ rps.tomador.cep }} @@ -72,20 +68,14 @@ {{ rps.tomador.email }} - {% if rps.intermediario is defined -%} - - {{ rps.intermediario.razao_social }} - - {{ rps.intermediario.cnpj }} - - {{ rps.intermediario.inscricao_municipal }} - - {% endif %} {% if rps.construcao_civil is defined -%} {{ rps.construcao_civil.codigo_obra }} {{ rps.construcao_civil.art }} {% endif %} - + {{ rps.regime_tributacao }} + {{ rps.optante_simples }} + {{ rps.incentivador_cultural }} + diff --git a/setup.py b/setup.py index 9337653..10eb464 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages -VERSION = "0.9.24" +VERSION = "0.9.25" setup( From 70816097e9959996e996246b4a929015076f524a Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Wed, 27 Jun 2018 17:35:35 -0300 Subject: [PATCH 20/33] [IMP] Implementing NFe 4.0 - Cleaning up code and improve readability --- pytrustnfe/Servidores.py | 16 ++++---- pytrustnfe/client.py | 31 --------------- pytrustnfe/nfe/__init__.py | 45 +++++++++++++++------- pytrustnfe/nfe/templates/NFeDistribuicaoDFe.xml | 30 ++++++--------- pytrustnfe/nfe/templates/RecepcaoEvento.xml | 2 +- .../nfe/templates/RecepcaoEventoManifesto.xml | 2 +- 6 files changed, 52 insertions(+), 74 deletions(-) diff --git a/pytrustnfe/Servidores.py b/pytrustnfe/Servidores.py index e6a5bad..2328f14 100644 --- a/pytrustnfe/Servidores.py +++ b/pytrustnfe/Servidores.py @@ -56,6 +56,7 @@ SIGLA_ESTADO = { '28': 'SE', '35': 'SP', '17': 'TO', + '91': 'AN' } @@ -250,17 +251,15 @@ SVC_RS = { AN = { AMBIENTE_PRODUCAO: { 'servidor': 'www1.nfe.fazenda.gov.br', - WS_NFE_RECEPCAO_EVENTO: 'RecepcaoEvento/RecepcaoEvento.asmx', - WS_DFE_DISTRIBUICAO: 'NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx', - WS_DOWNLOAD_NFE: 'NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx', - WS_NFE_RECEPCAO_EVENTO: 'RecepcaoEvento/RecepcaoEvento.asmx', + WS_DFE_DISTRIBUICAO: 'NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx?wsdl', + WS_DOWNLOAD_NFE: 'NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx?wsdl', + WS_NFE_RECEPCAO_EVENTO: 'NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx?wsdl', }, AMBIENTE_HOMOLOGACAO: { 'servidor': 'hom.nfe.fazenda.gov.br', - WS_NFE_RECEPCAO_EVENTO: 'RecepcaoEvento/RecepcaoEvento.asmx', - WS_DFE_DISTRIBUICAO: 'NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx', - WS_DOWNLOAD_NFE: 'NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx', - WS_NFE_RECEPCAO_EVENTO: 'RecepcaoEvento/RecepcaoEvento.asmx', + WS_DFE_DISTRIBUICAO: 'NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx?wsdl', + WS_DOWNLOAD_NFE: 'NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx?wsdl', + WS_NFE_RECEPCAO_EVENTO: 'NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx?Wsdl', }, } @@ -626,4 +625,5 @@ ESTADO_WS = { 'SE': SVRS, 'SP': UFSP, 'TO': SVRS, + 'AN': AN, } diff --git a/pytrustnfe/client.py b/pytrustnfe/client.py index e6e67e3..7ed1c5a 100644 --- a/pytrustnfe/client.py +++ b/pytrustnfe/client.py @@ -2,11 +2,9 @@ # © 2016 Danimar Ribeiro, Trustcode # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -import urllib3 import requests import suds.client import suds_requests -from requests.packages.urllib3.exceptions import InsecureRequestWarning def get_authenticated_client(base_url, cert, key): @@ -33,32 +31,3 @@ def get_client(base_url): cache=cache, transport=suds_requests.RequestsTransport(session) ) - - -class HttpClient(object): - - def __init__(self, url, cert_path, key_path): - self.url = url - self.cert_path = cert_path - self.key_path = key_path - - def _headers(self, action, send_raw): - if send_raw: - return { - 'Content-type': 'text/xml; charset=utf-8;', - 'SOAPAction': "http://www.portalfiscal.inf.br/nfe/wsdl/%s" % action, - 'Accept': 'application/soap+xml; charset=utf-8', - } - - return { - 'Content-type': 'application/soap+xml; charset=utf-8;', - 'SOAPAction': 'http://www.portalfiscal.inf.br/nfe/wsdl/%s' % action, - } - - def post_soap(self, xml_soap, cabecalho, send_raw): - header = self._headers(cabecalho.soap_action, send_raw) - urllib3.disable_warnings(category=InsecureRequestWarning) - res = requests.post(self.url, data=xml_soap.encode('utf-8'), - cert=(self.cert_path, self.key_path), - verify=False, headers=header) - return res.text diff --git a/pytrustnfe/nfe/__init__.py b/pytrustnfe/nfe/__init__.py index c9ecdff..c067c83 100644 --- a/pytrustnfe/nfe/__init__.py +++ b/pytrustnfe/nfe/__init__.py @@ -165,7 +165,7 @@ def _send(certificado, method, **kwargs): return { 'sent_xml': xml_send, 'received_xml': response, - 'object': obj.Body.nfeResultMsg + 'object': obj.Body.getchildren()[0] } @@ -253,23 +253,13 @@ def recepcao_evento_carta_correcao(certificado, **kwargs): # Assinar def xml_recepcao_evento_manifesto(certificado, **kwargs): # Assinar - return _render(certificado, 'RecepcaoEventoManifesto', True, **kwargs) + return _render(certificado, 'RecepcaoEvento', True, **kwargs) def recepcao_evento_manifesto(certificado, **kwargs): # Assinar if "xml" not in kwargs: kwargs['xml'] = xml_recepcao_evento_manifesto(certificado, **kwargs) - return _send(certificado, 'RecepcaoEventoManifesto', **kwargs) - - -def xml_recepcao_evento_epec(certificado, **kwargs): # Assinar - return _render(certificado, 'RecepcaoEventoEPEC', True, **kwargs) - - -def recepcao_evento_epec(certificado, **kwargs): # Assinar - if "xml" not in kwargs: - kwargs['xml'] = xml_recepcao_evento_epec(certificado, **kwargs) - return _send(certificado, 'RecepcaoEventoEPEC', **kwargs) + return _send(certificado, 'RecepcaoEvento', **kwargs) def xml_consulta_distribuicao_nfe(certificado, **kwargs): # Assinar @@ -279,7 +269,34 @@ def xml_consulta_distribuicao_nfe(certificado, **kwargs): # Assinar def consulta_distribuicao_nfe(certificado, **kwargs): if "xml" not in kwargs: kwargs['xml'] = xml_consulta_distribuicao_nfe(certificado, **kwargs) - return _send(certificado, 'NFeDistribuicaoDFe', **kwargs) + xml_send = kwargs["xml"] + base_url = localizar_url( + 'NFeDistribuicaoDFe', kwargs['estado'], kwargs['modelo'], + kwargs['ambiente']) + + cert, key = extract_cert_and_key_from_pfx( + certificado.pfx, certificado.password) + cert, key = save_cert_key(cert, key) + + session = Session() + session.cert = (cert, key) + session.verify = False + transport = Transport(session=session) + + xml = etree.fromstring(xml_send) + xml_um = etree.fromstring('AN1.00') + client = Client(base_url, transport=transport) + + port = next(iter(client.wsdl.port_types)) + first_operation = next(iter(client.wsdl.port_types[port].operations)) + with client.options(raw_response=True): + response = client.service[first_operation](nfeDadosMsg=xml, _soapheaders=[xml_um]) + response, obj = sanitize_response(response.text) + return { + 'sent_xml': xml_send, + 'received_xml': response, + 'object': obj.Body.nfeDistDFeInteresseResponse.nfeDistDFeInteresseResult + } def xml_download_nfe(certificado, **kwargs): # Assinar diff --git a/pytrustnfe/nfe/templates/NFeDistribuicaoDFe.xml b/pytrustnfe/nfe/templates/NFeDistribuicaoDFe.xml index 9e4d774..cd3fc38 100644 --- a/pytrustnfe/nfe/templates/NFeDistribuicaoDFe.xml +++ b/pytrustnfe/nfe/templates/NFeDistribuicaoDFe.xml @@ -1,19 +1,11 @@ - - - - - - {{ ambiente }} - {{ estado }} - {{ cnpj_cpf }} - - {{ ultimo_nsu }} - - - {{ chave_nfe }} - - - - - - + + {{ ambiente }} + {{ estado }} + {{ cnpj_cpf }} + + {{ ultimo_nsu }} + + + {{ chave_nfe }} + + diff --git a/pytrustnfe/nfe/templates/RecepcaoEvento.xml b/pytrustnfe/nfe/templates/RecepcaoEvento.xml index b49a043..58a3a67 100644 --- a/pytrustnfe/nfe/templates/RecepcaoEvento.xml +++ b/pytrustnfe/nfe/templates/RecepcaoEvento.xml @@ -15,7 +15,7 @@ {{ evento.descEvento }} {{ evento.nProt }} {{ evento.xJust|normalize|escape }} - {{ evento.xCondUso }}. + {{ evento.xCondUso }} diff --git a/pytrustnfe/nfe/templates/RecepcaoEventoManifesto.xml b/pytrustnfe/nfe/templates/RecepcaoEventoManifesto.xml index 0d77fa3..d592678 100644 --- a/pytrustnfe/nfe/templates/RecepcaoEventoManifesto.xml +++ b/pytrustnfe/nfe/templates/RecepcaoEventoManifesto.xml @@ -1,7 +1,7 @@ {{ lote }} - + 91 {{ ambiente }} {{ manifesto.cnpj_empresa }} From f0f38237f2e5598e2dfd8534cb0e96d894e05b31 Mon Sep 17 00:00:00 2001 From: guilherme Date: Fri, 6 Jul 2018 13:33:52 -0300 Subject: [PATCH 21/33] corrected issues in layout of danfe --- pytrustnfe/nfe/danfe.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pytrustnfe/nfe/danfe.py b/pytrustnfe/nfe/danfe.py index 5b578bc..63decf9 100644 --- a/pytrustnfe/nfe/danfe.py +++ b/pytrustnfe/nfe/danfe.py @@ -323,7 +323,7 @@ class danfe(object): P = Paragraph(tagtext(oNode=elem_emit, cTag='xNome'), styleN) w, h = P.wrap(55 * mm, 40 * mm) P.drawOn(self.canvas, (self.nLeft + 30) * mm, - (self.height - self.nlin - ((5*h + 12)/12)) * mm) + (self.height - self.nlin - ((4.3*h + 12)/12)) * mm) if self.logo: img = get_image(self.logo, width=2 * cm) @@ -347,7 +347,7 @@ class danfe(object): P = Paragraph(cEnd, styleN) w, h = P.wrap(55 * mm, 30 * mm) P.drawOn(self.canvas, (self.nLeft + 30) * mm, - (self.height - self.nlin - 31) * mm) + (self.height - self.nlin - 33) * mm) # Homologação if tagtext(oNode=elem_ide, cTag='tpAmb') == '2': From 9817897d30e56c7d0d02035c9c022bb70afb7dbe Mon Sep 17 00:00:00 2001 From: guilherme Date: Fri, 6 Jul 2018 14:25:47 -0300 Subject: [PATCH 22/33] update library version --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 10eb464..f548242 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages -VERSION = "0.9.25" +VERSION = "0.9.26" setup( From c95cba8ae7716891200244d2adf4440de8896255 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A1bio=20Luna?= Date: Thu, 26 Jul 2018 18:52:50 +0000 Subject: [PATCH 23/33] =?UTF-8?q?Corrige=20webservice=20de=20recep=C3=A7?= =?UTF-8?q?=C3=A3o=20de=20eventos=20do=20Paran=C3=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pytrustnfe/Servidores.py | 8 ++++---- setup.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pytrustnfe/Servidores.py b/pytrustnfe/Servidores.py index 0ddc8d4..abf7c45 100644 --- a/pytrustnfe/Servidores.py +++ b/pytrustnfe/Servidores.py @@ -507,8 +507,8 @@ UFPR = { WS_NFE_CONSULTA: 'nfe/NFeConsulta3', WS_NFE_SITUACAO: 'nfe/NFeStatusServico3', WS_NFE_CADASTRO: 'nfe/CadConsultaCadastro2', - WS_NFE_RECEPCAO_EVENTO: 'nfe-evento/NFeRecepcaoEvento', - WS_NFE_CANCELAMENTO: 'nfe-evento/NFeRecepcaoEvento', + WS_NFE_RECEPCAO_EVENTO: 'nfe/NFeRecepcaoEvento', + WS_NFE_CANCELAMENTO: 'nfe/NFeRecepcaoEvento', }, NFE_AMBIENTE_HOMOLOGACAO: { 'servidor': 'homologacao.nfe.fazenda.pr.gov.br', @@ -518,8 +518,8 @@ UFPR = { WS_NFE_CONSULTA: 'nfe/NFeConsulta3', WS_NFE_SITUACAO: 'nfe/NFeStatusServico3', WS_NFE_CADASTRO: 'nfe/CadConsultaCadastro2', - WS_NFE_RECEPCAO_EVENTO: 'nfe-evento/NFeRecepcaoEvento', - WS_NFE_CANCELAMENTO: 'nfe-evento/NFeRecepcaoEvento', + WS_NFE_RECEPCAO_EVENTO: 'nfe/NFeRecepcaoEvento', + WS_NFE_CANCELAMENTO: 'nfe/NFeRecepcaoEvento', } } diff --git a/setup.py b/setup.py index f548242..86cfddc 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages -VERSION = "0.9.26" +VERSION = "0.9.27" setup( From 06764a249c1cdb03f081b50165f632eab8386286 Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Mon, 30 Jul 2018 19:57:21 -0300 Subject: [PATCH 24/33] [IMP] Fix unit tests and fix some urls --- pytrustnfe/Servidores.py | 52 +++++++++++++++++----------------- pytrustnfe/nfse/paulistana/__init__.py | 4 +-- tests/test_consulta_cadastro.py | 19 ------------- tests/test_servidores.py | 4 +-- tests/test_utils.py | 8 +----- 5 files changed, 31 insertions(+), 56 deletions(-) delete mode 100644 tests/test_consulta_cadastro.py diff --git a/pytrustnfe/Servidores.py b/pytrustnfe/Servidores.py index b454a43..ea570f1 100644 --- a/pytrustnfe/Servidores.py +++ b/pytrustnfe/Servidores.py @@ -124,44 +124,44 @@ SVRS = { NFE_MODELO: { AMBIENTE_PRODUCAO: { 'servidor': 'nfe.svrs.rs.gov.br', - WS_NFE_INUTILIZACAO: 'ws/nfeinutilizacao/nfeinutilizacao4.asmx', - WS_NFE_CONSULTA: 'ws/NfeConsulta/NfeConsulta4.asmx', - WS_NFE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico4.asmx', - WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento4.asmx', - WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao4.asmx', - WS_NFE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao4.asmx', # noqa - WS_NFE_CADASTRO: 'ws/cadconsultacadastro/cadconsultacadastro2.asmx', # noqa + WS_NFE_INUTILIZACAO: 'ws/nfeinutilizacao/nfeinutilizacao4.asmx?wsdl', # noqa + WS_NFE_CONSULTA: 'ws/NfeConsulta/NfeConsulta4.asmx?wsdl', + WS_NFE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico4.asmx?wsdl', + WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento4.asmx?wsdl', # noqa + WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao4.asmx?wsdl', + WS_NFE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao4.asmx?wsdl', # noqa + WS_NFE_CADASTRO: 'ws/cadconsultacadastro/cadconsultacadastro2.asmx?wsdl', # noqa }, AMBIENTE_HOMOLOGACAO: { 'servidor': 'nfe-homologacao.svrs.rs.gov.br', - WS_NFE_INUTILIZACAO: 'ws/nfeinutilizacao/nfeinutilizacao4.asmx', - WS_NFE_CONSULTA: 'ws/NfeConsulta/NfeConsulta4.asmx', - WS_NFE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico4.asmx', - WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento4.asmx', - WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao4.asmx', - WS_NFE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao4.asmx', # noqa - WS_NFE_CADASTRO: 'ws/cadconsultacadastro/cadconsultacadastro2.asmx', # noqa + WS_NFE_INUTILIZACAO: 'ws/nfeinutilizacao/nfeinutilizacao4.asmx?wsdl', # noqa + WS_NFE_CONSULTA: 'ws/NfeConsulta/NfeConsulta4.asmx?wsdl', + WS_NFE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico4.asmx?wsdl', + WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento4.asmx?wsdl', # noqa + WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao4.asmx?wsdl', + WS_NFE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao4.asmx?wsdl', # noqa + WS_NFE_CADASTRO: 'ws/cadconsultacadastro/cadconsultacadastro2.asmx?wsdl', # noqa } }, NFCE_MODELO: { AMBIENTE_PRODUCAO: { 'servidor': 'nfce.svrs.rs.gov.br', - WS_NFE_INUTILIZACAO: 'ws/nfeinutilizacao/nfeinutilizacao4.asmx', - WS_NFE_CONSULTA: 'ws/NfeConsulta/NfeConsulta4.asmx', - WS_NFE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico4.asmx', - WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento4.asmx', - WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao4.asmx', - WS_NFE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao4.asmx', # noqa + WS_NFE_INUTILIZACAO: 'ws/nfeinutilizacao/nfeinutilizacao4.asmx?wsdl', + WS_NFE_CONSULTA: 'ws/NfeConsulta/NfeConsulta4.asmx?wsdl', + WS_NFE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico4.asmx?wsdl', + WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento4.asmx?wsdl', + WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao4.asmx?wsdl', + WS_NFE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao4.asmx?wsdl', # noqa WS_NFCE_QR_CODE: 'http://dec.fazenda.df.gov.br/ConsultarNFCe.aspx', }, AMBIENTE_HOMOLOGACAO: { 'servidor': 'nfce-homologacao.svrs.rs.gov.br', - WS_NFE_INUTILIZACAO: 'ws/nfeinutilizacao/nfeinutilizacao4.asmx', - WS_NFE_CONSULTA: 'ws/NfeConsulta/NfeConsulta4.asmx', - WS_NFE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico4.asmx', - WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento4.asmx', - WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao4.asmx', - WS_NFE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao4.asmx', # noqa + WS_NFE_INUTILIZACAO: 'ws/nfeinutilizacao/nfeinutilizacao4.asmx?wsdl', + WS_NFE_CONSULTA: 'ws/NfeConsulta/NfeConsulta4.asmx?wsdl', + WS_NFE_SITUACAO: 'ws/NfeStatusServico/NfeStatusServico4.asmx?wsdl', + WS_NFE_RECEPCAO_EVENTO: 'ws/recepcaoevento/recepcaoevento4.asmx?wsdl', + WS_NFE_AUTORIZACAO: 'ws/NfeAutorizacao/NFeAutorizacao4.asmx?wsdl', + WS_NFE_RET_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao4.asmx?wsdl', # noqa WS_NFCE_QR_CODE: 'http://dec.fazenda.df.gov.br/ConsultarNFCe.aspx', } } diff --git a/pytrustnfe/nfse/paulistana/__init__.py b/pytrustnfe/nfse/paulistana/__init__.py index 44019b8..ed0611b 100644 --- a/pytrustnfe/nfse/paulistana/__init__.py +++ b/pytrustnfe/nfse/paulistana/__init__.py @@ -54,10 +54,10 @@ def _send(certificado, method, **kwargs): 'object': None } - response, obj = sanitize_response(response.encode('utf-8')) + response, obj = sanitize_response(response) return { 'sent_xml': xml_send, - 'received_xml': response.decode(), + 'received_xml': response, 'object': obj } diff --git a/tests/test_consulta_cadastro.py b/tests/test_consulta_cadastro.py deleted file mode 100644 index a284b56..0000000 --- a/tests/test_consulta_cadastro.py +++ /dev/null @@ -1,19 +0,0 @@ -# coding=utf-8 - -import mock -import os.path -import unittest -from pytrustnfe.certificado import Certificado -from pytrustnfe.nfe import consulta_cadastro - - -class test_consulta_cadastro(unittest.TestCase): - - caminho = os.path.dirname(__file__) - - def test_conta_de_cadastro(self): - pfx_source = open(os.path.join(self.caminho, 'teste.pfx'), 'rb').read() - pfx = Certificado(pfx_source, '123456') - - obj = {'cnpj': '12345678901234', 'estado': '42'} - consulta_cadastro(pfx, obj=obj, ambiente=1, estado='42') diff --git a/tests/test_servidores.py b/tests/test_servidores.py index 69d4bce..3a492df 100644 --- a/tests/test_servidores.py +++ b/tests/test_servidores.py @@ -14,7 +14,7 @@ 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_sc = 'https://nfe.svrs.rs.gov.br/ws/NfeAutorizacao/NFeAutorizacao4.asmx' +url_sc = 'https://nfe.svrs.rs.gov.br/ws/NfeAutorizacao/NFeAutorizacao4.asmx?wsdl' url_rs = 'https://nfe.sefazrs.rs.gov.br/ws/NfeAutorizacao/NFeAutorizacao.asmx' @@ -22,7 +22,7 @@ url_cad_rs = 'https://cad.sefazrs.rs.gov.br/ws/cadconsultacadastro/cadcon\ sultacadastro2.asmx' url_cad_sc = 'https://cad.svrs.rs.gov.br/ws/cadconsultacadastro/cadconsulta\ -cadastro2.asmx' +cadastro2.asmx?wsdl' class test_servidores(unittest.TestCase): diff --git a/tests/test_utils.py b/tests/test_utils.py index 247327d..dce9ff0 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -8,7 +8,7 @@ import unittest import datetime from pytrustnfe.utils import date_tostring, datetime_tostring, \ gerar_chave -from pytrustnfe.utils import ChaveNFe, CabecalhoSoap +from pytrustnfe.utils import ChaveNFe class test_utils(unittest.TestCase): @@ -18,12 +18,6 @@ class test_utils(unittest.TestCase): 'tipo': 0, 'codigo': '26730161' } - def test_cabecalho_soap(self): - head = CabecalhoSoap(versao=1, estado='SC', soap_action='Autorizacao') - self.assertEqual(head.versao, 1) - self.assertEqual(head.estado, 'SC') - self.assertEqual(head.soap_action, 'Autorizacao') - def test_date_tostring(self): hoje = datetime.date.today() data = date_tostring(hoje) From f63ad7abbfeb29be431278168a4578f19dab255d Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Mon, 30 Jul 2018 21:08:12 -0300 Subject: [PATCH 25/33] [FIX] Corrige o build para o deploy --- .travis.yml | 2 -- setup.py | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 73a0c70..4e404cd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,5 @@ language: python python: -- "3.4" -- "3.5" - "3.6" virtual_env: system_site_packages: true diff --git a/setup.py b/setup.py index 86cfddc..1b9f1da 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages -VERSION = "0.9.27" +VERSION = "0.9.28" setup( From bcbaf1474d060fa2d5c38a885c0d360aab80967c Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Tue, 31 Jul 2018 11:16:29 -0300 Subject: [PATCH 26/33] [IMP] Atualizado schema da NFe --- pytrustnfe/nfe/templates/RecepcaoEvento.xml | 1 + pytrustnfe/xml/schemas/enviNFe_v3.10.xsd | 9 - pytrustnfe/xml/schemas/leiauteNFe_v3.10.xsd | 6060 -------------------------- pytrustnfe/xml/schemas/leiauteNFe_v4.00.xsd | 73 +- pytrustnfe/xml/schemas/nfe_v3.10.xsd | 9 - pytrustnfe/xml/schemas/tiposBasico_v3.10.xsd | 571 --- setup.py | 2 +- 7 files changed, 65 insertions(+), 6660 deletions(-) delete mode 100755 pytrustnfe/xml/schemas/enviNFe_v3.10.xsd delete mode 100755 pytrustnfe/xml/schemas/leiauteNFe_v3.10.xsd delete mode 100755 pytrustnfe/xml/schemas/nfe_v3.10.xsd delete mode 100755 pytrustnfe/xml/schemas/tiposBasico_v3.10.xsd diff --git a/pytrustnfe/nfe/templates/RecepcaoEvento.xml b/pytrustnfe/nfe/templates/RecepcaoEvento.xml index 58a3a67..be0f9ef 100644 --- a/pytrustnfe/nfe/templates/RecepcaoEvento.xml +++ b/pytrustnfe/nfe/templates/RecepcaoEvento.xml @@ -15,6 +15,7 @@ {{ evento.descEvento }} {{ evento.nProt }} {{ evento.xJust|normalize|escape }} + {{ evento.xCorrecao|normalize|escape }} {{ evento.xCondUso }} diff --git a/pytrustnfe/xml/schemas/enviNFe_v3.10.xsd b/pytrustnfe/xml/schemas/enviNFe_v3.10.xsd deleted file mode 100755 index 85bf09a..0000000 --- a/pytrustnfe/xml/schemas/enviNFe_v3.10.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Schema XML de validação do Pedido de Concessão de Autorização da Nota Fiscal Eletrônica - - - \ No newline at end of file diff --git a/pytrustnfe/xml/schemas/leiauteNFe_v3.10.xsd b/pytrustnfe/xml/schemas/leiauteNFe_v3.10.xsd deleted file mode 100755 index fdd83f3..0000000 --- a/pytrustnfe/xml/schemas/leiauteNFe_v3.10.xsd +++ /dev/null @@ -1,6060 +0,0 @@ - - - - - - - - - - - Tipo Nota Fiscal Eletrônica - - - - - Informações da Nota Fiscal eletrônica - - - - - - identificação da NF-e - - - - - - Código da UF do emitente do Documento Fiscal. Utilizar a Tabela do IBGE. - - - - - Código numérico que compõe a Chave de Acesso. Número aleatório gerado pelo emitente para cada NF-e. - - - - - - - - - - - Descrição da Natureza da Operação - - - - - - - - - - - Indicador da forma de pagamento: -0 – pagamento à vista; -1 – pagamento à prazo; -2 – outros. - - - - - - - - - - - - - Código do modelo do Documento Fiscal. 55 = NF-e; 65 = NFC-e. - - - - - Série do Documento Fiscal -série normal 0-889 -Avulsa Fisco 890-899 -SCAN 900-999 - - - - - Número do Documento Fiscal - - - - - Data e Hora de emissão do Documento Fiscal (AAAA-MM-DDThh:mm:ssTZD) ex.: 2012-09-01T13:00:00-03:00 - - - - - Data e Hora da saída ou de entrada da mercadoria / produto (AAAA-MM-DDTHH:mm:ssTZD) - - - - - Tipo do Documento Fiscal (0 - entrada; 1 - saída) - - - - - - - - - - - - Identificador de Local de destino da operação (1-Interna;2-Interestadual;3-Exterior) - - - - - - - - - - - - - Código do Município de Ocorrência do Fato Gerador (utilizar a tabela do IBGE) - - - - - Formato de impressão do DANFE (0-sem DANFE;1-DANFe Retrato; 2-DANFe Paisagem;3-DANFe Simplificado; - 4-DANFe NFC-e;5-DANFe NFC-e em mensagem eletrônica) - - - - - - - - - - - - - - - - - Forma de emissão da NF-e -1 - Normal; -2 - Contingência FS -3 - Contingência SCAN -4 - Contingência DPEC -5 - Contingência FSDA -6 - Contingência SVC - AN -7 - Contingência SVC - RS -9 - Contingência off-line NFC-e - - - - - - - - - - - - - - - - - - Digito Verificador da Chave de Acesso da NF-e - - - - - - - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Finalidade da emissão da NF-e: -1 - NFe normal -2 - NFe complementar -3 - NFe de ajuste -4 - Devolução/Retorno - - - - - Indica operação com consumidor final (0-Não;1-Consumidor Final) - - - - - - - - - - - - Indicador de presença do comprador no estabelecimento comercial no momento da oepração - (0-Não se aplica (ex.: Nota Fiscal complementar ou de ajuste;1-Operação presencial;2-Não presencial, internet;3-Não presencial, teleatendimento;4-NFC-e entrega em domicílio;9-Não presencial, outros) - - - - - - - - - - - - - - - - Processo de emissão utilizado com a seguinte codificação: -0 - emissão de NF-e com aplicativo do contribuinte; -1 - emissão de NF-e avulsa pelo Fisco; -2 - emissão de NF-e avulsa, pelo contribuinte com seu certificado digital, através do site -do Fisco; -3- emissão de NF-e pelo contribuinte com aplicativo fornecido pelo Fisco. - - - - - versão do aplicativo utilizado no processo de -emissão - - - - - - - - - - - Informar apenas -para tpEmis diferente de 1 - - - - Informar a data e hora de entrada em contingência contingência no formato (AAAA-MM-DDThh:mm:ssTZD) ex.: 2012-09-01T13:00:00-03:00. - - - - - Informar a Justificativa da entrada - - - - - - - - - - - - Grupo de infromações da NF referenciada - - - - - - Chave de acesso das NF-e referenciadas. Chave de acesso compostas por Código da UF (tabela do IBGE) + AAMM da emissão + CNPJ do Emitente + modelo, série e número da NF-e Referenciada + Código Numérico + DV. - - - - - Dados da NF modelo 1/1A referenciada - - - - - - Código da UF do emitente do Documento Fiscal. Utilizar a Tabela do IBGE. - - - - - AAMM da emissão - - - - - - - - - - - CNPJ do emitente do documento fiscal referenciado - - - - - Código do modelo do Documento Fiscal. Utilizar 01 para NF modelo 1/1A - - - - - - - - - - - Série do Documento Fiscal, informar zero se inexistente - - - - - Número do Documento Fiscal - - - - - - - - Grupo com as informações NF de produtor referenciada - - - - - - Código da UF do emitente do Documento FiscalUtilizar a Tabela do IBGE (Anexo IV - Tabela de UF, Município e País) - - - - - AAMM da emissão da NF de produtor - - - - - - - - - - - - CNPJ do emitente da NF de produtor - - - - - CPF do emitente da NF de produtor - - - - - - IE do emitente da NF de Produtor - - - - - Código do modelo do Documento Fiscal - utilizar 04 para NF de produtor ou 01 para NF Avulsa - - - - - - - - - - - - Série do Documento Fiscal, informar zero se inexistentesérie - - - - - Número do Documento Fiscal - 1 – 999999999 - - - - - - - - Utilizar esta TAG para referenciar um CT-e emitido anteriormente, vinculada a NF-e atual - - - - - Grupo do Cupom Fiscal vinculado à NF-e - - - - - - Código do modelo do Documento Fiscal -Preencher com "2B", quando se tratar de Cupom Fiscal emitido por máquina registradora (não ECF), com "2C", quando se tratar de Cupom Fiscal PDV, ou "2D", quando se tratar de Cupom Fiscal (emitido por ECF) - - - - - - - - - - - - - Informar o número de ordem seqüencial do ECF que emitiu o Cupom Fiscal vinculado à NF-e - - - - - - - - - - - Informar o Número do Contador de Ordem de Operação - COO vinculado à NF-e - - - - - - - - - - - - - - - - - - - - Identificação do emitente - - - - - - - Número do CNPJ do emitente - - - - - Número do CPF do emitente - - - - - - Razão Social ou Nome do emitente - - - - - - - - - - - Nome fantasia - - - - - - - - - - - Endereço do emitente - - - - - Inscrição Estadual do Emitente - - - - - Inscricao Estadual do Substituto Tributário - - - - - Grupo de informações de interesse da Prefeitura - - - - Inscrição Municipal - - - - - - - - - - - CNAE Fiscal - - - - - - - - - - - - Código de Regime Tributário. -Este campo será obrigatoriamente preenchido com: -1 – Simples Nacional; -2 – Simples Nacional – excesso de sublimite de receita bruta; -3 – Regime Normal. - - - - - - - - - - - - - - - - - Emissão de avulsa, informar os dados do Fisco emitente - - - - - - CNPJ do Órgão emissor - - - - - Órgão emitente - - - - - - - - - - - Matrícula do agente - - - - - - - - - - - Nome do agente - - - - - - - - - - - Telefone - - - - - - - - - - - Sigla da Unidade da Federação - - - - - Número do Documento de Arrecadação de Receita - - - - - - - - - - - Data de emissão do DAR (AAAA-MM-DD) - - - - - Valor Total constante no DAR - - - - - Repartição Fiscal emitente - - - - - - - - - - - Data de pagamento do DAR (AAAA-MM-DD) - - - - - - - - Identificação do Destinatário - - - - - - - Número do CNPJ - - - - - Número do CPF - - - - - Identificador do destinatário, em caso de comprador estrangeiro - - - - - - - - - - - - Razão Social ou nome do destinatário - - - - - - - - - - - Dados do endereço - - - - - Indicador da IE do destinatário: -1 – Contribuinte ICMSpagamento à vista; -2 – Contribuinte isento de inscrição; -9 – Não Contribuinte - - - - - - - - - - - - - Inscrição Estadual (obrigatório nas operações com contribuintes do ICMS) - - - - - Inscrição na SUFRAMA (Obrigatório nas operações com as áreas com benefícios de incentivos fiscais sob controle da SUFRAMA) PL_005d - 11/08/09 - alterado para aceitar 8 ou 9 dígitos - - - - - - - - - - - Inscrição Municipal do tomador do serviço - - - - - - - - - - - Informar o e-mail do destinatário. O campo pode ser utilizado para informar o e-mail -de recepção da NF-e indicada pelo destinatário - - - - - - - - - - - - - - - Identificação do Local de Retirada (informar apenas quando for diferente do endereço do remetente) - - - - - Identificação do Local de Entrega (informar apenas quando for diferente do endereço do destinatário) - - - - - Pessoas autorizadas para o download do XML da NF-e - - - - - - CNPJ Autorizado - - - - - CPF Autorizado - - - - - - - - Dados dos detalhes da NF-e - - - - - - Dados dos produtos e serviços da NF-e - - - - - - Código do produto ou serviço. Preencher com CFOP caso se trate de itens não relacionados com mercadorias/produto e que o contribuinte não possua codificação própria -Formato ”CFOP9999”. - - - - - - - - - - - GTIN (Global Trade Item Number) do produto, antigo código EAN ou código de barras - - - - - - - - - - - Descrição do produto ou serviço - - - - - - - - - - - Código NCM (8 posições), será permitida a informação do gênero (posição do capítulo do NCM) quando a operação não for de comércio exterior (importação/exportação) ou o produto não seja tributado pelo IPI. Em caso de item de serviço ou item que não tenham produto (Ex. transferência de crédito, crédito do ativo imobilizado, etc.), informar o código 00 (zeros) (v2.0) - - - - - - - - - - - Nomenclatura de Valor aduaneio e Estatístico - - - - - - - - - - - Codigo especificador da Substuicao Tributaria - CEST, que identifica a mercadoria sujeita aos regimes de substituicao tributária e de antecipação do recolhimento do imposto - - - - - - - - - - - - Código EX TIPI (3 posições) - - - - - - - - - - - Cfop - - - - - - - - - - - Unidade comercial - - - - - - - - - - - Quantidade Comercial do produto, alterado para aceitar de 0 a 4 casas decimais e 11 inteiros. - - - - - Valor unitário de comercialização - alterado para aceitar 0 a 10 casas decimais e 11 inteiros - - - - - Valor bruto do produto ou serviço. - - - - - GTIN (Global Trade Item Number) da unidade tributável, antigo código EAN ou código de barras - - - - - - - - - - - Unidade Tributável - - - - - - - - - - - Quantidade Tributável - alterado para aceitar de 0 a 4 casas decimais e 11 inteiros - - - - - Valor unitário de tributação - - alterado para aceitar 0 a 10 casas decimais e 11 inteiros - - - - - Valor Total do Frete - - - - - Valor Total do Seguro - - - - - Valor do Desconto - - - - - Outras despesas acessórias - - - - - Este campo deverá ser preenchido com: - 0 – o valor do item (vProd) não compõe o valor total da NF-e (vProd) - 1 – o valor do item (vProd) compõe o valor total da NF-e (vProd) - - - - - - - - - - - - - Delcaração de Importação -(NT 2011/004) - - - - - - Numero do Documento de Importação DI/DSI/DA/DRI-E (DI/DSI/DA/DRI-E) (NT2011/004) - - - - - - - - - - - Data de registro da DI/DSI/DA (AAAA-MM-DD) - - - - - Local do desembaraço aduaneiro - - - - - - - - - - - UF onde ocorreu o desembaraço aduaneiro - - - - - Data do desembaraço aduaneiro (AAAA-MM-DD) - - - - - Via de transporte internacional informada na DI - 1-Maritima;2-Fluvial;3-Lacustre;4-Aerea;5-Postal;6-Ferroviaria;7-Rodoviaria;8-Conduto;9-Meios Proprios;10-Entrada/Saida Ficta. - - - - - - - - - - - - - - - - - - - - - - Valor Adicional ao frete para renovação de marinha mercante - - - - - Forma de Importação quanto a intermediação - 1-por conta propria;2-por conta e ordem;3-encomenda - - - - - - - - - - - - - CNPJ do adquirente ou do encomendante - - - - - Sigla da UF do adquirente ou do encomendante - - - - - Código do exportador (usado nos sistemas internos de informação do emitente da NF-e) - - - - - - - - - - - Adições (NT 2011/004) - - - - - - Número da Adição - - - - - - - - - - - Número seqüencial do item dentro da Adição - - - - - - - - - - - Código do fabricante estrangeiro (usado nos sistemas internos de informação do emitente da NF-e) - - - - - - - - - - - Valor do desconto do item da DI – adição - - - - - Número do ato concessório de Drawback - - - - - - - - - - - - - - - - - Detalhe da exportação - - - - - - Número do ato concessório de Drawback - - - - - - - - - - - Exportação indireta - - - - - - Registro de exportação - - - - - - - - - - - Chave de acesso da NF-e recebida para exportação - - - - - Quantidade do item efetivamente exportado - - - - - - - - - - - pedido de compra - Informação de interesse do emissor para controle do B2B. - - - - - - - - - - - Número do Item do Pedido de Compra - Identificação do número do item do pedido de Compra - - - - - - - - - - - Número de controle da FCI - Ficha de Conteúdo de Importação. - - - - - Informações específicas de produtos e serviços - - - - Veículos novos - - - - - - Tipo da Operação (1 - Venda concessionária; 2 - Faturamento direto; 3 - Venda direta; 0 - Outros) - - - - - - - - - - - - - - Chassi do veículo - VIN (código-identificação-veículo) - - - - - - - - - - - - Cor do veículo (código de cada montadora) - - - - - - - - - - - Descrição da cor - - - - - - - - - - - Potência máxima do motor do veículo em cavalo vapor (CV). (potência-veículo) - - - - - - - - - - - Capacidade voluntária do motor expressa em centímetros cúbicos (CC). (cilindradas) - - - - - - - - - - - Peso líquido - - - - - - - - - - - Peso bruto - - - - - - - - - - - Serial (série) - - - - - - - - - - - Tipo de combustível-Tabela RENAVAM: 01-Álcool; 02-Gasolina; 03-Diesel; 16-Álcool/Gas.; 17-Gas./Álcool/GNV; 18-Gasolina/Elétrico - - - - - - - - - - - Número do motor - - - - - - - - - - - CMT-Capacidade Máxima de Tração - em Toneladas 4 casas decimais - - - - - - - - - - - Distância entre eixos - - - - - - - - - - - Ano Modelo de Fabricação - - - - - - - - - - - Ano de Fabricação - - - - - - - - - - - Tipo de pintura - - - - - - - - - - Tipo de veículo (utilizar tabela RENAVAM) - - - - - - - - - - - Espécie de veículo (utilizar tabela RENAVAM) - - - - - - - - - - - Informa-se o veículo tem VIN (chassi) remarcado. -R-Remarcado -N-NormalVIN - - - - - - - - - - - - Condição do veículo (1 - acabado; 2 - inacabado; 3 - semi-acabado) - - - - - - - - - - - - - Código Marca Modelo (utilizar tabela RENAVAM) - - - - - - - - - - - Código da Cor Segundo as regras de pré-cadastro do DENATRAN: 01-AMARELO;02-AZUL;03-BEGE;04-BRANCA;05-CINZA;06-DOURADA;07-GRENA -08-LARANJA;09-MARROM;10-PRATA;11-PRETA;12-ROSA;13-ROXA;14-VERDE;15-VERMELHA;16-FANTASIA - - - - - - - - - - - - - Quantidade máxima de permitida de passageiros sentados, inclusive motorista. - - - - - - - - - - - - - Restrição -0 - Não há; -1 - Alienação Fiduciária; -2 - Arrendamento Mercantil; -3 - Reserva de Domínio; -4 - Penhor de Veículos; -9 - outras. - - - - - - - - - - - - - - - - - - - grupo do detalhamento de Medicamentos e de matérias-primas farmacêuticas - - - - - - Número do lote do medicamento - - - - - - - - - - - Quantidade de produtos no lote - - - - - Data de Fabricação do medicamento (AAAA-MM-DD) - - - - - Data de validade do medicamento (AAAA-MM-DD) - - - - - Preço Máximo ao Consumidor - - - - - - - - Armamentos - - - - - - Indicador do tipo de arma de fogo (0 - Uso permitido; 1 - Uso restrito) - - - - - - - - - - - - Número de série da arma - - - - - - - - - - - Número de série do cano - - - - - - - - - - - Descrição completa da arma, compreendendo: calibre, marca, capacidade, tipo de funcionamento, comprimento e demais elementos que permitam a sua perfeita identificação. - - - - - - - - - - - - - - Informar apenas para operações com combustíveis líquidos - - - - - - Código de produto da ANP. codificação de produtos do SIMP (http://www.anp.gov.br) - - - - - - - - - - - Percentual de gas natural para o produto GLP - - - - - Código de autorização / registro do CODIF. Informar apenas quando a UF utilizar o CODIF (Sistema de Controle do Diferimento do Imposto nas Operações com AEAC - Álcool Etílico Anidro Combustível). - - - - - - - - - - - Quantidade de combustível -faturada à temperatura ambiente. -Informar quando a quantidade -faturada informada no campo -qCom (I10) tiver sido ajustada para -uma temperatura diferente da -ambiente. - - - - - Sigla da UF de Consumo - - - - - CIDE Combustíveis - - - - - - BC do CIDE ( Quantidade comercializada) - - - - - Alíquota do CIDE (em reais) - - - - - Valor do CIDE - - - - - - - - Informações do grupo de "encerrante" - - - - - - Numero de identificação do Bico utilizado no abastecimento - - - - - - - - - - - Numero de identificação da bomba ao qual o bico está interligado - - - - - - - - - - - Numero de identificação do tanque ao qual o bico está interligado - - - - - - - - - - - Valor do Encerrante no ínicio do abastecimento - - - - - Valor do Encerrante no final do abastecimento - - - - - - - - - - - Número do RECOPI - - - - - - - - - - - - - - - - Tributos incidentes nos produtos ou serviços da NF-e - - - - - - Valor estimado total de impostos federais, estaduais e municipais - - - - - - - Dados do ICMS Normal e ST - - - - - - Tributação pelo ICMS -00 - Tributada integralmente - - - - - - origem da mercadoria: 0 - Nacional -1 - Estrangeira - Importação direta -2 - Estrangeira - Adquirida no mercado interno - - - - - - Tributção pelo ICMS -00 - Tributada integralmente - - - - - - - - - - - - Modalidade de determinação da BC do ICMS: -0 - Margem Valor Agregado (%); -1 - Pauta (valor); -2 - Preço Tabelado Máximo (valor); -3 - Valor da Operação. - - - - - - - - - - - - - - Valor da BC do ICMS - - - - - Alíquota do ICMS - - - - - Valor do ICMS - - - - - - - - Tributação pelo ICMS -10 - Tributada e com cobrança do ICMS por substituição tributária - - - - - - origem da mercadoria: 0 - Nacional -1 - Estrangeira - Importação direta -2 - Estrangeira - Adquirida no mercado interno - - - - - - 10 - Tributada e com cobrança do ICMS por substituição tributária - - - - - - - - - - - Modalidade de determinação da BC do ICMS: -0 - Margem Valor Agregado (%); -1 - Pauta (valor); -2 - Preço Tabelado Máximo (valor); -3 - Valor da Operação. - - - - - - - - - - - - - - Valor da BC do ICMS - - - - - Alíquota do ICMS - - - - - Valor do ICMS - - - - - Modalidade de determinação da BC do ICMS ST: -0 – Preço tabelado ou máximo sugerido; -1 - Lista Negativa (valor); -2 - Lista Positiva (valor); -3 - Lista Neutra (valor); -4 - Margem Valor Agregado (%); -5 - Pauta (valor); - - - - - - - - - - - - - - - - Percentual da Margem de Valor Adicionado ICMS ST - - - - - Percentual de redução da BC ICMS ST - - - - - Valor da BC do ICMS ST - - - - - Alíquota do ICMS ST - - - - - Valor do ICMS ST - - - - - - - - Tributção pelo ICMS -20 - Com redução de base de cálculo - - - - - - origem da mercadoria: 0 - Nacional -1 - Estrangeira - Importação direta -2 - Estrangeira - Adquirida no mercado interno - - - - - - Tributção pelo ICMS -20 - Com redução de base de cálculo - - - - - - - - - - - Modalidade de determinação da BC do ICMS: -0 - Margem Valor Agregado (%); -1 - Pauta (valor); -2 - Preço Tabelado Máximo (valor); -3 - Valor da Operação. - - - - - - - - - - - - - - Percentual de redução da BC - - - - - Valor da BC do ICMS - - - - - Alíquota do ICMS - - - - - Valor do ICMS - - - - - Grupo desoneração - - - - Valor do ICMS de desoneração - - - - - Motivo da desoneração do ICMS:3-Uso na agropecuária;9-Outros;12-Fomento agropecuário - - - - - - - - - - - - - - - - - Tributação pelo ICMS -30 - Isenta ou não tributada e com cobrança do ICMS por substituição tributária - - - - - - origem da mercadoria: 0 - Nacional -1 - Estrangeira - Importação direta -2 - Estrangeira - Adquirida no mercado interno - - - - - - Tributção pelo ICMS -30 - Isenta ou não tributada e com cobrança do ICMS por substituição tributária - - - - - - - - - - - Modalidade de determinação da BC do ICMS ST: -0 – Preço tabelado ou máximo sugerido; -1 - Lista Negativa (valor); -2 - Lista Positiva (valor); -3 - Lista Neutra (valor); -4 - Margem Valor Agregado (%); -5 - Pauta (valor). - - - - - - - - - - - - - - - - Percentual da Margem de Valor Adicionado ICMS ST - - - - - Percentual de redução da BC ICMS ST - - - - - Valor da BC do ICMS ST - - - - - Alíquota do ICMS ST - - - - - Valor do ICMS ST - - - - - Grupo desoneração - - - - Valor do ICMS de desoneração - - - - - Motivo da desoneração do ICMS:6-Utilitários Motocicleta AÁrea Livre;7-SUFRAMA;9-Outros - - - - - - - - - - - - - - - - - Tributação pelo ICMS -40 - Isenta -41 - Não tributada -50 - Suspensão - - - - - - origem da mercadoria: 0 - Nacional -1 - Estrangeira - Importação direta -2 - Estrangeira - Adquirida no mercado interno - - - - - - Tributação pelo ICMS -40 - Isenta -41 - Não tributada -50 - Suspensão -51 - Diferimento - - - - - - - - - - - - - - O valor do ICMS será informado apenas nas operações com veículos beneficiados com a desoneração condicional do ICMS. - - - - - Este campo será preenchido quando o campo anterior estiver preenchido. -Informar o motivo da desoneração: -1 – Táxi; -3 – Produtor Agropecuário; -4 – Frotista/Locadora; -5 – Diplomático/Consular; -6 – Utilitários e Motocicletas da Amazônia Ocidental e Áreas de Livre Comércio (Resolução 714/88 e 790/94 – CONTRAN e suas alterações); -7 – SUFRAMA; -8 - Venda a órgão Público; -9 – Outros -10- Deficiente Condutor -11- Deficiente não condutor -16 - Olimpíadas Rio 2016 - - - - - - - - - - - - - - - - - - - - - - - - - - Tributção pelo ICMS -51 - Diferimento -A exigência do preenchimento das informações do ICMS diferido fica à critério de cada UF. - - - - - - origem da mercadoria: 0 - Nacional -1 - Estrangeira - Importação direta -2 - Estrangeira - Adquirida no mercado interno - - - - - - Tributção pelo ICMS -20 - Com redução de base de cálculo - - - - - - - - - - - Modalidade de determinação da BC do ICMS: -0 - Margem Valor Agregado (%); -1 - Pauta (valor); -2 - Preço Tabelado Máximo (valor); -3 - Valor da Operação. - - - - - - - - - - - - - - Percentual de redução da BC - - - - - Valor da BC do ICMS - - - - - Alíquota do ICMS - - - - - Valor do ICMS da Operação - - - - - Percentual do diferemento - - - - - Valor do ICMS da diferido - - - - - Valor do ICMS - - - - - - - - Tributação pelo ICMS -60 - ICMS cobrado anteriormente por substituição tributária - - - - - - origem da mercadoria: 0 - Nacional -1 - Estrangeira - Importação direta -2 - Estrangeira - Adquirida no mercado interno - - - - - - Tributação pelo ICMS -60 - ICMS cobrado anteriormente por substituição tributária - - - - - - - - - - - NT2010/004 - - - - Valor da BC do ICMS ST retido anteriormente - - - - - Valor do ICMS ST retido anteriormente - - - - - - - - - Tributação pelo ICMS -70 - Com redução de base de cálculo e cobrança do ICMS por substituição tributária - - - - - - origem da mercadoria: 0 - Nacional -1 - Estrangeira - Importação direta -2 - Estrangeira - Adquirida no mercado interno - - - - - - Tributção pelo ICMS -70 - Com redução de base de cálculo e cobrança do ICMS por substituição tributária - - - - - - - - - - - Modalidade de determinação da BC do ICMS: -0 - Margem Valor Agregado (%); -1 - Pauta (valor); -2 - Preço Tabelado Máximo (valor); -3 - Valor da Operação. - - - - - - - - - - - - - - Percentual de redução da BC - - - - - Valor da BC do ICMS - - - - - Alíquota do ICMS - - - - - Valor do ICMS - - - - - Modalidade de determinação da BC do ICMS ST: -0 – Preço tabelado ou máximo sugerido; -1 - Lista Negativa (valor); -2 - Lista Positiva (valor); -3 - Lista Neutra (valor); -4 - Margem Valor Agregado (%); -5 - Pauta (valor). - - - - - - - - - - - - - - - - Percentual da Margem de Valor Adicionado ICMS ST - - - - - Percentual de redução da BC ICMS ST - - - - - Valor da BC do ICMS ST - - - - - Alíquota do ICMS ST - - - - - Valor do ICMS ST - - - - - Grupo desoneração - - - - Valor do ICMS de desoneração - - - - - Motivo da desoneração do ICMS:3-Uso na agropecuária;9-Outros;12-Fomento agropecuário - - - - - - - - - - - - - - - - - Tributação pelo ICMS -90 - Outras - - - - - - origem da mercadoria: 0 - Nacional -1 - Estrangeira - Importação direta -2 - Estrangeira - Adquirida no mercado interno - - - - - - Tributção pelo ICMS -90 - Outras - - - - - - - - - - - - Modalidade de determinação da BC do ICMS: -0 - Margem Valor Agregado (%); -1 - Pauta (valor); -2 - Preço Tabelado Máximo (valor); -3 - Valor da Operação. - - - - - - - - - - - - - - Valor da BC do ICMS - - - - - Percentual de redução da BC - - - - - Alíquota do ICMS - - - - - Valor do ICMS - - - - - - - Modalidade de determinação da BC do ICMS ST: -0 – Preço tabelado ou máximo sugerido; -1 - Lista Negativa (valor); -2 - Lista Positiva (valor); -3 - Lista Neutra (valor); -4 - Margem Valor Agregado (%); -5 - Pauta (valor). - - - - - - - - - - - - - - - - Percentual da Margem de Valor Adicionado ICMS ST - - - - - Percentual de redução da BC ICMS ST - - - - - Valor da BC do ICMS ST - - - - - Alíquota do ICMS ST - - - - - Valor do ICMS ST - - - - - - Grupo desoneração - - - - Valor do ICMS de desoneração - - - - - Motivo da desoneração do ICMS:3-Uso na agropecuária;9-Outros;12-Fomento agropecuário - - - - - - - - - - - - - - - - - Partilha do ICMS entre a UF de origem e UF de destino ou a UF definida na legislação -Operação interestadual para consumidor final com partilha do ICMS devido na operação entre a UF de origem e a UF do destinatário ou ou a UF definida na legislação. (Ex. UF da concessionária de entrega do veículos) - - - - - - origem da mercadoria: 0 - Nacional -1 - Estrangeira - Importação direta -2 - Estrangeira - Adquirida no mercado interno - - - - - - Tributação pelo ICMS -10 - Tributada e com cobrança do ICMS por substituição tributária; -90 – Outros. - - - - - - - - - - - - Modalidade de determinação da BC do ICMS: -0 - Margem Valor Agregado (%); -1 - Pauta (valor); -2 - Preço Tabelado Máximo (valor); -3 - Valor da Operação. - - - - - - - - - - - - - - Valor da BC do ICMS - - - - - Percentual de redução da BC - - - - - Alíquota do ICMS - - - - - Valor do ICMS - - - - - Modalidade de determinação da BC do ICMS ST: -0 – Preço tabelado ou máximo sugerido; -1 - Lista Negativa (valor); -2 - Lista Positiva (valor); -3 - Lista Neutra (valor); -4 - Margem Valor Agregado (%); -5 - Pauta (valor). - - - - - - - - - - - - - - - - Percentual da Margem de Valor Adicionado ICMS ST - - - - - Percentual de redução da BC ICMS ST - - - - - Valor da BC do ICMS ST - - - - - Alíquota do ICMS ST - - - - - Valor do ICMS ST - - - - - Percentual para determinação do valor da Base de Cálculo da operação própria. - - - - - Sigla da UF para qual é devido o ICMS ST da operação. - - - - - - - - Grupo de informação do ICMSST devido para a UF de destino, nas operações interestaduais de produtos que tiveram retenção antecipada de ICMS por ST na UF do remetente. Repasse via Substituto Tributário. - - - - - - origem da mercadoria: 0 - Nacional -1 - Estrangeira - Importação direta -2 - Estrangeira - Adquirida no mercado interno - - - - - - Tributção pelo ICMS -41-Não Tributado - - - - - - - - - - - Informar o valor da BC do ICMS ST retido na UF remetente - - - - - Informar o valor do ICMS ST retido na UF remetente (iv2.0)) - - - - - Informar o valor da BC do ICMS ST da UF destino - - - - - Informar o valor da BC do ICMS ST da UF destino (v2.0) - - - - - - - - Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=101 (v.2.0) - - - - - - origem da mercadoria: 0 - Nacional -1 - Estrangeira - Importação direta -2 - Estrangeira - Adquirida no mercado interno -(v2.0) - - - - - 101- Tributada pelo Simples Nacional com permissão de crédito. (v.2.0) - - - - - - - - - - - Alíquota aplicável de cálculo do crédito (Simples Nacional). (v2.0) - - - - - Valor crédito do ICMS que pode ser aproveitado nos termos do art. 23 da LC 123 (Simples Nacional) (v2.0) - - - - - - - - Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=102, 103, 300 ou 400 (v.2.0)) - - - - - - origem da mercadoria: 0 - Nacional -1 - Estrangeira - Importação direta -2 - Estrangeira - Adquirida no mercado interno -(v2.0) - - - - - 102- Tributada pelo Simples Nacional sem permissão de crédito. -103 – Isenção do ICMS no Simples Nacional para faixa de receita bruta. -300 – Imune. -400 – Não tributda pelo Simples Nacional (v.2.0) (v.2.0) - - - - - - - - - - - - - - - - - Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=201 (v.2.0) - - - - - - Origem da mercadoria: -0 – Nacional; -1 – Estrangeira – Importação direta; -2 – Estrangeira – Adquirida no mercado interno. (v2.0) - - - - - 201- Tributada pelo Simples Nacional com permissão de crédito e com cobrança do ICMS por Substituição Tributária (v.2.0) - - - - - - - - - - - Modalidade de determinação da BC do ICMS ST: -0 – Preço tabelado ou máximo sugerido; -1 - Lista Negativa (valor); -2 - Lista Positiva (valor); -3 - Lista Neutra (valor); -4 - Margem Valor Agregado (%); -5 - Pauta (valor). (v2.0) - - - - - - - - - - - - - - - - Percentual da Margem de Valor Adicionado ICMS ST (v2.0) - - - - - Percentual de redução da BC ICMS ST (v2.0) - - - - - Valor da BC do ICMS ST (v2.0) - - - - - Alíquota do ICMS ST (v2.0) - - - - - Valor do ICMS ST (v2.0) - - - - - Alíquota aplicável de cálculo do crédito (Simples Nacional). (v2.0) - - - - - Valor crédito do ICMS que pode ser aproveitado nos termos do art. 23 da LC 123 (Simples Nacional) (v2.0) - - - - - - - - Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=202 ou 203 (v.2.0) - - - - - - Origem da mercadoria: -0 – Nacional; -1 – Estrangeira – Importação direta; -2 – Estrangeira – Adquirida no mercado interno. (v2.0) - - - - - 202- Tributada pelo Simples Nacional sem permissão de crédito e com cobrança do ICMS por Substituição Tributária; -203- Isenção do ICMS nos Simples Nacional para faixa de receita bruta e com cobrança do ICMS por Substituição Tributária (v.2.0) - - - - - - - - - - - - Modalidade de determinação da BC do ICMS ST: -0 – Preço tabelado ou máximo sugerido; -1 - Lista Negativa (valor); -2 - Lista Positiva (valor); -3 - Lista Neutra (valor); -4 - Margem Valor Agregado (%); -5 - Pauta (valor). (v2.0) - - - - - - - - - - - - - - - - Percentual da Margem de Valor Adicionado ICMS ST (v2.0) - - - - - Percentual de redução da BC ICMS ST (v2.0) - - - - - Valor da BC do ICMS ST (v2.0) - - - - - Alíquota do ICMS ST (v2.0) - - - - - Valor do ICMS ST (v2.0) - - - - - - - - Tributação do ICMS pelo SIMPLES NACIONAL,CRT=1 – Simples Nacional e CSOSN=500 (v.2.0) - - - - - - origem da mercadoria: 0 - Nacional -1 - Estrangeira - Importação direta -2 - Estrangeira - Adquirida no mercado interno - - - - - - 500 – ICMS cobrado anterirmente por substituição tributária (substituído) ou por antecipação -(v.2.0) - - - - - - - - - - - - - - - Valor da BC do ICMS ST retido anteriormente (v2.0) - - - - - Valor do ICMS ST retido anteriormente (v2.0) - - - - - - - - - Tributação do ICMS pelo SIMPLES NACIONAL, CRT=1 – Simples Nacional e CSOSN=900 (v2.0) - - - - - - origem da mercadoria: 0 - Nacional -1 - Estrangeira - Importação direta -2 - Estrangeira - Adquirida no mercado interno - - - - - - Tributação pelo ICMS 900 - Outros(v2.0) - - - - - - - - - - - - Modalidade de determinação da BC do ICMS: -0 - Margem Valor Agregado (%); -1 - Pauta (valor); -2 - Preço Tabelado Máximo (valor); -3 - Valor da Operação. - - - - - - - - - - - - - - Valor da BC do ICMS - - - - - Percentual de redução da BC - - - - - Alíquota do ICMS - - - - - Valor do ICMS - - - - - - - Modalidade de determinação da BC do ICMS ST: -0 – Preço tabelado ou máximo sugerido; -1 - Lista Negativa (valor); -2 - Lista Positiva (valor); -3 - Lista Neutra (valor); -4 - Margem Valor Agregado (%); -5 - Pauta (valor). - - - - - - - - - - - - - - - - Percentual da Margem de Valor Adicionado ICMS ST - - - - - Percentual de redução da BC ICMS ST - - - - - Valor da BC do ICMS ST - - - - - Alíquota do ICMS ST - - - - - Valor do ICMS ST - - - - - - - Alíquota aplicável de cálculo do crédito (Simples Nacional). (v2.0) - - - - - Valor crédito do ICMS que pode ser aproveitado nos termos do art. 23 da LC 123 (Simples Nacional) (v2.0) - - - - - - - - - - - - - Dados do Imposto de Importação - - - - - - Base da BC do Imposto de Importação - - - - - Valor das despesas aduaneiras - - - - - Valor do Imposto de Importação - - - - - Valor do Imposto sobre Operações Financeiras - - - - - - - - - - - ISSQN - - - - - - Valor da BC do ISSQN - - - - - Alíquota do ISSQN - - - - - Valor da do ISSQN - - - - - Informar o município de ocorrência do fato gerador do ISSQN. Utilizar a Tabela do IBGE (Anexo VII - Tabela de UF, Município e País). “Atenção, não vincular com os campos B12, C10 ou E10” v2.0 - - - - - Informar o Item da lista de serviços da LC 116/03 em que se classifica o serviço. - - - - - Valor dedução para redução da base de cálculo - - - - - Valor outras retenções - - - - - Valor desconto incondicionado - - - - - Valor desconto condicionado - - - - - Valor Retenção ISS - - - - - Exibilidade do ISS:1-Exigível;2-Não incidente;3-Isenção;4-Exportação;5-Imunidade;6-Exig.Susp. Judicial;7-Exig.Susp. ADM - - - - - - - - - - - - - - - - - Código do serviço prestado dentro do município - - - - - - - - - - - - Código do Município de Incidência do Imposto - - - - - Código de Pais - - - - - - - - - - - Número do Processo administrativo ou judicial de suspenção do processo - - - - - - - - - - - - Indicador de Incentivo Fiscal. 1=Sim; 2=Não - - - - - - - - - - - - - - - - - Dados do PIS - - - - - - Código de Situação Tributária do PIS. - 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo); -02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada); - - - - - - Código de Situação Tributária do PIS. - 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo); -02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada); - - - - - - - - - - - - Valor da BC do PIS - - - - - Alíquota do PIS (em percentual) - - - - - Valor do PIS - - - - - - - - Código de Situação Tributária do PIS. -03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto; - - - - - - Código de Situação Tributária do PIS. -03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto; - - - - - - - - - - - Quantidade Vendida (NT2011/004) - - - - - Alíquota do PIS (em reais) (NT2011/004) - - - - - Valor do PIS - - - - - - - - Código de Situação Tributária do PIS. -04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero); -06 - Operação Tributável - Alíquota Zero; -07 - Operação Isenta da contribuição; -08 - Operação Sem Incidência da contribuição; -09 - Operação com suspensão da contribuição; - - - - - - Código de Situação Tributária do PIS. -04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero); -05 - Operação Tributável (ST); -06 - Operação Tributável - Alíquota Zero; -07 - Operação Isenta da contribuição; -08 - Operação Sem Incidência da contribuição; -09 - Operação com suspensão da contribuição; - - - - - - - - - - - - - - - - - - - Código de Situação Tributária do PIS. -99 - Outras Operações. - - - - - - Código de Situação Tributária do PIS. -99 - Outras Operações. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Valor da BC do PIS - - - - - Alíquota do PIS (em percentual) - - - - - - - Quantidade Vendida (NT2011/004) - - - - - Alíquota do PIS (em reais) (NT2011/004) - - - - - - - Valor do PIS - - - - - - - - - - - Dados do PIS Substituição Tributária - - - - - - - - Valor da BC do PIS ST - - - - - Alíquota do PIS ST (em percentual) - - - - - - - Quantidade Vendida - - - - - Alíquota do PIS ST (em reais) - - - - - - - Valor do PIS ST - - - - - - - - Dados do COFINS - - - - - - Código de Situação Tributária do COFINS. - 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo); -02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada); - - - - - - Código de Situação Tributária do COFINS. - 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo); -02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada); - - - - - - - - - - - - Valor da BC do COFINS - - - - - Alíquota do COFINS (em percentual) - - - - - Valor do COFINS - - - - - - - - Código de Situação Tributária do COFINS. -03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto; - - - - - - Código de Situação Tributária do COFINS. -03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto; - - - - - - - - - - Quantidade Vendida (NT2011/004) - - - - - Alíquota do COFINS (em reais) (NT2011/004) - - - - - Valor do COFINS - - - - - - - - Código de Situação Tributária do COFINS: -04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero); -06 - Operação Tributável - Alíquota Zero; -07 - Operação Isenta da contribuição; -08 - Operação Sem Incidência da contribuição; -09 - Operação com suspensão da contribuição; - - - - - - Código de Situação Tributária do COFINS: -04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero); -05 - Operação Tributável (ST); -06 - Operação Tributável - Alíquota Zero; -07 - Operação Isenta da contribuição; -08 - Operação Sem Incidência da contribuição; -09 - Operação com suspensão da contribuição; - - - - - - - - - - - - - - - - - - - Código de Situação Tributária do COFINS: -49 - Outras Operações de Saída -50 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita Tributada no Mercado Interno -51 - Operação com Direito a Crédito – Vinculada Exclusivamente a Receita Não Tributada no Mercado Interno -52 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita de Exportação -53 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno -54 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas no Mercado Interno e de Exportação -55 - Operação com Direito a Crédito - Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação -56 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação -60 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Tributada no Mercado Interno -61 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Não-Tributada no Mercado Interno -62 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita de Exportação -63 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno -64 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas no Mercado Interno e de Exportação -65 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação -66 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação -67 - Crédito Presumido - Outras Operações -70 - Operação de Aquisição sem Direito a Crédito -71 - Operação de Aquisição com Isenção -72 - Operação de Aquisição com Suspensão -73 - Operação de Aquisição a Alíquota Zero -74 - Operação de Aquisição sem Incidência da Contribuição -75 - Operação de Aquisição por Substituição Tributária -98 - Outras Operações de Entrada -99 - Outras Operações. - - - - - - Código de Situação Tributária do COFINS: -49 - Outras Operações de Saída -50 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita Tributada no Mercado Interno -51 - Operação com Direito a Crédito – Vinculada Exclusivamente a Receita Não Tributada no Mercado Interno -52 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita de Exportação -53 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno -54 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas no Mercado Interno e de Exportação -55 - Operação com Direito a Crédito - Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação -56 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação -60 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Tributada no Mercado Interno -61 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Não-Tributada no Mercado Interno -62 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita de Exportação -63 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno -64 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas no Mercado Interno e de Exportação -65 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação -66 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação -67 - Crédito Presumido - Outras Operações -70 - Operação de Aquisição sem Direito a Crédito -71 - Operação de Aquisição com Isenção -72 - Operação de Aquisição com Suspensão -73 - Operação de Aquisição a Alíquota Zero -74 - Operação de Aquisição sem Incidência da Contribuição -75 - Operação de Aquisição por Substituição Tributária -98 - Outras Operações de Entrada -99 - Outras Operações. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Valor da BC do COFINS - - - - - Alíquota do COFINS (em percentual) - - - - - - - Quantidade Vendida (NT2011/004) - - - - - Alíquota do COFINS (em reais) (NT2011/004) - - - - - - - Valor do COFINS - - - - - - - - - - - Dados do COFINS da -Substituição Tributaria; - - - - - - - - Valor da BC do COFINS ST - - - - - Alíquota do COFINS ST(em percentual) - - - - - - - Quantidade Vendida - - - - - Alíquota do COFINS ST(em reais) - - - - - - - Valor do COFINS ST - - - - - - - - Grupo a ser informado nas vendas interestarduais para consumidor final, não contribuinte de ICMS - - - - - - Valor da Base de Cálculo do ICMS na UF do destinatário. - - - - - Percentual adicional inserido na alíquota interna da UF de destino, relativo ao Fundo de Combate à Pobreza (FCP) naquela UF. - - - - - Alíquota adotada nas operações internas na UF do destinatário para o produto / mercadoria. - - - - - Alíquota interestadual das UF envolvidas: - 4% alíquota interestadual para produtos importados; - 7% para os Estados de origem do Sul e Sudeste (exceto ES), destinado para os Estados do Norte e Nordeste ou ES; - 12% para os demais casos. - - - - - - - - - - - - - Percentual de partilha para a UF do destinatário: - 40% em 2016; - 60% em 2017; - 80% em 2018; - 100% a partir de 2019. - - - - - Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP) da UF de destino. - - - - - Valor do ICMS de partilha para a UF do destinatário. - - - - - Valor do ICMS de partilha para a UF do remetente. Nota: A partir de 2019, este valor será zero. - - - - - - - - - - - - - - Percentual de mercadoria devolvida - - - - - Informação de IPI devolvido - - - - - - Valor do IPI devolvido - - - - - - - - - - - Informações adicionais do produto (norma referenciada, informações complementares, etc) - - - - - - - - - - - - Número do item do NF - - - - - - - - - - - - - Dados dos totais da NF-e - - - - - - Totais referentes ao ICMS - - - - - - BC do ICMS - - - - - Valor Total do ICMS - - - - - Valor Total do ICMS desonerado - - - - - Valor total do ICMS relativo ao Fundo de Combate à Pobreza (FCP) para a UF de destino. - - - - - Valor total do ICMS de partilha para a UF do destinatário - - - - - Valor total do ICMS de partilha para a UF do remetente - - - - - BC do ICMS ST - - - - - Valor Total do ICMS ST - - - - - Valor Total dos produtos e serviços - - - - - Valor Total do Frete - - - - - Valor Total do Seguro - - - - - Valor Total do Desconto - - - - - Valor Total do II - - - - - Valor Total do IPI - - - - - Valor do PIS - - - - - Valor do COFINS - - - - - Outras Despesas acessórias - - - - - Valor Total da NF-e - - - - - Valor estimado total de impostos federais, estaduais e municipais - - - - - - - - Totais referentes ao ISSQN - - - - - - Valor Total dos Serviços sob não-incidência ou não tributados pelo ICMS - - - - - Base de Cálculo do ISS - - - - - Valor Total do ISS - - - - - Valor do PIS sobre serviços - - - - - Valor do COFINS sobre serviços - - - - - Data da prestação do serviço (AAAA-MM-DD) - - - - - Valor dedução para redução da base de cálculo - - - - - Valor outras retenções - - - - - Valor desconto incondicionado - - - - - Valor desconto condicionado - - - - - Valor Total Retenção ISS - - - - - Código do regime especial de tributação - - - - - - - - - - - - - - - - - - - Retenção de Tributos Federais - - - - - - Valor Retido de PIS - - - - - Valor Retido de COFINS - - - - - Valor Retido de CSLL - - - - - Base de Cálculo do IRRF - - - - - Valor Retido de IRRF - - - - - Base de Cálculo da Retenção da Previdêncica Social - - - - - Valor da Retenção da Previdêncica Social - - - - - - - - - - - Dados dos transportes da NF-e - - - - - - Modalidade do frete -0- Por conta do emitente; -1- Por conta do destinatário/remetente; -2- Por conta de terceiros; -9- Sem frete (v2.0) - - - - - - - - - - - - - - Dados do transportador - - - - - - - CNPJ do transportador - - - - - CPF do transportador - - - - - - Razão Social ou nome do transportador - - - - - - - - - - - Inscrição Estadual (v2.0) - - - - - Endereço completo - - - - - - - - - - - Nome do munícipio - - - - - - - - - - - Sigla da UF - - - - - - - - Dados da retenção ICMS do Transporte - - - - - - Valor do Serviço - - - - - BC da Retenção do ICMS - - - - - Alíquota da Retenção - - - - - Valor do ICMS Retido - - - - - Código Fiscal de Operações e Prestações - - - - - - - - - - - Código do Município de Ocorrência do Fato Gerador (utilizar a tabela do IBGE) - - - - - - - - - - Dados do veículo - - - - - Dados do reboque/Dolly (v2.0) - - - - - - Identificação do vagão (v2.0) - - - - - - - - - - - Identificação da balsa (v2.0) - - - - - - - - - - - - Dados dos volumes - - - - - - Quantidade de volumes transportados - - - - - - - - - - - Espécie dos volumes transportados - - - - - - - - - - - Marca dos volumes transportados - - - - - - - - - - - Numeração dos volumes transportados - - - - - - - - - - - Peso líquido (em kg) - - - - - Peso bruto (em kg) - - - - - - - - Número dos Lacres - - - - - - - - - - - - - - - - - - - - Dados da cobrança da NF-e - - - - - - Dados da fatura - - - - - - Número da fatura - - - - - - - - - - - Valor original da fatura - - - - - Valor do desconto da fatura - - - - - Valor líquido da fatura - - - - - - - - Dados das duplicatas NT 2011/004 - - - - - - Número da duplicata - - - - - - - - - - - Data de vencimento da duplicata (AAAA-MM-DD) - - - - - Valor da duplicata - - - - - - - - - - - Dados de Pagamento. Obrigatório apenas para (NFC-e) NT 2012/004 - - - - - - Forma de Pagamento:01-Dinheiro;02-Cheque;03-Cartão de Crédito;04-Cartão de Débito;05-Crédito Loja;10-Vale Alimentação;11-Vale Refeição;12-Vale Presente;13-Vale Combustível;99 - Outros - - - - - - - - - - - - - - - - - - - - Valor do Pagamento - - - - - Grupo de Cartões - - - - - - Tipo de Integração do processo de pagamento com o sistema de automação da empresa/ - 1=Pagamento integrado com o sistema de automação da empresa Ex. equipamento TEF , Comercio Eletronico - 2=Pagamento não integrado com o sistema de automação da empresa Ex: equipamento POS - - - - - - - - - - - - - CNPJ da credenciadora de cartão de crédito/débito - - - - - Bandeira da operadora de cartão de crédito/débito:01–Visa; 02–Mastercard; 03–American Express; 04–Sorocred; 99–Outros - - - - - - - - - - - - - - - Número de autorização da operação cartão de crédito/débito - - - - - - - - - - - - - - - - - Informações adicionais da NF-e - - - - - - Informações adicionais de interesse do Fisco (v2.0) - - - - - - - - - - - Informações complementares de interesse do Contribuinte - - - - - - - - - - - Campo de uso livre do contribuinte -informar o nome do campo no atributo xCampo -e o conteúdo do campo no xTexto - - - - - - - - - - - - - - - - - - - - - - - - - Campo de uso exclusivo do Fisco -informar o nome do campo no atributo xCampo -e o conteúdo do campo no xTexto - - - - - - - - - - - - - - - - - - - - - - - - - Grupo de informações do processo referenciado - - - - - - Indentificador do processo ou ato -concessório - - - - - - - - - - - Origem do processo, informar com: -0 - SEFAZ; -1 - Justiça Federal; -2 - Justiça Estadual; -3 - Secex/RFB; -9 - Outros - - - - - - - - - - - - - - - - - - - - - Informações de exportação - - - - - - Sigla da UF de Embarque ou de transposição de fronteira - - - - - Local de Embarque ou de transposição de fronteira - - - - - - - - - - - Descrição do local de despacho - - - - - - - - - - - - - - Informações de compras (Nota de Empenho, Pedido e Contrato) - - - - - - Informação da Nota de Empenho de compras públicas (NT2011/004) - - - - - - - - - - - Informação do pedido - - - - - - - - - - - Informação do contrato - - - - - - - - - - - - - - Informações de registro aquisições de cana - - - - - - Identificação da safra - - - - - - - - - - - Mês e Ano de Referência, formato: MM/AAAA - - - - - - - - - - - Fornecimentos diários - - - - - - Quantidade em quilogramas - peso líquido - - - - - - Número do dia - - - - - - - - - - - - - - - - - Total do mês - - - - - Total Anterior - - - - - Total Geral - - - - - Deduções - Taxas e Contribuições - - - - - - Descrição da Dedução - - - - - - - - - - - valor da dedução - - - - - - - - Valor dos fornecimentos - - - - - Valor Total das Deduções - - - - - Valor Líquido dos fornecimentos - - - - - - - - - Versão do leiaute (v2.0) - - - - - PL_005d - 11/08/09 - validação do Id - - - - - - - - - - - - - - - - Informações suplementares Nota Fiscal - - - - - - Texto com o QR-Code impresso no DANFE NFC-e - - - - - - - - - - - - - - - - - - - Tipo Protocolo de status resultado do processamento da NF-e - - - - - Dados do protocolo de status - - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Versão do Aplicativo que processou a NF-e - - - - - Chaves de acesso da NF-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, série e número da NF-e e código numérico+DV. - - - - - Data e hora de processamento, no formato AAAA-MM-DDTHH:MM:SSTZD. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Lote de NF-e enviado. - - - - - Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - códiga da UF - 2 posições ano; 10 seqüencial no ano. - - - - - Digest Value da NF-e processada. Utilizado para conferir a integridade da NF-e original. - - - - - Código do status da mensagem enviada. - - - - - Descrição literal do status do serviço solicitado. - - - - - - - - - - - - - Tipo Pedido de Concessão de Autorização da Nota Fiscal Eletrônica - - - - - - Indicador de processamento síncrono. 0=NÃO; 1=SIM=Síncrono - - - - - - - - - - - - - - - - Tipo Retorno do Pedido de Autorização da Nota Fiscal Eletrônica - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Versão do Aplicativo que recebeu o Lote. - - - - - Código do status da mensagem enviada. - - - - - Descrição literal do status do serviço solicitado. - - - - - código da UF de atendimento - - - - - Data e hora do recebimento, no formato AAAA-MM-DDTHH:MM:SSTZD - - - - - - Dados do Recibo do Lote - - - - - - Número do Recibo - - - - - Tempo médio de resposta do serviço (em segundos) dos últimos 5 minutos - - - - - - - - Protocolo de status resultado do processamento sincrono da NFC-e - - - - - - - - - Tipo Pedido de Consulta do Recido do Lote de Notas Fiscais Eletrônicas - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Número do Recibo - - - - - - - - Tipo Retorno do Pedido de Consulta do Recido do Lote de Notas Fiscais Eletrônicas - - - - - Identificação do Ambiente: -1 - Produção -2 - Homologação - - - - - Versão do Aplicativo que processou a NF-e - - - - - Número do Recibo Consultado - - - - - Código do status da mensagem enviada. - - - - - Descrição literal do status do serviço solicitado. - - - - - código da UF de atendimento - - - - - Data e hora de processamento, no formato AAAA-MM-DDTHH:MM:SSTZD. Em caso de Rejeição, com data e hora do recebimento do Lote de NF-e enviado. - - - - - - - Código da Mensagem (v2.0) -alterado para tamanho variavel 1-4. (NT2011/004) - - - - - - - - - - - Mensagem da SEFAZ para o emissor. (v2.0) - - - - - - - - - - - - Protocolo de status resultado do processamento da NF-e - - - - - - - - Tipo da NF-e processada - - - - - - - - - - Tipo Dados do Endereço // 24/10/08 - tamanho mínimo - - - - - Logradouro - - - - - - - - - - - Número - - - - - - - - - - - Complemento - - - - - - - - - - - Bairro - - - - - - - - - - - Código do município (utilizar a tabela do IBGE), informar 9999999 para operações com o exterior. - - - - - Nome do município, informar EXTERIOR para operações com o exterior. - - - - - - - - - - - Sigla da UF, informar EX para operações com o exterior. - - - - - CEP - - - - - - - - - - - Código de Pais - - - - - - - - - - - Nome do país - - - - - - - - - - - Telefone, preencher com Código DDD + número do telefone , nas operações com exterior é permtido informar o código do país + código da localidade + número do telefone - - - - - - - - - - - - - Tipo Dados do Endereço do Emitente // 24/10/08 - desmembrado / tamanho mínimo - - - - - Logradouro - - - - - - - - - - - Número - - - - - - - - - - - Complemento - - - - - - - - - - - Bairro - - - - - - - - - - - Código do município - - - - - Nome do município - - - - - - - - - - - Sigla da UF - - - - - CEP - NT 2011/004 - - - - - - - - - - - Código do país - - - - - - - - - - Nome do país - - - - - - - - - - - Preencher com Código DDD + número do telefone (v.2.0) - - - - - - - - - - - - - Tipo Dados do Local de Retirada ou Entrega // 24/10/08 - tamanho mínimo // v2.0 - - - - - - CNPJ - - - - - CPF (v2.0) - - - - - - Logradouro - - - - - - - - - - - Número - - - - - - - - - - - Complemento - - - - - - - - - - - Bairro - - - - - - - - - - - Código do município (utilizar a tabela do IBGE) - - - - - Nome do município - - - - - - - - - - - Sigla da UF - - - - - - - Tipo Dados do Veículo - - - - - Placa do veículo (NT2011/004) - - - - - - - - - - - Sigla da UF - - - - - Registro Nacional de Transportador de Carga (ANTT) - - - - - - - - - - - - - Tipo Origem da mercadoria CST ICMS origem da mercadoria: 0-Nacional exceto as indicadas nos códigos 3, 4, 5 e 8; -1-Estrangeira - Importação direta; 2-Estrangeira - Adquirida no mercado interno; 3-Nacional, conteudo superior 40% e inferior ou igual a 70%; 4-Nacional, processos produtivos básicos; 5-Nacional, conteudo inferior 40%; 6-Estrangeira - Importação direta, com similar nacional, lista CAMEX; 7-Estrangeira - mercado interno, sem simular,lista CAMEX;8-Nacional, Conteúdo de Importação superior a 70%. - - - - - - - - - - - - - - - - - Tipo Finalidade da NF-e (1=Normal; 2=Complementar; 3=Ajuste; 4=Devolução/Retorno) - - - - - - - - - - - - Tipo processo de emissão da NF-e - - - - - - - - - - - - Tipo Código da Lista de Serviços LC 116/2003 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tipo Identificação de Lote - - - - - - - - - Tipo Versão da NF-e - 3.10 - - - - - - - - - Identificador único (Globally Unique Identifier) - - - - - - - - - Tipo: Dados do IPI - - - - - Classe de Enquadramento do IPI para Cigarros e Bebidas - - - - - - - - - - - CNPJ do produtor da mercadoria, quando diferente do emitente. Somente para os casos de exportação direta ou indireta. - - - - - Código do selo de controle do IPI - - - - - - - - - - - Quantidade de selo de controle do IPI - - - - - - - - - - - Código de Enquadramento Legal do IPI (tabela a ser criada pela RFB) - - - - - - - - - - - - - - - Código da Situação Tributária do IPI: -00-Entrada com recuperação de crédito -49 - Outras entradas -50-Saída tributada -99-Outras saídas - - - - - - - - - - - - - - - - Valor da BC do IPI - - - - - Alíquota do IPI - - - - - - - Quantidade total na unidade padrão para tributação - - - - - Valor por Unidade Tributável. Informar o valor do imposto Pauta por unidade de medida. - - - - - - - Valor do IPI - - - - - - - - - - - Código da Situação Tributária do IPI: -01-Entrada tributada com alíquota zero -02-Entrada isenta -03-Entrada não-tributada -04-Entrada imune -05-Entrada com suspensão -51-Saída tributada com alíquota zero -52-Saída isenta -53-Saída não-tributada -54-Saída imune -55-Saída com suspensão - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pytrustnfe/xml/schemas/leiauteNFe_v4.00.xsd b/pytrustnfe/xml/schemas/leiauteNFe_v4.00.xsd index f389699..8cde564 100755 --- a/pytrustnfe/xml/schemas/leiauteNFe_v4.00.xsd +++ b/pytrustnfe/xml/schemas/leiauteNFe_v4.00.xsd @@ -6,6 +6,9 @@ + + + @@ -871,8 +874,8 @@ Formato ”CFOP9999”. - - + + @@ -1583,7 +1586,8 @@ N-NormalVIN - Código de Produto da ANVISA. Utilizar o número do registro do produto da Câmara de Regulação do Mercado de Medicamento – CMED. + Utilizar o número do registro ANVISA +Obs.: Para medicamento isento de registro na ANVISA, utilizar o número da decisão que o isenta, como por exemplo o número da Resolução da Diretoria Colegiada da ANVISA (RDC). @@ -2500,7 +2504,7 @@ A exigência do preenchimento das informações do ICMS diferido fica à critér Aliquota suportada pelo consumidor final. - + Valor do ICMS ST retido anteriormente @@ -2523,6 +2527,30 @@ A exigência do preenchimento das informações do ICMS diferido fica à critér + + + + + + Percentual de redução da base de cálculo efetiva. + + + + + Valor da base de cálculo efetiva. + + + + + Alíquota do ICMS efetiva. + + + + + Valor do ICMS efetivo. + + + @@ -3375,7 +3403,32 @@ Operação interestadual para consumidor final com partilha do ICMS devido na o - + + + + + + Percentual de redução da base de cálculo efetiva. + + + + + Valor da base de cálculo efetiva. + + + + + Alíquota do ICMS efetiva. + + + + + Valor do ICMS efetivo. + + + + + @@ -4862,17 +4915,17 @@ Substituição Tributaria; - + Valor original da fatura - + Valor do desconto da fatura - + Valor líquido da fatura @@ -5391,7 +5444,7 @@ concessório - + @@ -5993,7 +6046,7 @@ alterado para tamanho variavel 1-4. (NT2011/004) - + diff --git a/pytrustnfe/xml/schemas/nfe_v3.10.xsd b/pytrustnfe/xml/schemas/nfe_v3.10.xsd deleted file mode 100755 index 9e435ee..0000000 --- a/pytrustnfe/xml/schemas/nfe_v3.10.xsd +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - Nota Fiscal Eletrônica - - - \ No newline at end of file diff --git a/pytrustnfe/xml/schemas/tiposBasico_v3.10.xsd b/pytrustnfe/xml/schemas/tiposBasico_v3.10.xsd deleted file mode 100755 index 1dfe7d0..0000000 --- a/pytrustnfe/xml/schemas/tiposBasico_v3.10.xsd +++ /dev/null @@ -1,571 +0,0 @@ - - - - - - Tipo Código da UF da tabela do IBGE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tipo Código do Município da tabela do IBGE - - - - - - - - - Tipo Chave da Nota Fiscal Eletrônica - - - - - - - - - - Tipo Número do Protocolo de Status - - - - - - - - - - Tipo Número do Recibo do envio de lote de NF-e - - - - - - - - - - Tipo Código da Mensagem enviada - - - - - - - - - - Tipo Número do CNPJ - - - - - - - - - - Tipo Número do CNPJ tmanho varíavel (3-14) - - - - - - - - - - Tipo Número do CNPJ Opcional - - - - - - - - - - Tipo Número do CPF - - - - - - - - - - Tipo Número do CPF de tamanho variável (3-11) - - - - - - - - - - Tipo Decimal com até 2 dígitos inteiros, podendo ter de 1 até 4 decimais - - - - - - - - - Tipo Decimal com até 3 dígitos inteiros, podendo ter de 2 até 4 decimais - - - - - - - - - Tipo Decimal com até 3 dígitos inteiros e 2 até 4 decimais. Utilizados em TAGs opcionais, não aceita valor zero. - - - - - - - - - Tipo Decimal com 3 inteiros (no máximo 100), com 2 decimais - - - - - - - - - Tipo Decimal com 3 inteiros (no máximo 100), com até 4 decimais - - - - - - - - - Tipo Decimal com 8 inteiros, podendo ter de 1 até 3 decimais - - - - - - - - - Tipo Decimal com 11 inteiros, podendo ter 4 decimais - - - - - - - - - Tipo Decimal com 11 inteiros, podendo ter de 1 até 4 decimais - - - - - - - - - Tipo Decimal com 11 inteiros, podendo ter 4 decimais (utilizado em tags opcionais) - - - - - - - - - Tipo Decimal com 11 inteiros, podendo ter de 1 até 10 decimais - - - - - - - - - Tipo Decimal com 12 inteiros, podendo ter 3 decimais - - - - - - - - - Tipo Decimal com 12 inteiros e 4 decimais - - - - - - - - - Tipo Decimal com 12 inteiros de 1 até 4 decimais - - - - - - - - - Tipo Decimal com 12 inteiros com 1 até 4 decimais - - - - - - - - - Tipo Decimal com 12 inteiros, 1 a 4 decimais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais - - - - - - - - - Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais, utilizado em tags opcionais - - - - - - - - - Tipo Inscrição Estadual do Destinatário // alterado para aceitar vazio ou ISENTO - maio/2010 v2.0 - - - - - - - - - - Tipo Inscrição Estadual do Destinatário // alterado para aceitar vazio ou ISENTO - maio/2010 v2.0 - - - - - - - - - - Tipo Inscrição Estadual do ST // acrescentado EM 24/10/08 - - - - - - - - - - Tipo Inscrição Estadual do Emitente // alterado EM 24/10/08 para aceitar ISENTO - - - - - - - - - - Tipo Modelo Documento Fiscal - - - - - - - - - - Tipo Número do Documento Fiscal - - - - - - - - - Tipo Série do Documento Fiscal - - - - - - - - - Tipo Sigla da UF - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tipo Sigla da UF de emissor // acrescentado em 24/10/08 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tipo Ambiente - - - - - - - - - - Tipo Versão do Aplicativo - - - - - - - - - Tipo Motivo - - - - - - - - - Tipo Justificativa - - - - - - - - - Tipo Serviço solicitado - - - - - - Tipo ano - - - - - - - - - Tipo temp médio em segundos - - - - - - - - - Tipo string genérico - - - - - - - - - Tipo data AAAA-MM-DD - - - - - - - - - Tipo hora HH:MM:SS // tipo acrescentado na v2.0 - - - - - - - - - Data e Hora, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm) - - - - - - - - - - - - - - - Tipo Código de orgão (UF da tabela do IBGE + 90 RFB) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/setup.py b/setup.py index 1b9f1da..1ee3af2 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages -VERSION = "0.9.28" +VERSION = "0.9.29" setup( From 4691c28623f06bc285e4ea14cbef8f6590cf1350 Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Tue, 31 Jul 2018 14:47:14 -0300 Subject: [PATCH 27/33] [IMP] Novo release da pytrusnfe3 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 1ee3af2..0d55083 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages -VERSION = "0.9.29" +VERSION = "0.10.0" setup( From c9f71c9ea1a0acbbc521560672dc5c7296928c8f Mon Sep 17 00:00:00 2001 From: Johny Chen Jy <31947361+carcaroff@users.noreply.github.com> Date: Wed, 1 Aug 2018 18:07:40 -0300 Subject: [PATCH 28/33] New zeep version uses settings instead of options --- pytrustnfe/nfe/__init__.py | 4 ++-- setup.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pytrustnfe/nfe/__init__.py b/pytrustnfe/nfe/__init__.py index c067c83..3284169 100644 --- a/pytrustnfe/nfe/__init__.py +++ b/pytrustnfe/nfe/__init__.py @@ -159,7 +159,7 @@ def _send(certificado, method, **kwargs): port = next(iter(client.wsdl.port_types)) first_operation = next(iter(client.wsdl.port_types[port].operations)) - with client.options(raw_response=True): + with client.settings(raw_response=True): response = client.service[first_operation](xml) response, obj = sanitize_response(response.text) return { @@ -289,7 +289,7 @@ def consulta_distribuicao_nfe(certificado, **kwargs): port = next(iter(client.wsdl.port_types)) first_operation = next(iter(client.wsdl.port_types[port].operations)) - with client.options(raw_response=True): + with client.settings(raw_response=True): response = client.service[first_operation](nfeDadosMsg=xml, _soapheaders=[xml_um]) response, obj = sanitize_response(response.text) return { diff --git a/setup.py b/setup.py index 0d55083..cd5ab66 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages -VERSION = "0.10.0" +VERSION = "0.10.1" setup( From bb5509c781975e57a82694939f13a0e4ec3c4947 Mon Sep 17 00:00:00 2001 From: Carlos Alberto Cipriano Korovsky Date: Thu, 2 Aug 2018 15:05:58 +0000 Subject: [PATCH 29/33] =?UTF-8?q?Corre=C3=A7=C3=A3o=20do=20n=C3=BAmero=20d?= =?UTF-8?q?e=20vers=C3=A3o=20da=20tag=20nfeProc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Corrigido: número de versão da tag nfeProc de 3.10 para 4.00. A versão incorreta gerava erro de validação da nota fiscal enviada aos clientes, conforme testes realizados no site "https://www.sefaz.rs.gov.br/nfe/NFE-VAL.aspx" Alterado: número de versão do pytrustnfe da versão 0.10.1 para 0.10.2 --- pytrustnfe/utils.py | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pytrustnfe/utils.py b/pytrustnfe/utils.py index 540fbb9..1c369d2 100644 --- a/pytrustnfe/utils.py +++ b/pytrustnfe/utils.py @@ -76,7 +76,7 @@ def _find_node(xml, node): def gerar_nfeproc(envio, recibo): NSMAP = {None: 'http://www.portalfiscal.inf.br/nfe'} - root = ET.Element("nfeProc", versao="3.10", nsmap=NSMAP) + root = ET.Element("nfeProc", versao="4.00", nsmap=NSMAP) parser = ET.XMLParser(encoding='utf-8') docEnvio = ET.fromstring(envio.encode('utf-8'), parser=parser) docRecibo = ET.fromstring(recibo.encode('utf-8'), parser=parser) diff --git a/setup.py b/setup.py index cd5ab66..3a582b5 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages -VERSION = "0.10.1" +VERSION = "0.10.2" setup( From 79abb1798c8df9d024fa5ed412754f45ff488e74 Mon Sep 17 00:00:00 2001 From: Alyson Brito Date: Fri, 3 Aug 2018 09:49:13 -0300 Subject: [PATCH 30/33] Atualizada as urls dos servidores sefaz ce --- pytrustnfe/Servidores.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/pytrustnfe/Servidores.py b/pytrustnfe/Servidores.py index ea570f1..931b5e1 100644 --- a/pytrustnfe/Servidores.py +++ b/pytrustnfe/Servidores.py @@ -336,23 +336,23 @@ UFBA = { UFCE = { AMBIENTE_PRODUCAO: { 'servidor': 'nfe.sefaz.ce.gov.br', - WS_NFE_AUTORIZACAO: 'nfe2/services/NfeAutorizacao', - WS_NFE_RET_AUTORIZACAO: 'nfe2/services/NfeRetAutorizacao', - WS_NFE_INUTILIZACAO: 'nfe2/services/NfeInutilizacao2', - WS_NFE_CONSULTA: 'nfe2/services/NfeConsulta2', - WS_NFE_SITUACAO: 'nfe2/services/NfeStatusServico2', - WS_NFE_CADASTRO: 'nfe2/services/CadConsultaCadastro2', - WS_NFE_RECEPCAO_EVENTO: 'nfe2/services/RecepcaoEvento', + WS_NFE_AUTORIZACAO: 'nfe4/services/NFeAutorizacao4', + WS_NFE_RET_AUTORIZACAO: 'nfe4/services/NFeRetAutorizacao4', + WS_NFE_INUTILIZACAO: 'nfe4/services/NFeInutilizacao4', + WS_NFE_CONSULTA: 'nfe4/services/NFeConsultaProtocolo4', + WS_NFE_SITUACAO: 'nfe4/services/nfe4/services/NFeStatusServico4', + WS_NFE_CADASTRO: 'nfe4/services/CadConsultaCadastro4', + WS_NFE_RECEPCAO_EVENTO: 'nfe4/services/NFeRecepcaoEvento4', }, AMBIENTE_HOMOLOGACAO: { 'servidor': 'nfeh.sefaz.ce.gov.br', - WS_NFE_AUTORIZACAO: 'nfe2/services/NfeAutorizacao', - WS_NFE_RET_AUTORIZACAO: 'nfe2/services/NfeRetAutorizacao', - WS_NFE_INUTILIZACAO: 'nfe2/services/NfeInutilizacao2', - WS_NFE_CONSULTA: 'nfe2/services/NfeConsulta2', - WS_NFE_SITUACAO: 'nfe2/services/NfeStatusServico2', - WS_NFE_CADASTRO: 'nfe2/services/CadConsultaCadastro2', - WS_NFE_RECEPCAO_EVENTO: 'nfe2/services/RecepcaoEvento', + WS_NFE_AUTORIZACAO: 'nfe4/services/NFeAutorizacao4', + WS_NFE_RET_AUTORIZACAO: 'nfe4/services/NFeRetAutorizacao4', + WS_NFE_INUTILIZACAO: 'nfe4/services/NFeInutilizacao4', + WS_NFE_CONSULTA: 'nfe4/services/NFeConsultaProtocolo4', + WS_NFE_SITUACAO: 'nfe4/services/nfe4/services/NFeStatusServico4', + WS_NFE_CADASTRO: 'nfe4/services/CadConsultaCadastro4', + WS_NFE_RECEPCAO_EVENTO: 'nfe4/services/NFeRecepcaoEvento4', } } From 92c1191d8f8d9200692480e32348e399ea7c6a5f Mon Sep 17 00:00:00 2001 From: Alyson Brito Date: Fri, 3 Aug 2018 11:37:01 -0300 Subject: [PATCH 31/33] Revisado as urls da sefaz --- pytrustnfe/Servidores.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/pytrustnfe/Servidores.py b/pytrustnfe/Servidores.py index 931b5e1..a64b0b7 100644 --- a/pytrustnfe/Servidores.py +++ b/pytrustnfe/Servidores.py @@ -336,23 +336,23 @@ UFBA = { UFCE = { AMBIENTE_PRODUCAO: { 'servidor': 'nfe.sefaz.ce.gov.br', - WS_NFE_AUTORIZACAO: 'nfe4/services/NFeAutorizacao4', - WS_NFE_RET_AUTORIZACAO: 'nfe4/services/NFeRetAutorizacao4', - WS_NFE_INUTILIZACAO: 'nfe4/services/NFeInutilizacao4', - WS_NFE_CONSULTA: 'nfe4/services/NFeConsultaProtocolo4', - WS_NFE_SITUACAO: 'nfe4/services/nfe4/services/NFeStatusServico4', - WS_NFE_CADASTRO: 'nfe4/services/CadConsultaCadastro4', - WS_NFE_RECEPCAO_EVENTO: 'nfe4/services/NFeRecepcaoEvento4', + WS_NFE_AUTORIZACAO: 'nfe4/services/NFeAutorizacao4?WSDL', + WS_NFE_RET_AUTORIZACAO: 'nfe4/services/NFeRetAutorizacao4?WSDL', + WS_NFE_INUTILIZACAO: 'nfe4/services/NFeInutilizacao4?WSDL', + WS_NFE_CONSULTA: 'nfe4/services/NFeConsultaProtocolo4?WSDL', + WS_NFE_SITUACAO: 'nfe4/services/NFeStatusServico4?WSDL', + WS_NFE_CADASTRO: 'nfe4/services/CadConsultaCadastro4?WSDL', + WS_NFE_RECEPCAO_EVENTO: 'nfe4/services/NFeRecepcaoEvento4?WSDL', }, AMBIENTE_HOMOLOGACAO: { 'servidor': 'nfeh.sefaz.ce.gov.br', - WS_NFE_AUTORIZACAO: 'nfe4/services/NFeAutorizacao4', - WS_NFE_RET_AUTORIZACAO: 'nfe4/services/NFeRetAutorizacao4', - WS_NFE_INUTILIZACAO: 'nfe4/services/NFeInutilizacao4', - WS_NFE_CONSULTA: 'nfe4/services/NFeConsultaProtocolo4', - WS_NFE_SITUACAO: 'nfe4/services/nfe4/services/NFeStatusServico4', - WS_NFE_CADASTRO: 'nfe4/services/CadConsultaCadastro4', - WS_NFE_RECEPCAO_EVENTO: 'nfe4/services/NFeRecepcaoEvento4', + WS_NFE_AUTORIZACAO: 'nfe4/services/NFeAutorizacao4?WSDL', + WS_NFE_RET_AUTORIZACAO: 'nfe4/services/NFeRetAutorizacao4?WSDL', + WS_NFE_INUTILIZACAO: 'nfe4/services/NFeInutilizacao4?WSDL', + WS_NFE_CONSULTA: 'nfe4/services/NFeConsultaProtocolo4?WSDL', + WS_NFE_SITUACAO: 'nfe4/services/NFeStatusServico4?WSDL', + WS_NFE_CADASTRO: 'nfe4/services/CadConsultaCadastro4?WSDL', + WS_NFE_RECEPCAO_EVENTO: 'nfe4/services/NFeRecepcaoEvento4?WSDL', } } From 37506bd3ca8e64d3f1a154005e5a441169eef8d6 Mon Sep 17 00:00:00 2001 From: Alyson Brito Date: Fri, 3 Aug 2018 14:42:01 -0300 Subject: [PATCH 32/33] Incrementa a versao da biblioteca --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 3a582b5..f094685 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages -VERSION = "0.10.2" +VERSION = "0.10.3" setup( From 8c132a3bbb76c9bdcd600eb795dc2040e47ed8a7 Mon Sep 17 00:00:00 2001 From: Danimar Ribeiro Date: Mon, 6 Aug 2018 15:52:02 -0300 Subject: [PATCH 33/33] =?UTF-8?q?[FIX]=20Certifica=20que=20vamos=20usar=20?= =?UTF-8?q?a=20opera=C3=A7=C3=A3o=20correta=20ao=20enviar=20a=20NFE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pytrustnfe/nfe/__init__.py | 28 ++-------------------------- setup.py | 2 +- 2 files changed, 3 insertions(+), 27 deletions(-) diff --git a/pytrustnfe/nfe/__init__.py b/pytrustnfe/nfe/__init__.py index 3284169..0f80937 100644 --- a/pytrustnfe/nfe/__init__.py +++ b/pytrustnfe/nfe/__init__.py @@ -38,26 +38,6 @@ def _generate_nfe_id(**kwargs): item['infNFe']['ide']['cDV'] = chave_nfe[len(chave_nfe) - 1:] -def _add_required_node(elemTree): - ns = elemTree.nsmap - if None in ns: - ns['ns'] = ns[None] - ns.pop(None) - - prods = elemTree.findall('ns:NFe/ns:infNFe/ns:det/ns:prod', namespaces=ns) - for prod in prods: - element = prod.find('ns:cEAN', namespaces=ns) - if element is None: - cEan = etree.Element('cEAN') - prod.insert(1, cEan) - element = prod.find('ns:cEANTrib', namespaces=ns) - if element is None: - cEANTrib = etree.Element('cEANTrib') - vProd = prod.find('ns:vProd', namespaces=ns) - prod.insert(prod.index(vProd) + 1, cEANTrib) - return elemTree - - def _add_qrCode(xml, **kwargs): xml = etree.fromstring(xml) inf_nfe = kwargs['NFes'][0]['infNFe'] @@ -114,11 +94,6 @@ def _render(certificado, method, sign, **kwargs): modelo = modelo.text if modelo is not None else '55' if sign: - # Caso for autorização temos que adicionar algumas tags tipo - # cEan, cEANTrib porque o governo sempre complica e não segue padrão - if method == 'NfeAutorizacao': - xmlElem_send = _add_required_node(xmlElem_send) - signer = Assinatura(certificado.pfx, certificado.password) if method == 'NfeInutilizacao': xml_send = signer.assina_xml(xmlElem_send, kwargs['obj']['id']) @@ -158,7 +133,8 @@ def _send(certificado, method, **kwargs): client = Client(base_url, transport=transport) port = next(iter(client.wsdl.port_types)) - first_operation = next(iter(client.wsdl.port_types[port].operations)) + first_operation = [x for x in iter( + client.wsdl.port_types[port].operations) if "Zip" not in x][0] with client.settings(raw_response=True): response = client.service[first_operation](xml) response, obj = sanitize_response(response.text) diff --git a/setup.py b/setup.py index f094685..a15e6cf 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages -VERSION = "0.10.3" +VERSION = "0.10.4" setup(