Browse Source

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

tags/0.1
Marinho Brandao 15 years ago
parent
commit
97bcf38983
  1. 2
      pynfe/data/XSDs/README
  2. 1
      pynfe/processamento/assinatura.py
  3. 75
      pynfe/processamento/validacao.py
  4. 15
      run_tests.py
  5. 106
      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

2
pynfe/data/XSDs/README

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

1
pynfe/processamento/assinatura.py

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

75
pynfe/processamento/validacao.py

@ -1,3 +1,76 @@
#-*- 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): class Validacao(object):
pass
'''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 import sys, doctest, os, glob
from getopt import gnu_getopt as getopt
CUR_DIR = os.path.dirname(os.path.abspath(__file__)) CUR_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, CUR_DIR) sys.path.insert(0, CUR_DIR)
if __name__ == '__main__': 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 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) test_files = map(lambda i: i[len(CUR_DIR)+1:], test_files)
# Run the tests # Run the tests

106
tests/01-basico.txt

@ -2,9 +2,9 @@ TESTES BASICOS
============== ==============
>>> try: >>> try:
... set
... set
... except: ... except:
... from sets import Set as set
... from sets import Set as set
<type 'set'> <type 'set'>
A biblioteca deve fornecer uma colecao de utilitarios para consumir A biblioteca deve fornecer uma colecao de utilitarios para consumir
@ -17,54 +17,54 @@ A separacao entre os componentes da biblioteca deve seguir o seguinte
modelo: 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: Os pacotes da biblioteca sao:
@ -80,10 +80,10 @@ Os pacotes da biblioteca sao:
>>> from pynfe import entidades >>> from pynfe import entidades
>>> set([attr for attr in dir(entidades) if not attr.startswith('__')]) == set([ >>> 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 True
- processamento (contem todas as funcionalidades de processamento da - processamento (contem todas as funcionalidades de processamento da
@ -91,8 +91,8 @@ Os pacotes da biblioteca sao:
>>> from pynfe import processamento >>> from pynfe import processamento
>>> set([attr for attr in dir(processamento) if not attr.startswith('__')]) == set([ >>> 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 True
Ha ainda uma pasta dentro da pasta 'pynfe', chamada 'data', que deve Ha ainda uma pasta dentro da pasta 'pynfe', chamada 'data', que deve
@ -127,9 +127,9 @@ instanciada diretamente.
>>> lista_de_nfs = [] >>> lista_de_nfs = []
>>> try: >>> try:
... Serializacao(lista_de_nfs)
... Serializacao(lista_de_nfs)
... except Exception, e: ... except Exception, e:
... print e.message
... print e.message
Esta classe nao pode ser instanciada diretamente! Esta classe nao pode ser instanciada diretamente!
Classe de serializacao especifica para XML, usando lxml Classe de serializacao especifica para XML, usando lxml
@ -148,7 +148,7 @@ objetivo pretendido.
... import xml.etree.cElementTree as etree ... import xml.etree.cElementTree as etree
... except ImportError: ... except ImportError:
... try: ... try:
... # Python 2.5
... # Python 2.5
... import xml.etree.ElementTree as etree ... import xml.etree.ElementTree as etree
... except ImportError: ... except ImportError:
... try: ... try:

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