from base import Entidade 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 class NotaFiscal(Entidade): status = NF_STATUS[0] # Nota Fisca eletronica # - Modelo (formato: NN) modelo = str() # - Serie (obrigatorio - formato: NNN) serie = str() # - Numero NF (obrigatorio) numero_nf = str() # - Data da Emissao (obrigatorio) data_emissao = None # - Natureza da Operacao (obrigatorio) natureza_operacao = str() # - Tipo do Documento (obrigatorio - seleciona de lista) - NF_TIPOS_DOCUMENTO tipo_documento = int() # - Tipo impressao DANFE (obrigatorio - seleciona de lista) - NF_TIPOS_IMPRESSAO_DANFE tipo_impressao_danfe = str() # - Data de saida/entrada data_saida_entrada = None # - Forma de pagamento (obrigatorio - seleciona de lista) - NF_FORMAS_PAGAMENTO forma_pagamento = str() # - Forma de emissao (obrigatorio - seleciona de lista) - NF_FORMAS_EMISSAO forma_emissao = str() # - Finalidade de emissao (obrigatorio - seleciona de lista) - NF_FINALIDADES_EMISSAO finalidade_emissao = int() # - UF uf = str() # - Municipio de ocorrencia municipio = str() # - Digest value da NF-e (somente leitura) digest_value = None # - Valor total da nota (somente leitura) valor_total_nota = Decimal() # - Valor ICMS da nota (somente leitura) valor_icms_nota = Decimal() # - Valor ICMS ST da nota (somente leitura) valor_icms_st_nota = Decimal() # - Protocolo (somente leitura) protocolo = str() # - Data (somente leitura) data = None # - Notas Fiscais Referenciadas (lista 1 para * / ManyToManyField) notas_fiscais_referenciadas = None # - Emitente (CNPJ ???) emitente = None # - Destinatario/Remetente # - Identificacao (seleciona de Clientes) destinatario_remetente = None # - Endereco (ver se pode copiar do Cliente) # - Logradouro (obrigatorio) destinatario_endereco_logradouro = str() # - Numero (obrigatorio) destinatario_endereco_numero = str() # - Complemento destinatario_endereco_complemento = str() # - Bairro (obrigatorio) destinatario_endereco_bairro = str() # - CEP destinatario_endereco_cep = str() # - Pais (seleciona de lista) destinatario_endereco_pais = 'BRASIL' # - UF (obrigatorio) destinatario_endereco_uf = str() # - Municipio (obrigatorio) destinatario_endereco_municipio = str() # - Telefone destinatario_endereco_telefone = str() # - Local Retirada/Entrega # - Local de retirada diferente do emitente (Sim/Nao) local_retirada_diferente_emitente = False # - Local de entrega diferente do destinatario (Sim/Nao) local_entrega_diferente_destinatario = False # - Produtos e Servicos (lista 1 para * / ManyToManyField) produtos_servicos = None def __init__(self, *args, **kwargs): self.notas_fiscais_referenciadas = [] self.produtos_servicos = [] super(NotaFiscal, self).__init__(*args, **kwargs) def adicionar_nota_fiscal_referenciada(self, **kwargs): u"""Adiciona uma instancia de Nota Fisca referenciada""" self.notas_fiscais_referenciadas.append(NotaFiscalReferenciada(**kwargs)) def adicionar_produto_servico(self, **kwargs): u"""Adiciona uma instancia de Produto""" self.produtos_servicos.append(NotaFiscalProduto(**kwargs)) class NotaFiscalReferenciada(Entidade): # - Tipo (seleciona de lista) - NF_REFERENCIADA_TIPOS tipo = str() # - Nota Fiscal eletronica # - Chave de Acesso chave_acesso = str() # - Nota Fiscal # - UF uf = str() # - Mes e ano de emissao mes_ano_emissao = str() # - CNPJ cnpj = str() # - Serie (XXX) serie = str() # - Numero numero = str() # - Modelo modelo = str() class NotaFiscalProduto(Entidade): # - Dados # - Codigo (obrigatorio) codigo = str() # - Descricao (obrigatorio) descricao = str() # - EAN ean = str() # - NCM ncm = str() # - EX TIPI ex_tipi = str() # - CFOP (obrigatorio) cfop = str() # - Genero genero = str() # - Unidade Comercial (obrigatorio) unidade_comercial = str() # - Quantidade Comercial (obrigatorio) quantidade_comercial = Decimal() # - Valor Unitario Comercial (obrigatorio) valor_unitario_comercial = Decimal() # - Unidade Tributavel (obrigatorio) unidade_tributavel = str() # - Quantidade Tributavel (obrigatorio) quantidade_tributavel = Decimal() # - Valor Unitario Tributavel (obrigatorio) valor_unitario_tributavel = Decimal() # - EAN Tributavel ean_tributavel = str() # - Total Frete total_frete = Decimal() # - Total Seguro total_seguro = Decimal() # - Desconto desconto = Decimal() # - Valor total bruto (obrigatorio) valor_total_bruto = Decimal() # - 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): # - 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): # - Numero numero = str() # - Desconto desconto = str() # - Codigo fabricante codigo_fabricante = str() class NotaFiscalTransporteVolume(Entidade): pass class NotaFiscalTransporteVolumeLacre(Entidade): pass class NotaFiscalCobrancaDuplicata(Entidade): pass class NotaFiscalObservacaoContribuinte(Entidade): pass class NotaFiscalProcessoReferenciado(Entidade): pass