Browse Source

Trabalhando no modelo da entidade de Nota Fiscal

tags/0.1
Marinho Brandão 16 years ago
parent
commit
3d0b0974e9
  1. 3
      README
  2. 253
      pynfe/entidades/notafiscal.py
  3. 2
      pynfe/entidades/produto.py
  4. 10
      pynfe/utils/flags.py
  5. 275
      tests/02-modelo-05-notafiscal.txt

3
README

@ -80,3 +80,6 @@ Referências
- Descricao do Code128 na Wikipedia
- http://en.wikipedia.org/wiki/Code_128
- Lista de codigos para campo EX TIPI
- http://www.fisconet.com.br/ipi/tipi/04.htm

253
pynfe/entidades/notafiscal.py

@ -1,13 +1,260 @@
from base import Entidade
from pynfe.utils.flags import NF_STATUS
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):
pass
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):
pass
# - 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):
pass
# - 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()
class NotaFiscalDeclaracaoImportacao(Entidade):
pass

2
pynfe/entidades/produto.py

@ -59,6 +59,8 @@ class Produto(Entidade):
def __init__(self, *args, **kwargs):
self.icms = []
super(Produto, self).__init__(*args, **kwargs)
def adicionar_icms(self, **kwargs):
u"""Adiciona uma instancia de ICMS a lista de ICMS do produto"""
self.icms.append(ProdutoICMS(**kwargs))

10
pynfe/utils/flags.py

@ -32,3 +32,13 @@ ICMS_MODALIDADES = (
'Valor da Operacao',
)
NF_STATUS = (
'Em Digitacao',
'Validada',
'Assinada',
'Em processamento',
'Autorizada',
'Rejeitada',
'Cancelada',
)

275
tests/02-modelo-05-notafiscal.txt

