Browse Source

Merge branch 'master' of github.com:marinho/PyNFe

tags/0.1
Marinho Brandao 15 years ago
parent
commit
97bcf38983
  1. 4
      pynfe/data/XSDs/README
  2. 3
      pynfe/processamento/assinatura.py
  3. 77
      pynfe/processamento/validacao.py
  4. 15
      run_tests.py
  5. 196
      tests/01-basico.txt
  6. 34
      tests/02-modelo-07-validacao.txt
  7. 223
      tests/xml/NFe.xml
  8. 1
      tests/xml/NFe_assinada.xml
  9. 223
      tests/xml/NFe_falhaSchema.xml

4
pynfe/data/XSDs/README

@ -58,10 +58,10 @@ Descrição unitária de cada schema
- Pedido de Cancelamento de NF-e processado
- inclui: leiauteCancNFe_v1.07
- procInutNFe_v1.07:
- procInutNFe_v1.07
- Pedido de inutilzação de númeração de NF-e processado
- inclui: leiauteInutNFe_v1.07
- procNFe_v1.10
- NF-e processada
- incluid: leiauteNFe_v1.10
- incluid: leiauteNFe_v1.10

3
pynfe/processamento/assinatura.py

@ -243,5 +243,4 @@ class AssinaturaA1(Assinatura):
doc_xml.freeDoc()
# E, por fim, desativa todas as funções ativadas anteriormente
self._desativar_funcoes_criptograficas()
self._desativar_funcoes_criptograficas()

77
pynfe/processamento/validacao.py

@ -1,3 +1,76 @@
class Validacao(object):
pass
#-*- coding:utf-8 -*-
from os import path
try:
from lxml import etree
except ImportError:
try:
# Python 2.5 - cElementTree
import xml.etree.cElementTree as etree
except ImportError:
try:
# Python 2.5 - ElementTree
import xml.etree.ElementTree as etree
except ImportError:
try:
# Instalacao normal do cElementTree
import cElementTree as etree
except ImportError:
try:
# Instalacao normal do ElementTree
import elementtree.ElementTree as etree
except ImportError:
raise Exception('Falhou ao importar lxml/ElementTree')
XSD_FOLDER = "pynfe/data/XSDs/"
XSD_NFE="nfe_v1.10.xsd"
XSD_NFE_PROCESSADA="procNFe_v1.10.xsd"
XSD_PD_CANCELAR_NFE="procCancNFe_v1.07.xsd"
XSD_PD_INUTILIZAR_NFE="procInutNFe_v1.07.xsd"
def get_xsd(xsd_file):
"""Retorna o caminho absoluto para um arquivo xsd.
Argumentos:
xsd_file - nome do arquivo xsd (utilizar nomes definidos em validacao.py)
"""
return path.abspath(path.join(XSD_FOLDER, xsd_file))
class Validacao(object):
'''Valida documentos xml a partir do xsd informado.'''
def __init__(self):
self.clear_cache()
def clear_cache(self):
self.MEM_CACHE = {}
def validar_xml(self, xml_path, xsd_file, use_assert=False):
'''Valida um arquivo xml.
Argumentos:
xml_path - caminho para arquivo xml
xsd_file - caminho para o arquivo xsd
use_assert - levantar exceção caso documento não valide?
'''
return self.validar_etree(etree.parse(xml_path), xsd_file, use_assert)
def validar_etree(self, xml_doc, xsd_file, use_assert=False):
'''Valida um documento lxml diretamente.
Argumentos:
xml_doc - documento etree
xsd_file - caminho para o arquivo xsd
use_assert - levantar exceção caso documento não valide?
'''
xsd_filepath = get_xsd(xsd_file)
try:
# checa se o schema ja existe no cache
xsd_schema = self.MEM_CACHE[xsd_filepath]
except:
# lê xsd e atualiza cache
xsd_doc = etree.parse(xsd_filepath)
xsd_schema = etree.XMLSchema(xsd_doc)
self.MEM_CACHE[xsd_file] = xsd_schema
return use_assert and xsd_schema.assertValid(xml_doc) \
or xsd_schema.validate(xml_doc)

15
run_tests.py

@ -1,11 +1,24 @@
import sys, doctest, os, glob
from getopt import gnu_getopt as getopt
CUR_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, CUR_DIR)
if __name__ == '__main__':
run_level = None
optlist, args = getopt(sys.argv[1:], "l:", ['--level='])
for opt, arg in optlist:
if opt in ("-l", "--list"):
run_level = arg.zfill(2)
# Test each package
test_files = glob.glob('%s/*.txt' % os.path.join(CUR_DIR, 'tests'))
if run_level is None:
search_path = '%s/*.txt' % os.path.join(CUR_DIR, 'tests')
else: search_path = '%s/%s-*.txt' % \
(os.path.join(CUR_DIR, 'tests'), run_level)
test_files = glob.glob(search_path)
test_files = map(lambda i: i[len(CUR_DIR)+1:], test_files)
# Run the tests

