Browse Source

Trabalhandon a serializacao para XML

tags/0.1
Marinho Brandão 16 years ago
parent
commit
3016a88292
  1. 17
      pynfe/entidades/notafiscal.py
  2. 12
      pynfe/processamento/serializacao.py
  3. 14
      tests/03-processamento-00-definicoes-gerais.txt
  4. 8
      tests/03-processamento-01-serializacao-xml.txt

17
pynfe/entidades/notafiscal.py

@ -1,4 +1,6 @@
# -*- coding: utf-8 -*-
import random
from base import Entidade
from pynfe import get_version
from pynfe.utils.flags import NF_STATUS, NF_TIPOS_DOCUMENTO, NF_TIPOS_IMPRESSAO_DANFE,\
@ -15,6 +17,12 @@ from decimal import Decimal
class NotaFiscal(Entidade):
status = NF_STATUS[0]
# Código numérico aleatório que compõe a chave de acesso
codigo_numerico_aleatorio = str()
# Digito verificador do codigo numerico aleatorio
dv_codigo_numerico_aleatorio = str()
# Nota Fisca eletronica
# - Modelo (formato: NN)
modelo = int()
@ -335,8 +343,8 @@ class NotaFiscal(Entidade):
@memoize
def identificador_unico(self):
# Monta 'Id' da raiz
# Ex.: NFe35080599999090910270550010000000015180051273
return "NFe%(uf)s%(ano)s%(mes)s%(cnpj)s%(mod)s%(serie)s%(nNF)s%(cNF)s%(cDV)s"%{
# Ex.: NFe35080599999090910270550010000000011518005123
return "NFe%(uf)s%(ano)s%(mes)s%(cnpj)s%(mod)s%(serie)s%(nNF)s%(tpEmis)s%(cNF)s%(cDV)s"%{
'uf': CODIGOS_ESTADOS[self.uf],
'ano': self.data_emissao.strftime('%y'),
'mes': self.data_emissao.strftime('%m'),
@ -344,8 +352,9 @@ class NotaFiscal(Entidade):
'mod': self.modelo,
'serie': str(self.serie).zfill(3),
'nNF': str(self.numero_nf).zfill(9),
'cNF': '518005127'.zfill(9), # FIXME
'cDV': '3', # FIXME
'tpEmis': str(self.forma_emissao),
'cNF': self.codigo_numerico_aleatorio.zfill(8),
'cDV': self.dv_codigo_numerico_aleatorio,
}
class NotaFiscalReferenciada(Entidade):

12
pynfe/processamento/serializacao.py

@ -193,12 +193,12 @@ class SerializacaoXML(Serializacao):
return ''
def _serializar_notas_fiscal(self, nota_fiscal, tag_raiz='infNFe', retorna_string=True):
raiz = etree.Element(tag_raiz, versao="1.10")
raiz = etree.Element(tag_raiz, versao="2.00")
# Dados da Nota Fiscal
ide = etree.SubElement(raiz, 'ide')
etree.SubElement(ide, 'cUF').text = CODIGOS_ESTADOS[nota_fiscal.uf]
etree.SubElement(ide, 'cNF').text = '' # FIXME
etree.SubElement(ide, 'cNF').text = nota_fiscal.codigo_numerico_aleatorio
etree.SubElement(ide, 'natOp').text = nota_fiscal.natureza_operacao
etree.SubElement(ide, 'indPag').text = str(nota_fiscal.forma_pagamento)
etree.SubElement(ide, 'mod').text = str(nota_fiscal.modelo)
@ -210,7 +210,7 @@ class SerializacaoXML(Serializacao):
etree.SubElement(ide, 'cMunFG').text = nota_fiscal.municipio
etree.SubElement(ide, 'tpImp').text = str(nota_fiscal.tipo_impressao_danfe)
etree.SubElement(ide, 'tpEmis').text = str(nota_fiscal.forma_emissao)
etree.SubElement(ide, 'cDV').text = '3' # FIXME
etree.SubElement(ide, 'cDV').text = nota_fiscal.dv_codigo_numerico_aleatorio
etree.SubElement(ide, 'tpAmb').text = str(self._ambiente)
etree.SubElement(ide, 'finNFe').text = str(nota_fiscal.finalidade_emissao)
etree.SubElement(ide, 'procEmi').text = str(nota_fiscal.processo_emissao)
@ -223,8 +223,12 @@ class SerializacaoXML(Serializacao):
# Destinatário
raiz.append(self._serializar_cliente(nota_fiscal.cliente, retorna_string=False))
# Transporte
transp = etree.SubElement(raiz, 'transp')
transp.append(self._serializar_transportadora(nota_fiscal.transporte_transportadora, retorna_string=False))
# 'Id' da tag raiz
# Ex.: NFe35080599999090910270550010000000015180051273
# Ex.: NFe35080599999090910270550010000000011518005123
raiz.attrib['Id'] = nota_fiscal.identificador_unico
if retorna_string:

14
tests/03-processamento-00-definicoes-gerais.txt

@ -1,23 +1,11 @@
PROCESSAMENTO
=============
Gerar arquivos XML
------------------
- Gera os arquivos XML a partir dos dados das instancias da NF-e
- Quando gerados me lote, apenas o primeiro arquivo deve ter o cabecalho
padrao do XML 1.0
- <?xml version="1.0" encoding="UTF-8"?>
- Namespace
- <NFe xmlns=”http://www.portalfiscal.inf.br/nfe” >
- A declaração do namespace da assinatura digital deverá ser realizada na
própria tag <Signature>, conforme exemplo abaixo.
- Cada documento XML deverá ter o seu namespace individual em seu elemento raiz.
Validar NF-e
------------
- Efetuar validacoes dos XSD no(s) XML(s) gerado(s)
- Validar nota_fiscal.dv_codigo_numerico_aleatorio (ver pagina 85 do manual de integracao)
Assinar NF-e
------------

8
tests/03-processamento-01-serializacao-xml.txt

@ -74,6 +74,8 @@ Instancia a NF
... forma_emissao=1, # Normal
... finalidade_emissao=1,
... municipio='3550308',
... codigo_numerico_aleatorio='51800512',
... dv_codigo_numerico_aleatorio='3',
... )
>>> _fonte_dados.contar_objetos()
@ -149,13 +151,13 @@ Serializando por partes
- Gera os arquivos XML a partir dos dados das instancias da NF-e
>>> print nota_fiscal.identificador_unico
NFe52100112345678000190550010000000015180051273
NFe52100112345678000190550010000000011518005123
>>> print serializador._serializar_notas_fiscal(nota_fiscal)
<infNFe versao="1.10" Id="NFe52100112345678000190550010000000015180051273">
<infNFe versao="1.10" Id="NFe52100112345678000190550010000000011518005123">
<ide>
<cUF>52</cUF>
<cNF>518005127</cNF>
<cNF>51800512</cNF>
<natOp>Venda a vista</natOp>
<indPag>0</indPag>
<mod>55</mod>

Loading…
Cancel
Save