diff --git a/nfelib/bpe/bindings/v1_0/cons_sit_bpe_tipos_basico_v1_00.py b/nfelib/bpe/bindings/v1_0/cons_sit_bpe_tipos_basico_v1_00.py index 4c50c58..c156c23 100644 --- a/nfelib/bpe/bindings/v1_0/cons_sit_bpe_tipos_basico_v1_00.py +++ b/nfelib/bpe/bindings/v1_0/cons_sit_bpe_tipos_basico_v1_00.py @@ -13,8 +13,7 @@ @dataclass class TconsSitBpe: """ - Tipo Pedido de Consulta da Situação Atual do Bilhete de Passagem - Eletrônico. + Tipo Pedido de Consulta da Situação Atual do Bilhete de Passagem Eletrônico. :ivar tpAmb: Identificação do Ambiente: 1 - Produção 2 - Homologação :ivar xServ: Serviço Solicitado diff --git a/nfelib/bpe/bindings/v1_0/ret_cons_stat_serv_bpe_v1_00.py b/nfelib/bpe/bindings/v1_0/ret_cons_stat_serv_bpe_v1_00.py index 410408a..80409d5 100644 --- a/nfelib/bpe/bindings/v1_0/ret_cons_stat_serv_bpe_v1_00.py +++ b/nfelib/bpe/bindings/v1_0/ret_cons_stat_serv_bpe_v1_00.py @@ -7,8 +7,7 @@ @dataclass class RetConsStatServBpe(TretConsStatServ): """ - Schema XML de validação do Resultado da Consulta do Status do Serviço de - BP-e. + Schema XML de validação do Resultado da Consulta do Status do Serviço de BP-e. """ class Meta: name = "retConsStatServBPe" diff --git a/nfelib/cte/bindings/v3_0/envi_cte_v3_00.py b/nfelib/cte/bindings/v3_0/envi_cte_v3_00.py index d52e919..e987452 100644 --- a/nfelib/cte/bindings/v3_0/envi_cte_v3_00.py +++ b/nfelib/cte/bindings/v3_0/envi_cte_v3_00.py @@ -7,8 +7,7 @@ @dataclass class EnviCte(TenviCte): """ - Schema XML de validação do Envio de Lote CT-e para concessão de - autorização. + Schema XML de validação do Envio de Lote CT-e para concessão de autorização. """ class Meta: name = "enviCTe" diff --git a/nfelib/cte/bindings/v3_0/ev_epeccte_v3_00.py b/nfelib/cte/bindings/v3_0/ev_epeccte_v3_00.py index 3747e4b..01820be 100644 --- a/nfelib/cte/bindings/v3_0/ev_epeccte_v3_00.py +++ b/nfelib/cte/bindings/v3_0/ev_epeccte_v3_00.py @@ -19,8 +19,8 @@ class EvEpeccteTpCte(Enum): @dataclass class EvEpeccte: """ - Schema XML de validação do evento de emissão prévia de emissão em - contingência 110113. + Schema XML de validação do evento de emissão prévia de emissão em contingência + 110113. :ivar descEvento: Descrição do Evento - “EPEC” :ivar xJust: Justificativa da Entrada em Contingencia diff --git a/nfelib/cte/bindings/v3_0/inut_cte_v3_00.py b/nfelib/cte/bindings/v3_0/inut_cte_v3_00.py index 9aa1e54..31c72cb 100644 --- a/nfelib/cte/bindings/v3_0/inut_cte_v3_00.py +++ b/nfelib/cte/bindings/v3_0/inut_cte_v3_00.py @@ -7,8 +7,8 @@ @dataclass class InutCte(TinutCte): """ - Schema XML de validação do Pedido de Inutilização de Numeração do - Conhecimento de Transportes eletrônico. + Schema XML de validação do Pedido de Inutilização de Numeração do Conhecimento + de Transportes eletrônico. """ class Meta: name = "inutCTe" diff --git a/nfelib/cte/bindings/v3_0/ret_cons_stat_serv_cte_v3_00.py b/nfelib/cte/bindings/v3_0/ret_cons_stat_serv_cte_v3_00.py index 884c96f..0e8f8eb 100644 --- a/nfelib/cte/bindings/v3_0/ret_cons_stat_serv_cte_v3_00.py +++ b/nfelib/cte/bindings/v3_0/ret_cons_stat_serv_cte_v3_00.py @@ -7,8 +7,7 @@ @dataclass class RetConsStatServCte(TretConsStatServ): """ - Schema XML de validação do Resultado da Consulta do Status do Serviço de - CT-e. + Schema XML de validação do Resultado da Consulta do Status do Serviço de CT-e. """ class Meta: name = "retConsStatServCte" diff --git a/nfelib/cte/bindings/v3_0/ret_cte_os_v3_00.py b/nfelib/cte/bindings/v3_0/ret_cte_os_v3_00.py index 46ab765..aa5d00e 100644 --- a/nfelib/cte/bindings/v3_0/ret_cte_os_v3_00.py +++ b/nfelib/cte/bindings/v3_0/ret_cte_os_v3_00.py @@ -7,8 +7,7 @@ @dataclass class RetCteOs(TretCteOs): """ - Schema XML de validação do retorno do recibo de envio do CT-e OS (Modelo - 67) + Schema XML de validação do retorno do recibo de envio do CT-e OS (Modelo 67) """ class Meta: name = "retCTeOS" diff --git a/nfelib/cte/bindings/v3_0/ret_inut_cte_v3_00.py b/nfelib/cte/bindings/v3_0/ret_inut_cte_v3_00.py index 3249f89..4ed4b35 100644 --- a/nfelib/cte/bindings/v3_0/ret_inut_cte_v3_00.py +++ b/nfelib/cte/bindings/v3_0/ret_inut_cte_v3_00.py @@ -7,8 +7,8 @@ @dataclass class RetInutCte(TretInutCte): """ - Schema XML de validação do retorno do Pedido de Inutilização de Numeração - do CT-e. + Schema XML de validação do retorno do Pedido de Inutilização de Numeração do + CT-e. """ class Meta: name = "retInutCTe" diff --git a/nfelib/cte/bindings/v3_0/tipos_geral_cte_v3_00.py b/nfelib/cte/bindings/v3_0/tipos_geral_cte_v3_00.py index fe85657..6a1932c 100644 --- a/nfelib/cte/bindings/v3_0/tipos_geral_cte_v3_00.py +++ b/nfelib/cte/bindings/v3_0/tipos_geral_cte_v3_00.py @@ -12,8 +12,8 @@ class Tamb(Enum): class TcorgaoIbge(Enum): - """Tipo Código de orgão (UF da tabela do IBGE + 90 SUFRAMA + 91 RFB + 94 - SVC-RS + 95 SVC-SP + 96 Sinc. + """Tipo Código de orgão (UF da tabela do IBGE + 90 SUFRAMA + 91 RFB + 94 SVC- + RS + 95 SVC-SP + 96 Sinc. Chaves do RS para SVSP """ diff --git a/nfelib/mdfe/bindings/v3_0/dist_mdfe_v3_00.py b/nfelib/mdfe/bindings/v3_0/dist_mdfe_v3_00.py index 560567f..7312316 100644 --- a/nfelib/mdfe/bindings/v3_0/dist_mdfe_v3_00.py +++ b/nfelib/mdfe/bindings/v3_0/dist_mdfe_v3_00.py @@ -7,7 +7,7 @@ @dataclass class DistMdfe(TdistDfe): """ - solicitação de distribuição de MDF-e para o Ambiente Autorizador. + Solicitação de distribuição de MDF-e para o Ambiente Autorizador. """ class Meta: name = "distMDFe" diff --git a/nfelib/mdfe/bindings/v3_0/envi_mdfe_v3_00.py b/nfelib/mdfe/bindings/v3_0/envi_mdfe_v3_00.py index 4342b1a..33a22db 100644 --- a/nfelib/mdfe/bindings/v3_0/envi_mdfe_v3_00.py +++ b/nfelib/mdfe/bindings/v3_0/envi_mdfe_v3_00.py @@ -7,8 +7,7 @@ @dataclass class EnviMdfe(TenviMdfe): """ - Schema XML de validação do Envio de Lote MDF-e para concessão de - autorização. + Schema XML de validação do Envio de Lote MDF-e para concessão de autorização. """ class Meta: name = "enviMDFe" diff --git a/nfelib/mdfe/bindings/v3_0/leiaute_dist_mdfe_v3_00.py b/nfelib/mdfe/bindings/v3_0/leiaute_dist_mdfe_v3_00.py index 1d8ca57..ed6cbcd 100644 --- a/nfelib/mdfe/bindings/v3_0/leiaute_dist_mdfe_v3_00.py +++ b/nfelib/mdfe/bindings/v3_0/leiaute_dist_mdfe_v3_00.py @@ -171,8 +171,7 @@ class Meta: @dataclass class TretDistDfe: """ - Schema XML de validação do lote de retorno de documentos ficais - eletronicos. + Schema XML de validação do lote de retorno de documentos ficais eletronicos. :ivar tpAmb: Identificação do Ambiente: 1 - Produção 2 - Homologação diff --git a/nfelib/mdfe/bindings/v3_0/ret_cons_stat_serv_mdfe_v3_00.py b/nfelib/mdfe/bindings/v3_0/ret_cons_stat_serv_mdfe_v3_00.py index 29b15bd..064c4e2 100644 --- a/nfelib/mdfe/bindings/v3_0/ret_cons_stat_serv_mdfe_v3_00.py +++ b/nfelib/mdfe/bindings/v3_0/ret_cons_stat_serv_mdfe_v3_00.py @@ -7,8 +7,7 @@ @dataclass class RetConsStatServMdfe(TretConsStatServ): """ - Schema XML de validação do Resultado da Consulta do Status do Serviço de - MDF-e. + Schema XML de validação do Resultado da Consulta do Status do Serviço de MDF-e. """ class Meta: name = "retConsStatServMDFe" diff --git a/nfelib/nfe/bindings/v4_0/cons_sit_nfe_v4_00.py b/nfelib/nfe/bindings/v4_0/cons_sit_nfe_v4_00.py index a10c953..b4f34cf 100644 --- a/nfelib/nfe/bindings/v4_0/cons_sit_nfe_v4_00.py +++ b/nfelib/nfe/bindings/v4_0/cons_sit_nfe_v4_00.py @@ -7,8 +7,8 @@ @dataclass class ConsSitNfe(TconsSitNfe): """ - Schema de validação XML dp Pedido de Consulta da Situação Atual da Nota - Fiscal Eletrônica. + Schema de validação XML dp Pedido de Consulta da Situação Atual da Nota Fiscal + Eletrônica. """ class Meta: name = "consSitNFe" diff --git a/nfelib/nfe/bindings/v4_0/envi_nfe_v4_00.py b/nfelib/nfe/bindings/v4_0/envi_nfe_v4_00.py index eb8d2aa..dee4d8b 100644 --- a/nfelib/nfe/bindings/v4_0/envi_nfe_v4_00.py +++ b/nfelib/nfe/bindings/v4_0/envi_nfe_v4_00.py @@ -7,8 +7,8 @@ @dataclass class EnviNfe(TenviNfe): """ - Schema XML de validação do Pedido de Concessão de Autorização da Nota - Fiscal Eletrônica. + Schema XML de validação do Pedido de Concessão de Autorização da Nota Fiscal + Eletrônica. """ class Meta: name = "enviNFe" diff --git a/nfelib/nfe/bindings/v4_0/inut_nfe_v4_00.py b/nfelib/nfe/bindings/v4_0/inut_nfe_v4_00.py index 9586bf2..004b6b1 100644 --- a/nfelib/nfe/bindings/v4_0/inut_nfe_v4_00.py +++ b/nfelib/nfe/bindings/v4_0/inut_nfe_v4_00.py @@ -7,8 +7,8 @@ @dataclass class InutNfe(TinutNfe): """ - Schema XML de validação do Pedido de Inutilização de Numeração da Nota - Fiscal Eletrônica. + Schema XML de validação do Pedido de Inutilização de Numeração da Nota Fiscal + Eletrônica. """ class Meta: name = "inutNFe" diff --git a/nfelib/nfe/bindings/v4_0/leiaute_cons_sit_nfe_v4_00.py b/nfelib/nfe/bindings/v4_0/leiaute_cons_sit_nfe_v4_00.py index 0720cae..4c76bda 100644 --- a/nfelib/nfe/bindings/v4_0/leiaute_cons_sit_nfe_v4_00.py +++ b/nfelib/nfe/bindings/v4_0/leiaute_cons_sit_nfe_v4_00.py @@ -795,8 +795,7 @@ class Meta: @dataclass class TretConsSitNfe: """ - Tipo Retorno de Pedido de Consulta da Situação Atual da Nota Fiscal - Eletrônica. + Tipo Retorno de Pedido de Consulta da Situação Atual da Nota Fiscal Eletrônica. :ivar tpAmb: Identificação do Ambiente: 1 - Produção 2 - Homologação :ivar verAplic: Versão do Aplicativo que processou a NF-e diff --git a/nfelib/nfe/bindings/v4_0/leiaute_inut_nfe_v4_00.py b/nfelib/nfe/bindings/v4_0/leiaute_inut_nfe_v4_00.py index 93fe5e7..63374c7 100644 --- a/nfelib/nfe/bindings/v4_0/leiaute_inut_nfe_v4_00.py +++ b/nfelib/nfe/bindings/v4_0/leiaute_inut_nfe_v4_00.py @@ -178,8 +178,7 @@ class InfInut: @dataclass class TretInutNfe: """ - Tipo retorno do Pedido de Inutilização de Numeração da Nota Fiscal - Eletrônica. + Tipo retorno do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica. :ivar infInut: Dados do Retorno do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica diff --git a/nfelib/nfe/bindings/v4_0/leiaute_nfe_v4_00.py b/nfelib/nfe/bindings/v4_0/leiaute_nfe_v4_00.py index 210b559..99452a1 100644 --- a/nfelib/nfe/bindings/v4_0/leiaute_nfe_v4_00.py +++ b/nfelib/nfe/bindings/v4_0/leiaute_nfe_v4_00.py @@ -688,8 +688,7 @@ class TfinNfe(Enum): @dataclass class TinfRespTec: """ - Grupo de informações do responsável técnico pelo sistema de emissão de - DF-e. + Grupo de informações do responsável técnico pelo sistema de emissão de DF-e. :ivar CNPJ: CNPJ :ivar xContato: Informar o nome da pessoa a ser contatada na empresa @@ -785,8 +784,8 @@ class TprocEmi(Enum): class Torig(Enum): - """Tipo Origem da mercadoria CST ICMS origem da mercadoria: 0-Nacional - exceto as indicadas nos códigos 3, 4, 5 e 8; + """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%. """ @@ -4730,12 +4729,11 @@ class Imposto: "namespace": "http://www.portalfiscal.inf.br/nfe", } ) - IPI: List[Tipi] = field( - default_factory=list, + IPI: Optional[Tipi] = field( + default=None, metadata={ "type": "Element", "namespace": "http://www.portalfiscal.inf.br/nfe", - "max_occurs": 2, } ) II: Optional["Tnfe.InfNfe.Det.Imposto.Ii"] = field( diff --git a/nfelib/nfe/bindings/v4_0/ret_cons_reci_nfe_v4_00.py b/nfelib/nfe/bindings/v4_0/ret_cons_reci_nfe_v4_00.py index 47f6d5c..cd4008e 100644 --- a/nfelib/nfe/bindings/v4_0/ret_cons_reci_nfe_v4_00.py +++ b/nfelib/nfe/bindings/v4_0/ret_cons_reci_nfe_v4_00.py @@ -7,8 +7,8 @@ @dataclass class RetConsReciNfe(TretConsReciNfe): """ - Schema XML de validação do retorno do Pedido de Consulta do Recido do Lote - de Notas Fiscais Eletrônicas. + Schema XML de validação do retorno do Pedido de Consulta do Recido do Lote de + Notas Fiscais Eletrônicas. """ class Meta: name = "retConsReciNFe" diff --git a/nfelib/nfe/bindings/v4_0/ret_inut_nfe_v4_00.py b/nfelib/nfe/bindings/v4_0/ret_inut_nfe_v4_00.py index 6bf9e8c..2ec8bb9 100644 --- a/nfelib/nfe/bindings/v4_0/ret_inut_nfe_v4_00.py +++ b/nfelib/nfe/bindings/v4_0/ret_inut_nfe_v4_00.py @@ -7,8 +7,8 @@ @dataclass class RetInutNfe(TretInutNfe): """ - Schema XML de validação do retorno do Pedido de Inutilização de Numeração - da Nota Fiscal Eletrônica. + Schema XML de validação do retorno do Pedido de Inutilização de Numeração da + Nota Fiscal Eletrônica. """ class Meta: name = "retInutNFe" diff --git a/nfelib/nfe_ator_interessado/bindings/v1_0/env_evento_ator_interessado_v1_00.py b/nfelib/nfe_ator_interessado/bindings/v1_0/env_evento_ator_interessado_v1_00.py index 43159e5..91ad86d 100644 --- a/nfelib/nfe_ator_interessado/bindings/v1_0/env_evento_ator_interessado_v1_00.py +++ b/nfelib/nfe_ator_interessado/bindings/v1_0/env_evento_ator_interessado_v1_00.py @@ -7,8 +7,7 @@ @dataclass class EnvEvento(TenvEvento): """ - Schema XML de validação do lote de envio do evento de Ator Interessado na - NF-e. + Schema XML de validação do lote de envio do evento de Ator Interessado na NF-e. """ class Meta: name = "envEvento" diff --git a/nfelib/nfe_cons/bindings/v2_0/cons_sit_nfe_v2_01.py b/nfelib/nfe_cons/bindings/v2_0/cons_sit_nfe_v2_01.py index 8a04a98..bf8dc7b 100644 --- a/nfelib/nfe_cons/bindings/v2_0/cons_sit_nfe_v2_01.py +++ b/nfelib/nfe_cons/bindings/v2_0/cons_sit_nfe_v2_01.py @@ -7,8 +7,8 @@ @dataclass class ConsSitNfe(TconsSitNfe): """ - Schema de validação XML dp Pedido de Consulta da Situação Atual da Nota - Fiscal Eletrônica. + Schema de validação XML dp Pedido de Consulta da Situação Atual da Nota Fiscal + Eletrônica. """ class Meta: name = "consSitNFe" diff --git a/nfelib/nfe_cons/bindings/v2_0/leiaute_cons_sit_nfe_v2_01.py b/nfelib/nfe_cons/bindings/v2_0/leiaute_cons_sit_nfe_v2_01.py index 99cbe45..2ef32a4 100644 --- a/nfelib/nfe_cons/bindings/v2_0/leiaute_cons_sit_nfe_v2_01.py +++ b/nfelib/nfe_cons/bindings/v2_0/leiaute_cons_sit_nfe_v2_01.py @@ -826,8 +826,7 @@ class Meta: @dataclass class TretConsSitNfe: """ - Tipo Retorno de Pedido de Consulta da Situação Atual da Nota Fiscal - Eletrônica. + Tipo Retorno de Pedido de Consulta da Situação Atual da Nota Fiscal Eletrônica. :ivar tpAmb: Identificação do Ambiente: 1 - Produção 2 - Homologação :ivar verAplic: Versão do Aplicativo que processou a NF-e diff --git a/nfelib/nfe_entrega/bindings/v1_0/env_evento_entrega_nfe_v1_00.py b/nfelib/nfe_entrega/bindings/v1_0/env_evento_entrega_nfe_v1_00.py index 44c42eb..5610a09 100644 --- a/nfelib/nfe_entrega/bindings/v1_0/env_evento_entrega_nfe_v1_00.py +++ b/nfelib/nfe_entrega/bindings/v1_0/env_evento_entrega_nfe_v1_00.py @@ -7,8 +7,8 @@ @dataclass class EnvEvento(TenvEvento): """ - Schema XML de validação do lote de envio do evento de Comprovante de - Entrega da NFe. + Schema XML de validação do lote de envio do evento de Comprovante de Entrega da + NFe. """ class Meta: name = "envEvento" diff --git a/nfelib/nfe_evento_mde/bindings/v1_0/env_conf_recebto_v1_00.py b/nfelib/nfe_evento_mde/bindings/v1_0/env_conf_recebto_v1_00.py index 54e50ec..5843a6d 100644 --- a/nfelib/nfe_evento_mde/bindings/v1_0/env_conf_recebto_v1_00.py +++ b/nfelib/nfe_evento_mde/bindings/v1_0/env_conf_recebto_v1_00.py @@ -7,8 +7,7 @@ @dataclass class EnvEvento(TenvEvento): """ - Schema XML de validação do lote de envio do evento confirmação de - recebimento. + Schema XML de validação do lote de envio do evento confirmação de recebimento. """ class Meta: name = "envEvento" diff --git a/script.sh b/script.sh index f3b8ae4..65f8623 100755 --- a/script.sh +++ b/script.sh @@ -10,6 +10,12 @@ if [$DOWNLOAD_SCHEMAS]; then fi xsdata generate nfelib/nfe/schemas/v4_0 --package nfelib.nfe.bindings.v4_0 +# patch o campo IPI caso o patch no xsdata não foi aplicado +# ver detalhes aqui https://github.com/akretion/nfelib/issues/40 +# sed -e 's/IPI: List\[Tipi\] = field(/IPI: Optional\[Tipi\] = field(/' -i nfelib/nfe/bindings/v4_0/leiaute_nfe_v4_00.py +# infelizmente teria que trocar a outra linha depois tb default_factory=List por default=None para funcionar. +# vou deixar essa tentativa de patch com sed desativada por enquanto. + # Pacote de Liberação Distribuição de DF-e v1.02 (Atualizado em 25/10/16) if [$DOWNLOAD_SCHEMAS]; then erpbrasil-edoc-gen-download-schema -n nfe_dist_dfe -v v1_0 -u https://www.nfe.fazenda.gov.br/portal/exibirArquivo.aspx?conteudo=n3Kn9%20YZNak= diff --git a/tests/nfe/test_nfe.py b/tests/nfe/test_nfe.py index d4bd40f..00cd098 100644 --- a/tests/nfe/test_nfe.py +++ b/tests/nfe/test_nfe.py @@ -9,6 +9,7 @@ from pathlib import Path from nfelib.nfe.bindings.v4_0 import leiaute_nfe_v4_00 +from nfelib.nfe.bindings.v4_0.leiaute_nfe_v4_00 import Tnfe from nfelib.nfe.bindings.v4_0.leiaute_cons_stat_serv_v4_00 import TconsStatServ from nfelib.nfe.bindings.v4_0.leiaute_cons_sit_nfe_v4_00 import TconsSitNfe @@ -17,6 +18,26 @@ from nfelib.nfe_evento_generico.bindings.v1_0.leiaute_evento_v1_00 import TenvEvento +def test_patched_xsdata_for_ipi(): + # o xsdata precisa de uma linha de patch para funcionar legal para a NFe + # (de forma simples/backward compatible no Odoo) + # uma alternativa seria usar a opção --compound-fields do xsdata mas + # deixaria o uso mais complexo no Odoo de forma desnecessaria. A gestão dos campos + # compostos/compound esta sendo retrabalhada no xsdata de qualquer forma. + # Enfim hoje o mais simples é aplicar um patch de uma linha no xsdata. + # Se vc instalar o pacote xsdata-odoo e fizer export XSD_SCHEMA=nfe, + # o xsdata-odoo aplica esse monkey patch para você. + # ver detalhes aqui: https://github.com/akretion/nfelib/issues/40 + assert ( + str(Tnfe.InfNfe.Det.Imposto().__annotations__["IPI"]).startswith( + "typing.Optional" + ) + # Python < 3.9: + or str(Tnfe.InfNfe.Det.Imposto().__annotations__["IPI"]) + == "typing.Union[nfelib.nfe.bindings.v4_0.leiaute_nfe_v4_00.Tipi, NoneType]" + ) + + def test_in_out_leiauteNFe(): path = os.path.join("nfelib", "nfe", "samples", "v4_0", "leiauteNFe") for filename in os.listdir(path):