196
tests/01-basico.txt

@ -1,145 +1,145 @@
TESTES BASICOS
==============
>>> try:
... set
... set
... except:
... from sets import Set as set
... from sets import Set as set
<type 'set'>
A biblioteca deve fornecer uma colecao de utilitarios para consumir
o webservice da NF-e.
Componentes
-----------
A separacao entre os componentes da biblioteca deve seguir o seguinte
modelo:
---------------------------------------------------------------------
| MODELO DE ENTIDADES |
| MODELO DE ENTIDADES |
---------------------------------------------------------------------
| |
| ------------ -------------- |
| | Entidade |-------<>| FonteDados | |
| ------------ -------------- |
| A |
| | |
| ----especializacao-------------------------- |
| | | | | |
| ------------ ----------- ----------- ------------------ |
| | Emitente | | Produto | | Cliente | | Transportadora | |
| ------------ ----------- ----------- ------------------ |
| *| *| *| *| |
| ------------------------------associacao---- |
| | |
| V* |
| --------------- ---------------- |
| | Nota Fiscal |------<>| Lote de NF-e | |
| --------------- 1 * ---------------- |
| |
| |
| ------------ -------------- |
| | Entidade |-------<>| FonteDados | |
| ------------ -------------- |
| A |
| | |
| ----especializacao-------------------------- |
| | | | | |
| ------------ ----------- ----------- ------------------ |
| | Emitente | | Produto | | Cliente | | Transportadora | |
| ------------ ----------- ----------- ------------------ |
| *| *| *| *| |
| ------------------------------associacao---- |
| | |
| V* |
| --------------- ---------------- |
| | Nota Fiscal |------<>| Lote de NF-e | |
| --------------- 1 * ---------------- |
| |
---------------------------------------------------------------------
----------------------------------------------------------------------------
| PROCESSAMENTO |
| PROCESSAMENTO |
----------------------------------------------------------------------------
| |
| ------------------ -------------- -------------------------------- |
| | Serializacao | | DANFE | | Comunicacao | |
| ------------------ -------------- -------------------------------- |
| | exportar() | | imprimir() | | transmitir() | |
| | importar() | -------------- | cancelar() | |
| ------------------ | situacao_nfe() | |
| | status_servico() | |
| ---------------------- | consultar_cadastro() | |
| | Validacao | | inutilizar_faixa_numeracao() | |
| ---------------------- -------------------------------- |
| | validar_arquivo() | |
| | validar_xml() | |
| | validar_etree() | ---------------------- |
| | validar_objetos() | | Assinatura | |
| ---------------------- ---------------------- |
| | assinar_arquivo() | |
| | assinar_xml() | |
| | assinar_etree() | |
| | assinar_objetos() | |
| ---------------------- |
| |
| ------------------ -------------- -------------------------------- |
| | Serializacao | | DANFE | | Comunicacao | |
| ------------------ -------------- -------------------------------- |
| | exportar() | | imprimir() | | transmitir() | |
| | importar() | -------------- | cancelar() | |
| ------------------ | situacao_nfe() | |
| | status_servico() | |
| ---------------------- | consultar_cadastro() | |
| | Validacao | | inutilizar_faixa_numeracao() | |
| ---------------------- -------------------------------- |
| | validar_arquivo() | |
| | validar_xml() | |
| | validar_etree() | ---------------------- |
| | validar_objetos() | | Assinatura | |
| ---------------------- ---------------------- |
| | assinar_arquivo() | |
| | assinar_xml() | |
| | assinar_etree() | |
| | assinar_objetos() | |
| ---------------------- |
----------------------------------------------------------------------------
Os pacotes da biblioteca sao:
- utils (contem todas as funcionalidades utilitarias dentro da
- utils (contem todas as funcionalidades utilitarias dentro da
biblioteca, incluindo flags e funcoes genericas)
>>> from pynfe import utils
>>> set([attr for attr in dir(utils) if not attr.startswith('__')]) >= set(['flags'])
True
- entidades (contem todas as entidades da biblioteca)
>>> from pynfe import entidades
>>> set([attr for attr in dir(entidades) if not attr.startswith('__')]) == set([
... 'Cliente', 'Emitente', 'LoteNotaFiscal', 'NotaFiscal', 'Produto',
... 'Transportadora', 'base', 'cliente', 'emitente', 'lotes', 'notafiscal',
... 'produto', 'transportadora', 'fonte_dados', '_fonte_dados','certificado',
... 'CertificadoA1'])
... 'Cliente', 'Emitente', 'LoteNotaFiscal', 'NotaFiscal', 'Produto',
... 'Transportadora', 'base', 'cliente', 'emitente', 'lotes', 'notafiscal',
... 'produto', 'transportadora', 'fonte_dados', '_fonte_dados','certificado',
... 'CertificadoA1'])
True
- processamento (contem todas as funcionalidades de processamento da
biblioteca
>>> from pynfe import processamento
>>> set([attr for attr in dir(processamento) if not attr.startswith('__')]) == set([
... 'AssinaturaA1', 'ComunicacaoSefaz', 'DANFE', 'SerializacaoXML', 'Validacao',
... 'assinatura', 'comunicacao', 'danfe', 'serializacao', 'validacao'])
... 'AssinaturaA1', 'ComunicacaoSefaz', 'DANFE', 'SerializacaoXML', 'Validacao',
... 'assinatura', 'comunicacao', 'danfe', 'serializacao', 'validacao'])
True
Ha ainda uma pasta dentro da pasta 'pynfe', chamada 'data', que deve
armazenar listas longas de municipios, CNAEs, situacoes tributarias,
XSD's, etc.
>>> import os
>>> DATA = os.path.join(os.curdir, 'pynfe', 'data')
>>> DATA
'./pynfe/data'
>>> os.path.isdir(DATA)
True
Geracao e importacao de XML
---------------------------
As objetos Python devem ser traduzidos para arquivos XML e o caminho
inverso, de introspecao, tambem deve ser feito, atraves de uma fabrica.
>>> from pynfe.processamento.serializacao import Serializacao
>>> bool(Serializacao.exportar)
True
>>> bool(Serializacao.importar)
True
A classe basica de Serializacao eh abstrata, ou seja, nao pode ser
instanciada diretamente.
>>> lista_de_nfs = []
>>> try:
... Serializacao(lista_de_nfs)
... Serializacao(lista_de_nfs)
... except Exception, e:
... print e.message
... print e.message
Esta classe nao pode ser instanciada diretamente!
Classe de serializacao especifica para XML, usando lxml
>>> from pynfe.processamento.serializacao import SerializacaoXML
Esse procedimento sera feito por padrao atraves da lxml, devido ao seu
desempenho, mas pode ser extendido para outros formatos, dependendo do
objetivo pretendido.
>>> try:
... from lxml import etree
... except ImportError:
@ -148,7 +148,7 @@ objetivo pretendido.
... import xml.etree.cElementTree as etree
... except ImportError:
... try:
... # Python 2.5
... # Python 2.5
... import xml.etree.ElementTree as etree
... except ImportError:
... try:
@ -160,45 +160,45 @@ objetivo pretendido.
... import elementtree.ElementTree as etree
... except ImportError:
... print("A importacao do lxml falhou")
Consumacao de WebService
------------------------
O webservice a ser consumido esta no padrao SOAP, que no Python sera
interpretado pela biblioteca SUDS.
>>> import suds
Para executar estes testes é preciso instalar a soaplib, para servir
WSDL via SOAP, num servidor falso (mock).
>>> import soaplib
Certificados Digitais
---------------------
A biblioteca deve suportar certificados digitais X.509 v.3 do tipo
A1. O tipo A3 é certificado por hardware e provavelmente bem mais
complexo de colocar em prática.
eCNPJ A1
A3 depende de configurar seu numero de serie. No Windows
usa-se a DLL CAPICOM. Ao que tudo indica, o OpenSSL nao suporta esse
tipo.
A transmissao utiliza SSL3.
No Windows o arquivo é usado como .pfx (pkcs12)
No Linux o arquivo deve ser convertido para .pem
Impressao do DANFE
------------------
Alem disso, deve gerar PDFs da DANFE, utilizando a engine Geraldo
Reports.
>>> import geraldo
>>> import PIL

