From 0fb661433b76f47ed79fd936256fda3736b39702 Mon Sep 17 00:00:00 2001 From: Junior Tada Date: Tue, 5 Dec 2017 09:37:21 -0200 Subject: [PATCH 1/7] Add MA SVAN e atualizado url webservice 4.00 --- pynfe/processamento/comunicacao.py | 15 +++++++++++++++ pynfe/utils/webservices.py | 12 ++++++------ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/pynfe/processamento/comunicacao.py b/pynfe/processamento/comunicacao.py index 00d1952..83c0897 100644 --- a/pynfe/processamento/comunicacao.py +++ b/pynfe/processamento/comunicacao.py @@ -321,6 +321,20 @@ class ComunicacaoSefaz(Comunicacao): self.url = NFCE['SVRS'][ambiente] + NFCE['SVRS'][consulta] else: raise Exception('Modelo não encontrado! Defina modelo="nfe" ou "nfce"') + lista_svan = ['MA','PA'] + elif self.uf.upper() in lista_svan: + if self._ambiente == 1: + ambiente = 'HTTPS' + else: + ambiente = 'HOMOLOGACAO' + if modelo == 'nfe': + # nfe Ex: https://nfe.fazenda.pr.gov.br/nfe/NFeStatusServico3 + self.url = NFE['SVAN'][ambiente] + NFE['SVAN'][consulta] + elif modelo == 'nfce': + # nfce Ex: https://homologacao.nfce.fazenda.pr.gov.br/nfce/NFeStatusServico3 + self.url = NFCE['SVAN'][ambiente] + NFCE['SVAN'][consulta] + else: + raise Exception('Modelo não encontrado! Defina modelo="nfe" ou "nfce"') else: raise Exception('UF com URL não definida!') return self.url @@ -435,6 +449,7 @@ class ComunicacaoSefaz(Comunicacao): # result.encoding = 'utf-8' # return result print(url) + print(xml) # Faz o request com o servidor result = requests.post(url, xml, headers=self._post_header(), cert=chave_cert, verify=False, timeout=120) result.encoding = 'utf-8' diff --git a/pynfe/utils/webservices.py b/pynfe/utils/webservices.py index c4ecbb8..abd9bad 100644 --- a/pynfe/utils/webservices.py +++ b/pynfe/utils/webservices.py @@ -384,12 +384,12 @@ NFE = { 'HOMOLOGACAO': 'https://homolog.' }, 'SVAN': { - 'STATUS': 'sefazvirtual.fazenda.gov.br/NfeStatusServico2/NfeStatusServico2.asmx', - 'AUTORIZACAO': 'sefazvirtual.fazenda.gov.br/NfeAutorizacao/NfeAutorizacao.asmx', - 'RECIBO': 'sefazvirtual.fazenda.gov.br/NfeRetAutorizacao/NfeRetAutorizacao.asmx', - 'CHAVE': 'sefazvirtual.fazenda.gov.br/NfeConsulta2/NfeConsulta2.asmx', - 'INUTILIZACAO': 'sefazvirtual.fazenda.gov.br/NfeInutilizacao2/NfeInutilizacao2.asmx', - 'EVENTOS': 'sefazvirtual.fazenda.gov.br/RecepcaoEvento/RecepcaoEvento.asmx', + 'STATUS': 'sefazvirtual.fazenda.gov.br/NFeStatusServico4/NFeStatusServico4.asmx', + 'AUTORIZACAO': 'sefazvirtual.fazenda.gov.br/NFeAutorizacao4/NFeAutorizacao4.asmx', + 'RECIBO': 'sefazvirtual.fazenda.gov.br/NFeRetAutorizacao4/NFeRetAutorizacao4.asmx', + 'CHAVE': 'sefazvirtual.fazenda.gov.br/NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx', + 'INUTILIZACAO': 'sefazvirtual.fazenda.gov.br/NFeInutilizacao4/NFeInutilizacao4.asmx', + 'EVENTOS': 'sefazvirtual.fazenda.gov.br/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx', 'DOWNLOAD': 'sefazvirtual.fazenda.gov.br/NfeDownloadNF/NfeDownloadNF.asmx', 'HTTPS': 'https://www.', 'HOMOLOGACAO': 'https://hom.' From 157bb228ed7033e178198557d510611e4f0347c5 Mon Sep 17 00:00:00 2001 From: Junior Tada Date: Tue, 5 Dec 2017 09:45:30 -0200 Subject: [PATCH 2/7] Movido novas urls para branch master (4.00) --- pynfe/utils/webservices.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pynfe/utils/webservices.py b/pynfe/utils/webservices.py index abd9bad..c4ecbb8 100644 --- a/pynfe/utils/webservices.py +++ b/pynfe/utils/webservices.py @@ -384,12 +384,12 @@ NFE = { 'HOMOLOGACAO': 'https://homolog.' }, 'SVAN': { - 'STATUS': 'sefazvirtual.fazenda.gov.br/NFeStatusServico4/NFeStatusServico4.asmx', - 'AUTORIZACAO': 'sefazvirtual.fazenda.gov.br/NFeAutorizacao4/NFeAutorizacao4.asmx', - 'RECIBO': 'sefazvirtual.fazenda.gov.br/NFeRetAutorizacao4/NFeRetAutorizacao4.asmx', - 'CHAVE': 'sefazvirtual.fazenda.gov.br/NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx', - 'INUTILIZACAO': 'sefazvirtual.fazenda.gov.br/NFeInutilizacao4/NFeInutilizacao4.asmx', - 'EVENTOS': 'sefazvirtual.fazenda.gov.br/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx', + 'STATUS': 'sefazvirtual.fazenda.gov.br/NfeStatusServico2/NfeStatusServico2.asmx', + 'AUTORIZACAO': 'sefazvirtual.fazenda.gov.br/NfeAutorizacao/NfeAutorizacao.asmx', + 'RECIBO': 'sefazvirtual.fazenda.gov.br/NfeRetAutorizacao/NfeRetAutorizacao.asmx', + 'CHAVE': 'sefazvirtual.fazenda.gov.br/NfeConsulta2/NfeConsulta2.asmx', + 'INUTILIZACAO': 'sefazvirtual.fazenda.gov.br/NfeInutilizacao2/NfeInutilizacao2.asmx', + 'EVENTOS': 'sefazvirtual.fazenda.gov.br/RecepcaoEvento/RecepcaoEvento.asmx', 'DOWNLOAD': 'sefazvirtual.fazenda.gov.br/NfeDownloadNF/NfeDownloadNF.asmx', 'HTTPS': 'https://www.', 'HOMOLOGACAO': 'https://hom.' From 34a36c7fb5019ea4ce4707d01e2660201da7d6b9 Mon Sep 17 00:00:00 2001 From: Junior Tada Date: Tue, 16 Jan 2018 14:10:10 -0200 Subject: [PATCH 3/7] Corrigido lista antes do elif --- pynfe/processamento/comunicacao.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pynfe/processamento/comunicacao.py b/pynfe/processamento/comunicacao.py index 83c0897..fad10d3 100644 --- a/pynfe/processamento/comunicacao.py +++ b/pynfe/processamento/comunicacao.py @@ -308,6 +308,7 @@ class ComunicacaoSefaz(Comunicacao): # Estados que utilizam outros ambientes else: lista_svrs = ['AC','RN','PB','SC','SE','RJ'] + lista_svan = ['MA','PA'] if self.uf.upper() in lista_svrs: if self._ambiente == 1: ambiente = 'HTTPS' @@ -321,7 +322,6 @@ class ComunicacaoSefaz(Comunicacao): self.url = NFCE['SVRS'][ambiente] + NFCE['SVRS'][consulta] else: raise Exception('Modelo não encontrado! Defina modelo="nfe" ou "nfce"') - lista_svan = ['MA','PA'] elif self.uf.upper() in lista_svan: if self._ambiente == 1: ambiente = 'HTTPS' From 4ecc626cac10e05dcf5fd60015714ea88be2c584 Mon Sep 17 00:00:00 2001 From: Junior Tada Date: Thu, 1 Feb 2018 11:11:24 -0200 Subject: [PATCH 4/7] =?UTF-8?q?Add=20xPed=20obrigatoriedade=20licita=C3=A7?= =?UTF-8?q?=C3=A3o=20Copel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pynfe/entidades/notafiscal.py | 2 +- pynfe/processamento/serializacao.py | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/pynfe/entidades/notafiscal.py b/pynfe/entidades/notafiscal.py index d23cb98..adfe6c7 100644 --- a/pynfe/entidades/notafiscal.py +++ b/pynfe/entidades/notafiscal.py @@ -522,7 +522,7 @@ class NotaFiscalProduto(Entidade): numero_pedido = str() # - Item do Pedido de Compra - numero_do_item = str() + numero_item = str() # - Produto especifico (seleciona de lista) - NF_PRODUTOS_ESPECIFICOS produto_especifico = str() diff --git a/pynfe/processamento/serializacao.py b/pynfe/processamento/serializacao.py index ef3ffa7..d1fcbdc 100644 --- a/pynfe/processamento/serializacao.py +++ b/pynfe/processamento/serializacao.py @@ -240,6 +240,14 @@ class SerializacaoXML(Serializacao): """ etree.SubElement(prod, 'indTot').text = str(produto_servico.ind_total) + """ Informação de interesse do emissor para controle do B2B.(v2.0) """ + # Número do Pedido de Compra. Tam 1-15 + if produto_servico.numero_pedido: + etree.SubElement(prod, 'xPed').text = str(produto_servico.numero_pedido) + # Item do Pedido de Compra. Tam 6 + if produto_servico.numero_item: + etree.SubElement(prod, 'nItemPed ').text = str(produto_servico.numero_item) + # Imposto imposto = etree.SubElement(raiz, 'imposto') From ee6d31532dfdc409fa5f4f9bf5c65f2082bdfa23 Mon Sep 17 00:00:00 2001 From: Junior Tada Date: Thu, 1 Feb 2018 11:45:50 -0200 Subject: [PATCH 5/7] =?UTF-8?q?removido=20espa=C3=A7o=20na=20declara=C3=A7?= =?UTF-8?q?=C3=A3o=20da=20tag?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pynfe/processamento/serializacao.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pynfe/processamento/serializacao.py b/pynfe/processamento/serializacao.py index d1fcbdc..9db4ddd 100644 --- a/pynfe/processamento/serializacao.py +++ b/pynfe/processamento/serializacao.py @@ -246,7 +246,7 @@ class SerializacaoXML(Serializacao): etree.SubElement(prod, 'xPed').text = str(produto_servico.numero_pedido) # Item do Pedido de Compra. Tam 6 if produto_servico.numero_item: - etree.SubElement(prod, 'nItemPed ').text = str(produto_servico.numero_item) + etree.SubElement(prod, 'nItemPed').text = str(produto_servico.numero_item) # Imposto imposto = etree.SubElement(raiz, 'imposto') From 450dd0db2e4fe597fa881070f7c1e9cf3e49a7e9 Mon Sep 17 00:00:00 2001 From: Junior Tada Date: Tue, 20 Feb 2018 17:20:33 -0300 Subject: [PATCH 6/7] =?UTF-8?q?Add=20marca=20e=20numera=C3=A7=C3=A3o=20par?= =?UTF-8?q?a=20volume=20opcional?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pynfe/processamento/serializacao.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pynfe/processamento/serializacao.py b/pynfe/processamento/serializacao.py index 9db4ddd..c35205e 100644 --- a/pynfe/processamento/serializacao.py +++ b/pynfe/processamento/serializacao.py @@ -588,8 +588,10 @@ class SerializacaoXML(Serializacao): vol = etree.SubElement(transp, 'vol') etree.SubElement(vol, 'qVol').text = str(volume.quantidade) etree.SubElement(vol, 'esp').text = volume.especie - etree.SubElement(vol, 'marca').text = volume.marca - etree.SubElement(vol, 'nVol').text = volume.numeracao + if volume.marca: + etree.SubElement(vol, 'marca').text = volume.marca + if volume.numeracao: + etree.SubElement(vol, 'nVol').text = volume.numeracao etree.SubElement(vol, 'pesoL').text = str(volume.peso_liquido) etree.SubElement(vol, 'pesoB').text = str(volume.peso_bruto) From baabaf3ffc795bb9eb3b1e9c129efb6007f0e0de Mon Sep 17 00:00:00 2001 From: Junior Tada Date: Thu, 19 Apr 2018 14:11:10 -0300 Subject: [PATCH 7/7] Add CSOSN 500 (cobrado anteriormente por ST) --- pynfe/processamento/serializacao.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pynfe/processamento/serializacao.py b/pynfe/processamento/serializacao.py index c35205e..d61df25 100644 --- a/pynfe/processamento/serializacao.py +++ b/pynfe/processamento/serializacao.py @@ -258,7 +258,7 @@ class SerializacaoXML(Serializacao): ### ICMS icms = etree.SubElement(imposto, 'ICMS') - icms_csosn = ('102', '103', '300', '400') + icms_csosn = ('102', '103', '300', '400', '500') if produto_servico.icms_modalidade in icms_csosn: icms_item = etree.SubElement(icms, 'ICMSSN'+produto_servico.icms_modalidade) etree.SubElement(icms_item, 'orig').text = str(produto_servico.icms_origem)