@ -21,74 +21,341 @@ Nenhum dos campos deve permitir acentos e/ou cedilhas.
- Autorizada
- Rejeitada
- Cancelada
- NF-e
>>> hasattr(NotaFiscal, 'status')
True
- Nota Fisca eletronica
- Modelo (formato: NN)
>>> hasattr(NotaFiscal, 'modelo')
True
- Serie (obrigatorio - formato: NNN)
>>> hasattr(NotaFiscal, 'serie')
True
- Numero NF (obrigatorio)
>>> hasattr(NotaFiscal, 'numero_nf')
True
- Data da Emissao (obrigatorio)
>>> hasattr(NotaFiscal, 'data_emissao')
True
- Natureza da Operacao (obrigatorio)
>>> hasattr(NotaFiscal, 'natureza_operacao')
True
- Tipo do Documento (obrigatorio - seleciona de lista)
- 0 - Entrada
- 1 - Saida
>>> hasattr(NotaFiscal, 'tipo_documento')
True
- Tipo impressao DANFE (obrigatorio - seleciona de lista)
- Retrato
- Paisagem
>>> hasattr(NotaFiscal, 'tipo_impressao_danfe')
True
- Data de saida/entrada
>>> hasattr(NotaFiscal, 'data_saida_entrada')
True
- Forma de pagamento (obrigatorio - seleciona de lista)
- 0 - Pagamento a vista
- 1 - Pagamento a prazo
- 2 - Outros
>>> hasattr(NotaFiscal, 'forma_pagamento')
True
- Forma de emissao (obrigatorio - seleciona de lista)
- Normal
- Contingencia
- Contingencia com SCAN
- Contingencia via DPEC
- Contingencia FS-DA
>>> hasattr(NotaFiscal, 'forma_emissao')
True
- Finalidade de emissao (obrigatorio - seleciona de lista)
- 1 - NF-e normal
- 2 - NF-e complementar
- 3 - NF-e de ajuste
>>> hasattr(NotaFiscal, 'finalidade_emissao')
True
- UF
>>> hasattr(NotaFiscal, 'uf')
True
- Municipio de ocorrencia
>>> hasattr(NotaFiscal, 'municipio')
True
- Digest value da NF-e (somente leitura)
>>> hasattr(NotaFiscal, 'digest_value')
True
- Valor total da nota (somente leitura)
>>> hasattr(NotaFiscal, 'valor_total_nota')
True
- Valor ICMS da nota (somente leitura)
>>> hasattr(NotaFiscal, 'valor_icms_nota')
True
- Valor ICMS ST da nota (somente leitura)
>>> hasattr(NotaFiscal, 'valor_icms_st_nota')
True
- Protocolo (somente leitura)
>>> hasattr(NotaFiscal, 'protocolo')
True
- Data (somente leitura)
>>> hasattr(NotaFiscal, 'data')
True
- Notas Fiscais Referenciadas (lista 1 para * / ManyToManyField)
>>> hasattr(NotaFiscal, 'notas_fiscais_referenciadas')
True
- Tipo (seleciona de lista)
>>> hasattr(NotaFiscalReferenciada, 'tipo')
True
- Nota Fiscal eletronica
- Chave de Acesso
>>> hasattr(NotaFiscalReferenciada, 'chave_acesso')
True
- Nota Fiscal
- UF
>>> hasattr(NotaFiscalReferenciada, 'uf')
True
- Mes e ano de emissao
>>> hasattr(NotaFiscalReferenciada, 'mes_ano_emissao')
True
- CNPJ
>>> hasattr(NotaFiscalReferenciada, 'cnpj')
True
- Serie (XXX)
>>> hasattr(NotaFiscalReferenciada, 'serie')
True
- Numero
>>> hasattr(NotaFiscalReferenciada, 'numero')
True
- Modelo
- Emitente
>>> hasattr(NotaFiscalReferenciada, 'modelo')
True
- Emitente (CNPJ ???)
>>> hasattr(NotaFiscal, 'emitente')
True
- Destinatario/Remetente
- Identificacao (seleciona de Clientes)
>>> hasattr(NotaFiscal, 'destinatario_remetente')
True
- Endereco (ver se pode copiar do Cliente)
- Logradouro (obrigatorio)
>>> hasattr(NotaFiscal, 'destinatario_endereco_logradouro')
True
- Numero (obrigatorio)
>>> hasattr(NotaFiscal, 'destinatario_endereco_numero')
True
- Complemento
>>> hasattr(NotaFiscal, 'destinatario_endereco_complemento')
True
- Bairro (obrigatorio)
>>> hasattr(NotaFiscal, 'destinatario_endereco_bairro')
True
- CEP
>>> hasattr(NotaFiscal, 'destinatario_endereco_cep')
True
- Pais (seleciona de lista)
>>> hasattr(NotaFiscal, 'destinatario_endereco_pais')
True
- UF (obrigatorio)
>>> hasattr(NotaFiscal, 'destinatario_endereco_uf')
True
- Municipio (obrigatorio)
>>> hasattr(NotaFiscal, 'destinatario_endereco_municipio')
True
- Telefone
>>> hasattr(NotaFiscal, 'destinatario_endereco_telefone')
True
- Local Retirada/Entrega
- Local de retirada diferente do emitente (Sim/Nao)
>>> hasattr(NotaFiscal, 'local_retirada_diferente_emitente')
True
- Local de entrega diferente do destinatario (Sim/Nao)
>>> hasattr(NotaFiscal, 'local_entrega_diferente_destinatario')
True
- Produtos e Servicos (lista 1 para * / ManyToManyField)
>>> hasattr(NotaFiscal, 'produtos_servicos')
True
- Dados
- Codigo (obrigatorio)
>>> hasattr(NotaFiscalProduto, 'codigo')
True
- Descricao (obrigatorio)
>>> hasattr(NotaFiscalProduto, 'descricao')
True
- EAN
>>> hasattr(NotaFiscalProduto, 'ean')
True
- NCM
>>> hasattr(NotaFiscalProduto, 'ncm')
True
- EX TIPI
>>> hasattr(NotaFiscalProduto, 'ex_tipi')
True
- CFOP (obrigatorio)
>>> hasattr(NotaFiscalProduto, 'cfop')
True
- Genero
>>> hasattr(NotaFiscalProduto, 'genero')
True
- Unidade Comercial (obrigatorio)
>>> hasattr(NotaFiscalProduto, 'unidade_comercial')
True
- Quantidade Comercial (obrigatorio)
>>> hasattr(NotaFiscalProduto, 'quantidade_comercial')
True
- Valor Unitario Comercial (obrigatorio)
>>> hasattr(NotaFiscalProduto, 'valor_unitario_comercial')
True
- Unidade Tributavel (obrigatorio)
>>> hasattr(NotaFiscalProduto, 'unidade_tributavel')
True
- Quantidade Tributavel (obrigatorio)
>>> hasattr(NotaFiscalProduto, 'quantidade_tributavel')
True
- Valor Unitario Tributavel (obrigatorio)
>>> hasattr(NotaFiscalProduto, 'valor_unitario_tributavel')
True
- EAN Tributavel
- Tot. Frete
- Tot. Seguro
>>> hasattr(NotaFiscalProduto, 'ean_tributavel')
True
- Total Frete
>>> hasattr(NotaFiscalProduto, 'total_frete')
True
- Total Seguro
>>> hasattr(NotaFiscalProduto, 'total_seguro')
True
- Desconto
>>> hasattr(NotaFiscalProduto, 'desconto')
True
- Valor tot bruto (obrigatorio)
>>> hasattr(NotaFiscalProduto, 'valor_total_bruto')
True
- Produto especifico (seleciona de lista)
- Veiculo
- Medicamento
- Armamento
- Combustivel
>>> hasattr(NotaFiscalProduto, 'produto_especifico')
True
- Tributos
- ICMS
- Situacao tributaria (obrigatorio - seleciona de lista)

Loading…
Cancel
Save