34
tests/02-modelo-07-validacao.txt

@ -0,0 +1,34 @@
Validação
---------
A validação dos arquivos de nota fiscal são controladas pelo módulo validacao.
>>> from pynfe.processamento.validacao import *
A classe Validacao é utilizada para validar os tanto arquivos xml quanto documentos
etree. Não há problemas em utilizar list-comprehension com a mesma pois ela implementa
um cache simples.
>>> from lxml import etree
>>> validador = Validacao()
>>>
>>> nfe = 'tests/xml/NFe.xml'
>>> nfe_assin = 'tests/xml/NFe_assinada.xml'
>>> nfe_inval = 'tests/xml/NFe_falhaSchema.xml'
>>>
>>> try: validador.validar_xml(nfe, XSD_NFE, True)
... except Exception, e: print unicode(repr(e))
True
>>> try: validador.validar_xml(nfe_inval, XSD_NFE, False)
... except Exception, e: print unicode(repr(e))
False
>>> try: validador.validar_xml(nfe_assin, XSD_NFE_PROCESSADA, True)
... except Exception, e: print unicode(repr(e))
True
Note que o schema utilizado para validação contra o xml é definido por variáveis
globais presentes no módulo. São elas:
- XSD_NFE : valida nfe's não certificadas
- XSD_NFE_PROCESSADA : valida nfe's certificadas
- XSD_PD_CANCELAR_NFE : valida um pedido de cancelamento de nfe
- XSD_PD_INUTILIZAR_NFE : valida um pedido de inutilização de nfe

