From f747c1e0e55625635853a9107cdf57bd722f5890 Mon Sep 17 00:00:00 2001 From: maiconkkl Date: Thu, 6 Jun 2019 12:09:18 -0300 Subject: [PATCH] =?UTF-8?q?Alterando=20fun=C3=A7=C3=A3o=20da=20valida?= =?UTF-8?q?=C3=A7=C3=A3o=20de=20esquema=20para=20n=C3=A3o=20ser=20feito=20?= =?UTF-8?q?repeti=C3=A7=C3=B5es=20e=20poder=20reutilizar=20a=20fun=C3=A7?= =?UTF-8?q?=C3=A3o=20s=C3=B3=20mudando=20o=20xsd;=20Foi=20criado=20a=20fun?= =?UTF-8?q?=C3=A7=C3=A3o=20que=20valida=20o=20esquema=20do=20webservice=20?= =?UTF-8?q?de=20distribui=C3=A7=C3=A3o=20do=20DFe,=20que=20n=C3=A3o=20havi?= =?UTF-8?q?a=20valida=C3=A7=C3=B5es;=20Foi=20alterado=20o=20template=20da?= =?UTF-8?q?=20fun=C3=A7=C3=A3o=20de=20consultra=20distribui=C3=A7=C3=A3o?= =?UTF-8?q?=20do=20DFe,=20permitindo=20consulta=20via=20NSU.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pytrustnfe/nfe/templates/NFeDistribuicaoDFe.xml | 3 + pytrustnfe/xml/schemas/distDFeInt_v1.01.xsd | 297 ++++++++++++++++++++++++ pytrustnfe/xml/validate.py | 18 +- 3 files changed, 314 insertions(+), 4 deletions(-) create mode 100644 pytrustnfe/xml/schemas/distDFeInt_v1.01.xsd diff --git a/pytrustnfe/nfe/templates/NFeDistribuicaoDFe.xml b/pytrustnfe/nfe/templates/NFeDistribuicaoDFe.xml index cd3fc38..9762e86 100644 --- a/pytrustnfe/nfe/templates/NFeDistribuicaoDFe.xml +++ b/pytrustnfe/nfe/templates/NFeDistribuicaoDFe.xml @@ -8,4 +8,7 @@ {{ chave_nfe }} + + {{ nsu }} + diff --git a/pytrustnfe/xml/schemas/distDFeInt_v1.01.xsd b/pytrustnfe/xml/schemas/distDFeInt_v1.01.xsd new file mode 100644 index 0000000..5497aa7 --- /dev/null +++ b/pytrustnfe/xml/schemas/distDFeInt_v1.01.xsd @@ -0,0 +1,297 @@ + + + + + Tipo número sequencial único + + + + + + + + Tipo quantidade de NSU + + + + + + + + + Tipo Versão dos leiautes do Web Service NFeDistribuicaoDFe + + + + + + + + + Tipo Ambiente + + + + + + + + + + Tipo Código da UF da tabela do IBGE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Código de orgão (UF da tabela do IBGE + 90 RFB) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipo Número do CNPJ + + + + + + + + + + Tipo Número do CPF + + + + + + + + + + Tipo Versão do Aplicativo + + + + + + + + + Tipo Código da Mensagem enviada + + + + + + + + + + Tipo Motivo + + + + + + + + + Tipo string genérico + + + + + + + + + Tipo Chave da Nota Fiscal Eletrônica + + + + + + + + + + Tipo Número do Protocolo de Status + + + + + + + + + + Data e Hora, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm) + + + + + + + + + Tipo Inscrição Estadual do Emitente // alterado EM 24/10/08 para aceitar ISENTO + + + + + + + + + + Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais + + + + + + + + + Schema de pedido de distribuição de DF-e de interesse + + + + + + + Identificação do Ambiente: + 1 - Produção + 2 - Homologação + + + + + + Código da UF do Autor + + + + + + CNPJ do interessado no DF-e + + + + + CPF do interessado no DF-e + + + + + + + Grupo para distribuir DF-e de interesse + + + + + + Último NSU recebido pelo ator. Caso seja informado com zero, ou com um NSU muito antigo, a consulta retornará unicamente as informações resumidas e documentos fiscais eletrônicos que tenham sido recepcionados pelo Ambiente Nacional nos últimos 3 meses. + + + + + + + + Grupo para consultar um DF-e a partir de um NSU específico + + + + + + Número Sequencial Único. Geralmente esta consulta será utilizada quando identificado pelo interessado um NSU faltante. O Web Service retornará o documento ou informará que o NSU não existe no Ambiente Nacional. Assim, esta consulta fechará a lacuna do NSU identificado como faltante. + + + + + + + + Grupo para consultar uma NF-e a partir da chave de acesso + + + + + + Chave de acesso da NF-e a ser consultada + + + + + + + + + + + diff --git a/pytrustnfe/xml/validate.py b/pytrustnfe/xml/validate.py index 3f672ba..4564f1a 100644 --- a/pytrustnfe/xml/validate.py +++ b/pytrustnfe/xml/validate.py @@ -7,12 +7,22 @@ import os from lxml import etree PATH = os.path.dirname(os.path.abspath(__file__)) -SCHEMA = os.path.join(PATH, 'schemas/enviNFe_v4.00.xsd') def valida_nfe(xml_nfe): - nfe = etree.fromstring(xml_nfe) - esquema = etree.XMLSchema(etree.parse(SCHEMA)) - esquema.validate(nfe) + xsd = 'schemas/enviNFe_v4.00.xsd' + return valida_esquema(xml_nfe, xsd) + + +def valida_distribuicao(xml): + xsd = 'distDFeInt_v1.01.xsd' + return valida_esquema(xml, xsd) + + +def valida_esquema(xml, xsd_name): + xsd = os.path.join(PATH, xsd_name) + xml_etree = etree.fromstring(xml) + esquema = etree.XMLSchema(etree.parse(xsd)) + esquema.validate(xml_etree) erros = [x.message for x in esquema.error_log] return "\n".join(erros)