PROCESSAMENTO - SERIALIZACAO PARA XML
=====================================
Populando fonte de dados
------------------------
>>> import datetime
>>> from decimal import Decimal
>>> from pynfe.entidades import Emitente, Cliente, NotaFiscal, Transportadora
>>> from pynfe.entidades.notafiscal import NotaFiscalEntregaRetirada
>>> from pynfe.entidades.fontes_dados import _fonte_dados
>>> from pynfe.utils.flags import CODIGO_BRASIL
Popula dependentes da NF
>>> emitente = Emitente(
... cnpj='12.345.678/0001-90',
... razao_social='Tarsila Calcados Ltda.',
... nome_fantasia='Tarsila Calcados Ltda.',
... inscricao_estadual='123456789012',
... endereco_logradouro='Rua 10',
... endereco_numero='15',
... endereco_complemento='qd 17, lt 10',
... endereco_bairro='Setor Oeste',
... endereco_municipio='5208806', # Goiania
... endereco_uf='GO',
... endereco_cep='75370-000',
... endereco_telefone='6242421212',
... )
>>> cliente = Cliente(
... razao_social='Jose Felipe da Silva',
... tipo_documento='CPF',
... numero_documento='123.456.789-01',
... inscricao_estadual='9876543210',
... endereco_logradouro='AV DAS ROSAS',
... endereco_numero='1777',
... endereco_complemento='10 ANDAR',
... endereco_bairro='PARQUE FONTES',
... endereco_municipio='3304557', # Rio de Janeiro
... endereco_uf='RJ',
... endereco_pais=CODIGO_BRASIL,
... endereco_cep='23950-000',
... endereco_telefone='2132011234',
... )
>>> transportadora = Transportadora(
... razao_social='WS Cargas S/A',
... tipo_documento='CNPJ',
... numero_documento='123.123.123/0001-12',
... inscricao_estadual='171999999119',
... endereco_logradouro='Rua Central 100 - Fundos - Distrito Industrial',
... endereco_municipio='3304557', # Rio de Janeiro
... endereco_uf='RJ',
... )
Instancia a NF
>>> nota_fiscal = NotaFiscal(
... emitente=emitente,
... transporte_transportadora=transportadora,
... cliente=cliente,
... uf='GO',
... modelo=55,
... serie='1',
... numero_nf='1',
... data_emissao=datetime.date(2010,1,13),
... data_saida_entrada=datetime.date(2010,1,13),
... natureza_operacao='Venda a vista',
... forma_pagamento=0,
... tipo_impressao_danfe=1, # Retrato
... forma_emissao=1, # Normal
... finalidade_emissao=1,
... municipio='3550308',
... codigo_numerico_aleatorio='51800512',
... dv_codigo_numerico_aleatorio='3',
...
... # Totais
... totais_icms_base_calculo=Decimal('20000000.00'),
... totais_icms_total=Decimal('18.00'),
... totais_icms_st_base_calculo=Decimal('0'),
... totais_icms_st_total=Decimal('0'),
... totais_icms_total_produtos_e_servicos=Decimal('20000000.00'),
... totais_icms_total_frete=Decimal('0'),
... totais_icms_total_seguro=Decimal('0'),
... totais_icms_total_desconto=Decimal('0'),
... totais_icms_total_ii=Decimal('0'),
... totais_icms_total_ipi=Decimal('0'),
... totais_icms_pis=Decimal('130000.00'),
... totais_icms_cofins=Decimal('400000.00'),
... totais_icms_outras_despesas_acessorias=Decimal('0'),
... totais_icms_total_nota=Decimal('20000000.00'),
...
... # Transporte
... transporte_modalidade_frete=0,
...
... # Informacoes adicionais
... informacoes_adicionais_interesse_fisco='Nota Fiscal de exemplo PyNFe',
... transporte_veiculo_placa='BXI1717',
... transporte_veiculo_rntc='123456789',
... transporte_veiculo_uf='SP',
... transporte_reboque_placa='BXI1818',
... transporte_reboque_rntc='123456789',
... transporte_reboque_uf='SP',
... )
>>> nota_fiscal.retirada = NotaFiscalEntregaRetirada(
... tipo_documento='CNPJ',
... numero_documento='99.171.171/0001-94',
... endereco_logradouro='AV PAULISTA',
... endereco_numero='12345',
... endereco_complemento='TERREO',
... endereco_bairro='CERQUEIRA CESAR',
... endereco_municipio='3304557', # Rio de Janeiro
... endereco_uf='RJ',
... )
>>> nota_fiscal.entrega = NotaFiscalEntregaRetirada(
... tipo_documento='CNPJ',
... numero_documento='99.299.299/0001-94',
... endereco_logradouro='AV FARIA LIMA',
... endereco_numero='1500',
... endereco_complemento='15 ANDAR',
... endereco_bairro='PINHEIROS',
... endereco_municipio='3304557', # Rio de Janeiro
... endereco_uf='RJ',
... )
>>> nf_prod1 = nota_fiscal.adicionar_produto_servico(
... # prod
... codigo='00001',
... descricao='Agua Mineral',
... cfop='5101',
... unidade_comercial='dz',
... quantidade_comercial=Decimal('2'),
... valor_unitario_comercial=Decimal('10.0'),
... valor_total_bruto=Decimal('20.0'),
... unidade_tributavel='und',
... quantidade_tributavel=Decimal('24.0'),
... valor_unitario_tributavel=Decimal('3.00'),
...
... # imposto
... icms_origem=0,
... icms_situacao_tributaria='00',
... icms_modalidade_determinacao_bc=0,
... icms_valor_base_calculo=Decimal('10000000.00'),
... icms_aliquota=Decimal('18.00'),
... icms_valor=Decimal('1800000.00'),
... pis_situacao_tributaria='01',
... pis_valor_base_calculo=Decimal('10000000.00'),
... pis_aliquota_percentual=Decimal('0.65'),
... pis_valor=Decimal('65000'),
... cofins_situacao_tributaria='01',
... cofins_valor_base_calculo=Decimal('10000000.00'),
... cofins_aliquota_percentual=Decimal('2.00'),
... cofins_valor=Decimal('200000.00'),
... )
>>> nf_prod2 = nota_fiscal.adicionar_produto_servico(
... codigo='00002',
... descricao='Agua Mineral',
... cfop='5101',
... unidade_comercial='pack',
... quantidade_comercial=Decimal('5000000'),
... valor_unitario_comercial=Decimal('2.0'),
... valor_total_bruto=Decimal('10000000.0'),
... unidade_tributavel='und',
... quantidade_tributavel=Decimal('3000000.0'),
... valor_unitario_tributavel=Decimal('0.3333'),
...
... # imposto
... icms_origem=0,
... icms_situacao_tributaria='00',
... icms_modalidade_determinacao_bc=0,
... icms_valor_base_calculo=Decimal('10000000.00'),
... icms_aliquota=Decimal('18.00'),
... icms_valor=Decimal('1800000.00'),
... pis_situacao_tributaria='01',
... pis_valor_base_calculo=Decimal('10000000.00'),
... pis_aliquota_percentual=Decimal('0.65'),
... pis_valor=Decimal('65000'),
... cofins_situacao_tributaria='01',
... cofins_valor_base_calculo=Decimal('10000000.00'),
... cofins_aliquota_percentual=Decimal('2.00'),
... cofins_valor=Decimal('200000.00'),
... )
>>> vol1 = nota_fiscal.adicionar_transporte_volume(
... quantidade=10000,
... especie='CAIXA',
... marca='LINDOYA',
... numeracao='500',
... peso_liquido=Decimal('1000000000.000'),
... peso_bruto=Decimal('1200000000.000'),
... )
>>> lacre1 = vol1.adicionar_lacre(
... numero_lacre='XYZ10231486',
... )
>>> _fonte_dados.contar_objetos()
10
Gerar arquivos XML
------------------
>>> import os
>>> CUR_DIR = '.'
>>> CAMINHO_SAIDA = os.path.join(CUR_DIR, 'tests', 'saida')
>>> from pynfe.processamento.serializacao import SerializacaoXML
>>> serializador = SerializacaoXML(_fonte_dados, homologacao=True)
Serializando por partes
>>> print serializador._serializar_emitente(emitente)
12345678000190
Tarsila Calcados Ltda.
Tarsila Calcados Ltda.
123456789012
Rua 10
15
qd 17, lt 10
Setor Oeste
5208806
Goianira
GO
75370000
1058
Brasil
6242421212
>>> print serializador._serializar_cliente(cliente)
12345678901
Jose Felipe da Silva
9876543210
AV DAS ROSAS
1777
10 ANDAR
PARQUE FONTES
3304557
Rio de Janeiro
RJ
23950000
1058
Brasil
2132011234
>>> print serializador._serializar_transportadora(transportadora)
123123123000112
WS Cargas S/A
171999999119
Rua Central 100 - Fundos - Distrito Industrial
3304557
Rio de Janeiro
RJ
- Gera os arquivos XML a partir dos dados das instancias da NF-e
>>> print nota_fiscal.identificador_unico
NFe52100112345678000190550010000000011518005123
>>> print serializador._serializar_notas_fiscal(nota_fiscal)
52
51800512
Venda a vista
0
55
1
1
2010-01-13
2010-01-13
0
3550308
1
1
3
2
1
0
PyNFe 0.1
12345678000190
Tarsila Calcados Ltda.
Tarsila Calcados Ltda.
123456789012
Rua 10
15
qd 17, lt 10
Setor Oeste
5208806
Goianira
GO
75370000
1058
Brasil
6242421212
12345678901
Jose Felipe da Silva
9876543210
AV DAS ROSAS
1777
10 ANDAR
PARQUE FONTES
3304557
Rio de Janeiro
RJ
23950000
1058
Brasil
2132011234
99171171000194
AV PAULISTA
12345
TERREO
CERQUEIRA CESAR
3304557
Rio de Janeiro
RJ
99299299000194
AV FARIA LIMA
1500
15 ANDAR
PINHEIROS
3304557
Rio de Janeiro
RJ
00001
Agua Mineral
5101
dz
2
10.0
20.0
und
24.0
3.00
0
00
0
10000000.00
18.00
1800000.00
01
10000000.00
0.65
65000
01
10000000.00
2.00
200000.00
00002
Agua Mineral
5101
pack
5000000
2.0
10000000.0
und
3000000.0
0.3333
0
00
0
10000000.00
18.00
1800000.00
01
10000000.00
0.65
65000
01
10000000.00
2.00
200000.00
20000000.00
18.00
0
0
20000000.00
0
0
0
0
0
130000.00
400000.00
0
20000000.00
0
123123123000112
WS Cargas S/A
171999999119
Rua Central 100 - Fundos - Distrito Industrial
3304557
Rio de Janeiro
RJ
BXI1717
SP
123456789
BXI1818
SP
123456789
10000
CAIXA
LINDOYA
500
1000000000.000
1200000000.000
XYZ10231486
Nota Fiscal de exemplo PyNFe
Exportacao completa
-------------------
>>> xml = serializador.exportar(modelo=55)
>>> from lxml import etree
>>> fp = file('tests/saida/nfe-1.xml', 'w')
>>> fp.write(etree.tostring(xml, pretty_print=True, xml_declaration=True, encoding='utf-8'))
>>> fp.close()
- Quando gerados me lote, apenas o primeiro arquivo deve ter o cabecalho
padrao do XML 1.0
-
- Namespace
-
- A declaração do namespace da assinatura digital deverá ser realizada na
própria tag , conforme exemplo abaixo.
- Cada documento XML deverá ter o seu namespace individual em seu elemento raiz.