223
tests/xml/NFe.xml

@ -0,0 +1,223 @@
<?xml version="1.0" encoding="utf-8"?>
<NFe xmlns="http://www.portalfiscal.inf.br/nfe">
<infNFe Id="NFe35080599999090910270550010000000015180051273" versao="1.10">
<ide>
<cUF>35</cUF>
<cNF>518005127</cNF>
<natOp>Venda a vista</natOp>
<indPag>0</indPag>
<mod>55</mod>
<serie>1</serie>
<nNF>1</nNF>
<dEmi>2008-05-06</dEmi>
<dSaiEnt>2008-05-06</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>NF-eletronica.com</verProc>
</ide>
<emit>
<CNPJ>99999090910270</CNPJ>
<xNome>NF-e Associacao NF-e</xNome>
<xFant>NF-e</xFant>
<enderEmit>
<xLgr>Rua Central</xLgr>
<nro>100</nro>
<xCpl>Fundos</xCpl>
<xBairro>Distrito Industrial</xBairro>
<cMun>3502200</cMun>
<xMun>Angatuba</xMun>
<UF>SP</UF>
<CEP>17100171</CEP>
<cPais>1058</cPais>
<xPais>Brasil</xPais>
<fone>1733021717</fone>
</enderEmit>
<IE>123456789012</IE>
</emit>
<dest>
<CNPJ>00000000000191</CNPJ>
<xNome>DISTRIBUIDORA DE AGUAS MINERAIS</xNome>
<enderDest>
<xLgr>AV DAS FONTES</xLgr>
<nro>1777</nro>
<xCpl>10 ANDAR</xCpl>
<xBairro>PARQUE FONTES</xBairro>
<cMun>5030801</cMun>
<xMun>Sao Paulo</xMun>
<UF>SP</UF>
<CEP>13950000</CEP>
<cPais>1058</cPais>
<xPais>BRASIL</xPais>
<fone>1932011234</fone>
</enderDest>
<IE></IE>
</dest>
<retirada>
<CNPJ>99171171000194</CNPJ>
<xLgr>AV PAULISTA</xLgr>
<nro>12345</nro>
<xCpl>TERREO</xCpl>
<xBairro>CERQUEIRA CESAR</xBairro>
<cMun>3550308</cMun>
<xMun>SAO PAULO</xMun>
<UF>SP</UF>
</retirada>
<entrega>
<CNPJ>99299299000194</CNPJ>
<xLgr>AV FARIA LIMA</xLgr>
<nro>1500</nro>
<xCpl>15 ANDAR</xCpl>
<xBairro>PINHEIROS</xBairro>
<cMun>3550308</cMun>
<xMun>SAO PAULO</xMun>
<UF>SP</UF>
</entrega>
<det nItem="1">
<prod>
<cProd>00001</cProd>
<cEAN />
<xProd>Agua Mineral</xProd>
<CFOP>5101</CFOP>
<uCom>dz</uCom>
<qCom>1000000.0000</qCom>
<vUnCom>1</vUnCom>
<vProd>10000000.00</vProd>
<cEANTrib />
<uTrib>und</uTrib>
<qTrib>12000000.0000</qTrib>
<vUnTrib>1</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 />
<xProd>Agua Mineral</xProd>
<CFOP>5101</CFOP>
<uCom>pack</uCom>
<qCom>5000000.0000</qCom>
<vUnCom>2</vUnCom>
<vProd>10000000.00</vProd>
<cEANTrib />
<uTrib>und</uTrib>
<qTrib>3000000.0000</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>99171171000191</CNPJ>
<xNome>Distribuidora de Bebidas Fazenda de SP Ltda.</xNome>
<IE>171999999119</IE>
<xEnder>Rua Central 100 - Fundos - Distrito Industrial</xEnder>
<xMun>SAO PAULO</xMun>
<UF>SP</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 NF-eletronica.com</infAdFisco>
</infAdic>
</infNFe>
</NFe>

