From 099fdffa138501795b17a58840b0fd67be28c32b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marinho=20Brand=C3=A3o?= Date: Tue, 12 Jan 2010 15:10:42 -0200 Subject: [PATCH] Trabalhando na modelagem da NotaFiscal --- pynfe/entidades/notafiscal.py | 315 ++++++++++++++++++++++++++++++++------ pynfe/utils/flags.py | 93 +++++++++++ tests/02-modelo-05-notafiscal.txt | 298 +++++++++++++++++++++++++++++++++++- 3 files changed, 657 insertions(+), 49 deletions(-) diff --git a/pynfe/entidades/notafiscal.py b/pynfe/entidades/notafiscal.py index ceac583..0260333 100644 --- a/pynfe/entidades/notafiscal.py +++ b/pynfe/entidades/notafiscal.py @@ -1,50 +1,13 @@ from base import Entidade -from pynfe.utils.flags import NF_STATUS +from pynfe.utils.flags import NF_STATUS, NF_TIPOS_DOCUMENTO, NF_TIPOS_IMPRESSAO_DANFE,\ + NF_FORMAS_PAGAMENTO, NF_FORMAS_EMISSAO, NF_FINALIDADES_EMISSAO,\ + NF_REFERENCIADA_TIPOS, NF_PRODUTOS_ESPECIFICOS, ICMS_TIPOS_TRIBUTACAO,\ + ICMS_ORIGENS, ICMS_MODALIDADES, IPI_TIPOS_TRIBUTACAO, IPI_TIPOS_CALCULO,\ + PIS_TIPOS_TRIBUTACAO, PIS_TIPOS_CALCULO, COFINS_TIPOS_TRIBUTACAO,\ + COFINS_TIPOS_CALCULO from decimal import Decimal -NF_TIPOS_DOCUMENTO = ( - (0, 'Entrada'), - (1, 'Saida'), -) - -NF_TIPOS_IMPRESSAO_DANFE = ( - 'Retrato', - 'Paisagem', -) - -NF_FORMAS_PAGAMENTO = ( - (0, 'Pagamento a vista'), - (1, 'Pagamento a prazo'), - (2, 'Outros'), -) - -NF_FORMAS_EMISSAO = ( - 'Normal', - 'Contingencia', - 'Contingencia com SCAN', - 'Contingencia via DPEC', - 'Contingencia FS-DA', -) - -NF_FINALIDADES_EMISSAO = ( - (1, 'NF-e normal'), - (2, 'NF-e complementar'), - (3, 'NF-e de ajuste'), -) - -NF_REFERENCIADA_TIPOS = ( - 'Nota Fiscal eletronica', - 'Nota Fiscal', -) - -NF_PRODUTOS_ESPECIFICOS = ( - 'Veiculo', - 'Medicamento', - 'Armamento', - 'Combustivel', -) - class NotaFiscal(Entidade): status = NF_STATUS[0] @@ -256,11 +219,273 @@ class NotaFiscalProduto(Entidade): # - Produto especifico (seleciona de lista) - NF_PRODUTOS_ESPECIFICOS produto_especifico = str() + # - Tributos + # - ICMS + # - Situacao tributaria (obrigatorio - seleciona de lista) - ICMS_TIPOS_TRIBUTACAO + icms_situacao_tributaria = str() + + # - Origem (obrigatorio - seleciona de lista) - ICMS_ORIGENS + icms_origem = str() + + # - ICMS + # - Modalidade de determinacao da BC ICMS (seleciona de lista) - ICMS_MODALIDADES + icms_modalidade_determinacao_bc = str() + + # - Percentual reducao da BC ICMS + icms_percentual_reducao_bc = Decimal() + + # - Valor da base de calculo ICMS + icms_valor_base_calculo = Decimal() + + # - Aliquota ICMS + icms_aliquota = Decimal() + + # - Valor do ICMS + icms_valor = Decimal() + + # - ICMS ST + # - Modalidade de determinacao da BC ICMS ST (seleciona de lista) - ICMS_MODALIDADES + icms_st_modalidade_determinacao_bc = str() + + # - Percentual reducao da BC ICMS ST + icms_st_percentual_reducao_bc = Decimal() + + # - Valor da base de calculo ICMS ST + icms_st_valor_base_calculo = Decimal() + + # - Aliquota ICMS ST + icms_st_aliquota = Decimal() + + # - Valor do ICMS ST + icms_st_valor = Decimal() + + # - IPI + # - Situacao tributaria (seleciona de lista) - IPI_TIPOS_TRIBUTACAO + ipi_situacao_tributaria = str() + + # - Classe de enquadramento + # - A informacao para classe de enquadramento do IPI para Cigarros e Bebidas, + # quando aplicavel, deve ser informada utilizando a codificacao prevista nos + # Atos Normativos editados pela Receita Federal + ipi_classe_enquadramento = str() + + # - Codigo do enquadramento + ipi_codigo_enquadramento = str() + + # - CNPJ do Produtor + ipi_cnpj_produtor = str() + + # - Codigo do selo de controle + # - A informacao do codigo de selo, quando aplicavel, deve ser informada + # utilizando a codificacao prevista nos Atos Normativos editados pela Receita + # Federal + ipi_codigo_selo_controle = str() + + # - Quantidade do selo de controle + ipi_quantidade_selo_controle = Decimal() + + # - Tipo de calculo (seleciona de lista) - IPI_TIPOS_CALCULO + ipi_tipo_calculo = str() + + # - Percentual + # - Valor da base de calculo + ipi_valor_base_calculo = Decimal() + + # - Aliquota + ipi_aliquota = Decimal() + + # - Em valor + # - Quantidade total unidade padrao + ipi_quantidade_total_unidade_padrao = Decimal() + + # - Valor por unidade + ipi_valor_unidade = Decimal() + + # - Valor do IPI + ipi_valor_ipi = Decimal() + + # - PIS + # - PIS + # - Situacao tributaria (obrigatorio - seleciona de lista) - PIS_TIPOS_TRIBUTACAO + pis_situacao_tributaria = str() + + # - Tipo de calculo (seleciona de lista) - PIS_TIPOS_CALCULO + pis_tipo_calculo = str() + + # - Percentual + # - Valor da base de calculo + pis_valor_base_calculo = Decimal() + + # - Aliquota (percentual) + pis_aliquota_percentual = Decimal() + + # - Em valor + # - Aliquota (em reais) + pis_aliquota_reais = Decimal() + + # - Quantidade vendida + pis_quantidade_vendida = Decimal() + + # - Valor do PIS + pis_valor = Decimal() + + # - PIS ST + # - Tipo de calculo (seleciona de lista) - PIS_TIPOS_CALCULO + pis_st_tipo_calculo = str() + + # - Percentual + # - Valor da base de calculo + pis_st_valor_base_calculo = Decimal() + + # - Aliquota (percentual) + pis_st_aliquota_percentual = Decimal() + + # - Em valor + # - Aliquota (em reais) + pis_st_aliquota_reais = Decimal() + + # - Quantidade vendida + pis_st_quantidade_vendida = Decimal() + + # - Valor do PIS ST + pis_st_valor = Decimal() + + # - COFINS + # - COFINS + # - Situacao tributaria (obrigatorio - seleciona de lista) - COFINS_TIPOS_TRIBUTACAO + cofins_situacao_tributaria = str() + + # - Tipo de calculo (seleciona de lista) - COFINS_TIPOS_CALCULO + cofins_tipo_calculo = str() + + # - Percentual + # - Valor da base de calculo + cofins_valor_base_calculo = Decimal() + + # - Aliquota (percentual) + cofins_aliquota_percentual = Decimal() + + # - Em Valor + # - Aliquota (em reais) + cofins_aliquota_reais = Decimal() + + # - Quantidade vendida + cofins_quantidade_vendida = Decimal() + + # - Valor do COFINS + cofins_valor = Decimal() + + # - COFINS ST + # - Tipo de calculo (seleciona de lista) - COFINS_TIPOS_CALCULO + cofins_st_tipo_calculo = str() + + # - Percentual + # - Valor da base de calculo + cofins_st_valor_base_calculo = Decimal() + + # - Aliquota (percentual) + cofins_st_aliquota_percentual = Decimal() + + # - Em Valor + # - Aliquota (em reais) + cofins_st_aliquota_reais = Decimal() + + # - Quantidade vendida + cofins_st_quantidade_vendida = Decimal() + + # - Valor do COFINS ST + cofins_st_valor = Decimal() + + # - ISSQN + # - Valor da base de calculo + issqn_valor_base_calculo = Decimal() + + # - Aliquota + issqn_aliquota = Decimal() + + # - Lista de servico (seleciona de lista) + # - Aceita somente valores maiores que 100, disponiveis no arquivo data/ISSQN/Lista-Servicos.txt + issqn_lista_servico = str() + + # - UF + issqn_uf = str() + + # - Municipio de ocorrencia + issqn_municipio = str() + + # - Valor do ISSQN + issqn_valor = Decimal() + + # - Imposto de Importacao + # - Valor base de calculo + imposto_importacao_valor_base_calculo = Decimal() + + # - Valor despesas aduaneiras + imposto_importacao_valor_despesas_aduaneiras = Decimal() + + # - Valor do IOF + imposto_importacao_valor_iof = Decimal() + + # - Valor imposto de importacao + imposto_importacao_valor = Decimal() + + # - Informacoes Adicionais + # - Texto livre de informacoes adicionais + informacoes_adicionais = str() + + # - Declaracao de Importacao (lista 1 para * / ManyToManyField) + declaracoes_importacao = None + + def __init__(self, *args, **kwargs): + self.declaracoes_importacao = [] + + super(NotaFiscalProduto, self).__init__(*args, **kwargs) + + def adicionar_declaracao_importacao(self, **kwargs): + u"""Adiciona uma instancia de Declaracao de Importacao""" + self.declaracoes_importacao.append(NotaFiscalDeclaracaoImportacao(**kwargs)) + class NotaFiscalDeclaracaoImportacao(Entidade): - pass + # - Numero DI/DSI/DA + numero_di_dsi_da = str() + + # - Data de registro + data_registro = str() + + # - Codigo exportador + codigo_exportador = str() + + # - Desembaraco aduaneiro + # - UF + desembaraco_aduaneiro_uf = str() + + # - Local + desembaraco_aduaneiro_local = str() + + # - Data + desembaraco_aduaneiro_data = str() + + # - Adicoes (lista 1 para * / ManyToManyField) + adicoes = None + + def __init__(self, *args, **kwargs): + self.declaracoes_importacao = [] + + super(NotaFiscalDeclaracaoImportacao, self).__init__(*args, **kwargs) + + def adicionar_adicao(self, **kwargs): + u"""Adiciona uma instancia de Adicao de Declaracao de Importacao""" + self.adicoes.append(NotaFiscalDeclaracaoImportacaoAdicao(**kwargs)) class NotaFiscalDeclaracaoImportacaoAdicao(Entidade): - pass + # - Numero + numero = str() + + # - Desconto + desconto = str() + + # - Codigo fabricante + codigo_fabricante = str() class NotaFiscalTransporteVolume(Entidade): pass diff --git a/pynfe/utils/flags.py b/pynfe/utils/flags.py index b67a010..ca5acf5 100644 --- a/pynfe/utils/flags.py +++ b/pynfe/utils/flags.py @@ -42,3 +42,96 @@ NF_STATUS = ( 'Cancelada', ) +NF_TIPOS_DOCUMENTO = ( + (0, 'Entrada'), + (1, 'Saida'), +) + +NF_TIPOS_IMPRESSAO_DANFE = ( + 'Retrato', + 'Paisagem', +) + +NF_FORMAS_PAGAMENTO = ( + (0, 'Pagamento a vista'), + (1, 'Pagamento a prazo'), + (2, 'Outros'), +) + +NF_FORMAS_EMISSAO = ( + 'Normal', + 'Contingencia', + 'Contingencia com SCAN', + 'Contingencia via DPEC', + 'Contingencia FS-DA', +) + +NF_FINALIDADES_EMISSAO = ( + (1, 'NF-e normal'), + (2, 'NF-e complementar'), + (3, 'NF-e de ajuste'), +) + +NF_REFERENCIADA_TIPOS = ( + 'Nota Fiscal eletronica', + 'Nota Fiscal', +) + +NF_PRODUTOS_ESPECIFICOS = ( + 'Veiculo', + 'Medicamento', + 'Armamento', + 'Combustivel', +) + +IPI_TIPOS_TRIBUTACAO = ( + ('00', 'IPI 00 - Entrada com recuperacao de credito'), + ('01', 'IPI 01 - Entrada tributada com aliquota zero'), + ('02', 'IPI 02 - Entrada isenta'), + ('03', 'IPI 03 - Entrada nao-tributada'), + ('04', 'IPI 04 - Entrada imune'), + ('05', 'IPI 05 - Entrada com suspensao'), + ('49', 'IPI 49 - Outras entradas'), + ('50', 'IPI 50 - Saida tributada'), + ('51', 'IPI 51 - Saida tributada com aliquota zero'), + ('52', 'IPI 52 - Saida isenta'), + ('53', 'IPI 53 - Saida nao-tributada'), + ('54', 'IPI 54 - Saida imune'), + ('55', 'IPI 55 - Saida com suspensao'), + ('99', 'IPI 99 - Outas saidas'), +) + +IPI_TIPOS_CALCULO = ( + 'Percentual', + 'Em Valor', +) + +PIS_TIPOS_TRIBUTACAO = ( + ('01', 'PIS 01 - Operacao Tributavel - Base de Calculo = Valor da Operacao Aliquota...'), # FIXME + ('02', 'PIS 02 - Operacao Tributavel - Base de Calculo = Valor da Operacao (Aliquota...'), # FIXME + ('03', 'PIS 03 - Operacao Tributavel - Base de Calculo = Quantidade Vendida x Aliquota...'), # FIXME + ('04', 'PIS 04 - Operacao Tributavel - Tributacao Monofasica - (Aliquota Zero)'), + ('06', 'PIS 06 - Operacao Tributavel - Aliquota Zero'), + ('07', 'PIS 07 - Operacao Isenta da Contribuicao'), + ('08', 'PIS 08 - Operacao sem Indidencia da Contribuicao'), + ('09', 'PIS 09 - Operacao com Suspensao da Contribuicao'), + ('99', 'PIS 99 - Outras operacoes'), +) + +PIS_TIPOS_CALCULO = IPI_TIPOS_CALCULO + +COFINS_TIPOS_TRIBUTACAO = ( + ('00', 'COFINS 01 - Operacao Tributavel - Base de Calculo = Valor da Operacao Aliquota...'), # FIXME + ('02', 'COFINS 02 - Operacao Tributavel - Base de Calculo = Valor da Operacao (Aliquota...'), # FIXME + ('03', 'COFINS 03 - Operacao Tributavel - Base de Calculo = Quantidade Vendida x Aliquota...'), # FIXME + ('04', 'COFINS 04 - Operacao Tributavel - Tributacao Monofasica - (Aliquota Zero)'), + ('06', 'COFINS 06 - Operacao Tributavel - Aliquota Zero'), + ('07', 'COFINS 07 - Operacao Isenta da Contribuicao'), + ('08', 'COFINS 08 - Operacao sem Indidencia da Contribuicao'), + ('09', 'COFINS 09 - Operacao com Suspensao da Contribuicao'), + ('99', 'COFINS 99 - Outras operacoes'), +) + +COFINS_TIPOS_CALCULO = IPI_TIPOS_CALCULO + + diff --git a/tests/02-modelo-05-notafiscal.txt b/tests/02-modelo-05-notafiscal.txt index 5d6cceb..3b755d6 100644 --- a/tests/02-modelo-05-notafiscal.txt +++ b/tests/02-modelo-05-notafiscal.txt @@ -370,30 +370,78 @@ Nenhum dos campos deve permitir acentos e/ou cedilhas. - ICMS 60 - Cobrado anteriormente por substituicao tributaria - ICMS 70 - Com reducao da base de calculo e cobranca do ICMS por substituicao tributaria - ICMS 90 - Outras + + >>> hasattr(NotaFiscalProduto, 'icms_situacao_tributaria') + True + - Origem (obrigatorio - seleciona de lista) - Nacional - Estrangeira - Importacao Direta - Estrangeira - Adquirida no Mercado Interno + + >>> hasattr(NotaFiscalProduto, 'icms_origem') + True + - ICMS - Modalidade de determinacao da BC ICMS (seleciona de lista) - Margem Valor Agregado - Pauta (valor) - Preco Tabelado Max. (valor) - Valor da Operacao + + >>> hasattr(NotaFiscalProduto, 'icms_modalidade_determinacao_bc') + True + - Percentual reducao da BC ICMS + + >>> hasattr(NotaFiscalProduto, 'icms_percentual_reducao_bc') + True + - Valor da base de calculo ICMS + + >>> hasattr(NotaFiscalProduto, 'icms_valor_base_calculo') + True + - Aliquota ICMS + + >>> hasattr(NotaFiscalProduto, 'icms_aliquota') + True + - Valor do ICMS + + >>> hasattr(NotaFiscalProduto, 'icms_valor') + True + - ICMS ST - Modalidade de determinacao da BC ICMS ST (seleciona de lista) - Margem Valor Agregado - Pauta (valor) - Preco Tabelado Max. (valor) - Valor da Operacao + + >>> hasattr(NotaFiscalProduto, 'icms_st_modalidade_determinacao_bc') + True + - Percentual reducao da BC ICMS ST + + >>> hasattr(NotaFiscalProduto, 'icms_st_percentual_reducao_bc') + True + - Valor da base de calculo ICMS ST + + >>> hasattr(NotaFiscalProduto, 'icms_st_valor_base_calculo') + True + - Aliquota ICMS ST + + >>> hasattr(NotaFiscalProduto, 'icms_st_aliquota') + True + - Valor do ICMS ST + + >>> hasattr(NotaFiscalProduto, 'icms_st_valor') + True + - IPI - Situacao tributaria (seleciona de lista) - IPI 00 - Entrada com recuperacao de credito @@ -410,25 +458,73 @@ Nenhum dos campos deve permitir acentos e/ou cedilhas. - IPI 54 - Saida imune - IPI 55 - Saida com suspensao - IPI 99 - Outas saidas + + >>> hasattr(NotaFiscalProduto, 'ipi_situacao_tributaria') + True + - Classe de enquadramento - A informacao para classe de enquadramento do IPI para Cigarros e Bebidas, quando aplicavel, deve ser informada utilizando a codificacao prevista nos Atos Normativos editados pela Receita Federal + + >>> hasattr(NotaFiscalProduto, 'ipi_classe_enquadramento') + True + - Codigo do enquadramento + + >>> hasattr(NotaFiscalProduto, 'ipi_codigo_enquadramento') + True + - CNPJ do Produtor + + >>> hasattr(NotaFiscalProduto, 'ipi_cnpj_produtor') + True + - Codigo do selo de controle - A informacao do codigo de selo, quando aplicavel, deve ser informada utilizando a codificacao prevista nos Atos Normativos editados pela Receita Federal + + >>> hasattr(NotaFiscalProduto, 'ipi_codigo_selo_controle') + True + - Quantidade do selo de controle + + >>> hasattr(NotaFiscalProduto, 'ipi_quantidade_selo_controle') + True + - Tipo de calculo (seleciona de lista) + + >>> hasattr(NotaFiscalProduto, 'ipi_tipo_calculo') + True + - Percentual - Valor da base de calculo + + >>> hasattr(NotaFiscalProduto, 'ipi_valor_base_calculo') + True + - Aliquota + + >>> hasattr(NotaFiscalProduto, 'ipi_aliquota') + True + - Em valor - Quantidade total unidade padrao + + >>> hasattr(NotaFiscalProduto, 'ipi_quantidade_total_unidade_padrao') + True + - Valor por unidade + + >>> hasattr(NotaFiscalProduto, 'ipi_valor_unidade') + True + - Valor do IPI + + >>> hasattr(NotaFiscalProduto, 'ipi_valor_ipi') + True + - PIS - PIS - Situacao tributaria (obrigatorio - seleciona de lista) @@ -441,21 +537,75 @@ Nenhum dos campos deve permitir acentos e/ou cedilhas. - PIS 08 - Operacao sem Indidencia da Contribuicao - PIS 09 - Operacao com Suspensao da Contribuicao - PIS 99 - Outras operacoes + + >>> hasattr(NotaFiscalProduto, 'pis_situacao_tributaria') + True + - Tipo de calculo (seleciona de lista) - - Valor da base de calculo - - Aliquota (percentual) - - Aliquota (em reais) - - Quantidade vendida + + >>> hasattr(NotaFiscalProduto, 'pis_tipo_calculo') + True + + - Percentual + - Valor da base de calculo + + >>> hasattr(NotaFiscalProduto, 'pis_valor_base_calculo') + True + + - Aliquota (percentual) + + >>> hasattr(NotaFiscalProduto, 'pis_aliquota_percentual') + True + + - Em valor + - Aliquota (em reais) + + >>> hasattr(NotaFiscalProduto, 'pis_aliquota_reais') + True + + - Quantidade vendida + + >>> hasattr(NotaFiscalProduto, 'pis_quantidade_vendida') + True + - Valor do PIS + + >>> hasattr(NotaFiscalProduto, 'pis_valor') + True + - PIS ST - Tipo de calculo (seleciona de lista) + + >>> hasattr(NotaFiscalProduto, 'pis_st_tipo_calculo') + True + - Percentual - Valor da base de calculo + + >>> hasattr(NotaFiscalProduto, 'pis_st_valor_base_calculo') + True + - Aliquota (percentual) + + >>> hasattr(NotaFiscalProduto, 'pis_st_aliquota_percentual') + True + - Em valor - Aliquota (em reais) + + >>> hasattr(NotaFiscalProduto, 'pis_st_aliquota_reais') + True + - Quantidade vendida + + >>> hasattr(NotaFiscalProduto, 'pis_st_quantidade_vendida') + True + - Valor do PIS ST + + >>> hasattr(NotaFiscalProduto, 'pis_st_valor') + True + - COFINS - COFINS - Situacao tributaria (obrigatorio - seleciona de lista) @@ -468,50 +618,190 @@ Nenhum dos campos deve permitir acentos e/ou cedilhas. - COFINS 08 - Operacao sem Indidencia da Contribuicao - COFINS 09 - Operacao com Suspensao da Contribuicao - COFINS 99 - Outras operacoes + + >>> hasattr(NotaFiscalProduto, 'cofins_situacao_tributaria') + True + - Tipo de calculo (seleciona de lista) + + >>> hasattr(NotaFiscalProduto, 'cofins_tipo_calculo') + True + - Percentual - Valor da base de calculo + + >>> hasattr(NotaFiscalProduto, 'cofins_valor_base_calculo') + True + - Aliquota (percentual) + + >>> hasattr(NotaFiscalProduto, 'cofins_aliquota_percentual') + True + - Em Valor - Aliquota (em reais) + + >>> hasattr(NotaFiscalProduto, 'cofins_aliquota_reais') + True + - Quantidade vendida + + >>> hasattr(NotaFiscalProduto, 'cofins_quantidade_vendida') + True + - Valor do COFINS + + >>> hasattr(NotaFiscalProduto, 'cofins_valor') + True + - COFINS ST - Tipo de calculo (seleciona de lista) + + >>> hasattr(NotaFiscalProduto, 'cofins_st_tipo_calculo') + True + - Percentual - Valor da base de calculo + + >>> hasattr(NotaFiscalProduto, 'cofins_st_valor_base_calculo') + True + - Aliquota (percentual) + + >>> hasattr(NotaFiscalProduto, 'cofins_st_aliquota_percentual') + True + - Em Valor - Aliquota (em reais) + + >>> hasattr(NotaFiscalProduto, 'cofins_st_aliquota_reais') + True + - Quantidade vendida + + >>> hasattr(NotaFiscalProduto, 'cofins_st_quantidade_vendida') + True + - Valor do COFINS ST + + >>> hasattr(NotaFiscalProduto, 'cofins_st_valor') + True + - ISSQN - Valor da base de calculo + + >>> hasattr(NotaFiscalProduto, 'issqn_valor_base_calculo') + True + - Aliquota + + >>> hasattr(NotaFiscalProduto, 'issqn_aliquota') + True + - Lista de servico (seleciona de lista) - Aceita somente valores maiores que 100, disponiveis no arquivo data/ISSQN/Lista-Servicos.txt + + >>> hasattr(NotaFiscalProduto, 'issqn_lista_servico') + True + - UF + + >>> hasattr(NotaFiscalProduto, 'issqn_uf') + True + - Municipio de ocorrencia + + >>> hasattr(NotaFiscalProduto, 'issqn_municipio') + True + - Valor do ISSQN + + >>> hasattr(NotaFiscalProduto, 'issqn_valor') + True + - Imposto de Importacao - Valor base de calculo + + >>> hasattr(NotaFiscalProduto, 'imposto_importacao_valor_base_calculo') + True + - Valor despesas aduaneiras + + >>> hasattr(NotaFiscalProduto, 'imposto_importacao_valor_despesas_aduaneiras') + True + - Valor do IOF + + >>> hasattr(NotaFiscalProduto, 'imposto_importacao_valor_iof') + True + - Valor imposto de importacao + + >>> hasattr(NotaFiscalProduto, 'imposto_importacao_valor') + True + - Informacoes Adicionais - Texto livre de informacoes adicionais + + >>> hasattr(NotaFiscalProduto, 'informacoes_adicionais') + True + - Declaracao de Importacao (lista 1 para * / ManyToManyField) + + >>> hasattr(NotaFiscalProduto, 'declaracoes_importacao') + True + - Numero DI/DSI/DA + + >>> hasattr(NotaFiscalDeclaracaoImportacao, 'numero_di_dsi_da') + True + - Data de registro + + >>> hasattr(NotaFiscalDeclaracaoImportacao, 'data_registro') + True + - Codigo exportador + + >>> hasattr(NotaFiscalDeclaracaoImportacao, 'codigo_exportador') + True + - Desembaraco aduaneiro - UF + + >>> hasattr(NotaFiscalDeclaracaoImportacao, 'desembaraco_aduaneiro_uf') + True + - Local + + >>> hasattr(NotaFiscalDeclaracaoImportacao, 'desembaraco_aduaneiro_local') + True + - Data + + >>> hasattr(NotaFiscalDeclaracaoImportacao, 'desembaraco_aduaneiro_data') + True + - Adicoes (lista 1 para * / ManyToManyField) + + >>> hasattr(NotaFiscalDeclaracaoImportacao, 'adicoes') + True + - Numero + + >>> hasattr(NotaFiscalDeclaracaoImportacaoAdicao, 'numero') + True + - Desconto + + >>> hasattr(NotaFiscalDeclaracaoImportacaoAdicao, 'desconto') + True + - Codigo fabricante + + >>> hasattr(NotaFiscalDeclaracaoImportacaoAdicao, 'codigo_fabricante') + True + - Veiculo Novo - ??? - Medicamento