You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

508 lines
16 KiB

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)
<emit>
<CNPJ>12345678000190</CNPJ>
<xNome>Tarsila Calcados Ltda.</xNome>
<xFant>Tarsila Calcados Ltda.</xFant>
<IE>123456789012</IE>
<enderEmit>
<xLgr>Rua 10</xLgr>
<nro>15</nro>
<xCpl>qd 17, lt 10</xCpl>
<xBairro>Setor Oeste</xBairro>
<cMun>5208806</cMun>
<xMun>Goianira</xMun>
<UF>GO</UF>
<CEP>75370000</CEP>
<cPais>1058</cPais>
<xPais>Brasil</xPais>
<fone>6242421212</fone>
</enderEmit>
</emit>
<BLANKLINE>
>>> print serializador._serializar_cliente(cliente)
<dest>
<CPF>12345678901</CPF>
<xNome>Jose Felipe da Silva</xNome>
<IE>9876543210</IE>
<enderDest>
<xLgr>AV DAS ROSAS</xLgr>
<nro>1777</nro>
<xCpl>10 ANDAR</xCpl>
<xBairro>PARQUE FONTES</xBairro>
<cMun>3304557</cMun>
<xMun>Rio de Janeiro</xMun>
<UF>RJ</UF>
<CEP>23950000</CEP>
<cPais>1058</cPais>
<xPais>Brasil</xPais>
<fone>2132011234</fone>
</enderDest>
</dest>
<BLANKLINE>
>>> print serializador._serializar_transportadora(transportadora)
<transporta>
<CNPJ>123123123000112</CNPJ>
<xNome>WS Cargas S/A</xNome>
<IE>171999999119</IE>
<xEnder>Rua Central 100 - Fundos - Distrito Industrial</xEnder>
<cMun>3304557</cMun>
<xMun>Rio de Janeiro</xMun>
<UF>RJ</UF>
</transporta>
<BLANKLINE>
- 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)
<infNFe versao="2.00" Id="NFe52100112345678000190550010000000011518005123">
<ide>
<cUF>52</cUF>
<cNF>51800512</cNF>
<natOp>Venda a vista</natOp>
<indPag>0</indPag>
<mod>55</mod>
<serie>1</serie>
<nNF>1</nNF>
<dEmi>2010-01-13</dEmi>
<dSaiEnt>2010-01-13</dSaiEnt>
<tpNF>0</tpNF>
<cMunFG>3550308</cMunFG>
<tpImp>1</tpImp>
<tpEmis>1</tpEmis>
<cDV>3</cDV>
<tpAmb>2</tpAmb>
<finNFe>1</finNFe>
<procEmi>0</procEmi>
<verProc>PyNFe 0.1</verProc>
</ide>
<emit>
<CNPJ>12345678000190</CNPJ>
<xNome>Tarsila Calcados Ltda.</xNome>
<xFant>Tarsila Calcados Ltda.</xFant>
<IE>123456789012</IE>
<enderEmit>
<xLgr>Rua 10</xLgr>
<nro>15</nro>
<xCpl>qd 17, lt 10</xCpl>
<xBairro>Setor Oeste</xBairro>
<cMun>5208806</cMun>
<xMun>Goianira</xMun>
<UF>GO</UF>
<CEP>75370000</CEP>
<cPais>1058</cPais>
<xPais>Brasil</xPais>
<fone>6242421212</fone>
</enderEmit>
</emit>
<dest>
<CPF>12345678901</CPF>
<xNome>Jose Felipe da Silva</xNome>
<IE>9876543210</IE>
<enderDest>
<xLgr>AV DAS ROSAS</xLgr>
<nro>1777</nro>
<xCpl>10 ANDAR</xCpl>
<xBairro>PARQUE FONTES</xBairro>
<cMun>3304557</cMun>
<xMun>Rio de Janeiro</xMun>
<UF>RJ</UF>
<CEP>23950000</CEP>
<cPais>1058</cPais>
<xPais>Brasil</xPais>
<fone>2132011234</fone>
</enderDest>
</dest>
<retirada>
<CNPJ>99171171000194</CNPJ>
<xLgr>AV PAULISTA</xLgr>
<nro>12345</nro>
<xCpl>TERREO</xCpl>
<xBairro>CERQUEIRA CESAR</xBairro>
<cMun>3304557</cMun>
<xMun>Rio de Janeiro</xMun>
<UF>RJ</UF>
</retirada>
<entrega>
<CNPJ>99299299000194</CNPJ>
<xLgr>AV FARIA LIMA</xLgr>
<nro>1500</nro>
<xCpl>15 ANDAR</xCpl>
<xBairro>PINHEIROS</xBairro>
<cMun>3304557</cMun>
<xMun>Rio de Janeiro</xMun>
<UF>RJ</UF>
</entrega>
<det nItem="1">
<prod>
<cProd>00001</cProd>
<cEAN></cEAN>
<xProd>Agua Mineral</xProd>
<CFOP>5101</CFOP>
<uCom>dz</uCom>
<qCom>2</qCom>
<vUnCom>10.0</vUnCom>
<vProd>20.0</vProd>
<cEANTrib></cEANTrib>
<uTrib>und</uTrib>
<qTrib>24.0</qTrib>
<vUnTrib>3.00</vUnTrib>
</prod>
<imposto>
<ICMS>
<ICMS00>
<orig>0</orig>
<CST>00</CST>
<modBC>0</modBC>
<vBC>10000000.00</vBC>
<pICMS>18.00</pICMS>
<vICMS>1800000.00</vICMS>
</ICMS00>
</ICMS>
<PIS>
<PISAliq>
<CST>01</CST>
<vBC>10000000.00</vBC>
<pPIS>0.65</pPIS>
<vPIS>65000</vPIS>
</PISAliq>
</PIS>
<COFINS>
<COFINSAliq>
<CST>01</CST>
<vBC>10000000.00</vBC>
<pCOFINS>2.00</pCOFINS>
<vCOFINS>200000.00</vCOFINS>
</COFINSAliq>
</COFINS>
</imposto>
</det>
<det nItem="2">
<prod>
<cProd>00002</cProd>
<cEAN></cEAN>
<xProd>Agua Mineral</xProd>
<CFOP>5101</CFOP>
<uCom>pack</uCom>
<qCom>5000000</qCom>
<vUnCom>2.0</vUnCom>
<vProd>10000000.0</vProd>
<cEANTrib></cEANTrib>
<uTrib>und</uTrib>
<qTrib>3000000.0</qTrib>
<vUnTrib>0.3333</vUnTrib>
</prod>
<imposto>
<ICMS>
<ICMS00>
<orig>0</orig>
<CST>00</CST>
<modBC>0</modBC>
<vBC>10000000.00</vBC>
<pICMS>18.00</pICMS>
<vICMS>1800000.00</vICMS>
</ICMS00>
</ICMS>
<PIS>
<PISAliq>
<CST>01</CST>
<vBC>10000000.00</vBC>
<pPIS>0.65</pPIS>
<vPIS>65000</vPIS>
</PISAliq>
</PIS>
<COFINS>
<COFINSAliq>
<CST>01</CST>
<vBC>10000000.00</vBC>
<pCOFINS>2.00</pCOFINS>
<vCOFINS>200000.00</vCOFINS>
</COFINSAliq>
</COFINS>
</imposto>
</det>
<total>
<ICMSTot>
<vBC>20000000.00</vBC>
<vICMS>18.00</vICMS>
<vBCST>0</vBCST>
<vST>0</vST>
<vProd>20000000.00</vProd>
<vFrete>0</vFrete>
<vSeg>0</vSeg>
<vDesc>0</vDesc>
<vII>0</vII>
<vIPI>0</vIPI>
<vPIS>130000.00</vPIS>
<vCOFINS>400000.00</vCOFINS>
<vOutro>0</vOutro>
<vNF>20000000.00</vNF>
</ICMSTot>
</total>
<transp>
<modFrete>0</modFrete>
<transporta>
<CNPJ>123123123000112</CNPJ>
<xNome>WS Cargas S/A</xNome>
<IE>171999999119</IE>
<xEnder>Rua Central 100 - Fundos - Distrito Industrial</xEnder>
<cMun>3304557</cMun>
<xMun>Rio de Janeiro</xMun>
<UF>RJ</UF>
</transporta>
<veicTransp>
<placa>BXI1717</placa>
<UF>SP</UF>
<RNTC>123456789</RNTC>
</veicTransp>
<reboque>
<placa>BXI1818</placa>
<UF>SP</UF>
<RNTC>123456789</RNTC>
</reboque>
<vol>
<qVol>10000</qVol>
<esp>CAIXA</esp>
<marca>LINDOYA</marca>
<nVol>500</nVol>
<pesoL>1000000000.000</pesoL>
<pesoB>1200000000.000</pesoB>
<lacres>
<nLacre>XYZ10231486</nLacre>
</lacres>
</vol>
</transp>
<infAdic>
<infAdFisco>Nota Fiscal de exemplo PyNFe</infAdFisco>
<infCpl></infCpl>
</infAdic>
</infNFe>
<BLANKLINE>
Exportacao completa
-------------------
>>> xml = serializador.exportar(modelo=55)
- 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.