1
tests/xml/NFe_assinada.xml
File diff suppressed because it is too large
View File

223
tests/xml/NFe_falhaSchema.xml

@ -0,0 +1,223 @@
<?xml version="1.0" encoding="utf-8"?>
<NFe xmlns="http://www.portalfiscal.inf.br/nfe">
<infNFe Id="NFe35080599999090910270550010000000015180051273" versao="1.10">
<ide>
<cUF>35</cUF>
<cNF>518005127</cNF>
<natOp>Venda a vista</natOp>
<indPag>0</indPag>
<mod>55</mod>
<serie>1</serie>
<nNF>1</nNF>
<dEmi>2008-05-06</dEmi>
<dSaiEnt>2008-05-06</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>NF-eletronica.com 123456</verProc>
</ide>
<emit>
<CNPJ>99999090910270</CNPJ>
<xNome>NF-e Associacao NF-e</xNome>
<xFant>NF-e</xFant>
<enderEmit>
<xLgr>Rua Central</xLgr>
<nro>100</nro>
<xCpl>Fundos</xCpl>
<xBairro>Distrito Industrial</xBairro>
<cMun>3502200</cMun>
<xMun>Angatuba</xMun>
<UF>SP</UF>
<CEP>17100171</CEP>
<cPais>1058</cPais>
<xPais>Brasil</xPais>
<fone>1733021717</fone>
</enderEmit>
<IE>123456789012</IE>
</emit>
<dest>
<CNPJ>00000000000191</CNPJ>
<xNome>DISTRIBUIDORA DE AGUAS MINERAIS</xNome>
<enderDest>
<xLgr>AV DAS FONTES</xLgr>
<nro>1777</nro>
<xCpl>10 ANDAR</xCpl>
<xBairro>PARQUE FONTES</xBairro>
<cMun>5030801</cMun>
<xMun>Sao Paulo</xMun>
<UF>SP</UF>
<CEP>13950000</CEP>
<cPais>1058</cPais>
<xPais>BRASIL</xPais>
<fone>1932011234</fone>
</enderDest>
<IE></IE>
</dest>
<retirada>
<CNPJ>99171171000194</CNPJ>
<xLgr>AV PAULISTA</xLgr>
<nro>12345</nro>
<xCpl>TERREO</xCpl>
<xBairro>CERQUEIRA CESAR</xBairro>
<cMun>3550308</cMun>
<xMun>SAO PAULO</xMun>
<UF>SP</UF>
</retirada>
<entrega>
<CNPJ>99299299000194</CNPJ>
<xLgr>AV FARIA LIMA</xLgr>
<nro>1500</nro>
<xCpl>15 ANDAR</xCpl>
<xBairro>PINHEIROS</xBairro>
<cMun>3550308</cMun>
<xMun>SAO PAULO</xMun>
<UF>SP</UF>
</entrega>
<det nItem="1">
<prod>
<cProd>00001</cProd>
<cEAN />
<xProd>Agua Mineral</xProd>
<CFOP>5101</CFOP>
<uCom>dz</uCom>
<qCom>1000000.00</qCom>
<vUnCom>1</vUnCom>
<vProd>10000000.00</vProd>
<cEANTrib />
<uTrib>und</uTrib>
<qTrib>12000000.00</qTrib>
<vUnTrib>1</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 />
<xProd>Agua Mineral</xProd>
<CFOP>5101</CFOP>
<uCom>pack</uCom>
<qCom>5000000.0000</qCom>
<vUnCom>2</vUnCom>
<vProd>10000000.00</vProd>
<cEANTrib />
<uTrib>und</uTrib>
<qTrib>3000000.0000</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>99171171000191</CNPJ>
<xNome>Distribuidora de Bebidas Fazenda de SP Ltda.</xNome>
<IE>171999999119</IE>
<xEnder>Rua Central 100 - Fundos - Distrito Industrial</xEnder>
<xMun>SAO PAULO</xMun>
<UF>SP</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 NF-eletronica.com</infAdFisco>
</infAdic>
</infNFe>
</NFe>
Loading…
Cancel
Save