17 changed files with 410 additions and 34 deletions
-
26pytrustnfe/ChaveNFe.py
-
62pytrustnfe/nfe/__init__.py
-
9pytrustnfe/nfe/comunicacao.py
-
183pytrustnfe/nfe/templates/NfeAutorizacao.xml
-
8pytrustnfe/nfe/templates/NfeConsultaCadastro.xml
-
8pytrustnfe/nfe/templates/NfeConsultaDest.xml
-
6pytrustnfe/nfe/templates/NfeConsultaProtocolo.xml
-
6pytrustnfe/nfe/templates/NfeDownloadNF.xml
-
15pytrustnfe/nfe/templates/NfeInutilizacao.xml
-
5pytrustnfe/nfe/templates/NfeRetAutorizacao.xml
-
6pytrustnfe/nfe/templates/NfeStatusServico.xml
-
20pytrustnfe/nfe/templates/RecepcaoEventoCancelamento.xml
-
21pytrustnfe/nfe/templates/RecepcaoEventoCarta.xml
-
31pytrustnfe/nfe/templates/RecepcaoEventoEPEC.xml
-
18pytrustnfe/nfe/templates/RecepcaoEventoManifesto.xml
-
6pytrustnfe/utils.py
-
0pytrustnfe/xml/consultar_cadastro.xml
@ -1,26 +0,0 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# © 2016 Danimar Ribeiro, Trustcode |
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
|||
|
|||
|
|||
class ChaveNFe(object): |
|||
|
|||
def __init__(self, **kwargs): |
|||
self.cnpj = kwargs.pop('cnpj', '') |
|||
self.estado = kwargs.pop('estado', '') |
|||
self.emissao = kwargs.pop('emissao', '') |
|||
self.modelo = kwargs.pop('modelo', '') |
|||
self.serie = kwargs.pop('serie', '') |
|||
self.numero = kwargs.pop('numero', '') |
|||
self.tipo = kwargs.pop('tipo', '') |
|||
self.codigo = kwargs.pop('codigo', '') |
|||
|
|||
def validar(self): |
|||
assert self.cnpj != '', 'CNPJ necessário para criar chave NF-e' |
|||
assert self.estado != '', 'Estado necessário para criar chave NF-e' |
|||
assert self.emissao != '', 'Emissão necessário para criar chave NF-e' |
|||
assert self.modelo != '', 'Modelo necessário para criar chave NF-e' |
|||
assert self.serie != '', 'Série necessária para criar chave NF-e' |
|||
assert self.numero != '', 'Número necessário para criar chave NF-e' |
|||
assert self.tipo != '', 'Tipo necessário para criar chave NF-e' |
|||
assert self.codigo != '', 'Código necessário para criar chave NF-e' |
|||
@ -0,0 +1,183 @@ |
|||
<enviNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="3.10"> |
|||
<idLote>{{ idLote }}</idLote> |
|||
<indSinc>{{ indSinc }}</indSinc> |
|||
{% for NFe in NFes %} |
|||
<NFe xmlns="http://www.portalfiscal.inf.br/nfe"> |
|||
<infNFe versao="3.10" Id="{{ NFe.infNFe.Id }}"> |
|||
<ide> |
|||
{% with ide = NFe.infNFe.ide %} |
|||
<cUF>{{ ide.cUF }}</cUF> |
|||
<cNF>{{ ide.cNF }}</cNF> |
|||
<natOp>{{ ide.natOp }}</natOp> |
|||
<indPag>{{ ide.indPag }}</indPag> |
|||
<mod>{{ ide.mod }}</mod> |
|||
<serie>{{ ide.serie }}</serie> |
|||
<nNF>{{ ide.nNF }}</nNF> |
|||
<dhEmi>{{ ide.dhEmi }}</dhEmi> |
|||
<dhSaiEnt>{{ ide.dhSaiEnt }}</dhSaiEnt> |
|||
<tpNF>{{ ide.tpNF }}</tpNF> |
|||
<idDest>{{ ide.idDest }}</idDest> |
|||
<cMunFG>{{ ide.cMunFG }}</cMunFG> |
|||
<tpImp>{{ ide.tpImp }}</tpImp> |
|||
<tpEmis>{{ ide.tpEmis }}</tpEmis> |
|||
<cDV>{{ ide.cDV }}</cDV> |
|||
<tpAmb>{{ ide.tpAmb }}</tpAmb> |
|||
<finNFe>{{ ide.finNFe }}</finNFe> |
|||
<indFinal>{{ ide.indFinal }}</indFinal> |
|||
<indPres>{{ ide.indPres }}</indPres> |
|||
<procEmi>{{ ide.procEmi }}</procEmi> |
|||
<verProc>Odoo Brasil 9.0</verProc> |
|||
{% endwith %} |
|||
</ide> |
|||
<emit> |
|||
{% with emit = NFe.infNFe.emit %} |
|||
{% if emit.tipo == 'person' -%} |
|||
<CPF>{{ emit.cnpj_cpf }}</CPF> |
|||
{% endif %} |
|||
{% if emit.tipo == 'company' -%} |
|||
<CNPJ>{{ emit.cnpj_cpf }}</CNPJ> |
|||
{% endif %} |
|||
<xNome>{{ emit.xNome }}</xNome> |
|||
<xFant>{{ emit.xFant }}</xFant> |
|||
<enderEmit> |
|||
<xLgr>{{ emit.enderEmit.xLgr }}</xLgr> |
|||
<nro>{{ emit.enderEmit.nro }}</nro> |
|||
<xBairro>{{ emit.enderEmit.xBairro }}</xBairro> |
|||
<cMun>{{ emit.enderEmit.cMun }}</cMun> |
|||
<xMun>{{ emit.enderEmit.xMun }}</xMun> |
|||
<UF>{{ emit.enderEmit.UF }}</UF> |
|||
<CEP>{{ emit.enderEmit.CEP }}</CEP> |
|||
<cPais>{{ emit.enderEmit.cPais }}</cPais> |
|||
<xPais>{{ emit.enderEmit.xPais }}</xPais> |
|||
<fone>{{ emit.enderEmit.fone }}</fone> |
|||
</enderEmit> |
|||
<IE>{{ emit.IE }}</IE> |
|||
<CRT>{{ emit.CRT }}</CRT> |
|||
{% endwith %} |
|||
</emit> |
|||
<dest> |
|||
{% with dest = NFe.infNFe.dest %} |
|||
{% if dest.tipo == 'person' -%} |
|||
<CPF>{{ dest.cnpj_cpf }}</CPF> |
|||
{% endif %} |
|||
{% if dest.tipo == 'company' -%} |
|||
<CNPJ>{{ dest.cnpj_cpf }}</CNPJ> |
|||
{% endif %} |
|||
<xNome>{{ dest.xNome }}</xNome> |
|||
<enderDest> |
|||
<xLgr>{{ dest.enderDest.xLgr }}</xLgr> |
|||
<nro>{{ dest.enderDest.nro }}</nro> |
|||
<xBairro>{{ dest.enderDest.xBairro }}</xBairro> |
|||
<cMun>{{ dest.enderDest.cMun }}</cMun> |
|||
<xMun>{{ dest.enderDest.xMun }}</xMun> |
|||
<UF>{{ dest.enderDest.UF }}</UF> |
|||
<CEP>{{ dest.enderDest.CEP }}</CEP> |
|||
<cPais>{{ dest.enderDest.cPais }}</cPais> |
|||
<xPais>{{ dest.enderDest.xPais }}</xPais> |
|||
<fone>{{ dest.enderDest.fone }}</fone> |
|||
</enderDest> |
|||
<indIEDest>{{ dest.indIEDest }}</indIEDest> |
|||
{% if dest.IE != '' -%}<IE>{{ dest.IE }}</IE>{% endif %} |
|||
{% endwith %} |
|||
</dest> |
|||
{% for det in NFe.infNFe.detalhes %} |
|||
<det nItem="1"> |
|||
<prod> |
|||
{% with prod = det.prod %} |
|||
<cProd>{{ prod.cProd }}</cProd> |
|||
<cEAN>{{ prod.cEAN }}</cEAN> |
|||
<xProd>{{ prod.xProd }}</xProd> |
|||
<NCM>{{ prod.NCM }}</NCM> |
|||
<CFOP>{{ prod.CFOP }}</CFOP> |
|||
<uCom>{{ prod.uCom }}</uCom> |
|||
<qCom>{{ prod.qCom }}</qCom> |
|||
<vUnCom>{{ prod.vUnCom }}</vUnCom> |
|||
<vProd>{{ prod.vProd }}</vProd> |
|||
<cEANTrib>{{ prod.cEANTrib }}</cEANTrib> |
|||
<uTrib>{{ prod.uTrib }}</uTrib> |
|||
<qTrib>{{ prod.qTrib }}</qTrib> |
|||
<vUnTrib>{{ prod.vUnTrib }}</vUnTrib> |
|||
<indTot>{{ prod.indTot }}</indTot> |
|||
{% endwith %} |
|||
</prod> |
|||
<imposto> |
|||
{% with imposto = det.imposto %} |
|||
<vTotTrib>{{ imposto.vTotTrib }}</vTotTrib> |
|||
<ICMS> |
|||
<ICMS00> |
|||
<orig>{{ imposto.ICMS.ICMS00.orig }}</orig> |
|||
<CST>{{ imposto.ICMS.ICMS00.CST }}</CST> |
|||
<modBC>{{ imposto.ICMS.ICMS00.modBC }}</modBC> |
|||
<vBC>{{ imposto.ICMS.ICMS00.vBC }}</vBC> |
|||
<pICMS>{{ imposto.ICMS.ICMS00.pICMS }}</pICMS> |
|||
<vICMS>{{ imposto.ICMS.ICMS00.vICMS }}</vICMS> |
|||
</ICMS00> |
|||
</ICMS> |
|||
<IPI> |
|||
<cEnq>{{ imposto.IPI.cEnq }}</cEnq> |
|||
<IPITrib> |
|||
<CST>{{ imposto.IPI.IPITrib.CST }}</CST> |
|||
<vBC>{{ imposto.IPI.IPITrib.vBC }}</vBC> |
|||
<pIPI>{{ imposto.IPI.IPITrib.pIPI }}</pIPI> |
|||
<vIPI>{{ imposto.IPI.IPITrib.vIPI }}</vIPI> |
|||
</IPITrib> |
|||
</IPI> |
|||
<PIS> |
|||
<PISAliq> |
|||
<CST>{{ imposto.PIS.PISAliq.CST }}</CST> |
|||
<vBC>{{ imposto.PIS.PISAliq.vBC }}</vBC> |
|||
<pPIS>{{ imposto.PIS.PISAliq.pPIS }}</pPIS> |
|||
<vPIS>{{ imposto.PIS.PISAliq.vPIS }}</vPIS> |
|||
</PISAliq> |
|||
</PIS> |
|||
<COFINS> |
|||
<COFINSAliq> |
|||
<CST>{{ imposto.COFINS.COFINSAliq.CST }}</CST> |
|||
<vBC>{{ imposto.COFINS.COFINSAliq.vBC }}</vBC> |
|||
<pCOFINS>{{ imposto.COFINS.COFINSAliq.pCOFINS }}</pCOFINS> |
|||
<vCOFINS>{{ imposto.COFINS.COFINSAliq.vCOFINS }}</vCOFINS> |
|||
</COFINSAliq> |
|||
</COFINS> |
|||
{% endwith %} |
|||
</imposto> |
|||
</det> |
|||
{% endfor %} |
|||
<total> |
|||
{% with total = NFe.infNFe.total %} |
|||
<ICMSTot> |
|||
<vBC>{{ total.vBC }}</vBC> |
|||
<vICMS>{{ total.vICMS }}</vICMS> |
|||
<vICMSDeson>{{ total.vICMSDeson }}</vICMSDeson> |
|||
<vBCST>{{ total.vBCST }}</vBCST> |
|||
<vST>{{ total.vST }}</vST> |
|||
<vProd>{{ total.vProd }}</vProd> |
|||
<vFrete>{{ total.vFrete }}</vFrete> |
|||
<vSeg>{{ total.vSeg }}</vSeg> |
|||
<vDesc>{{ total.vDesc }}</vDesc> |
|||
<vII>{{ total.vII }}</vII> |
|||
<vIPI>{{ total.vIPI }}</vIPI> |
|||
<vPIS>{{ total.vPIS }}</vPIS> |
|||
<vCOFINS>{{ total.vCOFINS }}</vCOFINS> |
|||
<vOutro>{{ total.vOutro }}</vOutro> |
|||
<vNF>{{ total.vNF }}</vNF> |
|||
<vTotTrib>{{ total.vTotTrib }}</vTotTrib> |
|||
</ICMSTot> |
|||
{% endwith %} |
|||
</total> |
|||
<transp> |
|||
<modFrete>{{ NFe.infNFe.transp.modFrete }}</modFrete> |
|||
</transp> |
|||
<cobr> |
|||
<dup> |
|||
<nDup>339/1</nDup> |
|||
<dVenc>2016-06-02</dVenc> |
|||
<vDup>8611.76</vDup> |
|||
</dup> |
|||
</cobr> |
|||
<infAdic> |
|||
<infCpl>{{ NFe.infNFe.infAdic.infCpl }}</infCpl> |
|||
</infAdic> |
|||
</infNFe> |
|||
</NFe> |
|||
{% endfor %} |
|||
</enviNFe> |
|||
@ -0,0 +1,8 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<ConsCad xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00"> |
|||
<infCons> |
|||
<xServ>CONS-CAD</xServ> |
|||
<UF>{{ obj.estado }}</UF> |
|||
<CNPJ>{{ obj.cnpj }}</CNPJ> |
|||
</infCons> |
|||
</ConsCad> |
|||
@ -0,0 +1,8 @@ |
|||
<consNFeDest xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.01"> |
|||
<tpAmb>{{ obj.ambiente }}</tpAmb> |
|||
<xServ>CONSULTAR NFE DEST</xServ> |
|||
<CNPJ>{{ obj.cnpj }}</CNPJ> |
|||
<indNFe>{{ obj.indicador_nfe }}</indNFe> |
|||
<indEmi>{{ obj.indicador_emissor }}</indEmi> |
|||
<ultNSU>{{ obj.ultimo_nsu }}</ultNSU> |
|||
</consNFeDest> |
|||
@ -0,0 +1,6 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<consSitNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.01"> |
|||
<tpAmb>{{ obj.ambiente }}</tpAmb> |
|||
<xServ>CONSULTAR</xServ> |
|||
<chNFe>{{ obj.chave_nfe }}</chNFe> |
|||
</consSitNFe> |
|||
@ -0,0 +1,6 @@ |
|||
<downloadNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.00"> |
|||
<tpAmb>{{ obj.ambiente }}</tpAmb> |
|||
<xServ>DOWNLOAD NFE</xServ> |
|||
<CNPJ>{{ obj.cnpj }}</CNPJ> |
|||
<chNFe>{{ obj.chave_nfe }}</chNFe> |
|||
</downloadNFe> |
|||
@ -0,0 +1,15 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<inutNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00"> |
|||
<infInut Id="{{ obj.id }}"> |
|||
<tpAmb>{{ obj.ambiente }}</tpAmb> |
|||
<xServ>INUTILIZAR</xServ> |
|||
<cUF>{{ obj.estado }}</cUF> |
|||
<ano>{{ obj.ano }}</ano> |
|||
<CNPJ>{{ obj.cnpj }}</CNPJ> |
|||
<mod>{{ obj.modelo }}</mod> |
|||
<serie>{{ obj.serie }}</serie> |
|||
<nNFIni>{{ obj.numero_inicio}}</nNFIni> |
|||
<nNFFin>{{ obj.numero_fim }}</nNFFin> |
|||
<xJust>{{ obj.justificativa }}</xJust> |
|||
</infInut> |
|||
<inutNFe> |
|||
@ -0,0 +1,5 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<consReciNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="3.10"> |
|||
<tpAmb>{{ obj.ambiente }}</tpAmb> |
|||
<nRec>{{ obj.numero_recibo }}</nRec> |
|||
</consReciNFe> |
|||
@ -0,0 +1,6 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<consStatServ xmlns="http://www.portalfiscal.inf.br/nfe" versao="3.10"> |
|||
<tpAmb>{{ obj.ambiente }}</tpAmb> |
|||
<cUF>{{ obj.estado }}</cUF> |
|||
<xServ>STATUS</xServ> |
|||
</consStatServ> |
|||
@ -0,0 +1,20 @@ |
|||
<envEvento xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.00"> |
|||
<idLote>{{ obj.lote }}</idLote> |
|||
<evento xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.00"> |
|||
<infEvento Id="{{ obj.id }}"> |
|||
<cOrgao>{{ obj.orgao }}</cOrgao> |
|||
<tpAmb>{{ obj.ambiente }}</tpAmb> |
|||
<CNPJ>{{ obj.cnpj }}</CNPJ> |
|||
<chNFe>{{ obj.chave_nfe }}</chNFe> |
|||
<dhEvento>{{ obj.data_hora_evento }}</dhEvento> |
|||
<tpEvento>110111</tpEvento> |
|||
<nSeqEvento>{{ obj.numero_evento }}</nSeqEvento> |
|||
<verEvento>1.00</verEvento> |
|||
<detEvento versao="1.00"> |
|||
<descEvento>Cancelamento</descEvento> |
|||
<nProt>{{ obj.protocolo }}</nProt> |
|||
<xJust>{{obj.justificativa }}</xJust> |
|||
</detEvento> |
|||
</infEvento> |
|||
</evento> |
|||
</envEvento> |
|||
@ -0,0 +1,21 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<envEvento xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.00"> |
|||
<idLote>00000001319901</idLote> |
|||
<evento xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.00"> |
|||
<infEvento Id="ID1101103511051014278500019055111000000013199881790001"> |
|||
<cOrgao>{{ obj.orgao }}</cOrgao> |
|||
<tpAmb>{{ obj.ambiente }}</tpAmb> |
|||
<CNPJ>{{ obj.cnpj }}</CNPJ> |
|||
<chNFe>{{ obj.chave_nfe }}</chNFe> |
|||
<dhEvento>{{} obj.data_hora_evento }</dhEvento> |
|||
<tpEvento>110110</tpEvento> |
|||
<nSeqEvento>{{ obj.sequencia }}</nSeqEvento> |
|||
<verEvento>1.00</verEvento> |
|||
<detEvento versao="1.00"> |
|||
<descEvento>Carta de Correção</descEvento> |
|||
<xCorrecao>{{ obj.correcao }}</xCorrecao> |
|||
<xCondUso>A Carta de Correção é disciplinada pelo § 1º-A do art. 7º do Convênio S/N, de 15 de dezembro de 1970 e pode ser utilizada para regularização de erro ocorrido na emissão de documento fiscal, desde que o erro não esteja relacionado com: I - as variáveis que determinam o valor do imposto tais como: base de cálculo, alíquota, diferença de preço, quantidade, valor da operação ou da prestação; II - a correção de dados cadastrais que implique mudança do remetente ou do destinatário; III - a data de emissão ou de saída.</xCondUso> |
|||
</detEvento> |
|||
</infEvento> |
|||
</evento> |
|||
</envEvento> |
|||
@ -0,0 +1,31 @@ |
|||
<envEvento xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.00"> |
|||
<idLote>00106151340701</idLote> |
|||
<evento xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.00"> |
|||
<infEvento Id="ID1101403514081014278500019055001001061513407959995201"> |
|||
<cOrgao>91</cOrgao> |
|||
<tpAmb>2</tpAmb> |
|||
<CNPJ>10142785000190</CNPJ> |
|||
<chNFe>35140810142785000190550010010615134079599952</chNFe> |
|||
<dhEvento>2014-08-07T04:52:51-03:00</dhEvento> |
|||
<tpEvento>110140</tpEvento> |
|||
<nSeqEvento>1</nSeqEvento> |
|||
<verEvento>1.00</verEvento> |
|||
<detEvento versao="1.00"> |
|||
<descEvento>EPEC</descEvento> |
|||
<cOrgaoAutor>35</cOrgaoAutor> |
|||
<tpAutor>1</tpAutor> |
|||
<verAplic>1.26</verAplic> |
|||
<dhEmi>2014-08-07T00:00:00-03:00</dhEmi> |
|||
<tpNF>1</tpNF> |
|||
<IE>495171423115</IE> |
|||
<dest> |
|||
<UF>SP</UF> |
|||
<CPF>00000000191</CPF> |
|||
<vNF>86.00</vNF> |
|||
<vICMS>6.02</vICMS> |
|||
<vST>0</vST> |
|||
</dest> |
|||
</detEvento> |
|||
</infEvento> |
|||
</evento> |
|||
</envEvento> |
|||
@ -0,0 +1,18 @@ |
|||
<envEvento xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.00"> |
|||
<idLote>{{ obj.lote }}</idLote> |
|||
<evento xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.00"> |
|||
<infEvento Id="{{ obj.id }}"> |
|||
<cOrgao>{{ obj.orgao }}</cOrgao> |
|||
<tpAmb>{{ obj.ambiente }}</tpAmb> |
|||
<CNPJ>{{ obj.cnpj }}</CNPJ> |
|||
<chNFe>{{ obj.chave_nfe }}</chNFe> |
|||
<dhEvento>{{ obj.data_hora_evento }}</dhEvento> |
|||
<tpEvento>210200</tpEvento> |
|||
<nSeqEvento>{{ obj.sequencia }}</nSeqEvento> |
|||
<verEvento>1.00</verEvento> |
|||
<detEvento versao="1.00"> |
|||
<descEvento>Confirmacao da Operacao</descEvento> |
|||
</detEvento> |
|||
</infEvento> |
|||
</evento> |
|||
</envEvento> |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue