diff --git a/pysped/__init__.py b/pysped/__init__.py
index 1bfe7e92..e743912a 100644
--- a/pysped/__init__.py
+++ b/pysped/__init__.py
@@ -39,6 +39,16 @@
#
#
+import sys
+import locale
+
+if sys.version_info.major == 2:
+ locale.setlocale(locale.LC_ALL, b'pt_BR.UTF-8')
+ locale.setlocale(locale.LC_COLLATE, b'pt_BR.UTF-8')
+else:
+ locale.setlocale(locale.LC_ALL, 'pt_BR.UTF-8')
+ locale.setlocale(locale.LC_COLLATE, 'pt_BR.UTF-8')
+
from pysped.cte.leiaute.canccte_104 import CancCTe as CancCTe_104
from pysped.cte.leiaute.canccte_104 import ProcCancCTe as ProcCancCTe_104
from pysped.cte.leiaute.canccte_104 import RetCancCTe as RetCancCTe_104
@@ -101,74 +111,5 @@
from pysped.nfe.leiaute.nfe_110 import Vol as Vol_110
from pysped.nfe.leiaute.soap_100 import SOAPEnvio as SOAPEnvio_110
from pysped.nfe.leiaute.soap_100 import SOAPRetorno as SOAPRetorno_110
-from pysped.nfe.processador_nfe import ProcessadorNFe, DANFE, Certificado
-
-
-# Pyflakes
-
-Adi_110
-Arma_110
-CTe_104
-CancCTe_104
-CancNFe_107
-Certificado
-ConsCad_101
-ConsReciCTe_104
-ConsReciNFe_110
-ConsSitCTe_104
-ConsSitNFe_107
-ConsStatServCTe_104
-ConsStatServ_107
-DANFE
-DI_110
-Det_110
-Dup_104
-Dup_110
-ESQUEMA_ATUAL
-EnviCTe_104
-EnviNFe_110
-InfNF_104
-InfNFe_104
-InfOutros_104
-InfQ_104
-InutCTe_104
-InutNFe_107
-Lacres_110
-Med_110
-NFRef_110
-NFe_110
-ObsCont_104
-ObsCont_110
-ObsFisco_104
-ObsFisco_110
-Pass_104
-ProcCTe_104
-ProcCancCTe_104
-ProcCancNFe_107
-ProcInutCTe_104
-ProcInutNFe_107
-ProcNFe_110
-ProcRef_110
-ProcessadorNFe
-ProtCTe_104
-ProtNFe_110
-Reboque_110
-RetCancCTe_104
-RetCancNFe_107
-RetConsCad_101
-RetConsReciCTe_104
-RetConsReciNFe_110
-RetConsSitCTe_104
-RetConsSitNFe_107
-RetConsStatServCTe_104
-RetConsStatServ_107
-RetEnviCTe_104
-RetEnviNFe_110
-RetInutCTe_104
-RetInutNFe_107
-SOAPEnvio_104
-SOAPEnvio_110
-SOAPRetorno_104
-SOAPRetorno_110
-Vol_110
-
+#from pysped.nfe.processador_nfe import ProcessadorNFe, DANFE, Certificado
+from pysped.nfe.processador_nfe import ProcessadorNFe, Certificado
diff --git a/pysped/cte/leiaute/__init__.py b/pysped/cte/leiaute/__init__.py
index ac6dd156..1426a745 100644
--- a/pysped/cte/leiaute/__init__.py
+++ b/pysped/cte/leiaute/__init__.py
@@ -47,133 +47,133 @@
#
# Envelopes SOAP
#
-from soap_104 import SOAPEnvio as SOAPEnvio_104
-from soap_104 import SOAPRetorno as SOAPRetorno_104
+from .soap_104 import SOAPEnvio as SOAPEnvio_104
+from .soap_104 import SOAPRetorno as SOAPRetorno_104
#
# Emissão de CT-e
#
-from cte_104 import CTe as CTe_104
-from cte_104 import InfNF as InfNF_104
-from cte_104 import InfNFe as InfNFe_104
-from cte_104 import InfOutros as InfOutros_104
-from cte_104 import Pass as Pass_104
-from cte_104 import ObsCont as ObsCont_104
-from cte_104 import ObsFisco as ObsFisco_104
-from cte_104 import InfQ as InfQ_104
-#from cte_104 import ContQt as ContQt_104
-#from cte_104 import Seg as Seg_104
-#from cte_104 import Peri as Peri_104
-#from cte_104 import VeicNovos as VeicNovos_104
-from cte_104 import Dup as Dup_104
+from .cte_104 import CTe as CTe_104
+from .cte_104 import InfNF as InfNF_104
+from .cte_104 import InfNFe as InfNFe_104
+from .cte_104 import InfOutros as InfOutros_104
+from .cte_104 import Pass as Pass_104
+from .cte_104 import ObsCont as ObsCont_104
+from .cte_104 import ObsFisco as ObsFisco_104
+from .cte_104 import InfQ as InfQ_104
+#from .cte_104 import ContQt as ContQt_104
+#from .cte_104 import Seg as Seg_104
+#from .cte_104 import Peri as Peri_104
+#from .cte_104 import VeicNovos as VeicNovos_104
+from .cte_104 import Dup as Dup_104
#
# Envio de lote de CT-e
#
-from envicte_104 import EnviCTe as EnviCTe_104
-from envicte_104 import RetEnviCTe as RetEnviCTe_104
+from .envicte_104 import EnviCTe as EnviCTe_104
+from .envicte_104 import RetEnviCTe as RetEnviCTe_104
#
# Consulta do recibo do lote de CT-e
#
-from consrecicte_104 import ConsReciCTe as ConsReciCTe_104
-from consrecicte_104 import RetConsReciCTe as RetConsReciCTe_104
-from consrecicte_104 import ProtCTe as ProtCTe_104
-from consrecicte_104 import ProcCTe as ProcCTe_104
+from .consrecicte_104 import ConsReciCTe as ConsReciCTe_104
+from .consrecicte_104 import RetConsReciCTe as RetConsReciCTe_104
+from .consrecicte_104 import ProtCTe as ProtCTe_104
+from .consrecicte_104 import ProcCTe as ProcCTe_104
#
# Cancelamento de CT-e
#
-from canccte_104 import CancCTe as CancCTe_104
-from canccte_104 import RetCancCTe as RetCancCTe_104
-from canccte_104 import ProcCancCTe as ProcCancCTe_104
+from .canccte_104 import CancCTe as CancCTe_104
+from .canccte_104 import RetCancCTe as RetCancCTe_104
+from .canccte_104 import ProcCancCTe as ProcCancCTe_104
#
# Inutilização de CT-e
#
-from inutcte_104 import InutCTe as InutCTe_104
-from inutcte_104 import RetInutCTe as RetInutCTe_104
-from inutcte_104 import ProcInutCTe as ProcInutCTe_104
+from .inutcte_104 import InutCTe as InutCTe_104
+from .inutcte_104 import RetInutCTe as RetInutCTe_104
+from .inutcte_104 import ProcInutCTe as ProcInutCTe_104
#
# Consulta a situação de CT-e
#
-from conssitcte_104 import ConsSitCTe as ConsSitCTe_104
-from conssitcte_104 import RetConsSitCTe as RetConsSitCTe_104
+from .conssitcte_104 import ConsSitCTe as ConsSitCTe_104
+from .conssitcte_104 import RetConsSitCTe as RetConsSitCTe_104
#
# Consulta a situação do serviço
#
-from consstatserv_104 import ConsStatServCTe as ConsStatServCTe_104
-from consstatserv_104 import RetConsStatServCTe as RetConsStatServCTe_104
+from .consstatserv_104 import ConsStatServCTe as ConsStatServCTe_104
+from .consstatserv_104 import RetConsStatServCTe as RetConsStatServCTe_104
ESQUEMA_ATUAL_VERSAO_300 = u'PL_CTe_300'
#Envelopes SOAP
-from soap_300 import SOAPEnvio as SOAPEnvio_300
-from soap_300 import SOAPRetorno as SOAPRetorno_300
+from .soap_300 import SOAPEnvio as SOAPEnvio_300
+from .soap_300 import SOAPRetorno as SOAPRetorno_300
# Emissão de CT-e 3.00
-from cte_300 import CTe as CTe_300
-from cte_300 import InfQ as InfQ_300
-from cte_300 import InfNF as InfNF_300
-from cte_300 import InfNFe as InfNFe_300
-from cte_300 import InfOutros as InfOutros_300
-from cte_300 import VeicNovos as VeicNovos_300
-from cte_300 import Comp as Comp_300
-from cte_300 import Pass as Pass_300
-from cte_300 import ObsCont as ObsCont_300
-from cte_300 import ObsFisco as ObsFisco_300
-from cte_300 import AutXML as AutXML_300
-from cte_300 import InfCTeMultimodal as InfCTeMultimodal_300
-from cte_300 import Dup as Dup_300
-from cte_300 import IdDocAnt as IdDocAnt_300
-from cte_300 import IdDocAntPap as IdDocAntPap_300
-from cte_300 import IdDocAntEle as IdDocAntEle_300
-from cte_300 import EmitDocAnt as EmitDocAnt_300
-from cte_300 import InfUnidCarga as InfUnidCarga_300
-from cte_300 import InfUnidTransp as InfUnidTransp_300
-from cte_300 import LacUnidTransp as LacUnidTransp_300
-from cte_300 import LacUnidCarga as LacUnidCarga_300
+from .cte_300 import CTe as CTe_300
+from .cte_300 import InfQ as InfQ_300
+from .cte_300 import InfNF as InfNF_300
+from .cte_300 import InfNFe as InfNFe_300
+from .cte_300 import InfOutros as InfOutros_300
+from .cte_300 import VeicNovos as VeicNovos_300
+from .cte_300 import Comp as Comp_300
+from .cte_300 import Pass as Pass_300
+from .cte_300 import ObsCont as ObsCont_300
+from .cte_300 import ObsFisco as ObsFisco_300
+from .cte_300 import AutXML as AutXML_300
+from .cte_300 import InfCTeMultimodal as InfCTeMultimodal_300
+from .cte_300 import Dup as Dup_300
+from .cte_300 import IdDocAnt as IdDocAnt_300
+from .cte_300 import IdDocAntPap as IdDocAntPap_300
+from .cte_300 import IdDocAntEle as IdDocAntEle_300
+from .cte_300 import EmitDocAnt as EmitDocAnt_300
+from .cte_300 import InfUnidCarga as InfUnidCarga_300
+from .cte_300 import InfUnidTransp as InfUnidTransp_300
+from .cte_300 import LacUnidTransp as LacUnidTransp_300
+from .cte_300 import LacUnidCarga as LacUnidCarga_300
# Envio e retorno eventos
-from proceventocte_300 import EventoCTe as EventoCTe_300
-from proceventocte_300 import RetEventoCTe as RetEventoCTe_300
-from proceventocte_300 import ProcEventoCTe as ProcEventoCTe_300
+from .proceventocte_300 import EventoCTe as EventoCTe_300
+from .proceventocte_300 import RetEventoCTe as RetEventoCTe_300
+from .proceventocte_300 import ProcEventoCTe as ProcEventoCTe_300
# Eventos
-from eventoscte_300 import EvCancCTe as EvCancCTe_300
-from eventoscte_300 import EvEPECCTe as EvEPECCTe_300
-from eventoscte_300 import EvRegMultimodal as EvRegMultimodal_300
-from eventoscte_300 import EvCCeCTe as EvCCeCTe_300
-from eventoscte_300 import InfCorrecao as InfCorrecao_300
-from eventoscte_300 import EvPrestDesacordo as EvPrestDesacordo_300
-from eventoscte_300 import EvGTV as EvGTV_300
+from .eventoscte_300 import EvCancCTe as EvCancCTe_300
+from .eventoscte_300 import EvEPECCTe as EvEPECCTe_300
+from .eventoscte_300 import EvRegMultimodal as EvRegMultimodal_300
+from .eventoscte_300 import EvCCeCTe as EvCCeCTe_300
+from .eventoscte_300 import InfCorrecao as InfCorrecao_300
+from .eventoscte_300 import EvPrestDesacordo as EvPrestDesacordo_300
+from .eventoscte_300 import EvGTV as EvGTV_300
# Consulta status servico
-from consstatserv_300 import ConsStatServCTe as ConsStatServCTe_300
-from consstatserv_300 import RetConsStatServCTe as RetConsStatServCTe_300
+from .consstatserv_300 import ConsStatServCTe as ConsStatServCTe_300
+from .consstatserv_300 import RetConsStatServCTe as RetConsStatServCTe_300
# Consulta a situação de CT-e
-from conssitcte_300 import ConsSitCTe as ConsSitCTe_300
-from conssitcte_300 import RetConsSitCTe as RetConsSitCTe_300
+from .conssitcte_300 import ConsSitCTe as ConsSitCTe_300
+from .conssitcte_300 import RetConsSitCTe as RetConsSitCTe_300
# Envio de lote de CT-e
-from envicte_300 import EnviCTe as EnviCTe_300
-from envicte_300 import RetEnviCTe as RetEnviCTe_300
+from .envicte_300 import EnviCTe as EnviCTe_300
+from .envicte_300 import RetEnviCTe as RetEnviCTe_300
# Consulta do recibo do lote de CT-e
-from consrecicte_300 import ConsReciCTe as ConsReciCTe_300
-from consrecicte_300 import RetConsReciCTe as RetConsReciCTe_300
-from consrecicte_300 import ProtCTe as ProtCTe_300
-from consrecicte_300 import ProcCTe as ProcCTe_300
+from .consrecicte_300 import ConsReciCTe as ConsReciCTe_300
+from .consrecicte_300 import RetConsReciCTe as RetConsReciCTe_300
+from .consrecicte_300 import ProtCTe as ProtCTe_300
+from .consrecicte_300 import ProcCTe as ProcCTe_300
# Inutilização de ct-e
-from inutcte_300 import InutCTe as InutCTe_300
-from inutcte_300 import RetInutCTe as RetInutCTe_300
-from inutcte_300 import ProcInutCTe as ProcInutCTe_300
+from .inutcte_300 import InutCTe as InutCTe_300
+from .inutcte_300 import RetInutCTe as RetInutCTe_300
+from .inutcte_300 import ProcInutCTe as ProcInutCTe_300
# Pyflakes
diff --git a/pysped/cte/leiaute/consrecicte_104.py b/pysped/cte/leiaute/consrecicte_104.py
index 4e703537..11f1a39b 100644
--- a/pysped/cte/leiaute/consrecicte_104.py
+++ b/pysped/cte/leiaute/consrecicte_104.py
@@ -45,7 +45,7 @@
TagDataHora, TagDecimal, TagInteiro, XMLNFe)
from pysped.cte.leiaute import ESQUEMA_ATUAL_VERSAO_104 as ESQUEMA_ATUAL
import os
-from cte_104 import CTe
+from .cte_104 import CTe
DIRNAME = os.path.dirname(__file__)
@@ -153,7 +153,6 @@ def set_xml(self, arquivo):
# por isso, a raiz dele não pode ser assumida como sendo sempre o grupo
# protCTe
#
- print('aqui:', self._le_noh('//protCTe/infProt', ns=NAMESPACE_CTE))
self.infProt.xml = self._le_noh('//protCTe/infProt', ns=NAMESPACE_CTE)
self.Signature.xml = self._le_noh('//protCTe/sig:Signature')
diff --git a/pysped/cte/leiaute/consrecicte_300.py b/pysped/cte/leiaute/consrecicte_300.py
index 672eaf62..84c19d3e 100644
--- a/pysped/cte/leiaute/consrecicte_300.py
+++ b/pysped/cte/leiaute/consrecicte_300.py
@@ -111,7 +111,6 @@ def set_xml(self, arquivo):
# por isso, a raiz dele não pode ser assumida como sendo sempre o grupo
# protCTe
#
- print('aqui:', self._le_noh('//protCTe/infProt', ns=NAMESPACE_CTE))
self.infProt.xml = self._le_noh('//protCTe/infProt', ns=NAMESPACE_CTE)
self.Signature.xml = self._le_noh('//protCTe/sig:Signature', ns=NAMESPACE_CTE)
diff --git a/pysped/cte/leiaute/envicte_104.py b/pysped/cte/leiaute/envicte_104.py
index 5ca2e820..4745030b 100644
--- a/pysped/cte/leiaute/envicte_104.py
+++ b/pysped/cte/leiaute/envicte_104.py
@@ -45,7 +45,7 @@
TagDecimal, TagInteiro, XMLNFe, tira_abertura)
from pysped.cte.leiaute import ESQUEMA_ATUAL_VERSAO_104 as ESQUEMA_ATUAL
import os
-from cte_104 import CTe
+from .cte_104 import CTe
DIRNAME = os.path.dirname(__file__)
diff --git a/pysped/cte/leiaute/proceventocte_300.py b/pysped/cte/leiaute/proceventocte_300.py
index cf99ae8f..b8dfc2c7 100644
--- a/pysped/cte/leiaute/proceventocte_300.py
+++ b/pysped/cte/leiaute/proceventocte_300.py
@@ -4,7 +4,7 @@
from pysped.cte.leiaute import ESQUEMA_ATUAL_VERSAO_300 as ESQUEMA_ATUAL
import os
-from.eventoscte_300 import EvGTV, EvPrestDesacordo, EvCCeCTe, EvRegMultimodal, EvEPECCTe, EvCancCTe
+from .eventoscte_300 import EvGTV, EvPrestDesacordo, EvCCeCTe, EvRegMultimodal, EvEPECCTe, EvCancCTe
DIRNAME = os.path.dirname(__file__)
diff --git a/pysped/nfe/__init__.py b/pysped/nfe/__init__.py
index 6b788447..bc016989 100644
--- a/pysped/nfe/__init__.py
+++ b/pysped/nfe/__init__.py
@@ -39,11 +39,9 @@
#
#
+import sys
-from .processador_nfe import ProcessadorNFe, DANFE, Certificado, DAEDE
+from .processador_nfe import ProcessadorNFe, Certificado, DANFE, DANFCE
-
-# Pyflakes
-ProcessadorNFe
-DANFE
-Certificado
+if sys.version_info.major == 2:
+ from .processador_nfe import DAEDE
diff --git a/pysped/nfe/danfe/__init__.py b/pysped/nfe/danfe/__init__.py
index 59415b8c..28bc62ea 100644
--- a/pysped/nfe/danfe/__init__.py
+++ b/pysped/nfe/danfe/__init__.py
@@ -39,6 +39,14 @@
#
#
-from pysped.nfe.danfe.danfe import DANFE
+import sys
+
+
+if sys.version_info.major == 2:
+ from pysped.nfe.danfe.danfe_geraldo import DANFE
+else:
+ from pysped.nfe.danfe.danfe import DANFE
+
from pysped.nfe.danfe.daede import DAEDE
from pysped.nfe.danfe.danfce import DANFCE
+from pysped.nfe.danfe.danfse import DANFSE
diff --git a/pysped/nfe/danfe/dacce_a4_retrato.odt b/pysped/nfe/danfe/dacce_a4_retrato.odt
new file mode 100644
index 00000000..c8ff115a
Binary files /dev/null and b/pysped/nfe/danfe/dacce_a4_retrato.odt differ
diff --git a/pysped/nfe/danfe/danfce.py b/pysped/nfe/danfe/danfce.py
index 1763a20b..8cdc09c9 100644
--- a/pysped/nfe/danfe/danfce.py
+++ b/pysped/nfe/danfe/danfce.py
@@ -39,8 +39,11 @@
#
#
+
+from __future__ import (division, print_function, unicode_literals,
+ absolute_import)
+
import os
-from StringIO import StringIO
from uuid import uuid4
from pysped.nfe.leiaute import ProtNFe_310
from pysped.nfe.leiaute import ProcEventoCancNFe_100
@@ -90,16 +93,16 @@ def gerar_danfce(self):
self.mensagem_protocolo = ''
self.mensagem_sem_valor = ''
if (not self.protNFe.infProt.nProt.valor) or self.NFe.infNFe.ide.tpAmb.valor == 2:
- self.mensagem_sem_valor = u'Sem valor fiscal'
+ self.mensagem_sem_valor = 'Sem valor fiscal'
# NF-e denegada
if self.protNFe.infProt.cStat.valor in ('110', '301', '302'):
- self.mensagem_protocolo = u'Protocolo de Denegação '
+ self.mensagem_protocolo = 'Protocolo de Denegação '
self.mensagem_protocolo += self.protNFe.protocolo_formatado
# Emissão normal
elif self.protNFe.infProt.nProt.valor:
- self.mensagem_protocolo = u'Protocolo de Autorização '
+ self.mensagem_protocolo = 'Protocolo de Autorização '
self.mensagem_protocolo += self.protNFe.protocolo_formatado
# A NF-e foi cancelada por um evento de cancelamento, , no DANFCE imprimir o "carimbo" de cancelamento
@@ -141,7 +144,8 @@ def gerar_danfce(self):
t = Template(nome_arq_template, nome_arq_odt)
t.render({'danfce': self})
- print(sh.libreoffice('--headless', '--invisible', '--convert-to', 'pdf', '--outdir', '/tmp', nome_arq_odt))
+ lo = sh.libreoffice('--headless', '--invisible', '--convert-to', 'pdf', '--outdir', '/tmp', nome_arq_odt, _bg=True)
+ lo.wait()
self.conteudo_pdf = open(nome_arq_pdf, 'r').read()
diff --git a/pysped/nfe/danfe/danfe.py b/pysped/nfe/danfe/danfe.py
index 26f21a76..8280e88c 100644
--- a/pysped/nfe/danfe/danfe.py
+++ b/pysped/nfe/danfe/danfe.py
@@ -39,11 +39,19 @@
#
#
-from StringIO import StringIO
-from geraldo.generators import PDFGenerator
-from pysped.nfe.danfe.danferetrato import DANFERetrato
-from pysped.nfe.leiaute import ProtNFe_310, RetCancNFe_200, ProcCancNFe_200
-from pysped.nfe.leiaute import ProcEventoCancNFe_100
+from __future__ import (division, print_function, unicode_literals,
+ absolute_import)
+
+import os
+from io import BytesIO
+from uuid import uuid4
+from pysped.nfe.leiaute import ProtNFe_400, RetCancNFe_200, ProcCancNFe_200
+from pysped.nfe.leiaute import ProcEventoCancNFe_100, ProcEventoCCe_100
+from py3o.template import Template
+import sh
+
+
+DIRNAME = os.path.dirname(__file__)
class DANFE(object):
@@ -55,195 +63,162 @@ def __init__(self):
self.imprime_duplicatas = True
self.imprime_issqn = True
- self.caminho = ''
- self.salvar_arquivo = True
+ self.caminho = ''
+ self.caminho_temporario = ''
+ self.salvar_arquivo = True
- self.NFe = None
- self.protNFe = None
- self.procCancNFe = None
- self.retCancNFe = None
+ self.NFe = None
+ self.protNFe = None
self.procEventoCancNFe = None
- self.danfe = None
- self.conteudo_pdf = None
+ self.procEventoCCe = None
+ self.reset()
- self.obs_impressao = 'DANFE gerado em %(now:%d/%m/%Y, %H:%M:%S)s'
self.nome_sistema = ''
self.site = ''
self.logo = ''
- self.leiaute_logo_vertical = False
- self.dados_emitente = []
+ self.cabecalho = ''
+ self.template = ''
+
+ def reset(self):
+ self.protNFe = ProtNFe_400()
+ self.procEventoCancNFe = ProcEventoCancNFe_100()
+ self.procEventoCCe = ProcEventoCCe_100()
+ self.conteudo_pdf = None
+
+ def _gera_pdf(self, template):
+ self.caminho_temporario = self.caminho_temporario or '/tmp/'
+
+ nome_arq_template = self.caminho_temporario + uuid4().hex
+ open(nome_arq_template, 'wb').write(template.read())
+ template.close()
+
+ nome_arq_temp = uuid4().hex
+ nome_arq_odt = self.caminho_temporario + nome_arq_temp + '.odt'
+ nome_arq_pdf = self.caminho_temporario + nome_arq_temp + '.pdf'
+
+ t = Template(nome_arq_template, nome_arq_odt)
+ t.render({'danfe': self})
+
+ lo = sh.libreoffice('--headless', '--invisible', '--convert-to', 'pdf', '--outdir', '/tmp', nome_arq_odt, _bg=True)
+ lo.wait()
+
+ self.conteudo_pdf = open(nome_arq_pdf, 'rb').read()
+
+ os.remove(nome_arq_template)
+ os.remove(nome_arq_odt)
+ os.remove(nome_arq_pdf)
def gerar_danfe(self):
if self.NFe is None:
raise ValueError('Não é possível gerar um DANFE sem a informação de uma NF-e')
if self.protNFe is None:
- self.protNFe = ProtNFe_310()
-
- if self.retCancNFe is None:
- self.retCancNFe = RetCancNFe_200()
-
- if self.procCancNFe is None:
- self.procCancNFe = ProcCancNFe_200()
-
- if self.procEventoCancNFe is None:
- self.procEventoCancNFe = ProcEventoCancNFe_100()
+ self.reset()
#
# Prepara o queryset para impressão
#
self.NFe.monta_chave()
- self.NFe.monta_dados_contingencia_fsda()
self.NFe.site = self.site
- for detalhe in self.NFe.infNFe.det:
- detalhe.NFe = self.NFe
- detalhe.protNFe = self.protNFe
- detalhe.retCancNFe = self.retCancNFe
- detalhe.procCancNFe = self.procCancNFe
- detalhe.procEventoCancNFe = self.procEventoCancNFe
-
- #
- # Prepara as bandas de impressão para cada formato
- #
- if self.NFe.infNFe.ide.tpImp.valor == 2:
- raise ValueError('DANFE em formato paisagem ainda não implementado')
- else:
- self.danfe = DANFERetrato()
- self.danfe.queryset = self.NFe.infNFe.det
-
- if self.imprime_canhoto:
- self.danfe.band_page_header = self.danfe.canhoto
- self.danfe.band_page_header.child_bands = []
- self.danfe.band_page_header.child_bands.append(self.danfe.remetente)
- else:
- self.danfe.band_page_header = self.danfe.remetente
- self.danfe.band_page_header.child_bands = []
-
- # Emissão para simples conferência / sem protocolo de autorização
- if not self.protNFe.infProt.nProt.valor:
- self.danfe.remetente.campo_variavel_conferencia()
-
- # NF-e denegada
- elif self.protNFe.infProt.cStat.valor in ('110', '301', '302'):
- #self.danfe.remetente.campo_variavel_denegacao()
- self.danfe.remetente.campo_variavel_normal()
- self.danfe.remetente.obs_denegacao()
-
- #
- # Adiciona a observação de quem é a irregularidade fiscal
- #
- #if self.protNFe.infProt.cStat.valor == '301':
- #self.danfe.remetente.find_by_name('txt_remetente_var1').text = b'A circulação da mercadoria foi PROIBIDA pela SEFAZ
autorizadora, devido a irregularidades fiscais do emitente.'
- #elif self.protNFe.infProt.cStat.valor == '302':
- #self.danfe.remetente.find_by_name('txt_remetente_var1').text = b'A circulação da mercadoria foi PROIBIDA pela SEFAZ
autorizadora, devido a irregularidades fiscais do destinatário.'
-
- # Emissão em contingência com FS ou FSDA
- elif self.NFe.infNFe.ide.tpEmis.valor in (2, 5,):
- self.danfe.remetente.campo_variavel_contingencia_fsda()
- self.danfe.remetente.obs_contingencia_normal_scan()
-
- # Emissão em contingência com DPEC
- elif self.NFe.infNFe.ide.tpEmis.valor == 4:
- self.danfe.remetente.campo_variavel_contingencia_dpec()
- self.danfe.remetente.obs_contingencia_dpec()
-
- # Emissão normal ou contingência SCAN
- else:
- self.danfe.remetente.campo_variavel_normal()
- # Contingência SCAN
- if self.NFe.infNFe.ide.tpEmis.valor == 3:
- self.danfe.remetente.obs_contingencia_normal_scan()
-
- # A NF-e foi cancelada, no DANFE imprimir o "carimbo" de cancelamento
- if self.retCancNFe.infCanc.nProt.valor or self.procCancNFe.retCancNFe.infCanc.nProt.valor:
- if self.procCancNFe.cancNFe.infCanc.xJust.valor:
- self.danfe.remetente.obs_cancelamento_com_motivo()
+ if self.template:
+ if isinstance(self.template, str):
+ template = open(self.template, 'rb')
else:
- self.danfe.remetente.obs_cancelamento()
+ template = self.template
- # A NF-e foi cancelada por um evento de cancelamento, , no DANFE imprimir o "carimbo" de cancelamento
- if self.procEventoCancNFe.retEvento.infEvento.nProt.valor:
- if self.procEventoCancNFe.evento.infEvento.detEvento.xJust.valor:
- self.danfe.remetente.obs_cancelamento_com_motivo_evento()
- else:
- self.danfe.remetente.obs_cancelamento_evento()
-
- # Observação de ausência de valor fiscal
- # se não houver protocolo ou se o ambiente for de homologação
- if (not self.protNFe.infProt.nProt.valor) or self.NFe.infNFe.ide.tpAmb.valor == 2:
- self.danfe.remetente.obs_sem_valor_fiscal()
+ else:
+ template = open(os.path.join(DIRNAME, 'danfe_a4_retrato.odt'), 'rb')
- self.danfe.band_page_header.child_bands.append(self.danfe.destinatario)
+ self._gera_pdf(template)
- if self.imprime_local_retirada and len(self.NFe.infNFe.retirada.xml):
- self.danfe.band_page_header.child_bands.append(self.danfe.local_retirada)
+ if self.salvar_arquivo:
+ nome_arq = self.caminho + self.NFe.chave + '.pdf'
+ open(nome_arq, 'wb').write(self.conteudo_pdf)
- if self.imprime_local_entrega and len(self.NFe.infNFe.entrega.xml):
- self.danfe.band_page_header.child_bands.append(self.danfe.local_entrega)
+ def gerar_dacce(self):
+ if self.NFe is None:
+ raise ValueError('Não é possível gerar um DACCE sem a informação de uma NF-e')
- if self.imprime_fatura:
- # Pagamento a prazo
- if (self.NFe.infNFe.ide.indPag.valor == 1) or \
- (len(self.NFe.infNFe.cobr.dup) > 1) or \
- ((len(self.NFe.infNFe.cobr.dup) == 1) and \
- (self.NFe.infNFe.cobr.dup[0].dVenc.valor.toordinal() > self.NFe.infNFe.ide.dEmi.valor.toordinal())):
+ if self.protNFe is None:
+ self.reset()
- if self.imprime_duplicatas:
- self.danfe.fatura_a_prazo.elements.append(self.danfe.duplicatas)
+ if not self.procEventoCCe.retEvento.infEvento.cStat.valor:
+ raise ValueError('Não é possível gerar um DACCE sem a informação de uma CC-e')
- self.danfe.band_page_header.child_bands.append(self.danfe.fatura_a_prazo)
+ #
+ # Prepara o queryset para impressão
+ #
+ self.NFe.monta_chave()
+ self.NFe.site = self.site
- # Pagamento a vista
- elif (self.NFe.infNFe.ide.indPag.valor != 2):
- self.danfe.band_page_header.child_bands.append(self.danfe.fatura_a_vista)
+ if self.template:
+ if isinstance(self.template, (file, BytesIO)):
+ template = self.template
+ else:
+ template = open(self.template, 'rb')
- if self.imprime_duplicatas:
- self.danfe.fatura_a_vista.elements.append(self.danfe.duplicatas)
+ else:
+ template = open(os.path.join(DIRNAME, 'dacce_a4_retrato.odt'), 'rb')
- self.danfe.band_page_header.child_bands.append(self.danfe.calculo_imposto)
- self.danfe.band_page_header.child_bands.append(self.danfe.transporte)
- self.danfe.band_page_header.child_bands.append(self.danfe.cab_produto)
+ self._gera_pdf(template)
- if self.imprime_issqn and len(self.NFe.infNFe.total.ISSQNTot.xml):
- self.danfe.band_page_footer = self.danfe.iss
- else:
- self.danfe.band_page_footer = self.danfe.dados_adicionais
+ if self.salvar_arquivo:
+ nome_arq = self.caminho + 'cce-'
+ nome_arq += str(self.procEventoCCe.evento.infEvento.nSeqEvento.valor).zfill(2)
+ nome_arq += '-' + self.NFe.chave + '.pdf'
+ open(nome_arq, 'wb').write(self.conteudo_pdf)
- self.danfe.band_detail = self.danfe.det_produto
+ def gerar_duplicata(self):
+ if self.NFe is None:
+ raise ValueError('Não é possível gerar uma duplicata sem a informação de uma NF-e')
- #
- # Observação de impressão
- #
- if self.nome_sistema:
- self.danfe.ObsImpressao.expression = self.nome_sistema + ' - ' + self.obs_impressao
- else:
- self.danfe.ObsImpressao.expression = self.obs_impressao
+ if self.protNFe is None:
+ self.reset()
#
- # Quadro do emitente
+ # Prepara o queryset para impressão
#
- # Personalizado?
- if self.dados_emitente:
- self.danfe.remetente.monta_quadro_emitente(self.dados_emitente)
- else:
- # Sem logotipo
- if not self.logo:
- self.danfe.remetente.monta_quadro_emitente(self.danfe.remetente.dados_emitente_sem_logo())
-
- # Logotipo na vertical
- elif self.leiaute_logo_vertical:
- self.danfe.remetente.monta_quadro_emitente(self.danfe.remetente.dados_emitente_logo_vertical(self.logo))
+ self.NFe.monta_chave()
+ self.NFe.site = self.site
- # Logotipo na horizontal
+ if self.template:
+ if isinstance(self.template, (file, BytesIO)):
+ template = self.template
else:
- self.danfe.remetente.monta_quadro_emitente(self.danfe.remetente.dados_emitente_logo_horizontal(self.logo))
+ template = open(self.template, 'rb')
- danfe_pdf = StringIO()
- self.danfe.generate_by(PDFGenerator, filename=danfe_pdf)
- self.conteudo_pdf = danfe_pdf.getvalue()
- danfe_pdf.close()
+ else:
+ template = open(os.path.join(DIRNAME, 'duplicata_a4_retrato.odt'), 'rb')
+
+ self._gera_pdf(template)
if self.salvar_arquivo:
- nome_arq = self.caminho + self.NFe.chave + '.pdf'
- self.danfe.generate_by(PDFGenerator, filename=nome_arq)
+ nome_arq = self.caminho + 'duplicatas-' + self.NFe.chave + '.pdf'
+ open(nome_arq, 'wb').write(self.conteudo_pdf)
+
+ @property
+ def fatura_a_prazo(self):
+ if not (self.NFe.infNFe.cobr.fat.nFat.valor or
+ self.NFe.infNFe.cobr.fat.vOrig.valor or
+ self.NFe.infNFe.cobr.fat.vDesc.valor or
+ self.NFe.infNFe.cobr.fat.vLiq.valor):
+ return False
+
+ if (self.NFe.infNFe.ide.indPag.valor == 1) or \
+ (len(self.NFe.infNFe.cobr.dup) > 1) or \
+ ((len(self.NFe.infNFe.cobr.dup) == 1) and \
+ (self.NFe.infNFe.cobr.dup[0].dVenc.valor.toordinal() > self.NFe.infNFe.ide.dEmi.valor.toordinal())):
+ return True
+
+ return False
+
+ @property
+ def fatura_a_vista(self):
+ if not (self.NFe.infNFe.cobr.fat.nFat.valor or
+ self.NFe.infNFe.cobr.fat.vOrig.valor or
+ self.NFe.infNFe.cobr.fat.vDesc.valor or
+ self.NFe.infNFe.cobr.fat.vLiq.valor):
+ return False
+
+ return not self.fatura_a_prazo
diff --git a/pysped/nfe/danfe/danfe_a4_retrato.odt b/pysped/nfe/danfe/danfe_a4_retrato.odt
new file mode 100644
index 00000000..138d47b3
Binary files /dev/null and b/pysped/nfe/danfe/danfe_a4_retrato.odt differ
diff --git a/pysped/nfe/danfe/danfe_geraldo.py b/pysped/nfe/danfe/danfe_geraldo.py
new file mode 100644
index 00000000..514db08d
--- /dev/null
+++ b/pysped/nfe/danfe/danfe_geraldo.py
@@ -0,0 +1,251 @@
+# -*- coding: utf-8 -*-
+#
+# PySPED - Python libraries to deal with Brazil's SPED Project
+#
+# Copyright (C) 2010-2012
+# Copyright (C) Aristides Caldeira
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Library General Public License as
+# published by the Free Software Foundation, either version 2.1 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public License
+# along with this program. If not, see .
+#
+# PySPED - Bibliotecas Python para o
+# SPED - Sistema Público de Escrituração Digital
+#
+# Copyright (C) 2010-2012
+# Copyright (C) Aristides Caldeira
+#
+# Este programa é um software livre: você pode redistribuir e/ou modificar
+# este programa sob os termos da licença GNU Library General Public License,
+# publicada pela Free Software Foundation, em sua versão 2.1 ou, de acordo
+# com sua opção, qualquer versão posterior.
+#
+# Este programa é distribuido na esperança de que venha a ser útil,
+# porém SEM QUAISQUER GARANTIAS, nem mesmo a garantia implícita de
+# COMERCIABILIDADE ou ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Veja a
+# GNU Library General Public License para mais detalhes.
+#
+# Você deve ter recebido uma cópia da GNU Library General Public License
+# juntamente com este programa. Caso esse não seja o caso, acesse:
+#
+#
+
+from builtins import str
+from io import BytesIO
+
+from geraldo.generators import PDFGenerator
+from pysped.nfe.danfe.danferetrato import DANFERetrato
+from pysped.nfe.leiaute import ProtNFe_310, RetCancNFe_200, ProcCancNFe_200
+from pysped.nfe.leiaute import ProcEventoCancNFe_100
+
+
+class DANFE(object):
+ def __init__(self):
+ self.imprime_canhoto = True
+ self.imprime_local_retirada = True
+ self.imprime_local_entrega = True
+ self.imprime_fatura = True
+ self.imprime_duplicatas = True
+ self.imprime_issqn = True
+
+ self.caminho = ''
+ self.salvar_arquivo = True
+
+ self.NFe = None
+ self.protNFe = None
+ self.procCancNFe = None
+ self.retCancNFe = None
+ self.procEventoCancNFe = None
+ self.danfe = None
+ self.conteudo_pdf = None
+
+ self.obs_impressao = 'DANFE gerado em %(now:%d/%m/%Y, %H:%M:%S)s'
+ self.nome_sistema = ''
+ self.site = ''
+ self.logo = ''
+ self.leiaute_logo_vertical = False
+ self.dados_emitente = []
+
+ def gerar_danfe(self):
+ if self.NFe is None:
+ raise ValueError('Não é possível gerar um DANFE sem a informação de uma NF-e')
+
+ if self.protNFe is None:
+ self.protNFe = ProtNFe_310()
+
+ if self.retCancNFe is None:
+ self.retCancNFe = RetCancNFe_200()
+
+ if self.procCancNFe is None:
+ self.procCancNFe = ProcCancNFe_200()
+
+ if self.procEventoCancNFe is None:
+ self.procEventoCancNFe = ProcEventoCancNFe_100()
+
+ #
+ # Prepara o queryset para impressão
+ #
+ self.NFe.monta_chave()
+ self.NFe.monta_dados_contingencia_fsda()
+ self.NFe.site = self.site
+
+ for detalhe in self.NFe.infNFe.det:
+ detalhe.NFe = self.NFe
+ detalhe.protNFe = self.protNFe
+ detalhe.retCancNFe = self.retCancNFe
+ detalhe.procCancNFe = self.procCancNFe
+ detalhe.procEventoCancNFe = self.procEventoCancNFe
+
+ #
+ # Prepara as bandas de impressão para cada formato
+ #
+ if self.NFe.infNFe.ide.tpImp.valor == 2:
+ raise ValueError('DANFE em formato paisagem ainda não implementado')
+ else:
+ self.danfe = DANFERetrato()
+ self.danfe.queryset = self.NFe.infNFe.det
+
+ if self.imprime_canhoto:
+ self.danfe.band_page_header = self.danfe.canhoto
+ self.danfe.band_page_header.child_bands = []
+ self.danfe.band_page_header.child_bands.append(self.danfe.remetente)
+ else:
+ self.danfe.band_page_header = self.danfe.remetente
+ self.danfe.band_page_header.child_bands = []
+
+ # Emissão para simples conferência / sem protocolo de autorização
+ if not self.protNFe.infProt.nProt.valor:
+ self.danfe.remetente.campo_variavel_conferencia()
+
+ # NF-e denegada
+ elif self.protNFe.infProt.cStat.valor in ('110', '301', '302'):
+ #self.danfe.remetente.campo_variavel_denegacao()
+ self.danfe.remetente.campo_variavel_normal()
+ self.danfe.remetente.obs_denegacao()
+
+ #
+ # Adiciona a observação de quem é a irregularidade fiscal
+ #
+ #if self.protNFe.infProt.cStat.valor == '301':
+ #self.danfe.remetente.find_by_name('txt_remetente_var1').text = b'A circulação da mercadoria foi PROIBIDA pela SEFAZ
autorizadora, devido a irregularidades fiscais do emitente.'
+ #elif self.protNFe.infProt.cStat.valor == '302':
+ #self.danfe.remetente.find_by_name('txt_remetente_var1').text = b'A circulação da mercadoria foi PROIBIDA pela SEFAZ
autorizadora, devido a irregularidades fiscais do destinatário.'
+
+ # Emissão em contingência com FS ou FSDA
+ elif self.NFe.infNFe.ide.tpEmis.valor in (2, 5,):
+ self.danfe.remetente.campo_variavel_contingencia_fsda()
+ self.danfe.remetente.obs_contingencia_normal_scan()
+
+ # Emissão em contingência com DPEC
+ elif self.NFe.infNFe.ide.tpEmis.valor == 4:
+ self.danfe.remetente.campo_variavel_contingencia_dpec()
+ self.danfe.remetente.obs_contingencia_dpec()
+
+ # Emissão normal ou contingência SCAN
+ else:
+ self.danfe.remetente.campo_variavel_normal()
+ # Contingência SCAN
+ if self.NFe.infNFe.ide.tpEmis.valor == 3:
+ self.danfe.remetente.obs_contingencia_normal_scan()
+
+ # A NF-e foi cancelada, no DANFE imprimir o "carimbo" de cancelamento
+ if self.retCancNFe.infCanc.nProt.valor or self.procCancNFe.retCancNFe.infCanc.nProt.valor:
+ if self.procCancNFe.cancNFe.infCanc.xJust.valor:
+ self.danfe.remetente.obs_cancelamento_com_motivo()
+ else:
+ self.danfe.remetente.obs_cancelamento()
+
+ # A NF-e foi cancelada por um evento de cancelamento, , no DANFE imprimir o "carimbo" de cancelamento
+ if self.procEventoCancNFe.retEvento.infEvento.nProt.valor:
+ if self.procEventoCancNFe.evento.infEvento.detEvento.xJust.valor:
+ self.danfe.remetente.obs_cancelamento_com_motivo_evento()
+ else:
+ self.danfe.remetente.obs_cancelamento_evento()
+
+ # Observação de ausência de valor fiscal
+ # se não houver protocolo ou se o ambiente for de homologação
+ if (not self.protNFe.infProt.nProt.valor) or self.NFe.infNFe.ide.tpAmb.valor == 2:
+ self.danfe.remetente.obs_sem_valor_fiscal()
+
+ self.danfe.band_page_header.child_bands.append(self.danfe.destinatario)
+
+ if self.imprime_local_retirada and len(self.NFe.infNFe.retirada.xml):
+ self.danfe.band_page_header.child_bands.append(self.danfe.local_retirada)
+
+ if self.imprime_local_entrega and len(self.NFe.infNFe.entrega.xml):
+ self.danfe.band_page_header.child_bands.append(self.danfe.local_entrega)
+
+ if self.imprime_fatura:
+ # Pagamento a prazo
+ if (self.NFe.infNFe.ide.indPag.valor == 1) or \
+ (len(self.NFe.infNFe.cobr.dup) > 1) or \
+ ((len(self.NFe.infNFe.cobr.dup) == 1) and \
+ (self.NFe.infNFe.cobr.dup[0].dVenc.valor.toordinal() > self.NFe.infNFe.ide.dEmi.valor.toordinal())):
+
+ if self.imprime_duplicatas:
+ self.danfe.fatura_a_prazo.elements.append(self.danfe.duplicatas)
+
+ self.danfe.band_page_header.child_bands.append(self.danfe.fatura_a_prazo)
+
+ # Pagamento a vista
+ elif (self.NFe.infNFe.ide.indPag.valor != 2):
+ self.danfe.band_page_header.child_bands.append(self.danfe.fatura_a_vista)
+
+ if self.imprime_duplicatas:
+ self.danfe.fatura_a_vista.elements.append(self.danfe.duplicatas)
+
+ self.danfe.band_page_header.child_bands.append(self.danfe.calculo_imposto)
+ self.danfe.band_page_header.child_bands.append(self.danfe.transporte)
+ self.danfe.band_page_header.child_bands.append(self.danfe.cab_produto)
+
+ if self.imprime_issqn and len(self.NFe.infNFe.total.ISSQNTot.xml):
+ self.danfe.band_page_footer = self.danfe.iss
+ else:
+ self.danfe.band_page_footer = self.danfe.dados_adicionais
+
+ self.danfe.band_detail = self.danfe.det_produto
+
+ #
+ # Observação de impressão
+ #
+ if self.nome_sistema:
+ self.danfe.ObsImpressao.expression = self.nome_sistema + ' - ' + self.obs_impressao
+ else:
+ self.danfe.ObsImpressao.expression = self.obs_impressao
+
+ #
+ # Quadro do emitente
+ #
+ # Personalizado?
+ if self.dados_emitente:
+ self.danfe.remetente.monta_quadro_emitente(self.dados_emitente)
+ else:
+ # Sem logotipo
+ if not self.logo:
+ self.danfe.remetente.monta_quadro_emitente(self.danfe.remetente.dados_emitente_sem_logo())
+
+ # Logotipo na vertical
+ elif self.leiaute_logo_vertical:
+ self.danfe.remetente.monta_quadro_emitente(self.danfe.remetente.dados_emitente_logo_vertical(self.logo))
+
+ # Logotipo na horizontal
+ else:
+ self.danfe.remetente.monta_quadro_emitente(self.danfe.remetente.dados_emitente_logo_horizontal(self.logo))
+
+ danfe_pdf = BytesIO()
+ self.danfe.generate_by(PDFGenerator, filename=danfe_pdf)
+ self.conteudo_pdf = danfe_pdf.getvalue()
+ danfe_pdf.close()
+
+ if self.salvar_arquivo:
+ nome_arq = self.caminho + self.NFe.chave + '.pdf'
+ self.danfe.generate_by(PDFGenerator, filename=nome_arq)
diff --git a/pysped/nfe/danfe/danfepaisagem.py b/pysped/nfe/danfe/danfepaisagem.py
index 329d7dc6..0377e117 100644
--- a/pysped/nfe/danfe/danfepaisagem.py
+++ b/pysped/nfe/danfe/danfepaisagem.py
@@ -385,8 +385,6 @@ def __init__(self):
if __name__ == '__main__':
- print('aqui')
-
registra_fontes()
registros = [{'id': 1}, {'id': 1}, {'id': 1}, {'id': 1}, {'id': 1}, {'id': 1}, {'id': 1}, {'id': 1}, {'id': 1}, {'id': 1},]
diff --git a/pysped/nfe/danfe/danferetrato.py b/pysped/nfe/danfe/danferetrato.py
index 5beaea1b..7c846336 100644
--- a/pysped/nfe/danfe/danferetrato.py
+++ b/pysped/nfe/danfe/danferetrato.py
@@ -245,8 +245,8 @@ def __init__(self):
self.inclui_campo(nome='remetente_natureza', titulo=u'NATUREZA DA OPERAÇÃO', conteudo=u'NFe.infNFe.ide.natOp.valor', top=4*cm, left=0*cm, width=11.4*cm)
- self.inclui_campo(nome='remetente_ie', titulo=u'INSCRIÇÃO ESTADUAL', conteudo=u'NFe.infNFe.emit.IE.valor', top=4.70*cm, left=0*cm, width=6.4*cm)
- self.inclui_campo(nome='remetente_iest', titulo=u'INSCRIÇÃO ESTADUAL DO SUBSTITUTO TRIBUTÁRIO', conteudo=u'NFe.infNFe.emit.IEST.valor', top=4.70*cm, left=6.4*cm, width=6.6*cm)
+ self.inclui_campo(nome='remetente_ie', titulo=u'INSCRIÇÃO ESTADUAL', conteudo=u'NFe.ie_emitente_formatada', top=4.70*cm, left=0*cm, width=6.4*cm)
+ self.inclui_campo(nome='remetente_iest', titulo=u'INSCRIÇÃO ESTADUAL DO SUBSTITUTO TRIBUTÁRIO', conteudo=u'NFe.ie_st_formatada', top=4.70*cm, left=6.4*cm, width=6.6*cm)
self.inclui_campo(nome='remetente_cnpj', titulo=u'CNPJ', conteudo=u'NFe.cnpj_emitente_formatado', top=4.70*cm, left=13*cm, width=6.4*cm, margem_direita=True)
self.height = 5.4*cm
@@ -775,7 +775,7 @@ def __init__(self):
lbl, fld = self.inclui_campo(nome='remetente_municipio', titulo=u'MUNICÍPIO', conteudo=u'NFe.infNFe.dest.enderDest.xMun.valor', top=1.82*cm, left=0*cm, width=9.9*cm)
lbl, fld = self.inclui_campo(nome='remetente_fone', titulo=u'FONE', conteudo=u'NFe.fone_destinatario_formatado', top=1.82*cm, left=9.9*cm, width=3.3*cm)
lbl, fld = self.inclui_campo(nome='remetente_uf', titulo=u'UF', conteudo='NFe.infNFe.dest.enderDest.UF.valor', top=1.82*cm, left=13.2*cm, width=0.75*cm)
- lbl, fld = self.inclui_campo(nome='remetente_ie', titulo=u'INSCRIÇÃO ESTADUAL', conteudo=u'NFe.infNFe.dest.IE.valor', top=1.82*cm, left=13.95*cm, width=3.25*cm)
+ lbl, fld = self.inclui_campo(nome='remetente_ie', titulo=u'INSCRIÇÃO ESTADUAL', conteudo=u'NFe.ie_destinatario_formatada', top=1.82*cm, left=13.95*cm, width=3.25*cm)
lbl, fld = self.inclui_campo(nome='remetente_hora_entradasaida', titulo=u'HORA DA ENTRADA/SAÍDA', conteudo=u'NFe.infNFe.ide.hSaiEnt.formato_danfe', top=1.82*cm, left=17.2*cm, width=2.2*cm, margem_direita=True)
fld.style = DADO_CAMPO_NEGRITO
@@ -919,7 +919,7 @@ def __init__(self):
lbl, fld = self.inclui_campo(nome='trn_end', titulo=u'ENDEREÇO', conteudo='NFe.infNFe.transp.transporta.xEnder.valor', top=1.12*cm, left=0*cm, width=9.75*cm)
lbl, fld = self.inclui_campo(nome='trn_mun', titulo=u'MUNICÍPIO', conteudo='NFe.infNFe.transp.transporta.xMun.valor', top=1.12*cm, left=9.75*cm, width=5.85*cm)
lbl, fld = self.inclui_campo(nome='trn_uf', titulo=u'UF', conteudo='NFe.infNFe.transp.transporta.UF.valor', top=1.12*cm, left=15.6*cm, width=0.6*cm)
- lbl, fld = self.inclui_campo(nome='trn_ie', titulo=u'INSCRIÇÃO ESTADUAL', conteudo=u'NFe.infNFe.transp.transporta.IE.valor', top=1.12*cm, left=16.2*cm, width=3.1*cm, margem_direita=True)
+ lbl, fld = self.inclui_campo(nome='trn_ie', titulo=u'INSCRIÇÃO ESTADUAL', conteudo=u'NFe.ie_transportadora_formatada', top=1.12*cm, left=16.2*cm, width=3.1*cm, margem_direita=True)
# 3ª linha
self.elements.append(VolumesRetrato())
diff --git a/pysped/nfe/danfe/danfse.py b/pysped/nfe/danfe/danfse.py
new file mode 100644
index 00000000..3c757190
--- /dev/null
+++ b/pysped/nfe/danfe/danfse.py
@@ -0,0 +1,121 @@
+# -*- coding: utf-8 -*-
+#
+# PySPED - Python libraries to deal with Brazil's SPED Project
+#
+# Copyright (C) 2010-2012
+# Copyright (C) Aristides Caldeira
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Library General Public License as
+# published by the Free Software Foundation, either version 2.1 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public License
+# along with this program. If not, see .
+#
+# PySPED - Bibliotecas Python para o
+# SPED - Sistema Público de Escrituração Digital
+#
+# Copyright (C) 2010-2012
+# Copyright (C) Aristides Caldeira
+#
+# Este programa é um software livre: você pode redistribuir e/ou modificar
+# este programa sob os termos da licença GNU Library General Public License,
+# publicada pela Free Software Foundation, em sua versão 2.1 ou, de acordo
+# com sua opção, qualquer versão posterior.
+#
+# Este programa é distribuido na esperança de que venha a ser útil,
+# porém SEM QUAISQUER GARANTIAS, nem mesmo a garantia implícita de
+# COMERCIABILIDADE ou ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Veja a
+# GNU Library General Public License para mais detalhes.
+#
+# Você deve ter recebido uma cópia da GNU Library General Public License
+# juntamente com este programa. Caso esse não seja o caso, acesse:
+#
+#
+
+from __future__ import (division, print_function, unicode_literals,
+ absolute_import)
+
+import os
+import base64
+from io import BytesIO
+from py3o.template import Template
+import sh
+
+from .danfe import DANFE
+
+DIRNAME = os.path.dirname(__file__)
+
+CACHE_LOGO = {}
+
+
+class DANFSE(DANFE):
+ def __init__(self):
+ super(DANFSE, self).__init__()
+ self.imprime_descricao_servico = True
+ self.imprime_item_servico = True
+ self.imprime_codigo_cnae = True
+ self.imprime_codigo_servico = True
+ self.imprime_construcao_civil = False
+
+ def reset(self):
+ super(DANFSE, self).reset()
+
+ def gerar_danfse(self):
+ if self.NFe is None:
+ raise ValueError('Não é possível gerar um DANFSE sem a informação de uma NFS-e')
+
+ if self.protNFe is None:
+ self.reset()
+
+ #
+ # Prepara o queryset para impressão
+ #
+ self.NFe.site = self.site
+
+ if self.template:
+ if isinstance(self.template, (file, BytesIO)):
+ template = self.template
+ else:
+ template = open(self.template, 'rb')
+
+ else:
+ template = open(os.path.join(DIRNAME, 'danfse_a4.odt'), 'rb')
+
+ self._gera_pdf(template)
+
+ if self.salvar_arquivo:
+ #nome_arq = self.caminho + self.NFe.chave + '.pdf'
+ nome_arq = self.caminho + 'nfse.pdf'
+ open(nome_arq, 'wb').write(self.conteudo_pdf)
+
+ def gerar_danfe(self):
+ self.gerar_danfse()
+
+ @property
+ def logo_prefeitura(self):
+ if self.NFe is None:
+ return ''
+
+ if not self.NFe.nome_cidade:
+ return ''
+
+ if self.NFe.nome_cidade in CACHE_LOGO:
+ return CACHE_LOGO[self.NFe.nome_cidade]
+
+ caminho_logo = os.path.join(DIRNAME, '../../nfse/logo_prefeitura/', self.NFe.nome_cidade + '.jpeg')
+
+ if not os.path.exists(caminho_logo):
+ return ''
+
+ logo = open(caminho_logo, 'rb').read()
+
+ CACHE_LOGO[self.NFe.nome_cidade] = base64.encodebytes(logo)
+
+ return CACHE_LOGO[self.NFe.nome_cidade]
diff --git a/pysped/nfe/danfe/danfse_a4.odt b/pysped/nfe/danfe/danfse_a4.odt
new file mode 100644
index 00000000..da581b61
Binary files /dev/null and b/pysped/nfe/danfe/danfse_a4.odt differ
diff --git a/pysped/nfe/danfe/duplicata_a4_retrato.odt b/pysped/nfe/danfe/duplicata_a4_retrato.odt
new file mode 100644
index 00000000..267689cd
Binary files /dev/null and b/pysped/nfe/danfe/duplicata_a4_retrato.odt differ
diff --git a/pysped/nfe/leiaute/__init__.py b/pysped/nfe/leiaute/__init__.py
index 8c1c03a6..c06fa688 100644
--- a/pysped/nfe/leiaute/__init__.py
+++ b/pysped/nfe/leiaute/__init__.py
@@ -49,72 +49,72 @@
#
# Envelopes SOAP
#
-from soap_100 import SOAPEnvio as SOAPEnvio_110
-from soap_100 import SOAPRetorno as SOAPRetorno_110
+from .soap_100 import SOAPEnvio as SOAPEnvio_110
+from .soap_100 import SOAPRetorno as SOAPRetorno_110
#
# Emissão de NF-e
#
-from nfe_110 import NFe as NFe_110
-from nfe_110 import NFRef as NFRef_110
-from nfe_110 import Det as Det_110
-from nfe_110 import DI as DI_110
-from nfe_110 import Adi as Adi_110
-from nfe_110 import Med as Med_110
-from nfe_110 import Arma as Arma_110
-from nfe_110 import Reboque as Reboque_110
-from nfe_110 import Vol as Vol_110
-from nfe_110 import Lacres as Lacres_110
-from nfe_110 import Dup as Dup_110
-from nfe_110 import ObsCont as ObsCont_110
-from nfe_110 import ObsFisco as ObsFisco_110
-from nfe_110 import ProcRef as ProcRef_110
+from .nfe_110 import NFe as NFe_110
+from .nfe_110 import NFRef as NFRef_110
+from .nfe_110 import Det as Det_110
+from .nfe_110 import DI as DI_110
+from .nfe_110 import Adi as Adi_110
+from .nfe_110 import Med as Med_110
+from .nfe_110 import Arma as Arma_110
+from .nfe_110 import Reboque as Reboque_110
+from .nfe_110 import Vol as Vol_110
+from .nfe_110 import Lacres as Lacres_110
+from .nfe_110 import Dup as Dup_110
+from .nfe_110 import ObsCont as ObsCont_110
+from .nfe_110 import ObsFisco as ObsFisco_110
+from .nfe_110 import ProcRef as ProcRef_110
#
# Envio de lote de NF-e
#
-from envinfe_110 import EnviNFe as EnviNFe_110
-from envinfe_110 import RetEnviNFe as RetEnviNFe_110
+from .envinfe_110 import EnviNFe as EnviNFe_110
+from .envinfe_110 import RetEnviNFe as RetEnviNFe_110
#
# Consulta do recibo do lote de NF-e
#
-from consrecinfe_110 import ConsReciNFe as ConsReciNFe_110
-from consrecinfe_110 import RetConsReciNFe as RetConsReciNFe_110
-from consrecinfe_110 import ProtNFe as ProtNFe_110
-from consrecinfe_110 import ProcNFe as ProcNFe_110
+from .consrecinfe_110 import ConsReciNFe as ConsReciNFe_110
+from .consrecinfe_110 import RetConsReciNFe as RetConsReciNFe_110
+from .consrecinfe_110 import ProtNFe as ProtNFe_110
+from .consrecinfe_110 import ProcNFe as ProcNFe_110
#
# Cancelamento de NF-e
#
-from cancnfe_107 import CancNFe as CancNFe_107
-from cancnfe_107 import RetCancNFe as RetCancNFe_107
-from cancnfe_107 import ProcCancNFe as ProcCancNFe_107
+from .cancnfe_107 import CancNFe as CancNFe_107
+from .cancnfe_107 import RetCancNFe as RetCancNFe_107
+from .cancnfe_107 import ProcCancNFe as ProcCancNFe_107
#
# Inutilização de NF-e
#
-from inutnfe_107 import InutNFe as InutNFe_107
-from inutnfe_107 import RetInutNFe as RetInutNFe_107
-from inutnfe_107 import ProcInutNFe as ProcInutNFe_107
+from .inutnfe_107 import InutNFe as InutNFe_107
+from .inutnfe_107 import RetInutNFe as RetInutNFe_107
+from .inutnfe_107 import ProcInutNFe as ProcInutNFe_107
#
# Consulta a situação de NF-e
#
-from conssitnfe_107 import ConsSitNFe as ConsSitNFe_107
-from conssitnfe_107 import RetConsSitNFe as RetConsSitNFe_107
+from .conssitnfe_107 import ConsSitNFe as ConsSitNFe_107
+from .conssitnfe_107 import RetConsSitNFe as RetConsSitNFe_107
#
# Consulta a situação do serviço
#
-from consstatserv_107 import ConsStatServ as ConsStatServ_107
-from consstatserv_107 import RetConsStatServ as RetConsStatServ_107
+from .consstatserv_107 import ConsStatServ as ConsStatServ_107
+from .consstatserv_107 import RetConsStatServ as RetConsStatServ_107
#
# Consulta cadastro
#
-from conscad_101 import ConsCad as ConsCad_101
-from conscad_101 import RetConsCad as RetConsCad_101
+from .conscad_101 import ConsCad as ConsCad_101
+from .conscad_101 import RetConsCad as RetConsCad_101
#
@@ -125,206 +125,284 @@
#
# Envelopes SOAP
#
-from soap_200 import SOAPEnvio as SOAPEnvio_200
-from soap_200 import SOAPRetorno as SOAPRetorno_200
+from .soap_200 import SOAPEnvio as SOAPEnvio_200
+from .soap_200 import SOAPRetorno as SOAPRetorno_200
#
# Emissão de NF-e
#
-from nfe_200 import NFe as NFe_200
-from nfe_200 import NFRef as NFRef_200
-from nfe_200 import Det as Det_200
-from nfe_200 import DI as DI_200
-from nfe_200 import Adi as Adi_200
-from nfe_200 import Med as Med_200
-from nfe_200 import Arma as Arma_200
-from nfe_200 import Reboque as Reboque_200
-from nfe_200 import Vol as Vol_200
-from nfe_200 import Lacres as Lacres_200
-from nfe_200 import Dup as Dup_200
-from nfe_200 import ObsCont as ObsCont_200
-from nfe_200 import ObsFisco as ObsFisco_200
-from nfe_200 import ProcRef as ProcRef_200
+from .nfe_200 import NFe as NFe_200
+from .nfe_200 import NFRef as NFRef_200
+from .nfe_200 import Det as Det_200
+from .nfe_200 import DI as DI_200
+from .nfe_200 import Adi as Adi_200
+from .nfe_200 import Med as Med_200
+from .nfe_200 import Arma as Arma_200
+from .nfe_200 import Reboque as Reboque_200
+from .nfe_200 import Vol as Vol_200
+from .nfe_200 import Lacres as Lacres_200
+from .nfe_200 import Dup as Dup_200
+from .nfe_200 import ObsCont as ObsCont_200
+from .nfe_200 import ObsFisco as ObsFisco_200
+from .nfe_200 import ProcRef as ProcRef_200
#
# Envio de lote de NF-e
#
-from envinfe_200 import EnviNFe as EnviNFe_200
-from envinfe_200 import RetEnviNFe as RetEnviNFe_200
+from .envinfe_200 import EnviNFe as EnviNFe_200
+from .envinfe_200 import RetEnviNFe as RetEnviNFe_200
#
# Consulta do recibo do lote de NF-e
#
-from consrecinfe_200 import ConsReciNFe as ConsReciNFe_200
-from consrecinfe_200 import RetConsReciNFe as RetConsReciNFe_200
-from consrecinfe_200 import ProtNFe as ProtNFe_200
-from consrecinfe_200 import ProcNFe as ProcNFe_200
+from .consrecinfe_200 import ConsReciNFe as ConsReciNFe_200
+from .consrecinfe_200 import RetConsReciNFe as RetConsReciNFe_200
+from .consrecinfe_200 import ProtNFe as ProtNFe_200
+from .consrecinfe_200 import ProcNFe as ProcNFe_200
#
# Cancelamento de NF-e
#
-from cancnfe_200 import CancNFe as CancNFe_200
-from cancnfe_200 import RetCancNFe as RetCancNFe_200
-from cancnfe_200 import ProcCancNFe as ProcCancNFe_200
+from .cancnfe_200 import CancNFe as CancNFe_200
+from .cancnfe_200 import RetCancNFe as RetCancNFe_200
+from .cancnfe_200 import ProcCancNFe as ProcCancNFe_200
#
# Inutilização de NF-e
#
-from inutnfe_200 import InutNFe as InutNFe_200
-from inutnfe_200 import RetInutNFe as RetInutNFe_200
-from inutnfe_200 import ProcInutNFe as ProcInutNFe_200
+from .inutnfe_200 import InutNFe as InutNFe_200
+from .inutnfe_200 import RetInutNFe as RetInutNFe_200
+from .inutnfe_200 import ProcInutNFe as ProcInutNFe_200
#
# Consulta a situação de NF-e
#
-from conssitnfe_200 import ConsSitNFe as ConsSitNFe_200
-from conssitnfe_200 import RetConsSitNFe as RetConsSitNFe_200
+from .conssitnfe_200 import ConsSitNFe as ConsSitNFe_200
+from .conssitnfe_200 import RetConsSitNFe as RetConsSitNFe_200
#
# Consulta a situação do serviço
#
-from consstatserv_200 import ConsStatServ as ConsStatServ_200
-from consstatserv_200 import RetConsStatServ as RetConsStatServ_200
+from .consstatserv_200 import ConsStatServ as ConsStatServ_200
+from .consstatserv_200 import RetConsStatServ as RetConsStatServ_200
#
# Eventos da NF-e - classes básicas
#
-from eventonfe_100 import Evento as Evento_100
-from eventonfe_100 import RetEvento as RetEvento_100
-from eventonfe_100 import ProcEvento as ProcEvento_100
-from eventonfe_100 import EnvEvento as EnvEvento_100
-from eventonfe_100 import RetEnvEvento as RetEnvEvento_100
+from .eventonfe_100 import Evento as Evento_100
+from .eventonfe_100 import RetEvento as RetEvento_100
+from .eventonfe_100 import ProcEvento as ProcEvento_100
+from .eventonfe_100 import EnvEvento as EnvEvento_100
+from .eventonfe_100 import RetEnvEvento as RetEnvEvento_100
#
# Eventos da NF-e - Carta de Correção Eletrônica
#
-from evtccenfe_100 import EventoCCe as EventoCCe_100
-from evtccenfe_100 import RetEventoCCe as RetEventoCCe_100
-from evtccenfe_100 import ProcEventoCCe as ProcEventoCCe_100
-from evtccenfe_100 import EnvEventoCCe as EnvEventoCCe_100
-from evtccenfe_100 import RetEnvEventoCCe as RetEnvEventoCCe_100
+from .evtccenfe_100 import EventoCCe as EventoCCe_100
+from .evtccenfe_100 import RetEventoCCe as RetEventoCCe_100
+from .evtccenfe_100 import ProcEventoCCe as ProcEventoCCe_100
+from .evtccenfe_100 import EnvEventoCCe as EnvEventoCCe_100
+from .evtccenfe_100 import RetEnvEventoCCe as RetEnvEventoCCe_100
#
# Eventos da NF-e - Cancelamento como Evento
#
-from evtcancnfe_100 import EventoCancNFe as EventoCancNFe_100
-from evtcancnfe_100 import RetEventoCancNFe as RetEventoCancNFe_100
-from evtcancnfe_100 import ProcEventoCancNFe as ProcEventoCancNFe_100
-from evtcancnfe_100 import EnvEventoCancNFe as EnvEventoCancNFe_100
-from evtcancnfe_100 import RetEnvEventoCancNFe as RetEnvEventoCancNFe_100
+from .evtcancnfe_100 import EventoCancNFe as EventoCancNFe_100
+from .evtcancnfe_100 import RetEventoCancNFe as RetEventoCancNFe_100
+from .evtcancnfe_100 import ProcEventoCancNFe as ProcEventoCancNFe_100
+from .evtcancnfe_100 import EnvEventoCancNFe as EnvEventoCancNFe_100
+from .evtcancnfe_100 import RetEnvEventoCancNFe as RetEnvEventoCancNFe_100
#
# Eventos da NF-e - Confirmação de Recebimento/Manifestação do Destinatário
#
-from evtconfrecebimento_100 import EventoConfRecebimento as EventoConfRecebimento_100
-from evtconfrecebimento_100 import RetEventoConfRecebimento as RetEventoConfRecebimento_100
-from evtconfrecebimento_100 import ProcEventoConfRecebimento as ProcEventoConfRecebimento_100
-from evtconfrecebimento_100 import EnvEventoConfRecebimento as EnvEventoConfRecebimento_100
-from evtconfrecebimento_100 import RetEnvEventoConfRecebimento as RetEnvEventoConfRecebimento_100
-from evtconfrecebimento_100 import CONF_RECEBIMENTO_CONFIRMAR_OPERACAO
-from evtconfrecebimento_100 import CONF_RECEBIMENTO_CIENCIA_OPERACAO
-from evtconfrecebimento_100 import CONF_RECEBIMENTO_DESCONHECIMENTO_OPERACAO
-from evtconfrecebimento_100 import CONF_RECEBIMENTO_OPERACAO_NAO_REALIZADA
-from evtconfrecebimento_100 import DESCEVENTO_CONF_RECEBIMENTO
+from .evtconfrecebimento_100 import EventoConfRecebimento as EventoConfRecebimento_100
+from .evtconfrecebimento_100 import RetEventoConfRecebimento as RetEventoConfRecebimento_100
+from .evtconfrecebimento_100 import ProcEventoConfRecebimento as ProcEventoConfRecebimento_100
+from .evtconfrecebimento_100 import EnvEventoConfRecebimento as EnvEventoConfRecebimento_100
+from .evtconfrecebimento_100 import RetEnvEventoConfRecebimento as RetEnvEventoConfRecebimento_100
+from .evtconfrecebimento_100 import CONF_RECEBIMENTO_CONFIRMAR_OPERACAO
+from .evtconfrecebimento_100 import CONF_RECEBIMENTO_CIENCIA_OPERACAO
+from .evtconfrecebimento_100 import CONF_RECEBIMENTO_DESCONHECIMENTO_OPERACAO
+from .evtconfrecebimento_100 import CONF_RECEBIMENTO_OPERACAO_NAO_REALIZADA
+from .evtconfrecebimento_100 import DESCEVENTO_CONF_RECEBIMENTO
#
# Consulta NF-e destinadas
#
-from consnfedest_101 import ConsNFeDest as ConsNFeDest_101
-from consnfedest_101 import RetConsNFeDest as RetConsNFeDest_101
-from consnfedest_101 import CONS_NFE_TODAS
-from consnfedest_101 import CONS_NFE_SEM_CONFIRMACAO_OPERACAO
-from consnfedest_101 import CONS_NFE_SEM_CIENCIA_OPERACAO
-from consnfedest_101 import CONS_NFE_EMISSAO_TODOS_EMITENTES
-from consnfedest_101 import CONS_NFE_EMISSAO_SOMENTE_TERCEIROS
+from .consnfedest_101 import ConsNFeDest as ConsNFeDest_101
+from .consnfedest_101 import RetConsNFeDest as RetConsNFeDest_101
+from .consnfedest_101 import CONS_NFE_TODAS
+from .consnfedest_101 import CONS_NFE_SEM_CONFIRMACAO_OPERACAO
+from .consnfedest_101 import CONS_NFE_SEM_CIENCIA_OPERACAO
+from .consnfedest_101 import CONS_NFE_EMISSAO_TODOS_EMITENTES
+from .consnfedest_101 import CONS_NFE_EMISSAO_SOMENTE_TERCEIROS
#
# Consulta a situação de NF-e - nova versão com os eventos
#
-from conssitnfe_201 import ConsSitNFe as ConsSitNFe_201
-from conssitnfe_201 import RetConsSitNFe as RetConsSitNFe_201
+from .conssitnfe_201 import ConsSitNFe as ConsSitNFe_201
+from .conssitnfe_201 import RetConsSitNFe as RetConsSitNFe_201
#
# Download de NF-e
#
-from downloadnfe_100 import DownloadNFe as DownloadNFe_100
-from downloadnfe_100 import TagChNFe as TagChNFe_100
-from downloadnfe_100 import RetDownloadNFe as RetDownloadNFe_100
+from .downloadnfe_100 import DownloadNFe as DownloadNFe_100
+from .downloadnfe_100 import TagChNFe as TagChNFe_100
+from .downloadnfe_100 import RetDownloadNFe as RetDownloadNFe_100
#
# Consulta cadastro
#
-from conscad_200 import ConsCad as ConsCad_200
-from conscad_200 import RetConsCad as RetConsCad_200
+from .conscad_200 import ConsCad as ConsCad_200
+from .conscad_200 import RetConsCad as RetConsCad_200
#
# Versão 3.10, usada a partir de novembro/2013 para a NFC-e, e
-# março/2014 para a NF-e
+# março/2014 para a NF-e, ambas até março/2018
#
ESQUEMA_ATUAL_VERSAO_3 = 'pl_008i2'
#
# Emissão de NFC-e
#
-from nfce_310 import NFCe as NFCe_310
+from .nfe_310 import NFCe as NFCe_310
+
+#
+# Emissão de NFS-e
+#
+from .nfe_310 import NFSe as NFSe_310
+
+#
+# Emissão de NF-e
+#
+from .nfe_310 import NFe as NFe_310
+from .nfe_310 import NFRef as NFRef_310
+from .nfe_310 import Det as Det_310
+from .nfe_310 import DI as DI_310
+from .nfe_310 import Adi as Adi_310
+from .nfe_310 import Med as Med_310
+from .nfe_310 import Arma as Arma_310
+from .nfe_310 import Reboque as Reboque_310
+from .nfe_310 import Vol as Vol_310
+from .nfe_310 import Lacres as Lacres_310
+from .nfe_310 import Dup as Dup_310
+from .nfe_310 import Pag as Pag_310
+from .nfe_310 import ObsCont as ObsCont_310
+from .nfe_310 import ObsFisco as ObsFisco_310
+from .nfe_310 import ProcRef as ProcRef_310
+from .nfe_310 import AutXML as AutXML_310
+
+#
+# Envio de lote de NF-e
+#
+from .envinfe_310 import EnviNFe as EnviNFe_310
+from .envinfe_310 import RetEnviNFe as RetEnviNFe_310
+
+#
+# Consulta do recibo do lote de NF-e
+#
+from .consrecinfe_310 import ConsReciNFe as ConsReciNFe_310
+from .consrecinfe_310 import RetConsReciNFe as RetConsReciNFe_310
+from .consrecinfe_310 import ProtNFe as ProtNFe_310
+from .consrecinfe_310 import ProcNFe as ProcNFe_310
+
+#
+# Inutilização de NF-e
+#
+from .inutnfe_310 import InutNFe as InutNFe_310
+from .inutnfe_310 import RetInutNFe as RetInutNFe_310
+from .inutnfe_310 import ProcInutNFe as ProcInutNFe_310
+
+#
+# Consulta a situação de NF-e
+#
+from .conssitnfe_310 import ConsSitNFe as ConsSitNFe_310
+from .conssitnfe_310 import RetConsSitNFe as RetConsSitNFe_310
+
+#
+# Consulta a situação do serviço
+#
+from .consstatserv_310 import ConsStatServ as ConsStatServ_310
+from .consstatserv_310 import RetConsStatServ as RetConsStatServ_310
+
+#
+# Versão 4.00, usada a partir de agosto/2017
+#
+ESQUEMA_ATUAL_VERSAO_4 = 'pl_009_v4b'
+
+#
+# Emissão de NFC-e
+#
+from .nfe_400 import NFCe as NFCe_400
+
+#
+# Emissão de NFS-e
+#
+from .nfe_400 import NFSe as NFSe_400
#
# Emissão de NF-e
#
-from nfe_310 import NFe as NFe_310
-from nfe_310 import NFRef as NFRef_310
-from nfe_310 import Det as Det_310
-from nfe_310 import DI as DI_310
-from nfe_310 import Adi as Adi_310
-from nfe_310 import Med as Med_310
-from nfe_310 import Arma as Arma_310
-from nfe_310 import Reboque as Reboque_310
-from nfe_310 import Vol as Vol_310
-from nfe_310 import Lacres as Lacres_310
-from nfe_310 import Dup as Dup_310
-from nfe_310 import ObsCont as ObsCont_310
-from nfe_310 import ObsFisco as ObsFisco_310
-from nfe_310 import ProcRef as ProcRef_310
-from nfe_310 import AutXML as AutXML_310
+from .nfe_400 import NFe as NFe_400
+from .nfe_400 import NFRef as NFRef_400
+from .nfe_400 import Det as Det_400
+from .nfe_400 import DI as DI_400
+from .nfe_400 import Adi as Adi_400
+from .nfe_400 import Med as Med_400
+from .nfe_400 import Arma as Arma_400
+from .nfe_400 import Reboque as Reboque_400
+from .nfe_400 import Vol as Vol_400
+from .nfe_400 import Lacres as Lacres_400
+from .nfe_400 import Dup as Dup_400
+from .nfe_400 import DetPag as DetPag_400
+from .nfe_400 import Pag as Pag_400
+from .nfe_400 import ObsCont as ObsCont_400
+from .nfe_400 import ObsFisco as ObsFisco_400
+from .nfe_400 import ProcRef as ProcRef_400
+from .nfe_400 import AutXML as AutXML_400
+from .nfe_400 import Rastro as Rastro_400
+from .nfe_400 import Fat as Fat_400
#
# Envio de lote de NF-e
#
-from envinfe_310 import EnviNFe as EnviNFe_310
-from envinfe_310 import RetEnviNFe as RetEnviNFe_310
+from .envinfe_400 import EnviNFe as EnviNFe_400
+from .envinfe_400 import RetEnviNFe as RetEnviNFe_400
#
# Consulta do recibo do lote de NF-e
#
-from consrecinfe_310 import ConsReciNFe as ConsReciNFe_310
-from consrecinfe_310 import RetConsReciNFe as RetConsReciNFe_310
-from consrecinfe_310 import ProtNFe as ProtNFe_310
-from consrecinfe_310 import ProcNFe as ProcNFe_310
+from .consrecinfe_400 import ConsReciNFe as ConsReciNFe_400
+from .consrecinfe_400 import RetConsReciNFe as RetConsReciNFe_400
+from .consrecinfe_400 import ProtNFe as ProtNFe_400
+from .consrecinfe_400 import ProcNFe as ProcNFe_400
#
# Inutilização de NF-e
#
-from inutnfe_310 import InutNFe as InutNFe_310
-from inutnfe_310 import RetInutNFe as RetInutNFe_310
-from inutnfe_310 import ProcInutNFe as ProcInutNFe_310
+from .inutnfe_400 import InutNFe as InutNFe_400
+from .inutnfe_400 import RetInutNFe as RetInutNFe_400
+from .inutnfe_400 import ProcInutNFe as ProcInutNFe_400
#
# Consulta a situação de NF-e
#
-from conssitnfe_310 import ConsSitNFe as ConsSitNFe_310
-from conssitnfe_310 import RetConsSitNFe as RetConsSitNFe_310
+from .conssitnfe_400 import ConsSitNFe as ConsSitNFe_400
+from .conssitnfe_400 import RetConsSitNFe as RetConsSitNFe_400
#
# Consulta a situação do serviço
#
-from consstatserv_310 import ConsStatServ as ConsStatServ_310
-from consstatserv_310 import RetConsStatServ as RetConsStatServ_310
+from .consstatserv_400 import ConsStatServ as ConsStatServ_400
+from .consstatserv_400 import RetConsStatServ as RetConsStatServ_400
+
#
# Distribuição de DF-e
#
-from distdfeint_100 import DistDFeInt as DistDFeInt_100
-from distdfeint_100 import RetDistDFeInt as RetDistDFeInt_100
-from distdfeint_100 import SOAPEnvio as SOAPEnvioDistDFe_100
-from distdfeint_100 import SOAPRetorno as SOAPRetornoDistDFe_100
+from .distdfeint_100 import DistDFeInt as DistDFeInt_100
+from .distdfeint_100 import RetDistDFeInt as RetDistDFeInt_100
+from .distdfeint_100 import SOAPEnvio as SOAPEnvioDistDFe_100
+from .distdfeint_100 import SOAPRetorno as SOAPRetornoDistDFe_100
diff --git a/pysped/nfe/leiaute/consrecinfe_110.py b/pysped/nfe/leiaute/consrecinfe_110.py
index 099f8537..687a86a0 100644
--- a/pysped/nfe/leiaute/consrecinfe_110.py
+++ b/pysped/nfe/leiaute/consrecinfe_110.py
@@ -45,7 +45,7 @@
TagDataHora, TagDecimal, TagInteiro, XMLNFe, TagDataHoraUTC)
from pysped.nfe.leiaute import ESQUEMA_ATUAL_VERSAO_1 as ESQUEMA_ATUAL
import os
-from nfe_110 import NFe
+from .nfe_110 import NFe
DIRNAME = os.path.dirname(__file__)
diff --git a/pysped/nfe/leiaute/consrecinfe_200.py b/pysped/nfe/leiaute/consrecinfe_200.py
index 9d23a180..b82e83ca 100644
--- a/pysped/nfe/leiaute/consrecinfe_200.py
+++ b/pysped/nfe/leiaute/consrecinfe_200.py
@@ -45,7 +45,7 @@
from pysped.nfe.leiaute import ESQUEMA_ATUAL_VERSAO_2 as ESQUEMA_ATUAL
from pysped.nfe.leiaute import consrecinfe_110
import os
-from nfe_200 import NFe
+from .nfe_200 import NFe
DIRNAME = os.path.dirname(__file__)
diff --git a/pysped/nfe/leiaute/consrecinfe_310.py b/pysped/nfe/leiaute/consrecinfe_310.py
index 30af07e2..945281c1 100644
--- a/pysped/nfe/leiaute/consrecinfe_310.py
+++ b/pysped/nfe/leiaute/consrecinfe_310.py
@@ -45,8 +45,7 @@
from pysped.nfe.leiaute import ESQUEMA_ATUAL_VERSAO_3 as ESQUEMA_ATUAL
from pysped.nfe.leiaute import consrecinfe_200
import os
-from nfe_310 import NFe
-from nfce_310 import NFCe
+from .nfe_310 import NFe, NFCe
DIRNAME = os.path.dirname(__file__)
diff --git a/pysped/nfe/leiaute/consrecinfe_400.py b/pysped/nfe/leiaute/consrecinfe_400.py
new file mode 100644
index 00000000..421da635
--- /dev/null
+++ b/pysped/nfe/leiaute/consrecinfe_400.py
@@ -0,0 +1,88 @@
+# -*- coding: utf-8 -*-
+#
+# PySPED - Python libraries to deal with Brazil's SPED Project
+#
+# Copyright (C) 2010-2012
+# Copyright (C) Aristides Caldeira
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+# PySPED - Bibliotecas Python para o
+# SPED - Sistema Público de Escrituração Digital
+#
+# Copyright (C) 2010-2012
+# Copyright (C) Aristides Caldeira
+#
+# Este programa é um software livre: você pode redistribuir e/ou modificar
+# este programa sob os termos da licença GNU Affero General Public License,
+# publicada pela Free Software Foundation, em sua versão 3 ou, de acordo
+# com sua opção, qualquer versão posterior.
+#
+# Este programa é distribuido na esperança de que venha a ser útil,
+# porém SEM QUAISQUER GARANTIAS, nem mesmo a garantia implícita de
+# COMERCIABILIDADE ou ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Veja a
+# GNU Affero General Public License para mais detalhes.
+#
+# Você deve ter recebido uma cópia da GNU Affero General Public License
+# juntamente com este programa. Caso esse não seja o caso, acesse:
+#
+#
+
+from __future__ import division, print_function, unicode_literals
+
+from pysped.xml_sped import *
+from pysped.nfe.leiaute import ESQUEMA_ATUAL_VERSAO_4 as ESQUEMA_ATUAL
+from pysped.nfe.leiaute import consrecinfe_310
+import os
+from .nfe_400 import NFe
+
+
+DIRNAME = os.path.dirname(__file__)
+
+
+class ConsReciNFe(consrecinfe_310.ConsReciNFe):
+ def __init__(self):
+ super(ConsReciNFe, self).__init__()
+ self.versao = TagDecimal(nome='consReciNFe', codigo='BP02', propriedade='versao', namespace=NAMESPACE_NFE, valor='4.00', raiz='/')
+ self.caminho_esquema = os.path.join(DIRNAME, 'schema/', ESQUEMA_ATUAL + '/')
+ self.arquivo_esquema = 'consReciNFe_v4.00.xsd'
+
+
+class InfProt(consrecinfe_310.InfProt):
+ def __init__(self):
+ super(InfProt, self).__init__()
+
+
+class ProtNFe(consrecinfe_310.ProtNFe):
+ def __init__(self):
+ super(ProtNFe, self).__init__()
+ self.versao = TagDecimal(nome='protNFe', codigo='PR02' , propriedade='versao', namespace=NAMESPACE_NFE, valor='4.00', raiz='/')
+
+
+class RetConsReciNFe(consrecinfe_310.RetConsReciNFe):
+ def __init__(self):
+ super(RetConsReciNFe, self).__init__()
+ self.versao = TagDecimal(nome='retConsReciNFe', codigo='BR02' , propriedade='versao', namespace=NAMESPACE_NFE, valor='4.00', raiz='/')
+ self.caminho_esquema = os.path.join(DIRNAME, 'schema/', ESQUEMA_ATUAL + '/')
+ self.arquivo_esquema = 'retConsReciNFe_v4.00.xsd'
+
+
+class ProcNFe(consrecinfe_310.ProcNFe):
+ def __init__(self):
+ super(ProcNFe, self).__init__()
+ self.versao = TagDecimal(nome='nfeProc', propriedade='versao', namespace=NAMESPACE_NFE, valor='4.00', raiz='/')
+ self.NFe = NFe()
+ self.protNFe = ProtNFe()
+ self.caminho_esquema = os.path.join(DIRNAME, 'schema/', ESQUEMA_ATUAL + '/')
+ self.arquivo_esquema = 'procNFe_v4.00.xsd'
diff --git a/pysped/nfe/leiaute/conssitnfe_400.py b/pysped/nfe/leiaute/conssitnfe_400.py
new file mode 100644
index 00000000..d866457b
--- /dev/null
+++ b/pysped/nfe/leiaute/conssitnfe_400.py
@@ -0,0 +1,114 @@
+# -*- coding: utf-8 -*-
+#
+# PySPED - Python libraries to deal with Brazil's SPED Project
+#
+# Copyright (C) 3100-3102
+# Copyright (C) Aristides Caldeira
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+# PySPED - Bibliotecas Python para o
+# SPED - Sistema Público de Escrituração Digital
+#
+# Copyright (C) 3100-3102
+# Copyright (C) Aristides Caldeira
+#
+# Este programa é um software livre: você pode redistribuir e/ou modificar
+# este programa sob os termos da licença GNU Affero General Public License,
+# publicada pela Free Software Foundation, em sua versão 3 ou, de acordo
+# com sua opção, qualquer versão posterior.
+#
+# Este programa é distribuido na esperança de que venha a ser útil,
+# porém SEM QUAISQUER GARANTIAS, nem mesmo a garantia implícita de
+# COMERCIABILIDADE ou ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Veja a
+# GNU Affero General Public License para mais detalhes.
+#
+# Você deve ter recebido uma cópia da GNU Affero General Public License
+# juntamente com este programa. Caso esse não seja o caso, acesse:
+#
+#
+
+from __future__ import division, print_function, unicode_literals
+
+import os
+from pysped.xml_sped import *
+from pysped.nfe.leiaute import ESQUEMA_ATUAL_VERSAO_4 as ESQUEMA_ATUAL
+from pysped.nfe.leiaute import ProtNFe_400
+from pysped.nfe.leiaute import ProcEventoCancNFe_100, ProcEventoCCe_100
+from pysped.nfe.leiaute import ProcEventoConfRecebimento_100, ProcEvento_100
+from pysped.nfe.leiaute import conssitnfe_310
+
+DIRNAME = os.path.dirname(__file__)
+
+
+class ConsSitNFe(conssitnfe_310.ConsSitNFe):
+ def __init__(self):
+ super(ConsSitNFe, self).__init__()
+ self.versao = TagDecimal(nome='consSitNFe', codigo='EP01', propriedade='versao', namespace=NAMESPACE_NFE, valor='4.00', raiz='/')
+ self.caminho_esquema = os.path.join(DIRNAME, 'schema', ESQUEMA_ATUAL + '/')
+ self.arquivo_esquema = 'consSitNFe_v4.00.xsd'
+
+
+class RetConsSitNFe(conssitnfe_310.RetConsSitNFe):
+ def __init__(self):
+ super(RetConsSitNFe, self).__init__()
+ self.versao = TagDecimal(nome='retConsSitNFe', codigo='ER01', propriedade='versao', namespace=NAMESPACE_NFE, valor='4.00', raiz='/')
+ self.dhRecbto = TagDataHoraUTC(nome='dhRecbto', codigo='FR08', raiz='//retConsSitNFe', obrigatorio=False)
+ self.caminho_esquema = os.path.join(DIRNAME, 'schema', ESQUEMA_ATUAL + '/')
+ self.arquivo_esquema = 'retConsSitNFe_v4.00.xsd'
+
+ def get_xml(self):
+ xml = XMLNFe.get_xml(self)
+ xml += ABERTURA
+ xml += self.versao.xml
+ xml += self.tpAmb.xml
+ xml += self.verAplic.xml
+ xml += self.cStat.xml
+ xml += self.xMotivo.xml
+ xml += self.cUF.xml
+ xml += self.dhRecbto.xml
+ xml += self.chNFe.xml
+
+ if self.protNFe is not None:
+ xml += self.protNFe.xml
+
+ if self.retCancNFe is not None:
+ xml += tira_abertura(self.retCancNFe.xml)
+
+ if self.procEventoNFe is not None:
+ for pen in self.procEventoNFe:
+ xml += tira_abertura(pen.xml)
+
+ xml += ''
+ return xml
+
+ def set_xml(self, arquivo):
+ if self._le_xml(arquivo):
+ self.versao.xml = arquivo
+ self.tpAmb.xml = arquivo
+ self.verAplic.xml = arquivo
+ self.cStat.xml = arquivo
+ self.xMotivo.xml = arquivo
+ self.cUF.xml = arquivo
+ self.dhRecbto.xml = arquivo
+ self.chNFe.xml = arquivo
+
+ if self._le_noh('//retConsSitNFe/protNFe') is not None:
+ self.protNFe = ProtNFe_400()
+ self.protNFe.xml = arquivo
+
+ if self._le_nohs('//retConsSitNFe/procEventoNFe') is not None:
+ self.procEventoNFe = self.le_grupo('//retConsSitNFe/procEventoNFe')
+
+ xml = property(get_xml, set_xml)
diff --git a/pysped/nfe/leiaute/nfce_400.py b/pysped/nfe/leiaute/consstatserv_400.py
similarity index 68%
rename from pysped/nfe/leiaute/nfce_400.py
rename to pysped/nfe/leiaute/consstatserv_400.py
index e960746e..8f58489f 100644
--- a/pysped/nfe/leiaute/nfce_400.py
+++ b/pysped/nfe/leiaute/consstatserv_400.py
@@ -42,28 +42,24 @@
from __future__ import division, print_function, unicode_literals
from pysped.xml_sped import *
-from pysped.nfe.leiaute import ESQUEMA_ATUAL_VERSAO_3 as ESQUEMA_ATUAL
-from pysped.nfe.leiaute import nfe_400
+from pysped.nfe.leiaute import ESQUEMA_ATUAL_VERSAO_4 as ESQUEMA_ATUAL
+from pysped.nfe.leiaute import consstatserv_310
import os
+
DIRNAME = os.path.dirname(__file__)
-class InfNFe(nfe_400.InfNFe):
+class ConsStatServ(consstatserv_310.ConsStatServ):
def __init__(self):
- super(InfNFe, self).__init__()
- self.ide.mod.valor = '65' # NFC-e
- self.ide.tpImp.valor = '4' # DANFE NFC-e em papel
- self.ide.indPres.valor = '1' # Operação presencial
- self.ide.indFinal.valor = '1' # Consumidor final
- self.transp.modFrete.valor = 9 # Sem frete
- self.dest.modelo = '65'
-
+ super(ConsStatServ, self).__init__()
+ self.versao = TagDecimal(nome='consStatServ', codigo='FP01', propriedade='versao', decimais=[0, 2, 2], namespace=NAMESPACE_NFE, valor='4.00', raiz='/')
+ self.caminho_esquema = os.path.join(DIRNAME, 'schema', ESQUEMA_ATUAL + '/')
+ self.arquivo_esquema = 'consStatServ_v4.00.xsd'
-class NFCe(nfe_400.NFe):
+class RetConsStatServ(consstatserv_310.RetConsStatServ):
def __init__(self):
- super(NFCe, self).__init__()
- self.infNFe = InfNFe()
- self.Signature = Signature()
- self.caminho_esquema = os.path.join(DIRNAME, 'schema/', ESQUEMA_ATUAL + '/')
- self.arquivo_esquema = 'nfe_v3.10.xsd'
+ super(RetConsStatServ, self).__init__()
+ self.versao = TagDecimal(nome='retConsStatServ', codigo='FR01', propriedade='versao', namespace=NAMESPACE_NFE, valor='4.00', raiz='/')
+ self.caminho_esquema = os.path.join(DIRNAME, 'schema', ESQUEMA_ATUAL + '/')
+ self.arquivo_esquema = 'retConsStatServ_v4.00.xsd'
diff --git a/pysped/nfe/leiaute/distdfeint_100.py b/pysped/nfe/leiaute/distdfeint_100.py
index 216f1a71..96d092ec 100644
--- a/pysped/nfe/leiaute/distdfeint_100.py
+++ b/pysped/nfe/leiaute/distdfeint_100.py
@@ -39,18 +39,23 @@
#
#
-from __future__ import division, print_function, unicode_literals
+from __future__ import (division, print_function, unicode_literals,
+ absolute_import)
+
+import sys
+from builtins import str
+from io import BytesIO
+import base64
+import unicodedata
+import os
+import gzip
from pysped.xml_sped import (ABERTURA, NAMESPACE_NFE, Signature, TagCaracter,
TagDataHora, TagDecimal, TagInteiro, XMLNFe,
TagDataHoraUTC)
-from pysped.nfe.leiaute import ESQUEMA_ATUAL_VERSAO_3 as ESQUEMA_ATUAL
+from pysped.nfe.leiaute import ESQUEMA_ATUAL_VERSAO_4 as ESQUEMA_ATUAL
from pysped.nfe.leiaute.soap_200 import NFeDadosMsg
-from pysped.nfe.leiaute import ProcNFe_310, ProcEvento_100
-import unicodedata
-import os
-import gzip
-from StringIO import StringIO
+from pysped.nfe.leiaute import ProcNFe_310, ProcEvento_100, ProcNFe_400
DIRNAME = os.path.dirname(__file__)
@@ -190,6 +195,8 @@ def __init__(self):
def get_xml(self):
xml = XMLNFe.get_xml(self)
+ xml += ABERTURA
+ xml += ''
xml += self.chNFe.xml
xml += self.CNPJ.xml
xml += self.CPF.xml
@@ -239,6 +246,8 @@ def __init__(self):
def get_xml(self):
xml = XMLNFe.get_xml(self)
+ xml += ABERTURA
+ xml += ''
xml += self.cOrgao.xml
xml += self.CNPJ.xml
xml += self.CPF.xml
@@ -300,14 +309,14 @@ def texto(self):
if not self.docZip.valor:
return ''
- arq = StringIO()
- arq.write(self.docZip.valor.decode('base64'))
+ arq = BytesIO()
+ arq.write(base64.b64decode(self.docZip.valor))
arq.seek(0)
zip = gzip.GzipFile(fileobj=arq)
texto = zip.read()
arq.close()
zip.close()
- return texto.decode('utf-8')
+ return ABERTURA + texto.decode('utf-8')
@property
def resposta(self):
@@ -317,15 +326,32 @@ def resposta(self):
resposta = None
if self.schema.valor in ('resNFe_v1.00.xsd', 'resNFe_v1.01.xsd'):
resposta = ResNFe()
- texto = unicodedata.normalize(b'NFKD', self.texto).encode('ascii', 'ignore')
- resposta.xml = texto
+
+ if sys.version_info.major == 2:
+ texto = unicodedata.normalize(b'NFKD', self.texto).encode('ascii', 'ignore')
+ else:
+ texto = unicodedata.normalize('NFKD', self.texto).encode('ascii', 'ignore')
+
+ resposta.xml = texto.decode('utf-8')
+
elif self.schema.valor in ('resEvento_v1.00.xsd', 'resEvento_v1.01.xsd'):
resposta = ResEvento()
- texto = unicodedata.normalize(b'NFKD', self.texto).encode('ascii', 'ignore')
- resposta.xml = texto
+
+ if sys.version_info.major == 2:
+ texto = unicodedata.normalize(b'NFKD', self.texto).encode('ascii', 'ignore')
+ else:
+ texto = unicodedata.normalize('NFKD', self.texto).encode('ascii', 'ignore')
+
+ resposta.xml = texto.decode('utf-8')
+
elif self.schema.valor == 'procNFe_v3.10.xsd':
resposta = ProcNFe_310()
resposta.xml = self.texto
+
+ elif self.schema.valor == 'procNFe_v4.00.xsd':
+ resposta = ProcNFe_400()
+ resposta.xml = self.texto
+
elif self.schema.valor == 'procEventoNFe_v1.00.xsd':
resposta = ProcEvento_100()
resposta.xml = self.texto
diff --git a/pysped/nfe/leiaute/envinfe_110.py b/pysped/nfe/leiaute/envinfe_110.py
index 8e684fcc..49d27d62 100644
--- a/pysped/nfe/leiaute/envinfe_110.py
+++ b/pysped/nfe/leiaute/envinfe_110.py
@@ -45,7 +45,7 @@
TagDataHora, TagInteiro, XMLNFe, tira_abertura)
from pysped.nfe.leiaute import ESQUEMA_ATUAL_VERSAO_1 as ESQUEMA_ATUAL
import os
-from nfe_110 import NFe
+from .nfe_110 import NFe
DIRNAME = os.path.dirname(__file__)
@@ -76,7 +76,7 @@ def set_xml(self, arquivo):
if self._le_xml(arquivo):
self.versao.xml = arquivo
self.idLote.xml = arquivo
- self.NFe = self.le_grupo('//enviLote/NFe', NFe)
+ self.NFe = self.le_grupo('//NFe', NFe)
return self.xml
diff --git a/pysped/nfe/leiaute/envinfe_200.py b/pysped/nfe/leiaute/envinfe_200.py
index 14931ca2..e37776d3 100644
--- a/pysped/nfe/leiaute/envinfe_200.py
+++ b/pysped/nfe/leiaute/envinfe_200.py
@@ -46,7 +46,7 @@
from pysped.nfe.leiaute import ESQUEMA_ATUAL_VERSAO_2 as ESQUEMA_ATUAL
from pysped.nfe.leiaute import envinfe_110
import os
-
+from .nfe_200 import NFe
DIRNAME = os.path.dirname(__file__)
@@ -58,6 +58,28 @@ def __init__(self):
self.caminho_esquema = os.path.join(DIRNAME, 'schema/', ESQUEMA_ATUAL + '/')
self.arquivo_esquema = 'enviNFe_v2.00.xsd'
+ def get_xml(self):
+ xml = XMLNFe.get_xml(self)
+ xml += ABERTURA
+ xml += self.versao.xml
+ xml += self.idLote.xml
+
+ for n in self.NFe:
+ xml += tira_abertura(n.xml)
+
+ xml += ''
+ return xml
+
+ def set_xml(self, arquivo):
+ if self._le_xml(arquivo):
+ self.versao.xml = arquivo
+ self.idLote.xml = arquivo
+ self.NFe = self.le_grupo('//NFe', NFe)
+
+ return self.xml
+
+ xml = property(get_xml, set_xml)
+
class InfRec(envinfe_110.InfRec):
def __init__(self):
diff --git a/pysped/nfe/leiaute/envinfe_310.py b/pysped/nfe/leiaute/envinfe_310.py
index 290c3c5e..6143aec3 100644
--- a/pysped/nfe/leiaute/envinfe_310.py
+++ b/pysped/nfe/leiaute/envinfe_310.py
@@ -45,7 +45,7 @@
from pysped.nfe.leiaute import ESQUEMA_ATUAL_VERSAO_3 as ESQUEMA_ATUAL
from pysped.nfe.leiaute import envinfe_200
import os
-from nfe_310 import NFe
+from .nfe_310 import NFe
DIRNAME = os.path.dirname(__file__)
@@ -77,7 +77,7 @@ def set_xml(self, arquivo):
self.versao.xml = arquivo
self.idLote.xml = arquivo
self.indSinc.xml = arquivo
- self.NFe = self.le_grupo('//enviLote/NFe', NFe)
+ self.NFe = self.le_grupo('//NFe', NFe)
return self.xml
diff --git a/pysped/nfe/leiaute/envinfe_400.py b/pysped/nfe/leiaute/envinfe_400.py
new file mode 100644
index 00000000..2866730f
--- /dev/null
+++ b/pysped/nfe/leiaute/envinfe_400.py
@@ -0,0 +1,96 @@
+# -*- coding: utf-8 -*-
+#
+# PySPED - Python libraries to deal with Brazil's SPED Project
+#
+# Copyright (C) 2010-2012
+# Copyright (C) Aristides Caldeira
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+# PySPED - Bibliotecas Python para o
+# SPED - Sistema Público de Escrituração Digital
+#
+# Copyright (C) 2010-2012
+# Copyright (C) Aristides Caldeira
+#
+# Este programa é um software livre: você pode redistribuir e/ou modificar
+# este programa sob os termos da licença GNU Affero General Public License,
+# publicada pela Free Software Foundation, em sua versão 3 ou, de acordo
+# com sua opção, qualquer versão posterior.
+#
+# Este programa é distribuido na esperança de que venha a ser útil,
+# porém SEM QUAISQUER GARANTIAS, nem mesmo a garantia implícita de
+# COMERCIABILIDADE ou ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Veja a
+# GNU Affero General Public License para mais detalhes.
+#
+# Você deve ter recebido uma cópia da GNU Affero General Public License
+# juntamente com este programa. Caso esse não seja o caso, acesse:
+#
+#
+
+from __future__ import division, print_function, unicode_literals
+
+from pysped.xml_sped import *
+from pysped.nfe.leiaute import ESQUEMA_ATUAL_VERSAO_4 as ESQUEMA_ATUAL
+from pysped.nfe.leiaute import envinfe_310
+import os
+from .nfe_400 import NFe
+
+
+DIRNAME = os.path.dirname(__file__)
+
+
+class EnviNFe(envinfe_310.EnviNFe):
+ def __init__(self):
+ super(EnviNFe, self).__init__()
+ self.versao = TagDecimal(nome='enviNFe', codigo='AP02', propriedade='versao', namespace=NAMESPACE_NFE, valor='4.00', raiz='/')
+ self.caminho_esquema = os.path.join(DIRNAME, 'schema/', ESQUEMA_ATUAL + '/')
+ self.arquivo_esquema = 'enviNFe_v4.00.xsd'
+
+ def get_xml(self):
+ xml = XMLNFe.get_xml(self)
+ xml += ABERTURA
+ xml += self.versao.xml
+ xml += self.idLote.xml
+ xml += self.indSinc.xml
+
+ for n in self.NFe:
+ xml += tira_abertura(n.xml)
+
+ xml += ''
+ return xml
+
+ def set_xml(self, arquivo):
+ if self._le_xml(arquivo):
+ self.versao.xml = arquivo
+ self.idLote.xml = arquivo
+ self.indSinc.xml = arquivo
+ self.NFe = self.le_grupo('//NFe', NFe)
+
+ return self.xml
+
+ xml = property(get_xml, set_xml)
+
+
+class InfRec(envinfe_310.InfRec):
+ def __init__(self):
+ super(InfRec, self).__init__()
+
+
+class RetEnviNFe(envinfe_310.RetEnviNFe):
+ def __init__(self):
+ super(RetEnviNFe, self).__init__()
+ self.versao = TagDecimal(nome='retEnviNFe', codigo='AR02' , propriedade='versao', namespace=NAMESPACE_NFE, valor='4.00', raiz='/')
+ self.caminho_esquema = os.path.join(DIRNAME, 'schema/', ESQUEMA_ATUAL + '/')
+ self.arquivo_esquema = 'retEnviNFe_v4.00.xsd'
diff --git a/pysped/nfe/leiaute/eventonfe_100.py b/pysped/nfe/leiaute/eventonfe_100.py
index 485d1fca..e10d3446 100644
--- a/pysped/nfe/leiaute/eventonfe_100.py
+++ b/pysped/nfe/leiaute/eventonfe_100.py
@@ -39,7 +39,10 @@
#
#
-from __future__ import division, print_function, unicode_literals
+from __future__ import (division, print_function, unicode_literals,
+ absolute_import)
+
+from builtins import str
from pysped.xml_sped import (ABERTURA, NAMESPACE_NFE, Signature,
TagDecimal, TagCaracter, TagDataHoraUTC,
@@ -95,7 +98,7 @@ def __init__(self):
def get_xml(self):
xml = XMLNFe.get_xml(self)
- self.Id.valor = 'ID' + self.tpEvento.valor + self.chNFe.valor + unicode(self.nSeqEvento.valor).zfill(2)
+ self.Id.valor = 'ID' + self.tpEvento.valor + self.chNFe.valor + str(self.nSeqEvento.valor).zfill(2)
xml += self.Id.xml
xml += self.cOrgao.xml
diff --git a/pysped/nfe/leiaute/inutnfe_107.py b/pysped/nfe/leiaute/inutnfe_107.py
index ab05e3c5..77e22a35 100644
--- a/pysped/nfe/leiaute/inutnfe_107.py
+++ b/pysped/nfe/leiaute/inutnfe_107.py
@@ -39,7 +39,10 @@
#
#
-from __future__ import division, print_function, unicode_literals
+from __future__ import (division, print_function, unicode_literals,
+ absolute_import)
+
+from builtins import str
from pysped.xml_sped import (ABERTURA, NAMESPACE_NFE, Signature, TagCaracter,
TagDataHora, TagDecimal, TagInteiro, XMLNFe)
@@ -132,13 +135,13 @@ def set_xml(self, arquivo):
xml = property(get_xml, set_xml)
def monta_chave(self):
- chave = unicode(self.infInut.cUF.valor).zfill(2)
+ chave = str(self.infInut.cUF.valor).zfill(2)
chave += self.infInut.ano.valor.zfill(2)
chave += self.infInut.CNPJ.valor.zfill(14)
- chave += unicode(self.infInut.mod.valor).zfill(2)
- chave += unicode(self.infInut.serie.valor).zfill(3)
- chave += unicode(self.infInut.nNFIni.valor).zfill(9)
- chave += unicode(self.infInut.nNFFin.valor).zfill(9)
+ chave += str(self.infInut.mod.valor).zfill(2)
+ chave += str(self.infInut.serie.valor).zfill(3)
+ chave += str(self.infInut.nNFIni.valor).zfill(9)
+ chave += str(self.infInut.nNFFin.valor).zfill(9)
self.chave = chave
return chave
@@ -251,13 +254,13 @@ def set_xml(self, arquivo):
xml = property(get_xml, set_xml)
def monta_chave(self):
- chave = unicode(self.infInut.cUF.valor).zfill(2)
+ chave = str(self.infInut.cUF.valor).zfill(2)
chave += self.infInut.ano.valor.zfill(2)
chave += self.infInut.CNPJ.valor.zfill(14)
- chave += unicode(self.infInut.mod.valor).zfill(2)
- chave += unicode(self.infInut.serie.valor).zfill(3)
- chave += unicode(self.infInut.nNFIni.valor).zfill(9)
- chave += unicode(self.infInut.nNFFin.valor).zfill(9)
+ chave += str(self.infInut.mod.valor).zfill(2)
+ chave += str(self.infInut.serie.valor).zfill(3)
+ chave += str(self.infInut.nNFIni.valor).zfill(9)
+ chave += str(self.infInut.nNFFin.valor).zfill(9)
self.chave = chave
return chave
diff --git a/pysped/nfe/leiaute/inutnfe_400.py b/pysped/nfe/leiaute/inutnfe_400.py
new file mode 100644
index 00000000..1372c255
--- /dev/null
+++ b/pysped/nfe/leiaute/inutnfe_400.py
@@ -0,0 +1,91 @@
+# -*- coding: utf-8 -*-
+#
+# PySPED - Python libraries to deal with Brazil's SPED Project
+#
+# Copyright (C) 2010-2012
+# Copyright (C) Aristides Caldeira
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+# PySPED - Bibliotecas Python para o
+# SPED - Sistema Público de Escrituração Digital
+#
+# Copyright (C) 2010-2012
+# Copyright (C) Aristides Caldeira
+#
+# Este programa é um software livre: você pode redistribuir e/ou modificar
+# este programa sob os termos da licença GNU Affero General Public License,
+# publicada pela Free Software Foundation, em sua versão 3 ou, de acordo
+# com sua opção, qualquer versão posterior.
+#
+# Este programa é distribuido na esperança de que venha a ser útil,
+# porém SEM QUAISQUER GARANTIAS, nem mesmo a garantia implícita de
+# COMERCIABILIDADE ou ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Veja a
+# GNU Affero General Public License para mais detalhes.
+#
+# Você deve ter recebido uma cópia da GNU Affero General Public License
+# juntamente com este programa. Caso esse não seja o caso, acesse:
+#
+#
+
+from __future__ import division, print_function, unicode_literals
+
+from pysped.xml_sped import *
+from pysped.nfe.leiaute import ESQUEMA_ATUAL_VERSAO_4 as ESQUEMA_ATUAL
+from pysped.nfe.leiaute import inutnfe_310
+import os
+
+
+DIRNAME = os.path.dirname(__file__)
+
+
+class InfInutEnviado(inutnfe_310.InfInutEnviado):
+ def __init__(self):
+ super(InfInutEnviado, self).__init__()
+
+
+class InutNFe(inutnfe_310.InutNFe):
+ def __init__(self):
+ super(InutNFe, self).__init__()
+ self.versao = TagDecimal(nome='inutNFe', codigo='DP01', propriedade='versao', namespace=NAMESPACE_NFE, valor='4.00', raiz='/')
+ self.caminho_esquema = os.path.join(DIRNAME, 'schema', ESQUEMA_ATUAL + '/')
+ self.arquivo_esquema = 'inutNFe_v4.00.xsd'
+
+
+class InfInutRecebido(inutnfe_310.InfInutRecebido):
+ def __init__(self):
+ super(InfInutRecebido, self).__init__()
+
+
+class RetInutNFe(inutnfe_310.RetInutNFe):
+ def __init__(self):
+ super(RetInutNFe, self).__init__()
+ self.versao = TagDecimal(nome='retInutNFe', codigo='DR01', propriedade='versao', namespace=NAMESPACE_NFE, valor='4.00', raiz='/')
+ self.caminho_esquema = os.path.join(DIRNAME, 'schema', ESQUEMA_ATUAL + '/')
+ self.arquivo_esquema = 'retInutNFe_v4.00.xsd'
+
+
+class ProcInutNFe(inutnfe_310.ProcInutNFe):
+ def __init__(self):
+ super(ProcInutNFe, self).__init__()
+ #
+ # Atenção --- a tag ProcInutNFe tem que começar com letra maiúscula, para
+ # poder validar no XSD. Os outros arquivos proc, procCancNFe, e procNFe
+ # começam com minúscula mesmo
+ #
+ self.versao = TagDecimal(nome='ProcInutNFe', propriedade='versao', namespace=NAMESPACE_NFE, valor='4.00', raiz='/')
+ self.inutNFe = InutNFe()
+ self.retInutNFe = RetInutNFe()
+ self.caminho_esquema = os.path.join(DIRNAME, 'schema', ESQUEMA_ATUAL + '/')
+ self.arquivo_esquema = 'procInutNFe_v4.00.xsd'
diff --git a/pysped/nfe/leiaute/nfce_310.py b/pysped/nfe/leiaute/nfce_310.py
deleted file mode 100644
index ce569120..00000000
--- a/pysped/nfe/leiaute/nfce_310.py
+++ /dev/null
@@ -1,233 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# PySPED - Python libraries to deal with Brazil's SPED Project
-#
-# Copyright (C) 2010-2012
-# Copyright (C) Aristides Caldeira
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-# PySPED - Bibliotecas Python para o
-# SPED - Sistema Público de Escrituração Digital
-#
-# Copyright (C) 2010-2012
-# Copyright (C) Aristides Caldeira
-#
-# Este programa é um software livre: você pode redistribuir e/ou modificar
-# este programa sob os termos da licença GNU Affero General Public License,
-# publicada pela Free Software Foundation, em sua versão 3 ou, de acordo
-# com sua opção, qualquer versão posterior.
-#
-# Este programa é distribuido na esperança de que venha a ser útil,
-# porém SEM QUAISQUER GARANTIAS, nem mesmo a garantia implícita de
-# COMERCIABILIDADE ou ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Veja a
-# GNU Affero General Public License para mais detalhes.
-#
-# Você deve ter recebido uma cópia da GNU Affero General Public License
-# juntamente com este programa. Caso esse não seja o caso, acesse:
-#
-#
-
-from __future__ import division, print_function, unicode_literals
-
-from pysped.xml_sped import *
-from pysped.nfe.leiaute import ESQUEMA_ATUAL_VERSAO_3 as ESQUEMA_ATUAL
-from pysped.nfe.leiaute import nfe_310
-from pysped.nfe.webservices_flags import CODIGO_UF
-from pysped.nfe.webservices_nfce_3 import ESTADO_QRCODE, ESTADO_CONSULTA_NFCE
-import os
-import binascii
-import hashlib
-import qrcode
-from StringIO import StringIO
-
-
-DIRNAME = os.path.dirname(__file__)
-
-class CSC(object):
- def __init__(self):
- self.id = '1'
- self.codigo = ''
-
-
-class InfNFe(nfe_310.InfNFe):
- def __init__(self):
- super(InfNFe, self).__init__()
- self.ide.mod.valor = '65' # NFC-e
- self.ide.tpImp.valor = '4' # DANFE NFC-e em papel
- self.ide.indPres.valor = '1' # Operação presencial
- self.ide.indFinal.valor = '1' # Consumidor final
- self.transp.modFrete.valor = 9 # Sem frete
- self.dest.modelo = '65'
- self.emit.csc = CSC()
-
-
-class InfNFeSupl(XMLNFe):
- def __init__(self):
- super(InfNFeSupl, self).__init__()
- self.qrCode = TagCaracter(nome='qrCode', codigo='', tamanho=[1, 600], raiz='//NFe/infNFeSupl', cdata=True)
-
- def get_xml(self):
- xml = XMLNFe.get_xml(self)
- xml += ''
- xml += self.qrCode.xml
- xml += ''
- return xml
-
- def set_xml(self, arquivo):
- if self._le_xml(arquivo):
- self.qrCode.xml = arquivo
-
- xml = property(get_xml, set_xml)
-
-
-class NFCe(nfe_310.NFe):
- def __init__(self):
- super(NFCe, self).__init__()
- self.infNFe = InfNFe()
- self.qrcode = ''
- self.infNFeSupl = InfNFeSupl()
- self.Signature = Signature()
- self.caminho_esquema = os.path.join(DIRNAME, 'schema/', ESQUEMA_ATUAL + '/')
- self.arquivo_esquema = 'nfe_v3.10.xsd'
-
- def get_xml(self):
- xml = XMLNFe.get_xml(self)
- xml += ABERTURA
- xml += ''
- xml += self.infNFe.xml
- xml += self.infNFeSupl.xml
-
- #
- # Define a URI a ser assinada
- #
- self.Signature.URI = '#' + self.infNFe.Id.valor
-
- xml += self.Signature.xml
- xml += ''
- return xml
-
- def set_xml(self, arquivo):
- if self._le_xml(arquivo):
- self.infNFe.xml = arquivo
- self.infNFeSupl.xml = arquivo
- self.Signature.xml = self._le_noh('//NFe/sig:Signature')
-
- xml = property(get_xml, set_xml)
-
- def monta_chave(self):
- chave = unicode(self.infNFe.ide.cUF.valor).strip().rjust(2, '0')
- chave += unicode(self.infNFe.ide.dhEmi.valor.strftime('%y%m')).strip().rjust(4, '0')
- chave += unicode(self.infNFe.emit.CNPJ.valor).strip().rjust(14, '0')
- chave += '65'
- chave += unicode(self.infNFe.ide.serie.valor).strip().rjust(3, '0')
- chave += unicode(self.infNFe.ide.nNF.valor).strip().rjust(9, '0')
-
- #
- # Inclui agora o tipo da emissão
- #
- chave += unicode(self.infNFe.ide.tpEmis.valor).strip().rjust(1, '0')
-
- chave += unicode(self.infNFe.ide.cNF.valor).strip().rjust(8, '0')
- chave += unicode(self.infNFe.ide.cDV.valor).strip().rjust(1, '0')
- self.chave = chave
-
- def monta_qrcode(self):
- self.monta_chave()
-
- qrcode = 'chNFe=' + self.chave
- qrcode += '&nVersao=100'
- qrcode += '&tpAmb=' + self.infNFe.ide.tpAmb._valor_string
-
- if self.infNFe.dest.CNPJ.valor:
- qrcode += '&cDest=' + self.infNFe.dest.CNPJ._valor_string
-
- elif self.infNFe.dest.CPF.valor:
- qrcode += '&cDest=' + self.infNFe.dest.CPF._valor_string
-
- elif self.infNFe.dest.idEstrangeiro.valor:
- qrcode += '&cDest=' + self.infNFe.dest.idEstrangeiro._valor_string
-
- #
- # SP, PR e MS
- #
- if self.infNFe.ide.cUF.valor not in (35, 41, 50):
- qrcode += '&dhEmi=' + binascii.hexlify(self.infNFe.ide.dhEmi._valor_string)
- else:
- qrcode += '&dhEmi=' + binascii.hexlify(self.infNFe.ide.dhEmi._valor_string).upper()
-
- qrcode += '&vNF=' + self.infNFe.total.ICMSTot.vNF._valor_string
- qrcode += '&vICMS=' + self.infNFe.total.ICMSTot.vICMS._valor_string
-
- if self.infNFe.ide.cUF.valor not in (35, 41, 50):
- qrcode += '&digVal=' + binascii.hexlify(self.Signature.DigestValue)
- else:
- qrcode += '&digVal=' + binascii.hexlify(self.Signature.DigestValue).upper()
-
- qrcode += '&cIdToken=' + str(self.infNFe.emit.csc.id).zfill(6)
-
- pre_qrcode = qrcode + self.infNFe.emit.csc.codigo.ljust(36).upper()
-
- qrcode += '&cHashQRCode=' + hashlib.sha1(pre_qrcode).hexdigest().upper()
-
- self.qrcode = qrcode
-
- qrcode = ESTADO_QRCODE[CODIGO_UF[self.infNFe.ide.cUF.valor]][self.infNFe.ide.tpAmb.valor] + '?' + qrcode
-
- self.infNFeSupl.qrCode.valor = qrcode
-
- @property
- def qrcode_imagem(self):
- #
- # box_size=2 dá um tamanho de 4 x 4 cm
- #
- codigo = qrcode.QRCode(box_size=2)
- codigo.add_data(self.infNFeSupl.qrCode.valor)
-
- arq = StringIO()
- codigo.make_image().save(arq)
- arq.pos = 0
- imagem = arq.read().encode('base64')
- arq.close()
-
- return imagem
-
- @property
- def numero_formatado(self):
- num = unicode(self.infNFe.ide.nNF.valor).zfill(9)
- num_formatado = '.'.join((num[0:3], num[3:6], num[6:9]))
- return 'nº ' + num_formatado
-
- @property
- def serie_formatada(self):
- return 'Série ' + unicode(self.infNFe.ide.serie.valor).zfill(3)
-
- @property
- def url_consulta(self):
- return ESTADO_CONSULTA_NFCE[CODIGO_UF[self.infNFe.ide.cUF.valor]][self.infNFe.ide.tpAmb.valor]
-
- @property
- def cnpj_destinatario_formatado(self):
- if self.infNFe.dest.CPF.valor and len(self.infNFe.dest.CPF.valor):
- return 'CNPJ ' + self._formata_cpf(unicode(self.infNFe.dest.CPF.valor))
- elif self.infNFe.dest.CNPJ.valor and len(self.infNFe.dest.CNPJ.valor):
- return 'CPF ' + self._formata_cnpj(unicode(self.infNFe.dest.CNPJ.valor))
- elif self.infNFe.dest.idEstrangeiro.valor and len(self.infNFe.dest.idEstrangeiro.valor):
- return 'Id. estrangeiro ' + self.infNFe.dest.idEstrangeiro.valor
- else:
- return ''
-
- @property
- def quantidade_itens(self):
- return str(int(len(self.infNFe.det)))
diff --git a/pysped/nfe/leiaute/nfe_110.py b/pysped/nfe/leiaute/nfe_110.py
index 30fe132d..89dd3e57 100644
--- a/pysped/nfe/leiaute/nfe_110.py
+++ b/pysped/nfe/leiaute/nfe_110.py
@@ -39,12 +39,26 @@
#
#
-from __future__ import division, print_function, unicode_literals
+from __future__ import (division, print_function, unicode_literals,
+ absolute_import)
+from builtins import str
+import os
+import base64
+from reportlab.graphics.barcode import createBarcodeDrawing
+from genshi.core import Markup
from pysped.xml_sped import (ABERTURA, NAMESPACE_NFE, Signature, TagCaracter,
TagData, TagDecimal, TagHora, TagInteiro, XMLNFe)
from pysped.nfe.leiaute import ESQUEMA_ATUAL_VERSAO_1 as ESQUEMA_ATUAL
-import os
+
+PYBRASIL = False
+try:
+ from pybrasil.inscricao import formata_ie
+ from pybrasil.telefone import formata_fone
+ from pybrasil.valor import numero_por_extenso_unidade
+ PYBRASIL = True
+except:
+ pass
DIRNAME = os.path.dirname(__file__)
@@ -2142,11 +2156,17 @@ def descricao_produto_formatada(self):
return formatado
+ @property
def cst_formatado(self):
- formatado = unicode(self.imposto.ICMS.orig.valor).zfill(1)
- formatado += unicode(self.imposto.ICMS.CST.valor).zfill(2)
+ formatado = str(self.imposto.ICMS.orig.valor).zfill(1)
+ formatado += str(self.imposto.ICMS.CST.valor).zfill(2)
return formatado
+ @property
+ def informacoes_adicionais_formatadas(self):
+ formatado = self.infAdProd.valor.replace('|', '')
+ return Markup(formatado)
+
class Compra(XMLNFe):
def __init__(self):
@@ -2444,13 +2464,20 @@ def get_txt(self):
txt = property(get_txt)
+ @property
+ def valor_extenso(self):
+ if not PYBRASIL:
+ return ''
+
+ return numero_por_extenso_unidade(self.vDup.valor)
+
class Fat(XMLNFe):
def __init__(self):
super(Fat, self).__init__()
self.nFat = TagCaracter(nome='nFat', codigo='Y03', tamanho=[1, 60], raiz='//NFe/infNFe/cobr/fat', obrigatorio=False)
self.vOrig = TagDecimal(nome='vOrig', codigo='Y04', tamanho=[1, 15, 1], decimais=[0, 2, 2], raiz='//NFe/infNFe/cobr/fat', obrigatorio=False)
- self.vDesc = TagDecimal(nome='vDesc', codigo='Y05', tamanho=[1, 15, 1], decimais=[0, 2, 2], raiz='//NFe/infNFe/cobr/fat', obrigatorio=False)
+ self.vDesc = TagDecimal(nome='vDesc', codigo='Y05', tamanho=[1, 15, 1], decimais=[0, 2, 2], raiz='//NFe/infNFe/cobr/fat', obrigatorio=True)
self.vLiq = TagDecimal(nome='vLiq' , codigo='Y06', tamanho=[1, 15, 1], decimais=[0, 2, 2], raiz='//NFe/infNFe/cobr/fat', obrigatorio=False)
def get_xml(self):
@@ -2489,6 +2516,13 @@ def get_txt(self):
txt = property(get_txt)
+ @property
+ def valor_extenso(self):
+ if not PYBRASIL:
+ return ''
+
+ return numero_por_extenso_unidade(self.vFat.valor)
+
class Cobr(XMLNFe):
def __init__(self):
@@ -2923,13 +2957,19 @@ def get_txt(self):
class RetTrib(XMLNFe):
def __init__(self):
super(RetTrib, self).__init__()
+ self.pRetPIS = TagDecimal(nome='pRetPIS' , tamanho=[1, 5, 1], decimais=[0, 5, 2], raiz='')
self.vRetPIS = TagDecimal(nome='vRetPIS' , codigo='W24', tamanho=[1, 15, 1], decimais=[0, 2, 2], raiz='//NFe/infNFe/total/retTrib', obrigatorio=False)
+ self.pRetCOFINS = TagDecimal(nome='pRetCOFINS', tamanho=[1, 5, 1], decimais=[0, 5, 2], raiz='')
self.vRetCOFINS = TagDecimal(nome='vRetCOFINS', codigo='W25', tamanho=[1, 15, 1], decimais=[0, 2, 2], raiz='//NFe/infNFe/total/retTrib', obrigatorio=False)
+ self.pRetCSLL = TagDecimal(nome='pRetCSLL' , tamanho=[1, 5, 1], decimais=[0, 5, 2], raiz='')
self.vRetCSLL = TagDecimal(nome='vRetCSLL' , codigo='W26', tamanho=[1, 15, 1], decimais=[0, 2, 2], raiz='//NFe/infNFe/total/retTrib', obrigatorio=False)
self.vBCIRRF = TagDecimal(nome='vBCIRRF' , codigo='W27', tamanho=[1, 15, 1], decimais=[0, 2, 2], raiz='//NFe/infNFe/total/retTrib', obrigatorio=False)
+ self.pIRRF = TagDecimal(nome='pRetIRRF' , tamanho=[1, 5, 1], decimais=[0, 5, 2], raiz='')
self.vIRRF = TagDecimal(nome='vIRRF' , codigo='W28', tamanho=[1, 15, 1], decimais=[0, 2, 2], raiz='//NFe/infNFe/total/retTrib', obrigatorio=False)
self.vBCRetPrev = TagDecimal(nome='vBCRetPrev', codigo='W29', tamanho=[1, 15, 1], decimais=[0, 2, 2], raiz='//NFe/infNFe/total/retTrib', obrigatorio=False)
+ self.pRetPrev = TagDecimal(nome='pRetPrev' , tamanho=[1, 5, 1], decimais=[0, 5, 2], raiz='')
self.vRetPrev = TagDecimal(nome='vRetPrev' , codigo='W30', tamanho=[1, 15, 1], decimais=[0, 2, 2], raiz='//NFe/infNFe/total/retTrib', obrigatorio=False)
+ self.vTotal = TagDecimal(nome='vTotal' , tamanho=[1, 15, 1], decimais=[0, 2, 2], raiz='')
def get_xml(self):
if not (self.vRetPIS.valor or self.vRetCOFINS.valor or self.vRetCSLL.valor or self.vBCIRRF.valor or self.vIRRF.valor or self.vBCRetPrev.valor or self.vRetPrev.valor):
@@ -2982,6 +3022,7 @@ def __init__(self):
super(ISSQNTot, self).__init__()
self.vServ = TagDecimal(nome='vServ' , codigo='W18', tamanho=[1, 15, 1], decimais=[0, 2, 2], raiz='//NFe/infNFe/total/ISSQNtot', obrigatorio=False)
self.vBC = TagDecimal(nome='vBC' , codigo='W19', tamanho=[1, 15, 1], decimais=[0, 2, 2], raiz='//NFe/infNFe/total/ISSQNtot', obrigatorio=False)
+ self.pISS = TagDecimal(nome='pISS' , tamanho=[1, 15, 1], decimais=[0, 2, 2], raiz='//NFe/infNFe/total/ISSQNtot')
self.vISS = TagDecimal(nome='vISS' , codigo='W20', tamanho=[1, 15, 1], decimais=[0, 2, 2], raiz='//NFe/infNFe/total/ISSQNtot', obrigatorio=False)
self.vPIS = TagDecimal(nome='vPIS' , codigo='W21', tamanho=[1, 15, 1], decimais=[0, 2, 2], raiz='//NFe/infNFe/total/ISSQNtot', obrigatorio=False)
self.vCOFINS = TagDecimal(nome='vCOFINS', codigo='W22', tamanho=[1, 15, 1], decimais=[0, 2, 2], raiz='//NFe/infNFe/total/ISSQNtot', obrigatorio=False)
@@ -3277,6 +3318,7 @@ def __init__(self):
self.cPais = TagCaracter(nome='cPais' , codigo='E14', tamanho=[ 4, 4, 4], raiz='//NFe/infNFe/dest/enderDest', obrigatorio=False)
self.xPais = TagCaracter(nome='xPais' , codigo='E15', tamanho=[ 1, 60] , raiz='//NFe/infNFe/dest/enderDest', obrigatorio=False)
self.fone = TagInteiro(nome='fone' , codigo='E16', tamanho=[ 1, 10] , raiz='//NFe/infNFe/dest/enderDest', obrigatorio=False)
+ self.celular = TagInteiro(nome='celular' , tamanho=[ 1, 10] , raiz='//NFe/infNFe/dest/enderDest', obrigatorio=False)
def get_xml(self):
xml = XMLNFe.get_xml(self)
@@ -3478,6 +3520,7 @@ def __init__(self):
self.cPais = TagCaracter(nome='cPais' , codigo='C14', tamanho=[ 4, 4, 4], raiz='//NFe/infNFe/emit/enderEmit', obrigatorio=False)
self.xPais = TagCaracter(nome='xPais' , codigo='C15', tamanho=[ 1, 60] , raiz='//NFe/infNFe/emit/enderEmit', obrigatorio=False)
self.fone = TagInteiro(nome='fone' , codigo='C16', tamanho=[ 1, 10] , raiz='//NFe/infNFe/emit/enderEmit', obrigatorio=False)
+ self.celular = TagInteiro(nome='celular' , tamanho=[ 1, 10] , raiz='//NFe/infNFe/emit/enderEmit', obrigatorio=False)
def get_xml(self):
xml = XMLNFe.get_xml(self)
@@ -3544,6 +3587,7 @@ def __init__(self):
self.IEST = TagCaracter(nome='IEST' , codigo='C18' , tamanho=[ 2, 14], raiz='//NFe/infNFe/emit', obrigatorio=False)
self.IM = TagCaracter(nome='IM' , codigo='C19' , tamanho=[ 1, 15], raiz='//NFe/infNFe/emit', obrigatorio=False)
self.CNAE = TagCaracter(nome='CNAE' , codigo='C20' , tamanho=[ 7, 7], raiz='//NFe/infNFe/emit', obrigatorio=False)
+ self.xCNAE = TagCaracter(nome='xCNAE', tamanho=[ 1, 255], raiz='//NFe/infNFe/emit', obrigatorio=False)
def get_xml(self):
@@ -3699,6 +3743,9 @@ def __init__(self):
self.mod = TagCaracter(nome='mod' , codigo='B06', tamanho=[ 2, 2, 2], raiz='//NFe/infNFe/ide', valor=55)
self.serie = TagInteiro(nome='serie' , codigo='B07', tamanho=[ 1, 3, 1], raiz='//NFe/infNFe/ide')
self.nNF = TagInteiro(nome='nNF' , codigo='B08', tamanho=[ 1, 9, 1], raiz='//NFe/infNFe/ide')
+ self.serie_rps = TagCaracter(nome='serie_rps', tamanho=[ 1, 3, 1], raiz='//NFe/infNFe/ide')
+ self.nRPS = TagInteiro(nome='nRPS' , tamanho=[ 1, 9, 1], raiz='//NFe/infNFe/ide')
+
self.dEmi = TagData(nome='dEmi' , codigo='B09', raiz='//NFe/infNFe/ide')
self.dSaiEnt = TagData(nome='dSaiEnt' , codigo='B10', raiz='//NFe/infNFe/ide', obrigatorio=False)
self.tpNF = TagInteiro(nome='tpNF' , codigo='B11', tamanho=[ 1, 1, 1], raiz='//NFe/infNFe/ide', valor=1)
@@ -3814,6 +3861,7 @@ def __init__(self):
self.dest = Dest()
self.retirada = Retirada()
self.entrega = Entrega()
+ self.descServico = TagCaracter(nome='descServico', tamanho=[1, 5000], raiz='//NFe/infNFe/infAdic', ignora_validacao=True)
self.det = []
self.total = Total()
self.transp = Transp()
@@ -3824,7 +3872,7 @@ def __init__(self):
def get_xml(self):
xml = XMLNFe.get_xml(self)
- xml += ''
+ xml += ''
xml += self.ide.xml
xml += self.emit.xml
xml += self.avulsa.xml
@@ -3957,29 +4005,29 @@ def _calcula_dv(self, valor):
return digito
def gera_nova_chave(self):
- chave = unicode(self.infNFe.ide.cUF.valor).zfill(2)
+ chave = str(self.infNFe.ide.cUF.valor).zfill(2)
- if str(self.infNFe.versao.valor) == '3.10':
- chave += unicode(self.infNFe.ide.dhEmi.valor.strftime('%y%m')).zfill(4)
+ if str(self.infNFe.versao.valor) in ('3.10', '4.00'):
+ chave += str(self.infNFe.ide.dhEmi.valor.strftime('%y%m')).zfill(4)
else:
- chave += unicode(self.infNFe.ide.dEmi.valor.strftime('%y%m')).zfill(4)
+ chave += str(self.infNFe.ide.dEmi.valor.strftime('%y%m')).zfill(4)
- chave += unicode(self.infNFe.emit.CNPJ.valor).zfill(14)
- chave += unicode(self.infNFe.ide.mod.valor).zfill(2)
- chave += unicode(self.infNFe.ide.serie.valor).zfill(3)
- chave += unicode(self.infNFe.ide.nNF.valor).zfill(9)
+ chave += str(self.infNFe.emit.CNPJ.valor).zfill(14)
+ chave += str(self.infNFe.ide.mod.valor).zfill(2)
+ chave += str(self.infNFe.ide.serie.valor).zfill(3)
+ chave += str(self.infNFe.ide.nNF.valor).zfill(9)
#
# A inclusão do tipo de emissão na chave já torna a chave válida também
# para a versão 2.00 da NF-e
#
- chave += unicode(self.infNFe.ide.tpEmis.valor).zfill(1)
+ chave += str(self.infNFe.ide.tpEmis.valor).zfill(1)
#
# O código numério é um número aleatório
#
- #chave += unicode(random.randint(0, 99999999)).strip().rjust(8, '0')
+ #chave += str(random.randint(0, 99999999)).strip().rjust(8, '0')
#
# Mas, por segurança, é preferível que esse número não seja aleatório de todo
@@ -3988,7 +4036,7 @@ def gera_nova_chave(self):
for c in chave:
soma += int(c) ** 3 ** 2
- codigo = unicode(soma)
+ codigo = str(soma)
if len(codigo) > 8:
codigo = codigo[-8:]
else:
@@ -3999,7 +4047,7 @@ def gera_nova_chave(self):
#
# Define na estrutura do XML o campo cNF
#
- self.infNFe.ide.cNF.valor = unicode(self.infNFe.ide.tpEmis.valor).zfill(1) + codigo
+ self.infNFe.ide.cNF.valor = str(self.infNFe.ide.tpEmis.valor).zfill(1) + codigo
#
# Gera o dígito verificador
@@ -4011,7 +4059,7 @@ def gera_nova_chave(self):
#
self.infNFe.ide.cDV.valor = digito
- chave += unicode(digito)
+ chave += str(digito)
self.chave = chave
#
@@ -4020,16 +4068,31 @@ def gera_nova_chave(self):
self.infNFe.Id.valor = 'NFe' + chave
def monta_chave(self):
- chave = unicode(self.infNFe.ide.cUF.valor).zfill(2)
- chave += unicode(self.infNFe.ide.dEmi.valor.strftime('%y%m')).zfill(4)
- chave += unicode(self.infNFe.emit.CNPJ.valor).zfill(14)
- chave += unicode(self.infNFe.ide.mod.valor).zfill(2)
- chave += unicode(self.infNFe.ide.serie.valor).zfill(3)
- chave += unicode(self.infNFe.ide.nNF.valor).zfill(9)
- chave += unicode(self.infNFe.ide.cNF.valor).zfill(9)
- chave += unicode(self.infNFe.ide.cDV.valor).zfill(1)
+ chave = str(self.infNFe.ide.cUF.valor).zfill(2)
+ chave += str(self.infNFe.ide.dEmi.valor.strftime('%y%m')).zfill(4)
+ chave += str(self.infNFe.emit.CNPJ.valor).zfill(14)
+ chave += str(self.infNFe.ide.mod.valor).zfill(2)
+ chave += str(self.infNFe.ide.serie.valor).zfill(3)
+ chave += str(self.infNFe.ide.nNF.valor).zfill(9)
+ chave += str(self.infNFe.ide.cNF.valor).zfill(9)
+ chave += str(self.infNFe.ide.cDV.valor).zfill(1)
self.chave = chave
+ @property
+ def chave_imagem(self):
+ self.monta_chave()
+ #
+ # Para converter centímetros para o tamanho do reportlab, use a
+ # seguinte fórmula:
+ # cm × 128 ÷ 2,75
+ #
+ # Assim: 0,8 cm = 0,8 × 128 ÷ 2,75 = 37,2 = 37
+ # Assim: 0,02 cm = 0,02 × 128 ÷ 2,75 = 0,9 = 1
+ #
+ imagem = createBarcodeDrawing('Code128', value=self.chave,
+ barHeight=37, barWidth=1)
+ return base64.b64encode(imagem.asString('png')).decode('utf-8')
+
def chave_para_codigo_barras(self):
#
# As funções do reportlabs para geração de códigos de barras não estão
@@ -4038,10 +4101,10 @@ def chave_para_codigo_barras(self):
return self.chave.encode('utf-8')
def monta_dados_contingencia_fsda(self):
- dados = unicode(self.infNFe.ide.cUF.valor).zfill(2)
- dados += unicode(self.infNFe.ide.tpEmis.valor).zfill(1)
- dados += unicode(self.infNFe.emit.CNPJ.valor).zfill(14)
- dados += unicode(int(self.infNFe.total.ICMSTot.vNF.valor * 100)).zfill(14)
+ dados = str(self.infNFe.ide.cUF.valor).zfill(2)
+ dados += str(self.infNFe.ide.tpEmis.valor).zfill(1)
+ dados += str(self.infNFe.emit.CNPJ.valor).zfill(14)
+ dados += str(int(self.infNFe.total.ICMSTot.vNF.valor * 100)).zfill(14)
#
# Há ICMS próprio?
@@ -4062,7 +4125,7 @@ def monta_dados_contingencia_fsda(self):
dados += self.infNFe.ide.dEmi.valor.strftime('%d').zfill(2)
digito = self._calcula_dv(dados)
- dados += unicode(digito)
+ dados += str(digito)
self.dados_contingencia_fsda = dados
def dados_contingencia_fsda_para_codigo_barras(self):
@@ -4091,13 +4154,13 @@ def dados_contingencia_fsda_formatados(self):
@property
def numero_formatado(self):
- num = unicode(self.infNFe.ide.nNF.valor).zfill(9)
+ num = str(self.infNFe.ide.nNF.valor).zfill(9)
num_formatado = '.'.join((num[0:3], num[3:6], num[6:9]))
return 'Nº ' + num_formatado
@property
def serie_formatada(self):
- return 'SÉRIE ' + unicode(self.infNFe.ide.serie.valor).zfill(3)
+ return 'SÉRIE ' + str(self.infNFe.ide.serie.valor).zfill(3)
def _formata_cpf(self, cpf):
@@ -4117,9 +4180,23 @@ def _formata_cnpj(self, cnpj):
@property
def cnpj_emitente_formatado(self):
if len(self.infNFe.emit.CPF.valor):
- return self._formata_cpf(unicode(self.infNFe.emit.CPF.valor))
+ return self._formata_cpf(str(self.infNFe.emit.CPF.valor))
else:
- return self._formata_cnpj(unicode(self.infNFe.emit.CNPJ.valor))
+ return self._formata_cnpj(str(self.infNFe.emit.CNPJ.valor))
+
+ @property
+ def ie_emitente_formatada(self):
+ if not PYBRASIL:
+ return self.infNFe.emit.IE.valor
+
+ return formata_ie(self.infNFe.emit.IE.valor, self.infNFe.emit.enderEmit.UF.valor)
+
+ @property
+ def ie_st_formatada(self):
+ if not PYBRASIL:
+ return self.infNFe.emit.IEST.valor
+
+ return formata_ie(self.infNFe.emit.IEST.valor, self.infNFe.dest.enderDest.UF.valor)
@property
def endereco_emitente_formatado(self):
@@ -4173,6 +4250,9 @@ def _formata_fone(self, fone):
if fone.strip() == '0':
return ''
+ if PYBRASIL:
+ return formata_fone(fone)
+
if len(fone) <= 8:
formatado = fone[:-4] + '-' + fone[-4:]
elif len(fone) <= 10:
@@ -4198,19 +4278,30 @@ def _formata_fone(self, fone):
@property
def fone_emitente_formatado(self):
- return self._formata_fone(unicode(self.infNFe.emit.enderEmit.fone.valor))
+ return self._formata_fone(str(self.infNFe.emit.enderEmit.fone.valor))
+
+ @property
+ def celular_emitente_formatado(self):
+ return self._formata_fone(str(self.infNFe.emit.enderEmit.celular.valor))
@property
def cnpj_destinatario_formatado(self):
if self.infNFe.dest.CPF.valor and len(self.infNFe.dest.CPF.valor):
- return self._formata_cpf(unicode(self.infNFe.dest.CPF.valor))
+ return self._formata_cpf(str(self.infNFe.dest.CPF.valor))
elif self.infNFe.dest.CNPJ.valor and len(self.infNFe.dest.CNPJ.valor):
- return self._formata_cnpj(unicode(self.infNFe.dest.CNPJ.valor))
+ return self._formata_cnpj(str(self.infNFe.dest.CNPJ.valor))
elif self.infNFe.dest.idEstrangeiro.valor and len(self.infNFe.dest.idEstrangeiro.valor):
return self.infNFe.dest.idEstrangeiro.valor
else:
return ''
+ @property
+ def ie_destinatario_formatada(self):
+ if not PYBRASIL or not self.infNFe.dest.IE.valor:
+ return self.infNFe.dest.IE.valor
+
+ return formata_ie(self.infNFe.dest.IE.valor, self.infNFe.dest.enderDest.UF.valor)
+
@property
def endereco_destinatario_formatado(self):
formatado = self.infNFe.dest.enderDest.xLgr.valor
@@ -4227,7 +4318,11 @@ def cep_destinatario_formatado(self):
@property
def fone_destinatario_formatado(self):
- return self._formata_fone(unicode(self.infNFe.dest.enderDest.fone.valor))
+ return self._formata_fone(str(self.infNFe.dest.enderDest.fone.valor))
+
+ @property
+ def celular_destinatario_formatado(self):
+ return self._formata_fone(str(self.infNFe.dest.enderDest.celular.valor))
@property
def cnpj_retirada_formatado(self):
@@ -4270,6 +4365,13 @@ def cnpj_transportadora_formatado(self):
else:
return self._formata_cnpj(self.infNFe.transp.transporta.CNPJ.valor)
+ @property
+ def ie_transportadora_formatada(self):
+ if not PYBRASIL or not (self.infNFe.transp.transporta.IE.valor and self.infNFe.transp.transporta.UF.valor):
+ return self.infNFe.transp.transporta.IE.valor
+
+ return formata_ie(self.infNFe.transp.transporta.IE.valor, self.infNFe.transp.transporta.UF.valor)
+
@property
def placa_veiculo_formatada(self):
if not self.infNFe.transp.veicTransp.placa.valor:
@@ -4294,6 +4396,21 @@ def dados_adicionais(self):
return da
+ @property
+ def dados_adicionais_libreoffice(self):
+ da = ''
+
+ if self.infNFe.infAdic.infAdFisco.valor:
+ da = self.infNFe.infAdic.infAdFisco.valor.replace('| ', '')
+
+ if self.infNFe.infAdic.infCpl.valor:
+ if len(da) > 0:
+ da += ''
+
+ da += self.infNFe.infAdic.infCpl.valor.replace('| ', '')
+
+ return Markup(da)
+
@property
def canhoto_formatado(self):
formatado = 'RECEBEMOS DE '
@@ -4304,19 +4421,19 @@ def canhoto_formatado(self):
@property
def frete_formatado(self):
if self.infNFe.transp.modFrete.valor == 0:
- formatado = '0-EMITENTE'
+ formatado = '0-Emitente'
elif self.infNFe.transp.modFrete.valor == 1:
if self.infNFe.ide.tpNF.valor == 0:
- formatado = '1-REMETENTE'
+ formatado = '1-do Remetente'
else:
- formatado = '1-DESTINATÁRIO'
+ formatado = '1-do Destinatário'
elif self.infNFe.transp.modFrete.valor == 2:
- formatado = '2-DE TERCEIROS'
+ formatado = '2-de Terceiros'
elif self.infNFe.transp.modFrete.valor == 9:
- formatado = '9-SEM FRETE'
+ formatado = '9-sem frete'
else:
formatado = ''
@@ -4330,3 +4447,49 @@ def cst_descricao(self):
@property
def crt_descricao(self):
return ''
+
+ @property
+ def cnae_formatado(self):
+ if not self.infNFe.emit.CNAE.valor:
+ return ''
+
+ cnae = self.infNFe.emit.CNAE.valor
+ formatado = cnae[:4] + '-' + cnae[4] + '/' + cnae[5:]
+
+ if self.infNFe.emit.xCNAE.valor:
+ formatado += ' - ' + self.infNFe.emit.xCNAE.valor
+
+ return formatado
+
+ @property
+ def descricao_servico_libreoffice(self):
+ da = ''
+
+ if self.infNFe.descServico.valor:
+ da = self.infNFe.descServico.valor.replace('| ', '')
+
+ if self.infNFe.infAdic.infCpl.valor:
+ if len(da) > 0:
+ da += ''
+
+ da += self.infNFe.infAdic.infCpl.valor.replace('| ', '')
+
+ return Markup(da)
+
+ @property
+ def obs_fisco_libreoffice(self):
+ da = ''
+
+ if self.infNFe.infAdic.infAdFisco.valor:
+ da = self.infNFe.infAdic.infAdFisco.valor.replace('| ', '')
+
+ return Markup(da)
+
+ @property
+ def obs_complementar_libreoffice(self):
+ da = ''
+
+ if self.infNFe.infAdic.infCpl.valor:
+ da = self.infNFe.infAdic.infCpl.valor.replace('| ', '')
+
+ return Markup(da)
diff --git a/pysped/nfe/leiaute/nfe_200.py b/pysped/nfe/leiaute/nfe_200.py
index 408a33ec..91119791 100644
--- a/pysped/nfe/leiaute/nfe_200.py
+++ b/pysped/nfe/leiaute/nfe_200.py
@@ -39,7 +39,10 @@
#
#
-from __future__ import division, print_function, unicode_literals
+from __future__ import (division, print_function, unicode_literals,
+ absolute_import)
+
+from builtins import str
from pysped.xml_sped import (NAMESPACE_NFE, Signature, TagCaracter,
TagDataHora, TagDecimal, TagHora, TagInteiro, XMLNFe)
@@ -358,8 +361,8 @@ def set_valor(self, novo_valor):
self.grupo_icms.nome_tag = 'ICMSSN500'
self.grupo_icms.nome_tag_txt = 'N10g'
self.grupo_icms.raiz_tag = '//det/imposto/ICMS/ICMSSN500'
- self.grupo_icms.vBCSTRet.obrigatorio = True
- self.grupo_icms.vICMSSTRet.obrigatorio = True
+ #self.grupo_icms.vBCSTRet.obrigatorio = False
+ #self.grupo_icms.vICMSSTRet.obrigatorio = False
self.grupo_icms.CST._valor_string = '60'
elif self.valor == '900':
@@ -1433,10 +1436,10 @@ class Prod(nfe_110.Prod):
def __init__(self):
super(Prod, self).__init__()
self.NCM = TagCaracter(nome='NCM' , codigo='I05' , tamanho=[2, 8] , raiz='//det/prod')
- self.qCom = TagDecimal(nome='qCom' , codigo='I10' , tamanho=[1, 15, 1], decimais=[0, 4, 4], raiz='//det/prod')
- self.vUnCom = TagDecimal(nome='vUnCom' , codigo='I10a', tamanho=[1, 21, 1], decimais=[0, 10, 4], raiz='//det/prod')
- self.qTrib = TagDecimal(nome='qTrib' , codigo='I14' , tamanho=[1, 15, 1], decimais=[0, 4, 4], raiz='//det/prod')
- self.vUnTrib = TagDecimal(nome='vUnTrib' , codigo='I14a', tamanho=[1, 21, 1], decimais=[0, 10, 4], raiz='//det/prod')
+ self.qCom = TagDecimal(nome='qCom' , codigo='I10' , tamanho=[1, 15, 1], decimais=[0, 4, 2], raiz='//det/prod')
+ self.vUnCom = TagDecimal(nome='vUnCom' , codigo='I10a', tamanho=[1, 21, 1], decimais=[0, 10, 2], raiz='//det/prod')
+ self.qTrib = TagDecimal(nome='qTrib' , codigo='I14' , tamanho=[1, 15, 1], decimais=[0, 4, 2], raiz='//det/prod')
+ self.vUnTrib = TagDecimal(nome='vUnTrib' , codigo='I14a', tamanho=[1, 21, 1], decimais=[0, 10, 2], raiz='//det/prod')
self.vOutro = TagDecimal(nome='vOutro' , codigo='I17a', tamanho=[1, 15, 1], decimais=[0, 2, 2], raiz='//det/prod', obrigatorio=False)
self.indTot = TagInteiro(nome='indTot' , codigo='I17b', tamanho=[1, 1, 1], raiz='//det/prod', valor=1)
self.xPed = TagCaracter(nome='xPed' , codigo='I30' , tamanho=[1, 15], raiz='//det/prod', obrigatorio=False)
@@ -1586,13 +1589,23 @@ def __init__(self):
self.prod = Prod()
self.imposto = Imposto()
+ @property
def cst_formatado(self):
- formatado = unicode(self.imposto.ICMS.orig.valor).zfill(1)
+ formatado = str(self.imposto.ICMS.orig.valor).zfill(1)
- if self.imposto.ICMS.regime_tributario == 1:
- formatado += unicode(self.imposto.ICMS.CSOSN.valor).zfill(3)
+ #
+ # O item é de serviço
+ #
+ if self.imposto.ISSQN.xml:
+ if self.imposto.ISSQN.regime_tributario == 1:
+ formatado += '400'
+ else:
+ formatado += '41'
+
+ elif self.imposto.ICMS.regime_tributario == 1:
+ formatado += str(self.imposto.ICMS.CSOSN.valor).zfill(3)
else:
- formatado += unicode(self.imposto.ICMS.CST.valor).zfill(2)
+ formatado += str(self.imposto.ICMS.CST.valor).zfill(2)
return formatado
@@ -1944,6 +1957,7 @@ class EnderDest(nfe_110.EnderDest):
def __init__(self):
super(EnderDest, self).__init__()
self.fone = TagInteiro(nome='fone' , codigo='E16', tamanho=[ 6, 14] , raiz='//NFe/infNFe/dest/enderDest', obrigatorio=False)
+ self.celular = TagInteiro(nome='celular' , tamanho=[ 6, 14] , raiz='//NFe/infNFe/dest/enderDest', obrigatorio=False)
class Dest(nfe_110.Dest):
@@ -1951,7 +1965,7 @@ def __init__(self):
super(Dest, self).__init__()
self.enderDest = EnderDest()
self.ISUF = TagCaracter(nome='ISUF' , codigo='E18', tamanho=[ 8, 9], raiz='//NFe/infNFe/dest', obrigatorio=False)
- self.email = TagCaracter(nome='email', codigo='E19', tamanho=[1, 60], raiz='//NFe/infNFe/dest', obrigatorio=False)
+ self.email = TagCaracter(nome='email', codigo='E19', tamanho=[1, 60], raiz='//NFe/infNFe/dest', obrigatorio=False)
def get_xml(self):
xml = XMLNFe.get_xml(self)
@@ -2016,14 +2030,15 @@ class EnderEmit(nfe_110.EnderEmit):
def __init__(self):
super(EnderEmit, self).__init__()
self.fone = TagInteiro(nome='fone' , codigo='C16', tamanho=[ 6, 14] , raiz='//NFe/infNFe/emit/enderEmit', obrigatorio=False)
+ self.celular = TagInteiro(nome='celular' , tamanho=[ 6, 14] , raiz='//NFe/infNFe/emit/enderEmit', obrigatorio=False)
class Emit(nfe_110.Emit):
def __init__(self):
super(Emit, self).__init__()
self.enderEmit = EnderEmit()
- self.CRT = TagInteiro(nome='CRT' , codigo='C21' , tamanho=[ 1, 1], raiz='//NFe/infNFe/emit', valor=1)
-
+ self.CRT = TagInteiro(nome='CRT' , codigo='C21' , tamanho=[ 1, 1], raiz='//NFe/infNFe/emit', valor=1)
+ self.email = TagCaracter(nome='email', tamanho=[1, 60], raiz='//NFe/infNFe/emit', obrigatorio=False)
def get_xml(self):
xml = XMLNFe.get_xml(self)
@@ -2384,7 +2399,7 @@ def __init__(self):
def get_xml(self):
xml = XMLNFe.get_xml(self)
- xml += ''
+ xml += ''
xml += self.ide.xml
xml += self.emit.xml
xml += self.avulsa.xml
@@ -2395,6 +2410,7 @@ def get_xml(self):
for d in self.det:
#d.imposto.regime_tributario = self.emit.CRT.valor
d.imposto.ICMS.regime_tributario = self.emit.CRT.valor
+ d.imposto.ISSQN.regime_tributario = self.emit.CRT.valor
xml += d.xml
xml += self.total.xml
@@ -2425,6 +2441,11 @@ def set_xml(self, arquivo):
# lidas corretamente
#
self.det = self.le_grupo('//NFe/infNFe/det', Det)
+ for i in range(len(self.det)):
+ d = self.det[i]
+ d.imposto.ICMS.regime_tributario = self.emit.CRT.valor
+ d.imposto.ISSQN.regime_tributario = self.emit.CRT.valor
+ self.det[i] = d
self.total.xml = arquivo
self.transp.xml = arquivo
@@ -2483,20 +2504,20 @@ def gera_nova_chave(self):
self.infNFe.ide.cNF.valor = self.chave[35:43]
def monta_chave(self):
- chave = unicode(self.infNFe.ide.cUF.valor).strip().rjust(2, '0')
- chave += unicode(self.infNFe.ide.dEmi.valor.strftime('%y%m')).strip().rjust(4, '0')
- chave += unicode(self.infNFe.emit.CNPJ.valor).strip().rjust(14, '0')
+ chave = str(self.infNFe.ide.cUF.valor).strip().rjust(2, '0')
+ chave += str(self.infNFe.ide.dEmi.valor.strftime('%y%m')).strip().rjust(4, '0')
+ chave += str(self.infNFe.emit.CNPJ.valor).strip().rjust(14, '0')
chave += '55'
- chave += unicode(self.infNFe.ide.serie.valor).strip().rjust(3, '0')
- chave += unicode(self.infNFe.ide.nNF.valor).strip().rjust(9, '0')
+ chave += str(self.infNFe.ide.serie.valor).strip().rjust(3, '0')
+ chave += str(self.infNFe.ide.nNF.valor).strip().rjust(9, '0')
#
# Inclui agora o tipo da emissão
#
- chave += unicode(self.infNFe.ide.tpEmis.valor).strip().rjust(1, '0')
+ chave += str(self.infNFe.ide.tpEmis.valor).strip().rjust(1, '0')
- chave += unicode(self.infNFe.ide.cNF.valor).strip().rjust(8, '0')
- chave += unicode(self.infNFe.ide.cDV.valor).strip().rjust(1, '0')
+ chave += str(self.infNFe.ide.cNF.valor).strip().rjust(8, '0')
+ chave += str(self.infNFe.ide.cDV.valor).strip().rjust(1, '0')
self.chave = chave
def cst_descricao(self):
@@ -2505,6 +2526,7 @@ def cst_descricao(self):
else:
return 'CST'
+ @property
def crt_descricao(self):
texto = 'Regime tributário: '
@@ -2516,3 +2538,24 @@ def crt_descricao(self):
texto += 'regime normal'
return texto
+
+ @property
+ def simples_sim_nao(self):
+ if self.infNFe.emit.CRT.valor == 1:
+ return 'sim'
+ else:
+ return 'não'
+
+ @property
+ def cnpj_retirada_formatado(self):
+ if self.infNFe.retirada.CNPJ.valor:
+ return self._formata_cnpj(self.infNFe.retirada.CNPJ.valor)
+ else:
+ return self._formata_cpf(self.infNFe.retirada.CPF.valor)
+
+ @property
+ def cnpj_entrega_formatado(self):
+ if self.infNFe.entrega.CNPJ.valor:
+ return self._formata_cnpj(self.infNFe.entrega.CNPJ.valor)
+ else:
+ return self._formata_cpf(self.infNFe.entrega.CPF.valor)
diff --git a/pysped/nfe/leiaute/nfe_310.py b/pysped/nfe/leiaute/nfe_310.py
index 46a2cb84..f9d83b08 100644
--- a/pysped/nfe/leiaute/nfe_310.py
+++ b/pysped/nfe/leiaute/nfe_310.py
@@ -39,12 +39,24 @@
#
#
-from __future__ import division, print_function, unicode_literals
+from __future__ import (division, print_function, unicode_literals,
+ absolute_import)
+
+from builtins import str
+from io import BytesIO
from pysped.xml_sped import *
from pysped.nfe.leiaute import ESQUEMA_ATUAL_VERSAO_3 as ESQUEMA_ATUAL
from pysped.nfe.leiaute import nfe_200
+from pysped.nfe.webservices_nfce_3 import ESTADO_QRCODE, ESTADO_CONSULTA_NFCE
+from pysped.nfe.webservices_flags import CODIGO_UF
import os
+import binascii
+import hashlib
+import qrcode
+import sys
+import unicodedata
+
DIRNAME = os.path.dirname(__file__)
@@ -113,8 +125,9 @@ def set_xml(self, arquivo):
class ISSQN(nfe_200.ISSQN):
def __init__(self):
super(ISSQN, self).__init__()
- self.vAliq = TagDecimal(nome='vAliq' , codigo='U03', tamanho=[1, 5, 1], decimais=[0, 4, 4], raiz='//det/imposto/ISSQN')
+ self.vAliq = TagDecimal(nome='vAliq' , codigo='U03', tamanho=[1, 5, 1], decimais=[0, 4, 2], raiz='//det/imposto/ISSQN')
self.cListServ = TagCaracter(nome='cListServ', codigo='U06', tamanho=[5, 5], raiz='//det/imposto/ISSQN')
+ self.xListServ = TagCaracter(nome='xListServ', tamanho=[1, 255], raiz='//det/imposto/ISSQN')
#
# Campos novos da versão 3.10
#
@@ -234,7 +247,7 @@ def __init__(self, *args, **kwargs):
class COFINS(nfe_200.COFINS):
def __init__(self):
super(COFINS, self).__init__()
- self.pCOFINS = TagDecimal(nome='pCOFINS' , codigo='S08', tamanho=[1, 5, 1], decimais=[0, 4, 4], raiz='')
+ self.pCOFINS = TagDecimal(nome='pCOFINS' , codigo='S08', tamanho=[1, 5, 1], decimais=[0, 4, 2], raiz='')
def get_xml(self):
#
@@ -311,7 +324,7 @@ def __init__(self, *args, **kwargs):
class PIS(nfe_200.PIS):
def __init__(self):
super(PIS, self).__init__()
- self.pPIS = TagDecimal(nome='pPIS' , codigo='Q08', tamanho=[1, 5, 1], decimais=[0, 4, 4], raiz='')
+ self.pPIS = TagDecimal(nome='pPIS' , codigo='Q08', tamanho=[1, 5, 1], decimais=[0, 4, 2], raiz='')
def get_xml(self):
#
@@ -388,7 +401,7 @@ def __init__(self, *args, **kwargs):
class IPI(nfe_200.IPI):
def __init__(self):
super(IPI, self).__init__()
- self.pIPI = TagDecimal(nome='pIPI', codigo='O13', tamanho=[1, 5, 1], decimais=[0, 4, 4], raiz='')
+ self.pIPI = TagDecimal(nome='pIPI', codigo='O13', tamanho=[1, 5, 1], decimais=[0, 4, 2], raiz='')
def get_xml(self):
if not self.CST.valor.strip():
@@ -506,12 +519,12 @@ def get_valor(self):
class ICMS(nfe_200.ICMS):
def __init__(self):
super(ICMS, self).__init__()
- self.pRedBC = TagDecimal(nome='pRedBC' , codigo='N14', tamanho=[1, 5, 1], decimais=[0, 4, 4], raiz='')
- self.pICMS = TagDecimal(nome='pICMS' , codigo='N16', tamanho=[1, 5, 1], decimais=[0, 4, 4], raiz='')
- self.pMVAST = TagDecimal(nome='pMVAST' , codigo='N19', tamanho=[1, 5, 1], decimais=[0, 4, 4], raiz='')
- self.pRedBCST = TagDecimal(nome='pRedBCST', codigo='N20', tamanho=[1, 5, 1], decimais=[0, 4, 4], raiz='')
- self.pICMSST = TagDecimal(nome='pICMSST' , codigo='N22', tamanho=[1, 5, 1], decimais=[0, 4, 4], raiz='')
- self.pCredSN = TagDecimal(nome='pCredSN' , codigo='N29', tamanho=[1, 15, 1], decimais=[0, 4, 4], raiz='')
+ self.pRedBC = TagDecimal(nome='pRedBC' , codigo='N14', tamanho=[1, 5, 1], decimais=[0, 4, 2], raiz='')
+ self.pICMS = TagDecimal(nome='pICMS' , codigo='N16', tamanho=[1, 5, 1], decimais=[0, 4, 2], raiz='')
+ self.pMVAST = TagDecimal(nome='pMVAST' , codigo='N19', tamanho=[1, 5, 1], decimais=[0, 4, 2], raiz='')
+ self.pRedBCST = TagDecimal(nome='pRedBCST', codigo='N20', tamanho=[1, 5, 1], decimais=[0, 4, 2], raiz='')
+ self.pICMSST = TagDecimal(nome='pICMSST' , codigo='N22', tamanho=[1, 5, 1], decimais=[0, 4, 2], raiz='')
+ self.pCredSN = TagDecimal(nome='pCredSN' , codigo='N29', tamanho=[1, 15, 1], decimais=[0, 4, 2], raiz='')
#
# Novos campos para o ICMS desonerado
#
@@ -534,7 +547,6 @@ def __init__(self):
self.CST.grupo_icms = self
self.CST.valor = '41'
-
def get_xml(self):
#
# Define as tags baseado no código da situação tributária
@@ -564,7 +576,7 @@ def get_xml(self):
xml += self.vICMS.xml
xml += self.modBCST.xml
- # Somente quando for marge de valor agregado
+ # Somente quando for margem de valor agregado
if self.modBCST.valor == 4:
xml += self.pMVAST.xml
@@ -574,13 +586,13 @@ def get_xml(self):
xml += self.vICMSST.xml
else:
xml += self.modBC.xml
- xml += self.vBC.xml
xml += self.pRedBC.xml
+ xml += self.vBC.xml
xml += self.pICMS.xml
xml += self.vICMS.xml
xml += self.modBCST.xml
- # Somente quando for marge de valor agregado
+ # Somente quando for margem de valor agregado
if self.modBCST.valor == 4:
xml += self.pMVAST.xml
@@ -603,7 +615,7 @@ def get_xml(self):
elif self.CST.valor == '30':
xml += self.modBCST.xml
- # Somente quando for marge de valor agregado
+ # Somente quando for margem de valor agregado
if self.modBCST.valor == 4:
xml += self.pMVAST.xml
@@ -634,13 +646,13 @@ def get_xml(self):
elif self.CST.valor == '70':
xml += self.modBC.xml
- xml += self.vBC.xml
xml += self.pRedBC.xml
+ xml += self.vBC.xml
xml += self.pICMS.xml
xml += self.vICMS.xml
xml += self.modBCST.xml
- # Somente quando for marge de valor agregado
+ # Somente quando for margem de valor agregado
if self.modBCST.valor == 4:
xml += self.pMVAST.xml
@@ -653,13 +665,13 @@ def get_xml(self):
elif self.CST.valor == '90':
xml += self.modBC.xml
- xml += self.vBC.xml
xml += self.pRedBC.xml
+ xml += self.vBC.xml
xml += self.pICMS.xml
xml += self.vICMS.xml
xml += self.modBCST.xml
- # Somente quando for marge de valor agregado
+ # Somente quando for margem de valor agregado
if self.modBCST.valor == 4:
xml += self.pMVAST.xml
@@ -688,7 +700,7 @@ def get_xml(self):
elif self.CSOSN.valor == '201':
xml += self.modBCST.xml
- # Somente quando for marge de valor agregado
+ # Somente quando for margem de valor agregado
if self.modBCST.valor == 4:
xml += self.pMVAST.xml
@@ -702,7 +714,7 @@ def get_xml(self):
elif self.CSOSN.valor in ('202', '203'):
xml += self.modBCST.xml
- # Somente quando for marge de valor agregado
+ # Somente quando for margem de valor agregado
if self.modBCST.valor == 4:
xml += self.pMVAST.xml
@@ -717,13 +729,13 @@ def get_xml(self):
elif self.CSOSN.valor == '900':
xml += self.modBC.xml
- xml += self.vBC.xml
xml += self.pRedBC.xml
+ xml += self.vBC.xml
xml += self.pICMS.xml
xml += self.vICMS.xml
xml += self.modBCST.xml
- # Somente quando for marge de valor agregado
+ # Somente quando for margem de valor agregado
if self.modBCST.valor == 4:
xml += self.pMVAST.xml
@@ -898,7 +910,7 @@ def __init__(self):
class Comb(nfe_200.Comb):
def __init__(self):
super(Comb, self).__init__()
- self.pMixGN = TagDecimal(nome='pMixGN', codigo='LA03', tamanho=[1, 2, 1], decimais=[0, 4, 4], raiz='//det/prod/comb', obrigatorio=False)
+ self.pMixGN = TagDecimal(nome='pMixGN', codigo='LA03', tamanho=[1, 2, 1], decimais=[0, 4, 2], raiz='//det/prod/comb', obrigatorio=False)
def get_xml(self):
if not self.cProdANP.valor:
@@ -1081,7 +1093,6 @@ def __init__(self):
self.comb = Comb()
self.nRECOPI = TagCaracter(nome='nRECOPI', codigo='LB01', tamanho=[20, 20, 20], raiz='//det/prod', obrigatorio=False)
-
def get_xml(self):
xml = XMLNFe.get_xml(self)
xml += ''
@@ -1288,9 +1299,6 @@ def get_xml(self):
if not (self.CNPJ.valor or self.tBand.valor or self.cAut.valor):
return ''
- #
- # Define as tags baseado no código da situação tributária
- #
xml = XMLNFe.get_xml(self)
xml += ''
xml += self.CNPJ.xml
@@ -1319,9 +1327,6 @@ def get_xml(self):
if not (self.tPag.valor or self.vPag.valor or self.card.xml):
return ''
- #
- # Define as tags baseado no código da situação tributária
- #
xml = XMLNFe.get_xml(self)
xml += ''
xml += self.tPag.xml
@@ -1334,7 +1339,7 @@ def set_xml(self, arquivo):
if self._le_xml(arquivo):
self.tPag.xml = arquivo
self.vPag.xml = arquivo
- self.cad.xml = arquivo
+ self.card.xml = arquivo
xml = property(get_xml, set_xml)
@@ -1397,7 +1402,7 @@ def __init__(self):
class RetTransp(nfe_200.RetTransp):
def __init__(self):
super(RetTransp, self).__init__()
- self.pICMSRet = TagDecimal(nome='vICMSRet', codigo='X14', tamanho=[1, 15, 1], decimais=[0, 4, 4], raiz='//NFe/infNFe/transp/retTransp')
+ self.pICMSRet = TagDecimal(nome='vICMSRet', codigo='X14', tamanho=[1, 15, 1], decimais=[0, 4, 2], raiz='//NFe/infNFe/transp/retTransp')
def get_xml(self):
if not (self.vServ.valor or self.vBCRet.valor or self.pICMSRet.valor or self.vICMSRet.valor or self.CFOP.valor or self.cMunFG.valor):
@@ -1528,6 +1533,13 @@ def set_xml(self, arquivo):
xml = property(get_xml, set_xml)
+ @property
+ def iss_retido_sim_nao(self):
+ if self.vISSRet.valor:
+ return 'sim'
+ else:
+ return 'não'
+
class ICMSTot(nfe_200.ICMSTot):
def __init__(self):
@@ -1860,12 +1872,19 @@ def set_xml(self, arquivo):
xml = property(get_xml, set_xml)
+class CSC(object):
+ def __init__(self):
+ self.id = '1'
+ self.codigo = ''
+
+
class InfNFe(nfe_200.InfNFe):
def __init__(self):
super(InfNFe, self).__init__()
self.versao = TagDecimal(nome='infNFe' , codigo='A01', propriedade='versao', raiz='//NFe', namespace=NAMESPACE_NFE, valor='3.10')
self.ide = Ide()
self.emit = Emit()
+ self.emit.csc = CSC()
self.avulsa = Avulsa()
self.dest = Dest()
self.dest.modelo = self.ide.mod.valor
@@ -1876,7 +1895,7 @@ def __init__(self):
self.total = Total()
self.transp = Transp()
self.cobr = Cobr()
- self.pag = []
+ self.pag = []
self.infAdic = InfAdic()
self.exporta = Exporta()
self.compra = Compra()
@@ -1884,7 +1903,7 @@ def __init__(self):
def get_xml(self):
xml = XMLNFe.get_xml(self)
- xml += ''
+ xml += ''
xml += self.ide.xml
xml += self.emit.xml
xml += self.avulsa.xml
@@ -1897,6 +1916,7 @@ def get_xml(self):
for d in self.det:
d.imposto.ICMS.regime_tributario = self.emit.CRT.valor
+ d.imposto.ISSQN.regime_tributario = self.emit.CRT.valor
xml += d.xml
xml += self.total.xml
@@ -1938,6 +1958,11 @@ def set_xml(self, arquivo):
#
self.autXML = self.le_grupo('//NFe/infNFe/autXML', AutXML)
self.det = self.le_grupo('//NFe/infNFe/det', Det)
+ for i in range(len(self.det)):
+ d = self.det[i]
+ d.imposto.ICMS.regime_tributario = self.emit.CRT.valor
+ d.imposto.ISSQN.regime_tributario = self.emit.CRT.valor
+ self.det[i] = d
self.total.xml = arquivo
self.transp.xml = arquivo
@@ -1981,36 +2006,78 @@ def get_txt(self):
txt = property(get_txt)
+class InfNFeSupl(XMLNFe):
+ def __init__(self):
+ super(InfNFeSupl, self).__init__()
+ self.qrCode = TagCaracter(nome='qrCode', codigo='', tamanho=[1, 600], raiz='//NFe/infNFeSupl', cdata=True)
+
+ def get_xml(self):
+ xml = XMLNFe.get_xml(self)
+ xml += ''
+ xml += self.qrCode.xml
+ xml += ''
+ return xml
+
+ def set_xml(self, arquivo):
+ if self._le_xml(arquivo):
+ self.qrCode.xml = arquivo
+
+ xml = property(get_xml, set_xml)
+
+
class NFe(nfe_200.NFe):
def __init__(self):
super(NFe, self).__init__()
self.infNFe = InfNFe()
+ self.qrcode = ''
+ self.infNFeSupl = InfNFeSupl()
self.Signature = Signature()
self.caminho_esquema = os.path.join(DIRNAME, 'schema/', ESQUEMA_ATUAL + '/')
self.arquivo_esquema = 'nfe_v3.10.xsd'
- def monta_chave(self):
- chave = unicode(self.infNFe.ide.cUF.valor).strip().rjust(2, '0')
- chave += unicode(self.infNFe.ide.dhEmi.valor.strftime('%y%m')).strip().rjust(4, '0')
- chave += unicode(self.infNFe.emit.CNPJ.valor).strip().rjust(14, '0')
- chave += '55'
- chave += unicode(self.infNFe.ide.serie.valor).strip().rjust(3, '0')
- chave += unicode(self.infNFe.ide.nNF.valor).strip().rjust(9, '0')
+ def get_xml(self):
+ xml = XMLNFe.get_xml(self)
+ xml += ABERTURA
+ xml += ''
+ xml += self.infNFe.xml
+
+ if str(self.infNFe.ide.mod.valor) == '65':
+ xml += self.infNFeSupl.xml
#
- # Inclui agora o tipo da emissão
+ # Define a URI a ser assinada
#
- chave += unicode(self.infNFe.ide.tpEmis.valor).strip().rjust(1, '0')
+ self.Signature.URI = '#' + self.infNFe.Id.valor
+
+ xml += self.Signature.xml
+ xml += ''
+ return xml
+
+ def set_xml(self, arquivo):
+ if self._le_xml(arquivo):
+ self.infNFe.xml = arquivo
+ self.infNFeSupl.xml = arquivo
+ self.Signature.xml = self._le_noh('//NFe/sig:Signature')
- chave += unicode(self.infNFe.ide.cNF.valor).strip().rjust(8, '0')
- chave += unicode(self.infNFe.ide.cDV.valor).strip().rjust(1, '0')
+ xml = property(get_xml, set_xml)
+
+ def monta_chave(self):
+ chave = str(self.infNFe.ide.cUF.valor).strip().rjust(2, '0')
+ chave += str(self.infNFe.ide.dhEmi.valor.strftime('%y%m')).strip().rjust(4, '0')
+ chave += str(self.infNFe.emit.CNPJ.valor).strip().rjust(14, '0')
+ chave += str(self.infNFe.ide.mod.valor).zfill(2)
+ chave += str(self.infNFe.ide.serie.valor).strip().rjust(3, '0')
+ chave += str(self.infNFe.ide.nNF.valor).strip().rjust(9, '0')
+ chave += str(self.infNFe.ide.tpEmis.valor).strip().rjust(1, '0')
+ chave += str(self.infNFe.ide.cNF.valor).strip().rjust(8, '0')
+ chave += str(self.infNFe.ide.cDV.valor).strip().rjust(1, '0')
self.chave = chave
def monta_dados_contingencia_fsda(self):
- dados = unicode(self.infNFe.ide.cUF.valor).zfill(2)
- dados += unicode(self.infNFe.ide.tpEmis.valor).zfill(1)
- dados += unicode(self.infNFe.emit.CNPJ.valor).zfill(14)
- dados += unicode(int(self.infNFe.total.ICMSTot.vNF.valor * 100)).zfill(14)
+ dados = str(self.infNFe.ide.cUF.valor).zfill(2)
+ dados += str(self.infNFe.ide.tpEmis.valor).zfill(1)
+ dados += str(self.infNFe.emit.CNPJ.valor).zfill(14)
+ dados += str(int(self.infNFe.total.ICMSTot.vNF.valor * 100)).zfill(14)
#
# Há ICMS próprio?
@@ -2031,7 +2098,7 @@ def monta_dados_contingencia_fsda(self):
dados += self.infNFe.ide.dhEmi.valor.strftime('%d').zfill(2)
digito = self._calcula_dv(dados)
- dados += unicode(digito)
+ dados += str(digito)
self.dados_contingencia_fsda = dados
def crt_desconto(self):
@@ -2039,3 +2106,212 @@ def crt_desconto(self):
self.infNFe.total.ICMSTot.vDesc.valor +
self.infNFe.total.ICMSTot.vICMSDeson.valor
)
+
+ def monta_qrcode(self):
+ self.monta_chave()
+
+ qrcode = 'chNFe=' + self.chave
+ qrcode += '&nVersao=100'
+ qrcode += '&tpAmb=' + self.infNFe.ide.tpAmb._valor_string
+
+ if self.infNFe.dest.CNPJ.valor:
+ qrcode += '&cDest=' + self.infNFe.dest.CNPJ._valor_string
+
+ elif self.infNFe.dest.CPF.valor:
+ qrcode += '&cDest=' + self.infNFe.dest.CPF._valor_string
+
+ elif self.infNFe.dest.idEstrangeiro.valor:
+ qrcode += '&cDest=' + self.infNFe.dest.idEstrangeiro._valor_string
+
+ #
+ # SP, PR e MS
+ #
+ if self.infNFe.ide.cUF.valor not in (35, 41, 50):
+ qrcode += '&dhEmi=' + binascii.hexlify(self.infNFe.ide.dhEmi._valor_string)
+ else:
+ qrcode += '&dhEmi=' + binascii.hexlify(self.infNFe.ide.dhEmi._valor_string).upper()
+
+ qrcode += '&vNF=' + self.infNFe.total.ICMSTot.vNF._valor_string
+ qrcode += '&vICMS=' + self.infNFe.total.ICMSTot.vICMS._valor_string
+
+ if self.infNFe.ide.cUF.valor not in (35, 41, 50):
+ qrcode += '&digVal=' + binascii.hexlify(self.Signature.DigestValue)
+ else:
+ qrcode += '&digVal=' + binascii.hexlify(self.Signature.DigestValue).upper()
+
+ qrcode += '&cIdToken=' + str(self.infNFe.emit.csc.id).zfill(6)
+
+ pre_qrcode = qrcode + self.infNFe.emit.csc.codigo.ljust(36).upper()
+
+ qrcode += '&cHashQRCode=' + hashlib.sha1(pre_qrcode).hexdigest().upper()
+
+ self.qrcode = qrcode
+
+ qrcode = ESTADO_QRCODE[CODIGO_UF[self.infNFe.ide.cUF.valor]][self.infNFe.ide.tpAmb.valor] + '?' + qrcode
+
+ self.infNFeSupl.qrCode.valor = qrcode
+
+ @property
+ def qrcode_imagem(self):
+ #
+ # box_size=2 dá um tamanho de 4 x 4 cm
+ #
+ codigo = qrcode.QRCode(box_size=2)
+ codigo.add_data(self.infNFeSupl.qrCode.valor)
+
+ arq = BytesIO()
+ codigo.make_image().save(arq)
+ arq.pos = 0
+ imagem = arq.read().encode('base64')
+ arq.close()
+
+ return imagem
+
+ @property
+ def url_consulta(self):
+ return ESTADO_CONSULTA_NFCE[CODIGO_UF[self.infNFe.ide.cUF.valor]][self.infNFe.ide.tpAmb.valor]
+
+ @property
+ def quantidade_itens(self):
+ return str(int(len(self.infNFe.det)))
+
+ @property
+ def numero_formatado(self):
+ num = str(self.infNFe.ide.nNF.valor).zfill(9)
+ num_formatado = '.'.join((num[0:3], num[3:6], num[6:9]))
+
+ if str(self.infNFe.ide.mod.valor) == '65':
+ return 'nº ' + num_formatado
+ elif str(self.infNFe.ide.mod.valor) == '55':
+ return 'Nº ' + num_formatado
+ else:
+ return num_formatado
+
+ @property
+ def serie_formatada(self):
+ if str(self.infNFe.ide.mod.valor) == '65':
+ return 'Série ' + str(self.infNFe.ide.serie.valor).zfill(3)
+ elif str(self.infNFe.ide.mod.valor) == '55':
+ return 'SÉRIE ' + str(self.infNFe.ide.serie.valor).zfill(3)
+ else:
+ return str(self.infNFe.ide.serie.valor).zfill(3)
+
+ @property
+ def cnpj_destinatario_formatado(self):
+ if str(self.infNFe.ide.mod.valor) == '65':
+ if self.infNFe.dest.CPF.valor and len(self.infNFe.dest.CPF.valor):
+ return 'CPF ' + self._formata_cpf(str(self.infNFe.dest.CPF.valor))
+ elif self.infNFe.dest.CNPJ.valor and len(self.infNFe.dest.CNPJ.valor):
+ return 'CNPJ ' + self._formata_cnpj(str(self.infNFe.dest.CNPJ.valor))
+ elif self.infNFe.dest.idEstrangeiro.valor and len(self.infNFe.dest.idEstrangeiro.valor):
+ return 'Id. estrangeiro ' + self.infNFe.dest.idEstrangeiro.valor
+ else:
+ return ''
+ else:
+ if self.infNFe.dest.CPF.valor and len(self.infNFe.dest.CPF.valor):
+ return self._formata_cpf(str(self.infNFe.dest.CPF.valor))
+ elif self.infNFe.dest.CNPJ.valor and len(self.infNFe.dest.CNPJ.valor):
+ return self._formata_cnpj(str(self.infNFe.dest.CNPJ.valor))
+ elif self.infNFe.dest.idEstrangeiro.valor and len(self.infNFe.dest.idEstrangeiro.valor):
+ return self.infNFe.dest.idEstrangeiro.valor
+ else:
+ return ''
+
+ @property
+ def incentivador_cultural_sim_nao(self):
+ incentivador_cultural = False
+
+ for det in self.infNFe.det:
+ if det.imposto.ISSQN.indIncentivo.valor == 1:
+ incentivador_cultural = True
+ break
+
+ if incentivador_cultural:
+ return 'sim'
+ else:
+ return 'não'
+
+ @property
+ def servico_formatado(self):
+ if len(self.infNFe.det) == 0 or not self.infNFe.det[0].imposto.ISSQN.cListServ.valor:
+ return ''
+
+ formatado = self.infNFe.det[0].imposto.ISSQN.cListServ.valor
+
+ if self.infNFe.det[0].imposto.ISSQN.xListServ.valor:
+ formatado += ' - ' + self.infNFe.det[0].imposto.ISSQN.xListServ.valor
+
+ return formatado
+
+
+class NFCe(NFe):
+ def __init__(self):
+ super(NFCe, self).__init__()
+ self.infNFe.ide.mod.valor = '65' # NFC-e
+ self.infNFe.ide.tpImp.valor = '4' # DANFE NFC-e em papel
+ self.infNFe.ide.indPres.valor = '1' # Operação presencial
+ self.infNFe.ide.indFinal.valor = '1' # Consumidor final
+ self.infNFe.transp.modFrete.valor = 9 # Sem frete
+ self.infNFe.dest.modelo = '65'
+
+
+class NFSe(NFe):
+ def __init__(self):
+ super(NFSe, self).__init__()
+ self.infNFe.ide.mod.valor = '99' # NFS-e
+ self.infNFe.ide.tpImp.valor = '4' # DANFE NFS-e em papel
+ self.infNFe.ide.indFinal.valor = '1' # Consumidor final
+ self.infNFe.transp.modFrete.valor = 9 # Sem frete
+ self.infNFe.dest.modelo = '99'
+
+ #
+ # Marca as tags de ISS e retenções como obrigatórias
+ #
+ self.infNFe.total.ISSQNTot.vServ.obrigatorio = True
+ self.infNFe.total.ISSQNTot.vBC.obrigatorio = True
+ self.infNFe.total.ISSQNTot.vISS.obrigatorio = True
+ self.infNFe.total.ISSQNTot.vPIS.obrigatorio = True
+ self.infNFe.total.ISSQNTot.vCOFINS.obrigatorio = True
+ self.infNFe.total.ISSQNTot.vDeducao.obrigatorio = True
+ self.infNFe.total.ISSQNTot.vOutro.obrigatorio = True
+ self.infNFe.total.ISSQNTot.vDescIncond.obrigatorio = True
+ self.infNFe.total.ISSQNTot.vDescCond.obrigatorio = True
+ self.infNFe.total.ISSQNTot.vISSRet.obrigatorio = True
+ self.infNFe.total.ISSQNTot.cRegTrib.obrigatorio = True
+
+ self.infNFe.total.retTrib.vRetPIS.obrigatorio = True
+ self.infNFe.total.retTrib.vRetCOFINS.obrigatorio = True
+ self.infNFe.total.retTrib.vRetCSLL.obrigatorio = True
+ self.infNFe.total.retTrib.vBCIRRF.obrigatorio = True
+ self.infNFe.total.retTrib.vIRRF.obrigatorio = True
+ self.infNFe.total.retTrib.vBCRetPrev.obrigatorio = True
+ self.infNFe.total.retTrib.vRetPrev.obrigatorio = True
+
+ @property
+ def nome_cidade(self):
+ nome_cidade = self.infNFe.emit.enderEmit.UF.valor
+ nome_cidade += '-'
+ nome_cidade += self.infNFe.emit.enderEmit.xMun.valor
+ nome_cidade = nome_cidade.replace(' ', '_').lower()
+
+ nome_cidade = nome_cidade.replace('°','o')
+
+ if sys.version_info.major == 2:
+ nome_cidade = unicodedata.normalize(b'NFKD', nome_cidade).encode('ascii', 'ignore').encode('utf-8')
+ else:
+ nome_cidade = unicodedata.normalize('NFKD', nome_cidade).encode('ascii', 'ignore').decode('utf-8')
+
+ return nome_cidade
+
+ @property
+ def xml(self):
+ caminho_templates = os.path.join(DIRNAME, '../../nfse/', self.nome_cidade)
+
+ from genshi.template.loader import TemplateLoader
+ from genshi.template import MarkupTemplate
+
+ loader = TemplateLoader(search_path=caminho_templates, auto_reload=True, allow_exec=True, default_class=MarkupTemplate)
+
+ tmpl = loader.load('envio_rps.xml')
+ stream = tmpl.generate(NFe=self)
+ return stream.render()
diff --git a/pysped/nfe/leiaute/nfe_400.py b/pysped/nfe/leiaute/nfe_400.py
index b71ecb0e..f20c8a8a 100644
--- a/pysped/nfe/leiaute/nfe_400.py
+++ b/pysped/nfe/leiaute/nfe_400.py
@@ -39,10 +39,13 @@
#
#
-from __future__ import division, print_function, unicode_literals
+from __future__ import (division, print_function, unicode_literals,
+ absolute_import)
+
+from builtins import str
from pysped.xml_sped import *
-from pysped.nfe.leiaute import ESQUEMA_ATUAL_VERSAO_3 as ESQUEMA_ATUAL
+from pysped.nfe.leiaute import ESQUEMA_ATUAL_VERSAO_4 as ESQUEMA_ATUAL
from pysped.nfe.leiaute import nfe_310
import os
@@ -82,6 +85,40 @@ def __init__(self):
class ICMSUFDest(nfe_310.ICMSUFDest):
def __init__(self):
super(ICMSUFDest, self).__init__()
+ self.vBCFCPUFDest = TagDecimal(nome='vBCFCPUFDest', codigo='', tamanho=[1, 13, 1], decimais=[0, 2, 2], raiz='//det/imposto/ICMSUFDest', obrigatorio=False)
+
+ def get_xml(self):
+ if not (self.vBCUFDest.valor):
+ return ''
+
+ xml = XMLNFe.get_xml(self)
+ xml += ''
+ xml += self.vBCUFDest.xml
+ xml += self.vBCFCPUFDest.xml
+ xml += self.pFCPUFDest.xml
+ xml += self.pICMSUFDest.xml
+ xml += self.pICMSInter.xml
+ xml += self.pICMSInterPart.xml
+ xml += self.vFCPUFDest.xml
+ xml += self.vICMSUFDest.xml
+ xml += self.vICMSUFRemet.xml
+ xml += ''
+
+ return xml
+
+ def set_xml(self, arquivo):
+ if self._le_xml(arquivo):
+ self.vBCUFDest.xml = arquivo
+ self.vBCFCPUFDest.xml = arquivo
+ self.pFCPUFDest.xml = arquivo
+ self.pICMSUFDest.xml = arquivo
+ self.pICMSInter.xml = arquivo
+ self.pICMSInterPart.xml = arquivo
+ self.vFCPUFDest.xml = arquivo
+ self.vICMSUFDest.xml = arquivo
+ self.vICMSUFRemet.xml = arquivo
+
+ xml = property(get_xml, set_xml)
class COFINSST(nfe_310.COFINSST):
@@ -134,20 +171,551 @@ class TagCSOSN(nfe_310.TagCSOSN):
def __init__(self, *args, **kwargs):
super(TagCSOSN, self).__init__(*args, **kwargs)
+ def set_valor(self, novo_valor):
+ super(TagCSOSN, self).set_valor(novo_valor)
+
+ if not self.grupo_icms:
+ return None
+
+ #
+ # Definimos todas as tags como não obrigatórias
+ #
+ self.grupo_icms.pST.obrigatorio = False
+ self.grupo_icms.vBCFCP.obrigatorio = False
+ self.grupo_icms.pFCP.obrigatorio = False
+ self.grupo_icms.vFCP.obrigatorio = False
+ self.grupo_icms.vBCFCPST.obrigatorio = False
+ self.grupo_icms.pFCPST.obrigatorio = False
+ self.grupo_icms.vFCPST.obrigatorio = False
+ self.grupo_icms.vBCFCPSTRet.obrigatorio = False
+ self.grupo_icms.pFCPSTRet.obrigatorio = False
+ self.grupo_icms.vFCPSTRet.obrigatorio = False
+
+ #
+ # Por segurança, zeramos os valores das tags do
+ # grupo ICMS ao redefinirmos o código da situação
+ # tributária
+ #
+ self.grupo_icms.pST.valor = '0.00'
+ self.grupo_icms.vBCFCP.valor = '0.00'
+ self.grupo_icms.pFCP.valor = '0.00'
+ self.grupo_icms.vFCP.valor = '0.00'
+ self.grupo_icms.vBCFCPST.valor = '0.00'
+ self.grupo_icms.pFCPST.valor = '0.00'
+ self.grupo_icms.vFCPST.valor = '0.00'
+ self.grupo_icms.vBCFCPSTRet.valor = '0.00'
+ self.grupo_icms.pFCPSTRet.valor = '0.00'
+ self.grupo_icms.vFCPSTRet.valor = '0.00'
+
+ #
+ # Redefine a raiz para todas as tags do grupo ICMS
+ #
+ self.grupo_icms.pST.raiz = self.grupo_icms.raiz_tag
+ self.grupo_icms.vBCFCP.raiz = self.grupo_icms.raiz_tag
+ self.grupo_icms.pFCP.raiz = self.grupo_icms.raiz_tag
+ self.grupo_icms.vFCP.raiz = self.grupo_icms.raiz_tag
+ self.grupo_icms.vBCFCPST.raiz = self.grupo_icms.raiz_tag
+ self.grupo_icms.pFCPST.raiz = self.grupo_icms.raiz_tag
+ self.grupo_icms.vFCPST.raiz = self.grupo_icms.raiz_tag
+ self.grupo_icms.vBCFCPSTRet.raiz = self.grupo_icms.raiz_tag
+ self.grupo_icms.pFCPSTRet.raiz = self.grupo_icms.raiz_tag
+ self.grupo_icms.vFCPSTRet.raiz = self.grupo_icms.raiz_tag
+
class TagCSTICMS(nfe_310.TagCSTICMS):
def __init__(self, *args, **kwargs):
super(TagCSTICMS, self).__init__(*args, **kwargs)
+ def set_valor(self, novo_valor):
+ super(TagCSTICMS, self).set_valor(novo_valor)
+ if not self.grupo_icms:
+ return None
+ #
+ # Definimos todas as tags como não obrigatórias
+ #
+ self.grupo_icms.pST.obrigatorio = False
+ self.grupo_icms.vBCFCP.obrigatorio = False
+ self.grupo_icms.pFCP.obrigatorio = False
+ self.grupo_icms.vFCP.obrigatorio = False
+ self.grupo_icms.vBCFCPST.obrigatorio = False
+ self.grupo_icms.pFCPST.obrigatorio = False
+ self.grupo_icms.vFCPST.obrigatorio = False
+ self.grupo_icms.vBCFCPSTRet.obrigatorio = False
+ self.grupo_icms.pFCPSTRet.obrigatorio = False
+ self.grupo_icms.vFCPSTRet.obrigatorio = False
+ #
+ # Por segurança, zeramos os valores das tags do
+ # grupo ICMS ao redefinirmos o código da situação
+ # tributária
+ #
+ self.grupo_icms.pST.valor = '0.00'
+ self.grupo_icms.vBCFCP.valor = '0.00'
+ self.grupo_icms.pFCP.valor = '0.00'
+ self.grupo_icms.vFCP.valor = '0.00'
+ self.grupo_icms.vBCFCPST.valor = '0.00'
+ self.grupo_icms.pFCPST.valor = '0.00'
+ self.grupo_icms.vFCPST.valor = '0.00'
+ self.grupo_icms.vBCFCPSTRet.valor = '0.00'
+ self.grupo_icms.pFCPSTRet.valor = '0.00'
+ self.grupo_icms.vFCPSTRet.valor = '0.00'
+ #
+ # Redefine a raiz para todas as tags do grupo ICMS
+ #
+ self.grupo_icms.pST.raiz = self.grupo_icms.raiz_tag
+ self.grupo_icms.vBCFCP.raiz = self.grupo_icms.raiz_tag
+ self.grupo_icms.pFCP.raiz = self.grupo_icms.raiz_tag
+ self.grupo_icms.vFCP.raiz = self.grupo_icms.raiz_tag
+ self.grupo_icms.vBCFCPST.raiz = self.grupo_icms.raiz_tag
+ self.grupo_icms.pFCPST.raiz = self.grupo_icms.raiz_tag
+ self.grupo_icms.vFCPST.raiz = self.grupo_icms.raiz_tag
+ self.grupo_icms.vBCFCPSTRet.raiz = self.grupo_icms.raiz_tag
+ self.grupo_icms.pFCPSTRet.raiz = self.grupo_icms.raiz_tag
+ self.grupo_icms.vFCPSTRet.raiz = self.grupo_icms.raiz_tag
+
class ICMS(nfe_310.ICMS):
def __init__(self):
super(ICMS, self).__init__()
+ self.pST = TagDecimal(nome='pST' , codigo='', tamanho=[1, 3, 1], decimais=[0, 2, 4], raiz='', obrigatorio=False)
+ self.vBCFCP = TagDecimal(nome='vBCFCP' , codigo='', tamanho=[1, 13, 1], decimais=[0, 2, 2], raiz='', obrigatorio=False)
+ self.pFCP = TagDecimal(nome='pFCP' , codigo='', tamanho=[1, 3, 1], decimais=[0, 2, 4], raiz='', obrigatorio=False)
+ self.vFCP = TagDecimal(nome='vFCP' , codigo='', tamanho=[1, 13, 1], decimais=[0, 2, 2], raiz='', obrigatorio=False)
+ self.vBCFCPST = TagDecimal(nome='vBCFCPST' , codigo='', tamanho=[1, 13, 1], decimais=[0, 2, 2], raiz='', obrigatorio=False)
+ self.pFCPST = TagDecimal(nome='pFCPST' , codigo='', tamanho=[1, 3, 1], decimais=[0, 2, 4], raiz='', obrigatorio=False)
+ self.vFCPST = TagDecimal(nome='vFCPST' , codigo='', tamanho=[1, 13, 1], decimais=[0, 2, 2], raiz='', obrigatorio=False)
+ self.vBCFCPSTRet = TagDecimal(nome='vBCFCPSTRet', codigo='', tamanho=[1, 13, 1], decimais=[0, 2, 2], raiz='', obrigatorio=False)
+ self.pFCPSTRet = TagDecimal(nome='pFCPSTRet' , codigo='', tamanho=[1, 3, 1], decimais=[0, 2, 4], raiz='', obrigatorio=False)
+ self.vFCPSTRet = TagDecimal(nome='vFCPSTRet' , codigo='', tamanho=[1, 13, 1], decimais=[0, 2, 2], raiz='', obrigatorio=False)
+ self.pRedBCEfet = TagDecimal(nome='pRedBCEfet', codigo='', tamanho=[1, 3, 1], decimais=[0, 2, 4], raiz='')
+ self.vBCEfet = TagDecimal(nome='vBCEfet' , codigo='', tamanho=[1, 13, 1], decimais=[0, 2, 2], raiz='')
+ self.pICMSEfet = TagDecimal(nome='pICMSEfet', codigo='', tamanho=[1, 3, 1], decimais=[0, 2, 4], raiz='')
+ self.vICMSEfet = TagDecimal(nome='vICMSEfet' , codigo='', tamanho=[1, 13, 1], decimais=[0, 2, 2], raiz='')
+ self.orig = TagCaracter(nome='orig', codigo='', raiz='')
+
+ #
+ # Situação tributária do Simples Nacional
+ #
+ self.CSOSN = TagCSOSN()
+ self.CSOSN.grupo_icms = self
+ self.CSOSN.valor = '400'
+
+ #
+ # Situação tributária tradicional
+ #
+ self.CST = TagCSTICMS()
+ self.CST.grupo_icms = self
+ self.CST.valor = '41'
+
+ def get_xml(self):
+ #
+ # Define as tags baseado no código da situação tributária
+ #
+ xml = XMLNFe.get_xml(self)
+ xml += '<' + self.nome_tag + '>'
+ xml += self.orig.xml
+
+ #
+ # Se for regime tradicional (não Simples Nacional)
+ #
+ if self.regime_tributario != 1:
+ xml += self.CST.xml
+
+ if self.CST.valor == '00':
+ xml += self.modBC.xml
+ xml += self.vBC.xml
+ xml += self.pICMS.xml
+ xml += self.vICMS.xml
+
+ #xml += self.vBCFCP.xml
+ if self.vFCP.valor:
+ xml += self.pFCP.xml
+ xml += self.vFCP.xml
+
+ elif self.CST.valor == '10':
+ if not self.partilha:
+ xml += self.modBC.xml
+ xml += self.vBC.xml
+ #xml += self.pRedBC.xml
+ xml += self.pICMS.xml
+ xml += self.vICMS.xml
+ xml += self.modBCST.xml
+
+ # Somente quando for margem de valor agregado
+ if self.modBCST.valor == 4:
+ xml += self.pMVAST.xml
+
+ xml += self.pRedBCST.xml
+ xml += self.vBCST.xml
+ xml += self.pICMSST.xml
+ xml += self.vICMSST.xml
+
+ if self.vFCP.valor:
+ xml += self.vBCFCPST.xml
+ xml += self.pFCPST.xml
+ xml += self.vFCPST.xml
+
+ else:
+ xml += self.modBC.xml
+ xml += self.vBC.xml
+ xml += self.pRedBC.xml
+ xml += self.pICMS.xml
+ xml += self.vICMS.xml
+ xml += self.modBCST.xml
+
+ # Somente quando for margem de valor agregado
+ if self.modBCST.valor == 4:
+ xml += self.pMVAST.xml
+
+ xml += self.pRedBCST.xml
+ xml += self.vBCST.xml
+ xml += self.pICMSST.xml
+ xml += self.vICMSST.xml
+ xml += self.pBCOp.xml
+ xml += self.UFST.xml
+
+ elif self.CST.valor == '20':
+ xml += self.modBC.xml
+ xml += self.pRedBC.xml
+ xml += self.vBC.xml
+ xml += self.pICMS.xml
+ xml += self.vICMS.xml
+
+ if self.vFCP.valor:
+ xml += self.vBCFCP.xml
+ xml += self.pFCP.xml
+ xml += self.vFCP.xml
+
+ xml += self.vICMSDeson.xml
+ xml += self.motDesICMS.xml
+
+ elif self.CST.valor == '30':
+ xml += self.modBCST.xml
+
+ # Somente quando for margem de valor agregado
+ if self.modBCST.valor == 4:
+ xml += self.pMVAST.xml
+
+ xml += self.pRedBCST.xml
+ xml += self.vBCST.xml
+ xml += self.pICMSST.xml
+ xml += self.vICMSST.xml
+
+ if self.vFCPST.valor:
+ xml += self.vBCFCPST.xml
+ xml += self.pFCPST.xml
+ xml += self.vFCPST.xml
+
+ xml += self.vICMSDeson.xml
+ xml += self.motDesICMS.xml
+
+ elif self.CST.valor in ('40', '41', '50'):
+ xml += self.vICMSDeson.xml
+ xml += self.motDesICMS.xml
+
+ elif self.CST.valor == '51':
+ xml += self.modBC.xml
+ xml += self.pRedBC.xml
+ xml += self.vBC.xml
+ xml += self.pICMS.xml
+ xml += self.vICMSOp.xml
+ xml += self.pDif.xml
+ xml += self.vICMSDif.xml
+ xml += self.vICMS.xml
+ if self.vFCP.valor:
+ xml += self.vBCFCP.xml
+ xml += self.pFCP.xml
+ xml += self.vFCP.xml
+
+ elif self.CST.valor == '60':
+ if (self.vBCSTRet.valor or self.pST.valor or self.vICMSSTRet.valor):
+ xml += self.vBCSTRet.xml
+ xml += self.pST.xml
+ xml += self.vICMSSTRet.xml
+
+ if (self.vBCFCPSTRet.valor or self.pFCPSTRet.valor or self.vFCPSTRet.valor):
+ xml += self.vBCFCPSTRet.xml
+ xml += self.pFCPSTRet.xml
+ xml += self.vFCPSTRet.xml
+
+ if (self.pRedBCEfet.valor or self.vBCEfet.valor or self.pICMSEfet.valor or self.vICMSEfet.valor):
+ xml += self.pRedBCEfet.xml
+ xml += self.vBCEfet.xml
+ xml += self.pICMSEfet.xml
+ xml += self.vICMSEfet.xml
+
+ elif self.CST.valor == '70':
+ xml += self.modBC.xml
+ xml += self.pRedBC.xml
+ xml += self.vBC.xml
+ xml += self.pICMS.xml
+ xml += self.vICMS.xml
+ xml += self.modBCST.xml
+
+ # Somente quando for margem de valor agregado
+ if self.modBCST.valor == 4:
+ xml += self.pMVAST.xml
+
+ xml += self.pRedBCST.xml
+ xml += self.vBCST.xml
+ xml += self.pICMSST.xml
+ xml += self.vICMSST.xml
+
+ if self.vFCP.valor:
+ xml += self.vBCFCPST.xml
+ xml += self.pFCPST.xml
+ xml += self.vFCPST.xml
+
+ xml += self.vICMSDeson.xml
+ xml += self.motDesICMS.xml
+
+ elif self.CST.valor == '90':
+ xml += self.modBC.xml
+ xml += self.pRedBC.xml
+ xml += self.vBC.xml
+ xml += self.pICMS.xml
+ xml += self.vICMS.xml
+
+ if self.vFCP.valor:
+ xml += self.vBCFCP.xml
+ xml += self.pFCP.xml
+ xml += self.vFCP.xml
+
+ xml += self.modBCST.xml
+
+ # Somente quando for margem de valor agregado
+ if self.modBCST.valor == 4:
+ xml += self.pMVAST.xml
+
+ xml += self.pRedBCST.xml
+ xml += self.vBCST.xml
+ xml += self.pICMSST.xml
+ xml += self.vICMSST.xml
+
+ if self.vFCPST.valor:
+ xml += self.vBCFCPST.xml
+ xml += self.pFCPST.xml
+ xml += self.vFCPST.xml
+
+ xml += self.vICMSDeson.xml
+ xml += self.motDesICMS.xml
+
+ if self.partilha:
+ xml += self.pBCOp.xml
+ xml += self.UFST.xml
+
+ #
+ # O regime tributário é o Simples Nacional
+ #
+ else:
+ xml += self.CSOSN.xml
+
+ if self.CSOSN.valor == '101':
+ xml += self.pCredSN.xml
+ xml += self.vCredICMSSN.xml
+
+ elif self.CSOSN.valor in ('102', '103', '300', '400'):
+ pass
+
+ elif self.CSOSN.valor == '201':
+ xml += self.modBCST.xml
+
+ # Somente quando for margem de valor agregado
+ if self.modBCST.valor == 4:
+ xml += self.pMVAST.xml
+
+ xml += self.pRedBCST.xml
+ xml += self.vBCST.xml
+ xml += self.pICMSST.xml
+ xml += self.vICMSST.xml
+
+ if self.vFCPST.valor:
+ xml += self.vBCFCPST.xml
+ xml += self.pFCPST.xml
+ xml += self.vFCPST.xml
+
+ xml += self.pCredSN.xml
+ xml += self.vCredICMSSN.xml
+
+ elif self.CSOSN.valor in ('202', '203'):
+ xml += self.modBCST.xml
+
+ # Somente quando for margem de valor agregado
+ if self.modBCST.valor == 4:
+ xml += self.pMVAST.xml
+
+ xml += self.pRedBCST.xml
+ xml += self.vBCST.xml
+ xml += self.pICMSST.xml
+ xml += self.vICMSST.xml
+
+ if self.vFCPST.valor:
+ xml += self.vBCFCPST.xml
+ xml += self.pFCPST.xml
+ xml += self.vFCPST.xml
+
+ elif self.CSOSN.valor == '500':
+ if (self.vBCSTRet.valor or self.pST.valor or self.vICMSSTRet.valor):
+ xml += self.vBCSTRet.xml
+ xml += self.pST.xml
+ xml += self.vICMSSTRet.xml
+
+ if (self.vBCFCPSTRet.valor or self.pFCPSTRet.valor or self.vFCPSTRet.valor):
+ xml += self.vBCFCPSTRet.xml
+ xml += self.pFCPSTRet.xml
+ xml += self.vFCPSTRet.xml
+
+ elif self.CSOSN.valor == '900':
+ xml += self.modBC.xml
+ xml += self.vBC.xml
+ xml += self.pRedBC.xml
+ xml += self.pICMS.xml
+ xml += self.vICMS.xml
+ xml += self.modBCST.xml
+
+ # Somente quando for margem de valor agregado
+ if self.modBCST.valor == 4:
+ xml += self.pMVAST.xml
+
+ xml += self.pRedBCST.xml
+ xml += self.vBCST.xml
+ xml += self.pICMSST.xml
+ xml += self.vICMSST.xml
+
+ if self.vFCPST.valor:
+ xml += self.vBCFCPST.xml
+ xml += self.pFCPST.xml
+ xml += self.vFCPST.xml
+
+ xml += self.pCredSN.xml
+ xml += self.vCredICMSSN.xml
+
+ xml += '' + self.nome_tag + '>'
+ return xml
+
+ def set_xml(self, arquivo):
+ if self._le_xml(arquivo):
+ #
+ # Para ler corretamente o ICMS, primeiro temos que descobrir em
+ # qual grupo de situação tributária ele está
+ #
+ self.partilha = False
+ self.repasse = False
+
+ if self._le_noh('//det/imposto/ICMS/ICMS00') is not None:
+ self.regime_tributario = 3
+ self.CST.valor = '00'
+ elif self._le_noh('//det/imposto/ICMS/ICMS10') is not None:
+ self.regime_tributario = 3
+ self.CST.valor = '10'
+ elif self._le_noh('//det/imposto/ICMS/ICMS20') is not None:
+ self.regime_tributario = 3
+ self.CST.valor = '20'
+ elif self._le_noh('//det/imposto/ICMS/ICMS30') is not None:
+ self.regime_tributario = 3
+ self.CST.valor = '30'
+ elif self._le_noh('//det/imposto/ICMS/ICMS40') is not None:
+ self.regime_tributario = 3
+ self.CST.valor = '40'
+ elif self._le_noh('//det/imposto/ICMS/ICMS51') is not None:
+ self.regime_tributario = 3
+ self.CST.valor = '51'
+ elif self._le_noh('//det/imposto/ICMS/ICMS60') is not None:
+ self.regime_tributario = 3
+ self.CST.valor = '60'
+ elif self._le_noh('//det/imposto/ICMS/ICMS70') is not None:
+ self.regime_tributario = 3
+ self.CST.valor = '70'
+ elif self._le_noh('//det/imposto/ICMS/ICMS90') is not None:
+ self.regime_tributario = 3
+ self.CST.valor = '90'
+ elif self._le_noh('//det/imposto/ICMS/ICMSPart') is not None:
+ self.regime_tributario = 3
+ self.partilha = True
+ self.CST.valor = '10'
+ elif self._le_noh('//det/imposto/ICMS/ICMSST') is not None:
+ self.regime_tributario = 3
+ self.repasse = True
+ self.CST.valor = '41'
+ elif self._le_noh('//det/imposto/ICMS/ICMSSN101') is not None:
+ self.regime_tributario = 1
+ self.CSOSN.valor = '101'
+ elif self._le_noh('//det/imposto/ICMS/ICMSSN102') is not None:
+ self.regime_tributario = 1
+ self.CSOSN.valor = '102'
+ elif self._le_noh('//det/imposto/ICMS/ICMSSN201') is not None:
+ self.regime_tributario = 1
+ self.CSOSN.valor = '201'
+ elif self._le_noh('//det/imposto/ICMS/ICMSSN202') is not None:
+ self.regime_tributario = 1
+ self.CSOSN.valor = '202'
+ elif self._le_noh('//det/imposto/ICMS/ICMSSN500') is not None:
+ self.regime_tributario = 1
+ self.CSOSN.valor = '500'
+ elif self._le_noh('//det/imposto/ICMS/ICMSSN900') is not None:
+ self.regime_tributario = 1
+ self.CSOSN.valor = '900'
+
+ #
+ # Agora podemos ler os valores tranquilamente...
+ #
+ self.orig.xml = arquivo
+
+ if self.regime_tributario == 1:
+ self.CSOSN.xml = arquivo
+ else:
+ self.CST.xml = arquivo
+
+ self.modBC.xml = arquivo
+ self.vBC.xml = arquivo
+ self.pRedBC.xml = arquivo
+ self.pICMS.xml = arquivo
+ self.vICMS.xml = arquivo
+ self.vBCFCP.xml = arquivo
+ self.pFCP.xml = arquivo
+ self.vFCP.xml = arquivo
+ self.modBCST.xml = arquivo
+ self.pMVAST.xml = arquivo
+ self.pRedBCST.xml = arquivo
+ self.vBCST.xml = arquivo
+ self.pICMSST.xml = arquivo
+ self.vICMSST.xml = arquivo
+ self.vBCFCPST.xml = arquivo
+ self.pFCPST.xml = arquivo
+ self.vFCPST.xml = arquivo
+ self.vBCSTRet.xml = arquivo
+ self.vICMSSTRet.xml = arquivo
+ self.pST.xml = arquivo
+ self.vBCFCPSTRet.xml = arquivo
+ self.pFCPSTRet.xml = arquivo
+ self.vFCPSTRet.xml = arquivo
+ self.vICMSDeson.xml = arquivo
+ self.pRedBCEfet.xml = arquivo
+ self.vBCEfet.xml = arquivo
+ self.pICMSEfet.xml = arquivo
+ self.vICMSEfet.xml = arquivo
+ self.vICMSOp.xml = arquivo
+ self.pDif.xml = arquivo
+ self.vICMSDif.xml = arquivo
+
+ if self.regime_tributario == 1:
+ self.pCredSN.xml = arquivo
+ self.vCredICMSSN.xml = arquivo
+ else:
+ self.UFST.xml = arquivo
+ self.pBCOp.xml = arquivo
+ self.motDesICMS.xml = arquivo
+ self.vBCSTDest.xml = arquivo
+ self.vICMSSTDest.xml = arquivo
+
+ xml = property(get_xml, set_xml)
+
class Imposto(nfe_310.Imposto):
def __init__(self):
super(Imposto, self).__init__()
+ self.ICMS = ICMS()
+ self.vTotTrib = TagDecimal(nome='vTotTrib', codigo='M02', tamanho=[1, 15, 1], decimais=[0, 2, 2], raiz='//det/imposto', obrigatorio=True)
class CIDE(nfe_310.CIDE):
@@ -168,6 +736,25 @@ def __init__(self):
class Med(nfe_310.Med):
def __init__(self):
super(Med, self).__init__()
+ self.cProdANVISA = TagCaracter(nome='cProdANVISA', codigo='', tamanho=[1, 13], raiz='//med', obrigatorio=True)
+
+ def get_xml(self):
+ if not self.cProdANVISA.valor:
+ return ''
+
+ xml = XMLNFe.get_xml(self)
+ xml += ''
+ xml += self.cProdANVISA.xml
+ xml += self.vPMC.xml
+ xml += ''
+ return xml
+
+ def set_xml(self, arquivo):
+ if self._le_xml(arquivo):
+ self.cProdANVISA.xml = arquivo
+ self.vPMC.xml = arquivo
+
+ xml = property(get_xml, set_xml)
class VeicProd(nfe_310.VeicProd):
@@ -193,16 +780,163 @@ def __init__(self):
class DI(nfe_310.DI):
def __init__(self):
super(DI, self).__init__()
+ self.nDI = TagCaracter(nome='nDI' , codigo='I19', tamanho=[1, 20], raiz='//DI')
+
+
+class Rastro(XMLNFe):
+ def __init__(self):
+ super(Rastro, self).__init__()
+ self.nLote = TagCaracter(nome='nLote', codigo='', tamanho=[1, 20] , raiz='//rastro', obrigatorio=True)
+ self.qLote = TagDecimal(nome='qLote' , codigo='', tamanho=[1, 8], decimais=[0, 3, 3], raiz='//rastro', obrigatorio=True)
+ self.dFab = TagData(nome='dFab' , codigo='' , raiz='//rastro', obrigatorio=True)
+ self.dVal = TagData(nome='dVal' , codigo='' , raiz='//rastro', obrigatorio=True)
+
+ def get_xml(self):
+ if not self.nLote.valor:
+ return ''
+
+ xml = XMLNFe.get_xml(self)
+ xml += ''
+ xml += self.nLote.xml
+ xml += self.qLote.xml
+ xml += self.dFab.xml
+ xml += self.dVal.xml
+ xml += ''
+ return xml
+
+ def set_xml(self, arquivo):
+ if self._le_xml(arquivo):
+ self.nLote.xml = arquivo
+ self.qLote.xml = arquivo
+ self.dFab.xml = arquivo
+ self.dVal.xml = arquivo
+
+ xml = property(get_xml, set_xml)
class Prod(nfe_310.Prod):
def __init__(self):
super(Prod, self).__init__()
+ self.rastro = []
+
+ def get_xml(self):
+ xml = XMLNFe.get_xml(self)
+ xml += ''
+ xml += self.cProd.xml
+ xml += self.cEAN.xml
+ xml += self.xProd.xml
+ xml += self.NCM.xml
+ xml += self.NVE.xml
+ xml += self.CEST.xml
+ xml += self.EXTIPI.xml
+ #xml += self.genero.xml
+ xml += self.CFOP.xml
+ xml += self.uCom.xml
+ xml += self.qCom.xml
+ xml += self.vUnCom.xml
+ xml += self.vProd.xml
+ xml += self.cEANTrib.xml
+ xml += self.uTrib.xml
+ xml += self.qTrib.xml
+ xml += self.vUnTrib.xml
+ xml += self.vFrete.xml
+ xml += self.vSeg.xml
+ xml += self.vDesc.xml
+ xml += self.vOutro.xml
+ xml += self.indTot.xml
+
+ for d in self.DI:
+ xml += d.xml
+
+ xml += self.detExport.xml
+ xml += self.xPed.xml
+ xml += self.nItemPed.xml
+ xml += self.nFCI.xml
+
+ for r in self.rastro:
+ xml += r.xml
+
+ xml += self.veicProd.xml
+
+ for m in self.med:
+ xml += m.xml
+
+ for a in self.arma:
+ xml += a.xml
+
+ xml += self.comb.xml
+ xml += self.nRECOPI.xml
+ xml += ''
+ return xml
+
+ def set_xml(self, arquivo):
+ if self._le_xml(arquivo):
+ self.cProd.xml = arquivo
+ self.cEAN.xml = arquivo
+ self.xProd.xml = arquivo
+ self.NCM.xml = arquivo
+ self.NVE.xml = arquivo
+ self.CEST.xml = arquivo
+ self.EXTIPI.xml = arquivo
+ #self.genero.xml = arquivo
+ self.CFOP.xml = arquivo
+ self.uCom.xml = arquivo
+ self.qCom.xml = arquivo
+ self.vUnCom.xml = arquivo
+ self.vProd.xml = arquivo
+ self.cEANTrib.xml = arquivo
+ self.uTrib.xml = arquivo
+ self.qTrib.xml = arquivo
+ self.vUnTrib.xml = arquivo
+ self.vFrete.xml = arquivo
+ self.vSeg.xml = arquivo
+ self.vDesc.xml = arquivo
+ self.vOutro.xml = arquivo
+ self.indTot.xml = arquivo
+
+ #
+ # Técnica para leitura de tags múltiplas
+ # As classes dessas tags, e suas filhas, devem ser
+ # "reenraizadas" (propriedade raiz) para poderem ser
+ # lidas corretamente
+ #
+ self.DI = self.le_grupo('//det/prod/DI', DI)
+
+ self.detExport.xml = arquivo
+ self.xPed.xml = arquivo
+ self.nItemPed.xml = arquivo
+ self.nFCI.xml = arquivo
+
+ #
+ # Técnica para leitura de tags múltiplas
+ # As classes dessas tags, e suas filhas, devem ser
+ # "reenraizadas" (propriedade raiz) para poderem ser
+ # lidas corretamente
+ #
+ self.rastro = self.le_grupo('//det/prod/rastro', Rastro)
+
+ self.veicProd.xml = arquivo
+
+ #
+ # Técnica para leitura de tags múltiplas
+ # As classes dessas tags, e suas filhas, devem ser
+ # "reenraizadas" (propriedade raiz) para poderem ser
+ # lidas corretamente
+ #
+ self.med = self.le_grupo('//det/prod/med', Med)
+ self.arma = self.le_grupo('//det/prod/arma', Arma)
+
+ self.comb.xml = arquivo
+ self.nRECOPI.xml = arquivo
+
+ xml = property(get_xml, set_xml)
class Det(nfe_310.Det):
def __init__(self):
super(Det, self).__init__()
+ self.prod = Prod()
+ self.imposto = Imposto()
class Compra(nfe_310.Compra):
@@ -238,11 +972,119 @@ def __init__(self):
class Card(nfe_310.Card):
def __init__(self):
super(Card, self).__init__()
-
-
-class Pag(nfe_310.Pag):
+ self.tpIntegra = TagCaracter(nome='tpIntegra', codigo='', tamanho=[ 1, 1], raiz='//detPag/card')
+ self.CNPJ = TagCaracter(nome='CNPJ' , codigo='XA05', tamanho=[14, 14], raiz='//detPag/card', obrigatorio=False)
+ self.tBand = TagCaracter(nome='tBand', codigo='YA01', tamanho=[ 2, 2], raiz='//detPag/card', obrigatorio=False)
+ self.cAut = TagCaracter(nome='cAut' , codigo='YA07', tamanho=[20, 20], raiz='//detPag/card', obrigatorio=False)
+
+ def get_xml(self):
+ if not (self.tpIntegra.valor or self.CNPJ.valor or self.tBand.valor or self.cAut.valor):
+ return ''
+
+ xml = XMLNFe.get_xml(self)
+ xml += ''
+ xml += self.tpIntegra.xml
+ xml += self.CNPJ.xml
+ xml += self.tBand.xml
+ xml += self.cAut.xml
+ xml += ''
+ return xml
+
+ def set_xml(self, arquivo):
+ if self._le_xml(arquivo):
+ self.tpIntegra.xml = arquivo
+ self.CNPJ.xml = arquivo
+ self.tBand.xml = arquivo
+ self.cAut.xml = arquivo
+
+ xml = property(get_xml, set_xml)
+
+
+class DetPag(nfe_310.Pag):
+ def __init__(self):
+ super(DetPag, self).__init__()
+ self.tPag = TagCaracter(nome='tPag', codigo='YA01', tamanho=[2, 2, 2], raiz='//detPag')
+ self.vPag = TagDecimal(nome='vPag' , codigo='YA02', tamanho=[1, 15, 1], decimais=[0, 2, 2], raiz='//detPag')
+ self.card = Card()
+
+ def get_xml(self):
+ if not (self.tPag.valor or self.vPag.valor or self.card.xml):
+ return ''
+
+ xml = XMLNFe.get_xml(self)
+ xml += ''
+ xml += self.tPag.xml
+ xml += self.vPag.xml
+ xml += self.card.xml
+ xml += ''
+ return xml
+
+ def set_xml(self, arquivo):
+ if self._le_xml(arquivo):
+ self.tPag.xml = arquivo
+ self.vPag.xml = arquivo
+ self.card.xml = arquivo
+
+ xml = property(get_xml, set_xml)
+
+ @property
+ def pagamento_formatado(self):
+ TIPOS = {
+ '01': 'Dinheiro',
+ '02': 'Cheque',
+ '03': 'Cartão de crédito',
+ '04': 'Cartão de débito',
+ '05': 'Crédito loja',
+ '10': 'Vale alimentação',
+ '11': 'Vale refeição',
+ '12': 'Vale presente',
+ '13': 'Vale combustível',
+ '14': 'Duplicata mercantil',
+ '15': 'Boleto bancário',
+ '90': 'Sem pagamento',
+ '99': 'Outros',
+ }
+
+ if self.tPag.valor not in TIPOS:
+ return ''
+
+ return TIPOS[self.tPag.valor]
+
+
+class Pag(XMLNFe):
def __init__(self):
super(Pag, self).__init__()
+ self.detPag = []
+ self.vTroco = TagDecimal(nome='vTroco' , codigo='YA09', tamanho=[1, 13, 1], decimais=[0, 2, 2], raiz='//pag')
+
+ def get_xml(self):
+ #
+ # Define as tags baseado no código da situação tributária
+ #
+ xml = XMLNFe.get_xml(self)
+ xml += ''
+
+ for d in self.detPag:
+ xml += d.xml
+
+ if self.vTroco.valor:
+ xml += self.vTroco.xml
+ xml += ''
+ return xml
+
+ def set_xml(self, arquivo):
+ if self._le_xml(arquivo):
+ #
+ # Técnica para leitura de tags múltiplas
+ # As classes dessas tags, e suas filhas, devem ser
+ # "reenraizadas" (propriedade raiz) para poderem ser
+ # lidas corretamente
+ #
+ self.detPag = self.le_grupo('//NFe/infNFe/pag/detPag', DetPag)
+
+ self.vTroco.xml = arquivo
+
+ xml = property(get_xml, set_xml)
class Dup(nfe_310.Dup):
@@ -308,11 +1150,79 @@ def __init__(self):
class ICMSTot(nfe_310.ICMSTot):
def __init__(self):
super(ICMSTot, self).__init__()
+ self.vFCP = TagDecimal(nome='vFCP', codigo='', tamanho=[1, 13, 1], decimais=[0, 2, 2], raiz='//NFe/infNFe/total/ICMSTot', obrigatorio=True)
+ self.vFCPST = TagDecimal(nome='vFCPST', codigo='', tamanho=[1, 13, 1], decimais=[0, 2, 2], raiz='//NFe/infNFe/total/ICMSTot', obrigatorio=True)
+ self.vFCPSTRet = TagDecimal(nome='vFCPSTRet', codigo='', tamanho=[1, 13, 1], decimais=[0, 2, 2], raiz='//NFe/infNFe/total/ICMSTot', obrigatorio=True)
+ self.vIPIDevol = TagDecimal(nome='vIPIDevol', codigo='', tamanho=[1, 13, 1], decimais=[0, 2, 2], raiz='//NFe/infNFe/total/ICMSTot', obrigatorio=True)
+ self.vICMSUFDest = TagDecimal(nome='vICMSUFDest', codigo='', tamanho=[1, 13, 1], decimais=[0, 2, 2], raiz='//NFe/infNFe/total/ICMSTot', obrigatorio=True)
+ self.vFCPUFDest = TagDecimal(nome='vFCPUFDest', codigo='', tamanho=[1, 13, 1], decimais=[0, 2, 2], raiz='//NFe/infNFe/total/ICMSTot', obrigatorio=True)
+ self.vICMSUFRemet = TagDecimal(nome='vICMSUFRemet', codigo='', tamanho=[1, 13, 1], decimais=[0, 2, 2], raiz='//NFe/infNFe/total/ICMSTot', obrigatorio=True)
+
+ def get_xml(self):
+ xml = XMLNFe.get_xml(self)
+ xml += ''
+ xml += self.vBC.xml
+ xml += self.vICMS.xml
+ xml += self.vICMSDeson.xml
+ if self.vFCPUFDest.valor:
+ xml += self.vFCPUFDest.xml
+ if self.vICMSUFDest.valor:
+ xml += self.vICMSUFDest.xml
+ if self.vICMSUFRemet.valor:
+ xml += self.vICMSUFRemet.xml
+ xml += self.vFCP.xml
+ xml += self.vBCST.xml
+ xml += self.vST.xml
+ xml += self.vFCPST.xml
+ xml += self.vFCPSTRet.xml
+ xml += self.vProd.xml
+ xml += self.vFrete.xml
+ xml += self.vSeg.xml
+ xml += self.vDesc.xml
+ xml += self.vII.xml
+ xml += self.vIPI.xml
+ xml += self.vIPIDevol.xml
+ xml += self.vPIS.xml
+ xml += self.vCOFINS.xml
+ xml += self.vOutro.xml
+ xml += self.vNF.xml
+ xml += self.vTotTrib.xml
+ xml += ''
+ return xml
+
+ def set_xml(self, arquivo):
+ if self._le_xml(arquivo):
+ self.vBC.xml = arquivo
+ self.vICMS.xml = arquivo
+ self.vICMSDeson.xml = arquivo
+ self.vFCPUFDest.xml = arquivo
+ self.vFCP.xml = arquivo
+ self.vICMSUFDest.xml = arquivo
+ self.vICMSUFRemet.xml = arquivo
+ self.vBCST.xml = arquivo
+ self.vST.xml = arquivo
+ self.vFCPST.xml = arquivo
+ self.vFCPSTRet.xml = arquivo
+ self.vProd.xml = arquivo
+ self.vFrete.xml = arquivo
+ self.vSeg.xml = arquivo
+ self.vDesc.xml = arquivo
+ self.vII.xml = arquivo
+ self.vIPI.xml = arquivo
+ self.vIPIDevol.xml = arquivo
+ self.vPIS.xml = arquivo
+ self.vCOFINS.xml = arquivo
+ self.vOutro.xml = arquivo
+ self.vNF.xml = arquivo
+ self.vTotTrib.xml = arquivo
+
+ xml = property(get_xml, set_xml)
class Total(nfe_310.Total):
def __init__(self):
super(Total, self).__init__()
+ self.ICMSTot = ICMSTot()
class AutXML(nfe_310.AutXML):
@@ -379,12 +1289,280 @@ class Ide(nfe_310.Ide):
def __init__(self):
super(Ide, self).__init__()
+ def get_xml(self):
+ xml = XMLNFe.get_xml(self)
+ xml += ''
+ xml += self.cUF.xml
+ xml += self.cNF.xml
+ xml += self.natOp.xml
+ #xml += self.indPag.xml
+ xml += self.mod.xml
+ xml += self.serie.xml
+ xml += self.nNF.xml
+ xml += self.dhEmi.xml
+
+ self.dEmi.valor = self.dhEmi.valor
+
+ if self.mod.valor == '55':
+ xml += self.dhSaiEnt.xml
+
+ self.dSaiEnt.valor = self.dhSaiEnt.valor
+ self.hSaiEnt.valor = self.hSaiEnt.valor
+
+ xml += self.tpNF.xml
+ xml += self.idDest.xml
+
+ xml += self.cMunFG.xml
+ xml += self.tpImp.xml
+ xml += self.tpEmis.xml
+ xml += self.cDV.xml
+ xml += self.tpAmb.xml
+ xml += self.finNFe.xml
+
+ xml += self.indFinal.xml
+ xml += self.indPres.xml
+
+ xml += self.procEmi.xml
+ xml += self.verProc.xml
+ xml += self.dhCont.xml
+ xml += self.xJust.xml
+
+ for nr in self.NFref:
+ xml += nr.xml
+
+ xml += ''
+ return xml
+
+ def set_xml(self, arquivo):
+ if self._le_xml(arquivo):
+ self.cUF.xml = arquivo
+ self.cNF.xml = arquivo
+ self.natOp.xml = arquivo
+ self.indPag.xml = arquivo
+ self.mod.xml = arquivo
+ self.serie.xml = arquivo
+ self.nNF.xml = arquivo
+ self.dEmi.xml = arquivo
+ self.dhEmi.xml = arquivo
+ self.dSaiEnt.xml = arquivo
+ self.dhSaiEnt.xml = arquivo
+ self.hSaiEnt.xml = arquivo
+ self.tpNF.xml = arquivo
+ self.idDest.xml = arquivo
+ self.cMunFG.xml = arquivo
+
+ self.dEmi.valor = self.dhEmi.valor
+ self.dSaiEnt.valor = self.dhSaiEnt.valor
+ self.hSaiEnt.valor = self.hSaiEnt.valor
+
+ #
+ # Técnica para leitura de tags múltiplas
+ # As classes dessas tags, e suas filhas, devem ser
+ # "reenraizadas" (propriedade raiz) para poderem ser
+ # lidas corretamente
+ #
+ self.NFref = self.le_grupo('//NFe/infNFe/ide/NFref', NFRef)
+
+ self.tpImp.xml = arquivo
+ self.tpEmis.xml = arquivo
+ self.cDV.xml = arquivo
+ self.tpAmb.xml = arquivo
+ self.finNFe.xml = arquivo
+ self.indFinal.xml = arquivo
+ self.indPres.xml = arquivo
+ self.procEmi.xml = arquivo
+ self.verProc.xml = arquivo
+ self.dhCont.xml = arquivo
+ self.xJust.xml = arquivo
+
+ xml = property(get_xml, set_xml)
+
+
+class CSC(nfe_310.CSC):
+ def __init__(self):
+ super(CSC, self).__init__()
+
class InfNFe(nfe_310.InfNFe):
def __init__(self):
super(InfNFe, self).__init__()
+ self.versao = TagDecimal(nome='infNFe' , codigo='A01', propriedade='versao', raiz='//NFe', namespace=NAMESPACE_NFE, valor='4.00')
+ self.ide = Ide()
+ self.emit = Emit()
+ self.emit.csc = CSC()
+ self.avulsa = Avulsa()
+ self.dest = Dest()
+ self.dest.modelo = self.ide.mod.valor
+ self.retirada = Retirada()
+ self.entrega = Entrega()
+ self.autXML = []
+ self.det = []
+ self.total = Total()
+ self.transp = Transp()
+ self.cobr = Cobr()
+ self.pag = Pag()
+ self.exporta = Exporta()
+ self.compra = Compra()
+ self.cana = Cana()
+
+ def get_xml(self):
+ xml = XMLNFe.get_xml(self)
+ xml += ''
+ xml += self.ide.xml
+ xml += self.emit.xml
+ xml += self.avulsa.xml
+ xml += self.dest.xml
+ xml += self.retirada.xml
+ xml += self.entrega.xml
+
+ if self.emit.CNPJ.valor != self.dest.CNPJ.valor:
+ for a in self.autXML:
+ xml += a.xml
+
+ for d in self.det:
+ d.imposto.ICMS.regime_tributario = self.emit.CRT.valor
+ d.imposto.ISSQN.regime_tributario = self.emit.CRT.valor
+ xml += d.xml
+
+ xml += self.total.xml
+ xml += self.transp.xml
+
+ if self.ide.mod.valor == '55':
+ xml += self.cobr.xml
+
+ xml += self.pag.xml
+
+ xml += self.infAdic.xml
+ xml += self.exporta.xml
+ xml += self.compra.xml
+ xml += self.cana.xml
+ xml += ''
+ return xml
+
+ def set_xml(self, arquivo):
+ if self._le_xml(arquivo):
+ self.versao.xml = arquivo
+ self.Id.xml = arquivo
+ self.ide.xml = arquivo
+ self.emit.xml = arquivo
+ self.avulsa.xml = arquivo
+ self.dest.xml = arquivo
+
+ self.dest.modelo = self.ide.mod.valor
+
+ self.retirada.xml = arquivo
+ self.entrega.xml = arquivo
+
+ #
+ # Técnica para leitura de tags múltiplas
+ # As classes dessas tags, e suas filhas, devem ser
+ # "reenraizadas" (propriedade raiz) para poderem ser
+ # lidas corretamente
+ #
+ self.autXML = self.le_grupo('//NFe/infNFe/autXML', AutXML)
+ self.det = self.le_grupo('//NFe/infNFe/det', Det)
+ for i in range(len(self.det)):
+ d = self.det[i]
+ d.imposto.ICMS.regime_tributario = self.emit.CRT.valor
+ d.imposto.ISSQN.regime_tributario = self.emit.CRT.valor
+ self.det[i] = d
+
+ self.total.xml = arquivo
+ self.transp.xml = arquivo
+ self.cobr.xml = arquivo
+
+ self.pag.xml = arquivo
+
+ self.infAdic.xml = arquivo
+ self.exporta.xml = arquivo
+ self.compra.xml = arquivo
+ self.cana.xml = arquivo
+
+ xml = property(get_xml, set_xml)
+
+
+class InfNFeSupl(nfe_310.InfNFeSupl):
+ def __init__(self):
+ super(InfNFeSupl, self).__init__()
class NFe(nfe_310.NFe):
def __init__(self):
super(NFe, self).__init__()
+ self.infNFe = InfNFe()
+ self.infNFeSupl = InfNFeSupl()
+ self.Signature = Signature()
+ self.caminho_esquema = os.path.join(DIRNAME, 'schema/', ESQUEMA_ATUAL + '/')
+ self.arquivo_esquema = 'nfe_v4.00.xsd'
+
+ def get_xml(self):
+ xml = XMLNFe.get_xml(self)
+ xml += ABERTURA
+ xml += ''
+ xml += self.infNFe.xml
+
+ if str(self.infNFe.ide.mod.valor) == '65':
+ xml += self.infNFeSupl.xml
+
+ #
+ # Define a URI a ser assinada
+ #
+ self.Signature.URI = '#' + self.infNFe.Id.valor
+
+ xml += self.Signature.xml
+ xml += ''
+ return xml
+
+ def set_xml(self, arquivo):
+ if self._le_xml(arquivo):
+ self.infNFe.xml = arquivo
+ self.infNFeSupl.xml = arquivo
+ self.Signature.xml = self._le_noh('//NFe/sig:Signature')
+
+ @property
+ def frete_formatado(self):
+ if self.infNFe.transp.modFrete.valor == 0:
+ formatado = '0-do Remetente CIF'
+
+ elif self.infNFe.transp.modFrete.valor == 1:
+ formatado = '1-do Destinatário FOB'
+
+ elif self.infNFe.transp.modFrete.valor == 2:
+ formatado = '2-de Terceiros'
+
+ elif self.infNFe.transp.modFrete.valor == 3:
+ formatado = '3-do Remetente'
+
+ elif self.infNFe.transp.modFrete.valor == 4:
+ formatado = '4-do Destinatario'
+
+ elif self.infNFe.transp.modFrete.valor == 9:
+ formatado = '9-sem frete'
+
+ else:
+ formatado = ''
+
+ return formatado
+
+ xml = property(get_xml, set_xml)
+
+
+class NFCe(NFe):
+ def __init__(self):
+ super(NFCe, self).__init__()
+ self.infNFe.ide.mod.valor = '65' # NFC-e
+ self.infNFe.ide.tpImp.valor = '4' # DANFE NFC-e em papel
+ self.infNFe.ide.indPres.valor = '1' # Operação presencial
+ self.infNFe.ide.indFinal.valor = '1' # Consumidor final
+ self.infNFe.transp.modFrete.valor = 9 # Sem frete
+ self.infNFe.dest.modelo = '65'
+
+
+class NFSe(NFe):
+ def __init__(self):
+ super(NFSe, self).__init__()
+ self.infNFe.ide.mod.valor = '99' # NFS-e
+ self.infNFe.ide.tpImp.valor = '4' # DANFE NFS-e em papel
+ self.infNFe.ide.indFinal.valor = '1' # Consumidor final
+ self.infNFe.transp.modFrete.valor = 9 # Sem frete
+ self.infNFe.dest.modelo = '99'
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/CCe_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/CCe_v1.00.xsd
new file mode 100644
index 00000000..eb028422
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/CCe_v1.00.xsd
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+ Schema XML de validação do evento Carta de Correção
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/EPEC_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/EPEC_v1.00.xsd
new file mode 100644
index 00000000..aed53891
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/EPEC_v1.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do Evento Prévio de Emissão em Contingência
+
+
+
\ No newline at end of file
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/SuframaInternaliza_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/SuframaInternaliza_v1.00.xsd
new file mode 100644
index 00000000..c725d2cf
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/SuframaInternaliza_v1.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do evento do Internalização SUFRAMA 990910
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/SuframaVistoria_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/SuframaVistoria_v1.00.xsd
new file mode 100644
index 00000000..a64fcbb6
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/SuframaVistoria_v1.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do evento de Vistoria SUFRAMA 990900
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/cancNFe_v1.07.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/cancNFe_v1.07.xsd
new file mode 100644
index 00000000..4864a85c
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/cancNFe_v1.07.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do Pedido de Cancelamento da Nota Fiscal Eletrônica
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/confRecebto_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/confRecebto_v1.00.xsd
new file mode 100644
index 00000000..82c3b72b
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/confRecebto_v1.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do evento Confirmação de recebimento
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/consNFeDest_v1.01.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/consNFeDest_v1.01.xsd
new file mode 100644
index 00000000..9782130d
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/consNFeDest_v1.01.xsd
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+ Schema de validação XML dp Pedido de Consulta de NF-e
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/consReciNFe_v3.10.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/consReciNFe_v3.10.xsd
new file mode 100644
index 00000000..1d4a1e6a
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/consReciNFe_v3.10.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do Pedido de Consulta do Recido do Lote de Notas Fiscais Eletrônicas
+
+
+
\ No newline at end of file
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/consReciNFe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/consReciNFe_v4.00.xsd
new file mode 100755
index 00000000..121c7427
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/consReciNFe_v4.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do Pedido de Consulta do Recido do Lote de Notas Fiscais Eletrônicas
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/consSitNFe_v2.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/consSitNFe_v2.00.xsd
new file mode 100644
index 00000000..f7e96383
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/consSitNFe_v2.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema de validação XML dp Pedido de Consulta da Situação Atual da Nota Fiscal Eletrônica
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/consSitNFe_v3.10.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/consSitNFe_v3.10.xsd
new file mode 100644
index 00000000..12990f10
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/consSitNFe_v3.10.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema de validação XML dp Pedido de Consulta da Situação Atual da Nota Fiscal Eletrônica
+
+
+
\ No newline at end of file
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/consSitNFe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/consSitNFe_v4.00.xsd
new file mode 100755
index 00000000..c55a4dc4
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/consSitNFe_v4.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema de validação XML dp Pedido de Consulta da Situação Atual da Nota Fiscal Eletrônica
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/consStatServ_v3.10.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/consStatServ_v3.10.xsd
new file mode 100644
index 00000000..0caac599
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/consStatServ_v3.10.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do Pedido de Consulta do Status do Serviço
+
+
+
\ No newline at end of file
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/consStatServ_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/consStatServ_v4.00.xsd
new file mode 100755
index 00000000..f089e0c3
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/consStatServ_v4.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do Pedido de Consulta do Status do Serviço
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/distDFeInt_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/distDFeInt_v1.00.xsd
new file mode 100644
index 00000000..dd125b0e
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/distDFeInt_v1.00.xsd
@@ -0,0 +1,71 @@
+
+
+
+
+
+ Schema de pedido de distribuição de DF-e de interesse
+
+
+
+
+
+
+ Identificação do Ambiente:
+ 1 - Produção
+ 2 - Homologação
+
+
+
+
+
+ Código da UF do Autor
+
+
+
+
+
+ CNPJ do interessado no DF-e
+
+
+
+
+ CPF do interessado no DF-e
+
+
+
+
+
+
+ Grupo para distribuir DF-e de interesse
+
+
+
+
+
+ Último NSU recebido pelo ator. Caso seja informado com zero, ou com um NSU muito antigo, a consulta retornará unicamente as informações resumidas e documentos fiscais eletrônicos que tenham sido recepcionados pelo Ambiente Nacional nos últimos 3 meses.
+
+
+
+
+
+
+
+ Grupo para consultar um DF-e a partir de um NSU específico
+
+
+
+
+
+ Número Sequencial Único. Geralmente esta consulta será utilizada quando identificado pelo interessado um NSU faltante. O Web Service retornará o documento ou informará que o NSU não existe no Ambiente Nacional. Assim, esta consulta fechará a lacuna do NSU identificado como faltante.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/distDFeInt_v1.01.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/distDFeInt_v1.01.xsd
new file mode 100644
index 00000000..7dea1a78
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/distDFeInt_v1.01.xsd
@@ -0,0 +1,85 @@
+
+
+
+
+
+ Schema de pedido de distribuição de DF-e de interesse
+
+
+
+
+
+
+ Identificação do Ambiente:
+ 1 - Produção
+ 2 - Homologação
+
+
+
+
+
+ Código da UF do Autor
+
+
+
+
+
+ CNPJ do interessado no DF-e
+
+
+
+
+ CPF do interessado no DF-e
+
+
+
+
+
+
+ Grupo para distribuir DF-e de interesse
+
+
+
+
+
+ Último NSU recebido pelo ator. Caso seja informado com zero, ou com um NSU muito antigo, a consulta retornará unicamente as informações resumidas e documentos fiscais eletrônicos que tenham sido recepcionados pelo Ambiente Nacional nos últimos 3 meses.
+
+
+
+
+
+
+
+ Grupo para consultar um DF-e a partir de um NSU específico
+
+
+
+
+
+ Número Sequencial Único. Geralmente esta consulta será utilizada quando identificado pelo interessado um NSU faltante. O Web Service retornará o documento ou informará que o NSU não existe no Ambiente Nacional. Assim, esta consulta fechará a lacuna do NSU identificado como faltante.
+
+
+
+
+
+
+
+ Grupo para consultar uma NF-e a partir da chave de acesso
+
+
+
+
+
+ Chave de acesso da NF-e a ser consultada
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/downloadNFe_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/downloadNFe_v1.00.xsd
new file mode 100644
index 00000000..e59bd0f5
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/downloadNFe_v1.00.xsd
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+ Schema de validação XML dp Pedido de download de NF-e
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/e110110_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/e110110_v1.00.xsd
new file mode 100644
index 00000000..b99d6cca
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/e110110_v1.00.xsd
@@ -0,0 +1,58 @@
+
+
+
+
+
+ Schema XML de validação do evento do carta de correção e1101110
+
+
+
+
+
+ Descrição do Evento - “Carta de Correção”
+
+
+
+
+
+
+
+
+
+
+
+ Correção a ser considerada
+
+
+
+
+
+
+
+
+
+
+
+
+ Texto Fixo com as condições de uso da Carta de Correção
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/e110111_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/e110111_v1.00.xsd
new file mode 100644
index 00000000..5302e39e
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/e110111_v1.00.xsd
@@ -0,0 +1,42 @@
+
+
+
+
+
+ Schema XML de validação do evento do cancelamento 1101111
+
+
+
+
+
+ Descrição do Evento - “Cancelamento”
+
+
+
+
+
+
+
+
+
+
+ Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 posições ano; 10 seqüencial no ano.
+
+
+
+
+ Justificativa do cancelamento
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/e110140_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/e110140_v1.00.xsd
new file mode 100644
index 00000000..3e8bf6b7
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/e110140_v1.00.xsd
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Identificador do destinatário, em caso de comprador estrangeiro
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Neste evento, aceitar apenas 1. 1=Empresa Emitente; 2=Empresa Destinatária; 3=Empresa; 5=Fisco; 6=RFB; 9=Outros Órgãos
+
+
+
+
+
+
+
+
+
+
+ Versão do Aplicativo do Autor do Evento
+
+
+
+
+ Data de emissão no formato UTC. AAAA-MM-DDThh:mm:ssTZD
+
+
+
+
+ Tipo do Documento Fiscal (0 - entrada; 1 - saída)
+
+
+
+
+
+
+
+
+
+
+
+
+ Informar a IE. Para IE do destinatário somente quando o contribuinte possuir uma inscrição estadual
+
+
+
+
+
+
+
+
+
+
+ Sigla UF do destinatário. Informar "EX" no caso de operação com o exterior
+
+
+
+
+ Valor total da NF-e
+
+
+
+
+ Valor total do ICMS
+
+
+
+
+ Valor total do ICMS de Substituição Tributária
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/e210200_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/e210200_v1.00.xsd
new file mode 100644
index 00000000..d5195950
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/e210200_v1.00.xsd
@@ -0,0 +1,32 @@
+
+
+
+
+ Schema XML de validação do evento da confirmação de recebimento
+
+
+
+
+
+ Descrição do Evento:
+ “Confirmacao de Recebimento"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/e210210_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/e210210_v1.00.xsd
new file mode 100644
index 00000000..cf23b633
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/e210210_v1.00.xsd
@@ -0,0 +1,32 @@
+
+
+
+
+ Schema XML de validação do evento de Ciência da Operação
+
+
+
+
+
+ Descrição do Evento:
+ "Ciência da Operação"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/e210220_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/e210220_v1.00.xsd
new file mode 100644
index 00000000..101f0ca6
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/e210220_v1.00.xsd
@@ -0,0 +1,45 @@
+
+
+
+
+ Schema XML de validação do evento de desconhecimento da operação
+
+
+
+
+
+ Descrição do Evento:
+ "Desconhecimento da Operacao"
+
+
+
+
+
+
+
+
+
+
+ Justificativa de desconhecimento da Operacao
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/e210240_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/e210240_v1.00.xsd
new file mode 100644
index 00000000..7871ed1b
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/e210240_v1.00.xsd
@@ -0,0 +1,44 @@
+
+
+
+
+ Schema XML de validação do evento de Recusa de Recebimento (Operação não Realizada)
+
+
+
+
+
+ Descrição do Evento:"Operação não Realizada"
+
+
+
+
+
+
+
+
+
+
+ Justificativa de recusa do recebimento da mercadoria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/e990900_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/e990900_v1.00.xsd
new file mode 100644
index 00000000..d5d71a61
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/e990900_v1.00.xsd
@@ -0,0 +1,87 @@
+
+
+
+
+
+ Schema XML de validação do evento doVistoria SUFRAMA 990900
+
+
+
+
+
+ Descrição do Evento - “Vistoria SUFRAMA”
+
+
+
+
+
+
+
+
+
+
+ Número do PIN-e - Protocolo de Internalização de Mercadoria Nacional eletronico
+
+
+
+
+
+
+
+
+
+
+ Data de ocorrência da vistoria, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm)
+
+
+
+
+
+
+
+
+
+
+ Localidade onde ocorreu a vistoria
+
+
+
+
+
+
+
+
+
+
+ Nome Posto do ponto onde ocorreu a vistoria
+
+
+
+
+
+
+
+
+
+
+ Histórico da ocorrência, se existir.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/e990910_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/e990910_v1.00.xsd
new file mode 100644
index 00000000..b250df28
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/e990910_v1.00.xsd
@@ -0,0 +1,81 @@
+
+
+
+
+
+ Schema XML de validação do evento do Confirmação de Internalização da Mercadoria na SUFRAMA 990910
+
+
+
+
+
+ Descrição do Evento - “Confirmação de Internalização da Mercadoria na SUFRAMA”
+
+
+
+
+
+
+
+
+
+
+ Número do PIN-e - Protocolo de Internalização de Mercadoria Nacional eletronico
+
+
+
+
+
+
+
+
+
+
+ Data de ocorrência da vistoria, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm)
+
+
+
+
+ Localidade onde ocorreu a vistoria
+
+
+
+
+
+
+
+
+
+
+ Nome Posto do ponto onde ocorreu a vistoria
+
+
+
+
+
+
+
+
+
+
+ Histórico da ocorrência, se existir.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/envCCe_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/envCCe_v1.00.xsd
new file mode 100644
index 00000000..2681c16a
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/envCCe_v1.00.xsd
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+ Schema XML de validação do lote de envio do evento carta de correção
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/envConfRecebto_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/envConfRecebto_v1.00.xsd
new file mode 100644
index 00000000..dc1acfa1
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/envConfRecebto_v1.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do lote de envio do evento confirmação de recebimento
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/envEPEC_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/envEPEC_v1.00.xsd
new file mode 100644
index 00000000..e23cbe5a
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/envEPEC_v1.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do lote de envio do Evento Prévio de Emissão em Contingência
+
+
+
\ No newline at end of file
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/envEventoCancNFe_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/envEventoCancNFe_v1.00.xsd
new file mode 100644
index 00000000..b8a9e3e8
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/envEventoCancNFe_v1.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do lote de envio do evento cancelamento
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/envEvento_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/envEvento_v1.00.xsd
new file mode 100644
index 00000000..0a5b251c
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/envEvento_v1.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do lote de envio do Evento
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/envSuframaInternaliza_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/envSuframaInternaliza_v1.00.xsd
new file mode 100644
index 00000000..899a1fe2
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/envSuframaInternaliza_v1.00.xsd
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+ Schema XML de validação do lote de envio do evento de Internalizacao SUFRAMA
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/envSuframaVistoria_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/envSuframaVistoria_v1.00.xsd
new file mode 100644
index 00000000..943cad22
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/envSuframaVistoria_v1.00.xsd
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+ Schema XML de validação do lote de envio do evento de Vistoria SUFRAMA
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/enviNFe_v3.10.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/enviNFe_v3.10.xsd
new file mode 100644
index 00000000..e9ee5b07
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/enviNFe_v3.10.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do Pedido de Concessão de Autorização da Nota Fiscal Eletrônica
+
+
+
\ No newline at end of file
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/enviNFe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/enviNFe_v4.00.xsd
new file mode 100755
index 00000000..05ee5dcb
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/enviNFe_v4.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do Pedido de Concessão de Autorização da Nota Fiscal Eletrônica
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/eventoCancNFe_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/eventoCancNFe_v1.00.xsd
new file mode 100644
index 00000000..7e647e09
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/eventoCancNFe_v1.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do evento Cancelamento
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/eventoEPEC_v0.01.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/eventoEPEC_v0.01.xsd
new file mode 100644
index 00000000..a60bc09d
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/eventoEPEC_v0.01.xsd
@@ -0,0 +1,267 @@
+
+
+
+
+
+
+
+
+
+ Identificador de controle do Lote de envio do Evento.
+
+
+
+
+
+
+
+
+
+
+
+
+ Evento, um lote pode conter até 20 eventos
+
+
+
+
+
+ Grupo de informações do registro do Evento
+
+
+
+ Código do órgão de recepção do Evento.
+
+
+
+
+ Identificação do Ambiente: 1=Produção /2=Homologação
+
+
+
+
+ Informar o CNPJ / CPF do autor do Evento.
+
+
+
+ CNPJ
+
+
+
+
+ CPF
+
+
+
+
+
+ Para o evento de EPEC, a posição 35 da Chave de Acesso deve ser 4 (tpEmis=4).
+
+
+
+
+ Data e hora do evento no formato AAAA-MM-DDThh:mm:ssTZD (UTC - Universal Coordinated Time).
+
+
+
+
+ Código do evento: 110140 -EPEC
+
+
+
+
+
+
+
+
+
+
+
+ Informar o valor "1" para o evento do EPEC.
+
+
+
+
+
+
+
+
+
+
+ Versão do detalhe do evento (grupo detEvento - P17), informação usada pela SEFAZ para validar o grupo detEvento.
+
+
+
+
+
+
+ Informações de detalhes do evento
+
+
+
+ "EPEC"
+
+
+
+
+
+
+
+
+
+ Código do Órgão do Autor do Evento.
+
+
+
+
+ Informar "1=Empresa Emitente" para este evento.
+
+
+
+
+
+
+
+
+
+
+ Versão do aplicativo do Autor do Evento.
+
+
+
+
+ Data e hora no formato UTC (Universal Coordinated Time): "AAAA-MM-DDThh:mm:ss TZD".
+
+
+
+
+ Informar 1=Saída.
+
+
+
+
+
+
+
+
+
+
+ IE do Emitente
+
+
+
+
+
+
+
+ Sigla da UF do destinatário.
+
+
+
+
+
+ CNPJ
+
+
+
+
+ CPF
+
+
+
+
+ ID Estrangeiro
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor total da NFC-e
+
+
+
+
+ Valor total do ICMS
+
+
+
+
+
+
+
+
+
+ Identificador da TAG a ser assinada, a regra de formação do Id é: "ID" + tpEvento + chave da NFC-e + nSeqEvento
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Versão do Tipo do Evento
+
+
+
+
+
+
+
+
+ Tipo Código de orgão (UF da tabela do IBGE + 91 RFB)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/inutNFe_v3.10.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/inutNFe_v3.10.xsd
new file mode 100644
index 00000000..5ce6014c
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/inutNFe_v3.10.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica
+
+
+
\ No newline at end of file
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/inutNFe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/inutNFe_v4.00.xsd
new file mode 100755
index 00000000..461d0b9a
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/inutNFe_v4.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/leiauteCCe_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteCCe_v1.00.xsd
new file mode 100644
index 00000000..bc473237
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteCCe_v1.00.xsd
@@ -0,0 +1,418 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Evento
+
+
+
+
+
+
+
+ Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Identificação do autor do evento
+
+
+
+ CNPJ
+
+
+
+
+ CPF
+
+
+
+
+
+ Chave de Acesso da NF-e vinculada ao evento
+
+
+
+
+ Data de emissão no formato UTC. AAAA-MM-DDThh:mm:ssTZD
+
+
+
+
+ Tipo do Evento
+
+
+
+
+
+
+
+
+
+
+
+ Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial.
+
+
+
+
+
+
+
+
+
+
+ Versão do Tipo do Evento
+
+
+
+
+
+
+
+
+
+
+ Evento do carta de correção e1101110
+
+
+
+
+
+ Descrição do Evento - “Carta de Correção”
+
+
+
+
+
+
+
+
+
+
+
+ Correção a ser considerada
+
+
+
+
+
+
+
+
+
+
+
+
+ Texto Fixo com as condições de uso da Carta de Correção
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Identificador da TAG a ser assinada, a regra de formação do Id é:
+“ID” + tpEvento + chave da NF-e + nSeqEvento
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo retorno do Evento
+
+
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que recebeu o Evento
+
+
+
+
+ Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional
+
+
+
+
+ Código do status da registro do Evento
+
+
+
+
+ Descrição literal do status do registro do Evento
+
+
+
+
+ Chave de Acesso NF-e vinculada
+
+
+
+
+ Tipo do Evento vinculado
+
+
+
+
+
+
+
+
+
+
+ Descrição do Evento
+
+
+
+
+
+
+
+
+
+
+ Seqüencial do evento
+
+
+
+
+
+
+
+
+
+
+ Identificação do destinatário da NF-e
+
+
+
+ CNPJ Destinatário
+
+
+
+
+ CPF Destiantário
+
+
+
+
+
+ email do destinatário
+
+
+
+
+
+
+
+
+
+
+ Data e Hora de do recebimento do evento ou do registro do evento formato UTC AAAA-MM-DDThh:mm:ssTZD.
+
+
+
+
+
+
+
+
+
+
+ Número do protocolo de registro do evento
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Lote de Envio
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Retorno de Lote de Envio
+
+
+
+
+
+
+
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que recebeu o Evento
+
+
+
+
+ Código do òrgao que registrou o Evento
+
+
+
+
+ Código do status da registro do Evento
+
+
+
+
+ Descrição literal do status do registro do Evento
+
+
+
+
+
+
+
+
+ Tipo procEvento
+
+
+
+
+
+
+
+
+
+ Tipo Versão do EnvEvento
+
+
+
+
+
+
+
+
+ Tipo Versão do Evento
+
+
+
+
+
+
+
+
+ Tipo Código de orgão (UF da tabela do IBGE + 90 RFB)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/leiauteCancNFe_v1.07.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteCancNFe_v1.07.xsd
new file mode 100644
index 00000000..711a8e3a
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteCancNFe_v1.07.xsd
@@ -0,0 +1,140 @@
+
+
+
+
+
+
+
+ Tipo Pedido de Cancelamento de NF-e
+
+
+
+
+ Dados do Pedido de Cancelamento da Nota Fiscal Eletrônica
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Serviço Solicitado
+
+
+
+
+
+
+
+
+
+ Chaves de acesso compostas por Código da UF + AAMM da emissão + CNPJ do Emitente + Modelo, Série e Número da NF-e + Código Numérico + DV.
+
+
+
+
+ Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 posições ano; 10 seqüencial no ano.
+
+
+
+
+ Justificativa do cancelamento
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo retorno Pedido de Cancelamento da Nota Fiscal Eletrônica
+
+
+
+
+ Dados do Resultado do Pedido de Cancelamento da Nota Fiscal Eletrônica
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que processou o pedido de cancelamento
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+ código da UF de atendimento
+
+
+
+
+ Chaves de acesso da NF-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, série e número da NF-e e código numérico + DV.
+
+
+
+
+ Data e hora de recebimento, no formato AAAA-MM-DDTHH:MM:SS. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação.
+
+
+
+
+ Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - código da UF - 2 posições ano; 10 seqüencial no ano.
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Pedido de Cancelamento de NF-e processado
+
+
+
+
+
+
+
+
+
+ Tipo Versão do leiaute de Cancelamento de NF-e -1.07
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/leiauteConfRecebto_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteConfRecebto_v1.00.xsd
new file mode 100644
index 00000000..096a2900
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteConfRecebto_v1.00.xsd
@@ -0,0 +1,406 @@
+
+
+
+
+
+
+ Tipo Evento
+
+
+
+
+
+
+
+ Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Identificação do autor do evento
+
+
+
+ CNPJ
+
+
+
+
+ CPF
+
+
+
+
+
+ Chave de Acesso da NF-e vinculada ao evento
+
+
+
+
+ Data e Hora do Evento, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm)
+
+
+
+
+ Tipo do Evento:
+210200 - Confirmacao da Operação
+210210 – Ciência da Operação
+210220 - Deconhecimento da operacao
+210240 - Operação não Realizada
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial.
+
+
+
+
+
+
+
+
+
+
+ Versão do Tipo do Evento
+
+
+
+
+ Evento da confirmação de recebimento e210200
+
+
+
+
+
+ Descrição do Evento:
+ "Confirmacao da Operacao"
+ "Ciencia da Operacao"
+ "Desconhecimento da Operacao"
+ "Operação não Realizada"
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Justificativa de Operação não Realizada
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Identificador da TAG a ser assinada, a regra de formação do Id é:
+“ID” + tpEvento + chave da NF-e + nSeqEvento
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo retorno do Evento
+
+
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que recebeu o Evento
+
+
+
+
+ Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 91 para identificar o Ambiente Nacional
+
+
+
+
+ Código do status da registro do Evento
+
+
+
+
+ Descrição literal do status do registro do Evento
+
+
+
+
+ Chave de Acesso NF-e vinculada
+
+
+
+
+ Tipo do Evento vinculado
+
+
+
+
+
+
+
+
+
+
+ Descrição do Evento
+
+
+
+
+
+
+
+
+
+
+ Seqüencial do evento
+
+
+
+
+
+
+
+
+
+
+ Identificação do destinatpario da NF-e
+
+
+
+ CNPJ Destinatário
+
+
+
+
+ CPF Destiantário
+
+
+
+
+
+ email do destinatário
+
+
+
+
+
+
+
+
+
+
+ Data e Hora de do recebimento do evento ou do registro do evento formato UTC AAAA-MM-DDThh:mm:ssTZD.
+
+
+
+
+
+
+
+
+
+
+ Número do protocolo de registro do evento
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Lote de Envio
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Retorno de Lote de Envio
+
+
+
+
+
+
+
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que recebeu o Evento
+
+
+
+
+ Código do òrgao que registrou o Evento
+
+
+
+
+ Código do status da registro do Evento
+
+
+
+
+ Descrição literal do status do registro do Evento
+
+
+
+
+
+
+
+
+ Tipo procEvento
+
+
+
+
+
+
+
+
+
+ Tipo Versão do EnvEvento
+
+
+
+
+
+
+
+
+ Tipo Versão do Evento
+
+
+
+
+
+
+
+
+ Tipo Código de orgão (UF da tabela do IBGE + 90 SUFRAMA + 91 - RFB)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/leiauteConsNFeDest_v1.01.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteConsNFeDest_v1.01.xsd
new file mode 100644
index 00000000..db1a150c
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteConsNFeDest_v1.01.xsd
@@ -0,0 +1,482 @@
+
+
+
+
+
+
+ Tipo número sequencial único do AN
+
+
+
+
+
+
+
+ Tipo Pedido de Consulta de Nota Fiscal Eletrônica
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Serviço Solicitado
+
+
+
+
+
+
+
+
+
+ CNPJ do destinatário da NF-e
+
+
+
+
+ Indicador de NF-e consultada:
+0 – Todas as NF-e;
+1 – Somente as NF-e ainda não confirmadas.
+2 – Somente as NF-e ainda não confirmadas (inclusive Ciência).
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Indicador do Emissor da NF-e:
+0 – Todos os Emitentes;
+1 – Somente as NF-e emitidas por emissores que não tenham a mesma raiz do CNPJ (para excluir as notas fiscais de transferência entre filiais).
+
+
+
+
+
+
+
+
+
+
+
+ Último NSU recebido. Caso seja informado com zero, a consulta deve ser realizada no universo das notas fiscais tenham sido recepcionadas nos últimos 30 dias.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Retorno do pedido de Consulta de Nota Fiscal Eletrônica
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que processou a NF-e
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+ Data e hora da resposta à solicitação, no formato AAAA-MM-DDTHH:MM:SS
+
+
+
+
+ Indicador de continuidade. Indica que o ambiente consultado POSSUI ainda documentos não pesquisados. 0 = NÃO possui documentos. 1 = Possui documentos.
+
+
+
+
+
+
+
+
+
+
+
+ último NSU pesquisado, deve ser informado pelo WS, sempre que realizar alguma pesquisa para que o solicitante possa atualizar o último NSU pesquisado.
+
+
+
+
+
+
+
+
+
+
+ Resumo de NF-e ou CC-e
+
+
+
+
+
+ Informações resumo da NF-e localizadas
+
+
+
+
+
+ Chaves de acesso da NF-e consultada
+
+
+
+
+
+ CNPJ do Remetente da NF-e
+
+
+
+
+ CPF do Remetente da NF-e
+
+
+
+
+
+ Razão Social ou Nome do Remetente
+
+
+
+
+
+
+
+
+
+
+ IE do Remetente. Valores válidos: vazio (não contribuinte do ICMS), ISENTO (contribuinte do ICMS ISENTO de Inscrição no Cadastro de Contribuintes) ou IE (Contribuinte do ICMS)
+
+
+
+
+ Data de Emissão da NF-e
+
+
+
+
+ Tipo do Documento Fiscal (0 - entrada; 1 - saída)
+
+
+
+
+
+
+
+
+
+
+
+ Valor Total da NF-e
+
+
+
+
+ Digest Value da NF-e na base de dados da SEFAZ
+
+
+
+
+
+
+
+
+
+
+ Data e hora de processamento de autorização, no formato AAAA-MM-DDTHH:MM:SS.
+
+
+
+
+ Situação da NF-e
+1-Uso autorizado no momento da consulta;
+2-Uso denegado;
+3-NF-e cancelada;
+
+
+
+
+
+
+
+
+
+
+
+
+ Situação Confirmação do Destinatário:
+0 – sem manifestacao;
+1 – confirmada;
+2 – desconhecida;
+3 – recusada
+4 - ciência.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Informações resumo da NF-e canceladas localizadas
+
+
+
+
+
+ Chaves de acesso da NF-e consultada
+
+
+
+
+
+ CNPJ do Remetente da NF-e
+
+
+
+
+ CPF do Remetente da NF-e
+
+
+
+
+
+ Razão Social ou Nome do Remetente
+
+
+
+
+
+
+
+
+
+
+ IE do Remetente. Valores válidos: vazio (não contribuinte do ICMS), ISENTO (contribuinte do ICMS ISENTO de Inscrição no Cadastro de Contribuintes) ou IE (Contribuinte do ICMS)
+
+
+
+
+ Data de Emissão da NF-e
+
+
+
+
+ Tipo do Documento Fiscal (0 - entrada; 1 - saída)
+
+
+
+
+
+
+
+
+
+
+
+ Valor Total da NF-e
+
+
+
+
+ Digest Value da NF-e na base de dados da SEFAZ
+
+
+
+
+
+
+
+
+
+
+ Data e hora de processamento de autorização, no formato AAAA-MM-DDTHH:MM:SS.
+
+
+
+
+ Situação da NF-e
+3-NF-e cancelada;
+
+
+
+
+
+
+
+
+
+
+ Situação Confirmação do Destinatário:
+0 – sem manifestacao;
+1 – confirmada;
+2 – desconhecida;
+3 – recusada
+4 - ciência.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Informações da carta de correção da NF-e localizadas
+
+
+
+
+
+ Chave de Acesso da NF-e vinculada ao evento
+
+
+
+
+ Data e Hora do Evento, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm)
+
+
+
+
+
+
+
+
+
+
+ Tipo do Evento
+
+
+
+
+
+
+
+
+
+
+
+ Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial.
+
+
+
+
+
+
+
+
+
+
+ Descrição do Evento - “Carta de Correção”
+
+
+
+
+
+
+
+
+
+
+
+ Correção a ser considerada
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo do Documento Fiscal (0 - entrada; 1 - saída)
+
+
+
+
+
+
+
+
+
+
+
+ Data e hora de processamento de autorização, no formato AAAA-MM-DDTHH:MM:SS.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Versão da consultaNFeDest
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/leiauteConsSitNFe_v3.10.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteConsSitNFe_v3.10.xsd
new file mode 100644
index 00000000..50b78dc3
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteConsSitNFe_v3.10.xsd
@@ -0,0 +1,502 @@
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Pedido de Consulta da Situação Atual da Nota Fiscal Eletrônica
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Serviço Solicitado
+
+
+
+
+
+
+
+
+
+ Chaves de acesso da NF-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, série e número da NF-e e código numérico + DV.
+
+
+
+
+
+
+
+ Tipo Retorno de Pedido de Consulta da Situação Atual da Nota Fiscal Eletrônica
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que processou a NF-e
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+ código da UF de atendimento
+
+
+
+
+ AAAA-MM-DDTHH:MM:SSTZD
+
+
+
+
+ Chaves de acesso da NF-e consultada
+
+
+
+
+ Protocolo de autorização de uso da NF-e
+
+
+
+
+ Protocolo de homologação de cancelamento de uso da NF-e
+
+
+
+
+ Protocolo de registro de evento da NF-e
+
+
+
+
+
+
+
+ Tipo Protocolo de status resultado do processamento da NF-e
+
+
+
+
+ Dados do protocolo de status
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que processou a NF-e
+
+
+
+
+ Chaves de acesso da NF-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, série e número da NF-e e código numérico+DV.
+
+
+
+
+ Data e hora de processamento, no formato AAAA-MM-DDTHH:MM:SS (ou AAAA-MM-DDTHH:MM:SSTZD, de acordo com versão). Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Lote de NF-e enviado.
+
+
+
+
+ Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - códiga da UF - 2 posições ano; 10 seqüencial no ano.
+
+
+
+
+ Digest Value da NF-e processada. Utilizado para conferir a integridade da NF-e original.
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo retorno Pedido de Cancelamento da Nota Fiscal Eletrônica
+
+
+
+
+ Dados do Resultado do Pedido de Cancelamento da Nota Fiscal Eletrônica
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que processou o pedido de cancelamento
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+ código da UF de atendimento
+
+
+
+
+ Chaves de acesso da NF-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, série e número da NF-e e código numérico + DV.
+
+
+
+
+ Data e hora de recebimento, no formato AAAA-MM-DDTHH:MM:SS. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação.
+
+
+
+
+ Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - código da UF - 2 posições ano; 10 seqüencial no ano.
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Evento
+
+
+
+
+
+
+
+ Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Identificação do autor do evento
+
+
+
+ CNPJ
+
+
+
+
+ CPF
+
+
+
+
+
+ Chave de Acesso da NF-e vinculada ao evento
+
+
+
+
+ Data e Hora do Evento, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm)
+
+
+
+
+ Tipo do Evento
+
+
+
+
+
+
+
+
+
+
+ Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial.
+
+
+
+
+
+
+
+
+
+
+ Versão do Tipo do Evento
+
+
+
+
+
+
+
+
+
+ Detalhe Específico do Evento
+
+
+
+
+
+
+
+
+
+
+
+ Identificador da TAG a ser assinada, a regra de formação do Id é:
+“ID” + tpEvento + chave da NF-e + nSeqEvento
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo retorno do Evento
+
+
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que recebeu o Evento
+
+
+
+
+ Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional
+
+
+
+
+ Código do status da registro do Evento
+
+
+
+
+ Descrição literal do status do registro do Evento
+
+
+
+
+ Chave de Acesso NF-e vinculada
+
+
+
+
+ Tipo do Evento vinculado
+
+
+
+
+
+
+
+
+
+
+ Descrição do Evento
+
+
+
+
+
+
+
+
+
+
+ Seqüencial do evento
+
+
+
+
+
+
+
+
+
+
+ Identificação do destinatpario da NF-e
+
+
+
+ CNPJ Destinatário
+
+
+
+
+ CPF Destiantário
+
+
+
+
+
+ email do destinatário
+
+
+
+
+
+
+
+
+
+
+ Data e Hora de registro do evento formato UTC AAAA-MM-DDTHH:MM:SSTZD
+
+
+
+
+ Número do protocolo de registro do evento
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo procEvento
+
+
+
+
+
+
+
+
+
+ Tipo Versão da NF-e
+
+
+
+
+
+
+
+ Tipo Versão do leiaute de Cancelamento de NF-e - 2.00/1.07
+
+
+
+
+
+
+
+ Tipo Versão do Evento 1.00
+
+
+
+
+
+
+
+ Tipo Versão do Evento
+
+
+
+
+
+
+
+ Tipo Versão do Leiaute da Cosulta situação NF-e - 3.10
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/leiauteConsSitNFe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteConsSitNFe_v4.00.xsd
new file mode 100755
index 00000000..5330c83d
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteConsSitNFe_v4.00.xsd
@@ -0,0 +1,502 @@
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Pedido de Consulta da Situação Atual da Nota Fiscal Eletrônica
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Serviço Solicitado
+
+
+
+
+
+
+
+
+
+ Chaves de acesso da NF-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, série e número da NF-e e código numérico + DV.
+
+
+
+
+
+
+
+ Tipo Retorno de Pedido de Consulta da Situação Atual da Nota Fiscal Eletrônica
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que processou a NF-e
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+ código da UF de atendimento
+
+
+
+
+ AAAA-MM-DDTHH:MM:SSTZD
+
+
+
+
+ Chaves de acesso da NF-e consultada
+
+
+
+
+ Protocolo de autorização de uso da NF-e
+
+
+
+
+ Protocolo de homologação de cancelamento de uso da NF-e
+
+
+
+
+ Protocolo de registro de evento da NF-e
+
+
+
+
+
+
+
+ Tipo Protocolo de status resultado do processamento da NF-e
+
+
+
+
+ Dados do protocolo de status
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que processou a NF-e
+
+
+
+
+ Chaves de acesso da NF-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, série e número da NF-e e código numérico+DV.
+
+
+
+
+ Data e hora de processamento, no formato AAAA-MM-DDTHH:MM:SS (ou AAAA-MM-DDTHH:MM:SSTZD, de acordo com versão). Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Lote de NF-e enviado.
+
+
+
+
+ Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - códiga da UF - 2 posições ano; 10 seqüencial no ano.
+
+
+
+
+ Digest Value da NF-e processada. Utilizado para conferir a integridade da NF-e original.
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo retorno Pedido de Cancelamento da Nota Fiscal Eletrônica
+
+
+
+
+ Dados do Resultado do Pedido de Cancelamento da Nota Fiscal Eletrônica
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que processou o pedido de cancelamento
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+ código da UF de atendimento
+
+
+
+
+ Chaves de acesso da NF-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, série e número da NF-e e código numérico + DV.
+
+
+
+
+ Data e hora de recebimento, no formato AAAA-MM-DDTHH:MM:SS. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação.
+
+
+
+
+ Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - código da UF - 2 posições ano; 10 seqüencial no ano.
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Evento
+
+
+
+
+
+
+
+ Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Identificação do autor do evento
+
+
+
+ CNPJ
+
+
+
+
+ CPF
+
+
+
+
+
+ Chave de Acesso da NF-e vinculada ao evento
+
+
+
+
+ Data e Hora do Evento, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm)
+
+
+
+
+ Tipo do Evento
+
+
+
+
+
+
+
+
+
+
+ Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial.
+
+
+
+
+
+
+
+
+
+
+ Versão do Tipo do Evento
+
+
+
+
+
+
+
+
+
+ Detalhe Específico do Evento
+
+
+
+
+
+
+
+
+
+
+
+ Identificador da TAG a ser assinada, a regra de formação do Id é:
+“ID” + tpEvento + chave da NF-e + nSeqEvento
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo retorno do Evento
+
+
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que recebeu o Evento
+
+
+
+
+ Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional
+
+
+
+
+ Código do status da registro do Evento
+
+
+
+
+ Descrição literal do status do registro do Evento
+
+
+
+
+ Chave de Acesso NF-e vinculada
+
+
+
+
+ Tipo do Evento vinculado
+
+
+
+
+
+
+
+
+
+
+ Descrição do Evento
+
+
+
+
+
+
+
+
+
+
+ Seqüencial do evento
+
+
+
+
+
+
+
+
+
+
+ Identificação do destinatpario da NF-e
+
+
+
+ CNPJ Destinatário
+
+
+
+
+ CPF Destiantário
+
+
+
+
+
+ email do destinatário
+
+
+
+
+
+
+
+
+
+
+ Data e Hora de registro do evento formato UTC AAAA-MM-DDTHH:MM:SSTZD
+
+
+
+
+ Número do protocolo de registro do evento
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo procEvento
+
+
+
+
+
+
+
+
+
+ Tipo Versão da NF-e
+
+
+
+
+
+
+
+ Tipo Versão do leiaute de Cancelamento de NF-e - 2.00/1.07
+
+
+
+
+
+
+
+ Tipo Versão do Evento 1.00
+
+
+
+
+
+
+
+ Tipo Versão do Evento
+
+
+
+
+
+
+
+ Tipo Versão do Leiaute da Cosulta situação NF-e - 4.00
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/leiauteConsStatServ_v3.10.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteConsStatServ_v3.10.xsd
new file mode 100644
index 00000000..10f27297
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteConsStatServ_v3.10.xsd
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+ Tipo Pedido de Consulta do Status do Serviço
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Sigla da UF consultada
+
+
+
+
+ Serviço Solicitado
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Resultado da Consulta do Status do Serviço
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que processou a NF-e
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+ Código da UF responsável pelo serviço
+
+
+
+
+ Data e hora do recebimento da consulta no formato AAAA-MM-DDTHH:MM:SSTZD
+
+
+
+
+ Tempo médio de resposta do serviço (em segundos) dos últimos 5 minutos
+
+
+
+
+ AAAA-MM-DDTHH:MM:SSDeve ser preenchida com data e hora previstas para o retorno dos serviços prestados.
+
+
+
+
+ Campo observação utilizado para incluir informações ao contribuinte
+
+
+
+
+
+
+
+ Tipo versão do leiuate da Consulta Status do Serviço 3.10
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/leiauteConsStatServ_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteConsStatServ_v4.00.xsd
new file mode 100755
index 00000000..1442cf11
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteConsStatServ_v4.00.xsd
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+ Tipo Pedido de Consulta do Status do Serviço
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Sigla da UF consultada
+
+
+
+
+ Serviço Solicitado
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Resultado da Consulta do Status do Serviço
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que processou a NF-e
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+ Código da UF responsável pelo serviço
+
+
+
+
+ Data e hora do recebimento da consulta no formato AAAA-MM-DDTHH:MM:SSTZD
+
+
+
+
+ Tempo médio de resposta do serviço (em segundos) dos últimos 5 minutos
+
+
+
+
+ AAAA-MM-DDTHH:MM:SSDeve ser preenchida com data e hora previstas para o retorno dos serviços prestados.
+
+
+
+
+ Campo observação utilizado para incluir informações ao contribuinte
+
+
+
+
+
+
+
+ Tipo versão do leiuate da Consulta Status do Serviço 4.00
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/leiauteDownloadNFe_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteDownloadNFe_v1.00.xsd
new file mode 100644
index 00000000..6d61785a
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteDownloadNFe_v1.00.xsd
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+
+ Tipo Pedido de Download de NF-e
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Serviço Solicitado
+
+
+
+
+
+
+
+
+
+ CNPJ do destinatário da NF-e
+
+
+
+
+ Chave de Acesso da NF-e objeto de download
+
+
+
+
+
+
+
+ Tipo Retorno do pedido de Download de NF-e
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que processou a NF-e
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+ Data e hora da resposta à solicitação, no formato AAAA-MM-DDTHH:MM:SS
+
+
+
+
+ Conjunto de informação das NF-e localizadas
+
+
+
+
+
+ Chaves de acesso da NF-e consultada
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+
+
+
+
+ XML NFe compactado no padrão gZIP
+
+
+
+
+ XML protNFe compactado no padrão gZIP
+
+
+
+
+
+
+
+ XML do procNFe compactado no padrão gZIP
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Versão da consultaNFeDest
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/leiauteEPEC_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteEPEC_v1.00.xsd
new file mode 100644
index 00000000..97b000e7
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteEPEC_v1.00.xsd
@@ -0,0 +1,459 @@
+
+
+
+
+
+
+ Tipo Evento
+
+
+
+
+
+
+
+ Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 91 para identificar o Ambiente Nacional
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Identificação do autor do evento
+
+
+
+ CNPJ
+
+
+
+
+ CPF
+
+
+
+
+
+ Chave de Acesso da NF-e vinculada ao evento
+
+
+
+
+ Data e Hora do Evento, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm)
+
+
+
+
+ Tipo do Evento
+
+
+
+
+
+
+
+
+
+
+
+ Seqüencial do evento para o mesmo tipo de evento.
+
+
+
+
+
+
+
+
+
+
+ Versão do Tipo do Evento
+
+
+
+
+
+
+
+
+
+
+ Schema XML de validação do evento de emissão prévia em contingência - 110140
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Identificador do destinatário, em caso de comprador estrangeiro
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Identificador da TAG a ser assinada, a regra de formação do Id é:
+“ID” + tpEvento + chave da NF-e + nSeqEvento
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Neste evento, aceitar apenas 1. 1=Empresa Emitente; 2=Empresa Destinatária; 3=Empresa; 5=Fisco; 6=RFB; 9=Outros Órgãos
+
+
+
+
+
+
+
+
+
+
+ Versão do Aplicativo do Autor do Evento
+
+
+
+
+ Data de emissão no formato UTC. AAAA-MM-DDThh:mm:ssTZD
+
+
+
+
+ Tipo do Documento Fiscal (0 - entrada; 1 - saída)
+
+
+
+
+
+
+
+
+
+
+
+
+ Informar a IE. Para IE do destinatário somente quando o contribuinte possuir uma inscrição estadual
+
+
+
+
+
+
+
+
+
+
+ Sigla UF do destinatário. Informar "EX" no caso de operação com o exterior
+
+
+
+
+ Valor total da NF-e
+
+
+
+
+ Valor total do ICMS
+
+
+
+
+ Valor total do ICMS de Substituição Tributária
+
+
+
+
+ Tipo retorno do Evento
+
+
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que recebeu o Evento
+
+
+
+
+ Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 91 para identificar o Ambiente Nacional
+
+
+
+
+ Código do status da registro do Evento
+
+
+
+
+ Descrição literal do status do registro do Evento
+
+
+
+
+ Chave de Acesso NF-e vinculada
+
+
+
+
+ Tipo do Evento vinculado
+
+
+
+
+
+
+
+
+
+
+ Descrição do Evento
+
+
+
+
+
+
+
+
+
+
+ Seqüencial do evento
+
+
+
+
+
+
+
+
+
+
+
+ Data e Hora de do recebimento do evento ou do registro do evento formato UTC AAAA-MM-DDThh:mm:ssTZD.
+
+
+
+
+
+
+
+
+
+
+ Número do protocolo de registro do evento
+
+
+
+
+ Relação de Chaves de Acesso de EPEC não conciliados (pendentes de conciliação) existentes no AN.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Lote de Envio
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Retorno de Lote de Envio
+
+
+
+
+
+
+
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que recebeu o Evento
+
+
+
+
+ Código do òrgao que registrou o Evento
+
+
+
+
+ Código do status da registro do Evento
+
+
+
+
+ Descrição literal do status do registro do Evento
+
+
+
+
+
+
+
+
+ Tipo procEvento
+
+
+
+
+
+
+
+
+
+ Tipo Versão do EnvEvento
+
+
+
+
+
+
+
+
+ Tipo Versão do Evento
+
+
+
+
+
+
+
+
+ Tipo Código de orgão (UF da tabela do IBGE + 91 RFB)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/leiauteEventoCancNFe_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteEventoCancNFe_v1.00.xsd
new file mode 100644
index 00000000..f3db1321
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteEventoCancNFe_v1.00.xsd
@@ -0,0 +1,394 @@
+
+
+
+
+
+
+ Tipo Evento
+
+
+
+
+
+
+
+ Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 91 para identificar o Ambiente Nacional
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Identificação do autor do evento
+
+
+
+ CNPJ
+
+
+
+
+ CPF
+
+
+
+
+
+ Chave de Acesso da NF-e vinculada ao evento
+
+
+
+
+ Data e Hora do Evento, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm)
+
+
+
+
+ Tipo do Evento
+
+
+
+
+
+
+
+
+
+
+
+ Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial.
+
+
+
+
+
+
+
+
+
+
+ Versão do Tipo do Evento
+
+
+
+
+
+
+
+
+
+
+ Schema XML de validação do evento do cancelamento 1101111
+
+
+
+
+
+ Descrição do Evento - “Cancelamento”
+
+
+
+
+
+
+
+
+
+
+ Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 posições ano; 10 seqüencial no ano.
+
+
+
+
+ Justificativa do cancelamento
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Identificador da TAG a ser assinada, a regra de formação do Id é:
+“ID” + tpEvento + chave da NF-e + nSeqEvento
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo retorno do Evento
+
+
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que recebeu o Evento
+
+
+
+
+ Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 91 para identificar o Ambiente Nacional
+
+
+
+
+ Código do status da registro do Evento
+
+
+
+
+ Descrição literal do status do registro do Evento
+
+
+
+
+ Chave de Acesso NF-e vinculada
+
+
+
+
+ Tipo do Evento vinculado
+
+
+
+
+
+
+
+
+
+
+ Descrição do Evento
+
+
+
+
+
+
+
+
+
+
+ Seqüencial do evento
+
+
+
+
+
+
+
+
+
+
+ Identificação do destinatário da NF-e
+
+
+
+ CNPJ Destinatário
+
+
+
+
+ CPF Destiantário
+
+
+
+
+
+ email do destinatário
+
+
+
+
+
+
+
+
+
+
+ Data e Hora de do recebimento do evento ou do registro do evento formato UTC AAAA-MM-DDThh:mm:ssTZD.
+
+
+
+
+
+
+
+
+
+
+ Número do protocolo de registro do evento
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Lote de Envio
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Retorno de Lote de Envio
+
+
+
+
+
+
+
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que recebeu o Evento
+
+
+
+
+ Código do òrgao que registrou o Evento
+
+
+
+
+ Código do status da registro do Evento
+
+
+
+
+ Descrição literal do status do registro do Evento
+
+
+
+
+
+
+
+
+ Tipo procEvento
+
+
+
+
+
+
+
+
+
+ Tipo Versão do EnvEvento
+
+
+
+
+
+
+
+
+ Tipo Versão do Evento
+
+
+
+
+
+
+
+
+ Tipo Código de orgão (UF da tabela do IBGE + 91 RFB)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/leiauteEvento_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteEvento_v1.00.xsd
new file mode 100644
index 00000000..954d3114
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteEvento_v1.00.xsd
@@ -0,0 +1,373 @@
+
+
+
+
+
+
+ Tipo Evento
+
+
+
+
+
+
+
+ Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Identificação do autor do evento
+
+
+
+ CNPJ
+
+
+
+
+ CPF
+
+
+
+
+
+ Chave de Acesso da NF-e vinculada ao evento
+
+
+
+
+ Data e Hora do Evento, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm)
+
+
+
+
+ Tipo do Evento
+
+
+
+
+
+
+
+
+
+
+ Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial.
+
+
+
+
+
+
+
+
+
+
+ Versão do Tipo do Evento
+
+
+
+
+
+
+
+
+
+
+
+
+ informações específicas do evento
+
+
+
+
+
+
+
+
+
+ Identificador da TAG a ser assinada, a regra de formação do Id é:
+“ID” + tpEvento + chave da NF-e + nSeqEvento
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo retorno do Evento
+
+
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que recebeu o Evento
+
+
+
+
+ Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional
+
+
+
+
+ Código do status da registro do Evento
+
+
+
+
+ Descrição literal do status do registro do Evento
+
+
+
+
+ Chave de Acesso NF-e vinculada
+
+
+
+
+ Tipo do Evento vinculado
+
+
+
+
+
+
+
+
+
+
+ Descrição do Evento
+
+
+
+
+
+
+
+
+
+
+ Seqüencial do evento
+
+
+
+
+
+
+
+
+
+
+ Código do órgão de autor do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional
+
+
+
+
+ Identificação do destinatpario da NF-e
+
+
+
+ CNPJ Destinatário
+
+
+
+
+ CPF Destiantário
+
+
+
+
+
+ email do destinatário
+
+
+
+
+
+
+
+
+
+
+ Data e Hora de registro do evento formato UTC AAAA-MM-DDTHH:MM:SSTZD
+
+
+
+
+
+
+
+
+
+
+ Número do protocolo de registro do evento
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Lote de Envio
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Retorno de Lote de Envio
+
+
+
+
+
+
+
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que recebeu o Evento
+
+
+
+
+ Código do òrgao que registrou o Evento
+
+
+
+
+ Código do status da registro do Evento
+
+
+
+
+ Descrição literal do status do registro do Evento
+
+
+
+
+
+
+
+
+ Tipo procEvento
+
+
+
+
+
+
+
+
+
+ Tipo Versão do EnvEvento
+
+
+
+
+
+
+
+
+ Tipo Versão do Evento
+
+
+
+
+
+
+
+
+ Tipo Código de orgão (UF da tabela do IBGE + 90 RFB)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/leiauteInutNFe_v3.10.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteInutNFe_v3.10.xsd
new file mode 100644
index 00000000..5620457f
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteInutNFe_v3.10.xsd
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+
+ Tipo Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica
+
+
+
+
+ Dados do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Serviço Solicitado
+
+
+
+
+
+
+
+
+
+ Código da UF do emitente
+
+
+
+
+ Ano de inutilização da numeração
+
+
+
+
+ CNPJ do emitente
+
+
+
+
+ Modelo da NF-e (55, 65 etc.)
+
+
+
+
+ Série da NF-e
+
+
+
+
+ Número da NF-e inicial
+
+
+
+
+ Número da NF-e final
+
+
+
+
+ Justificativa do pedido de inutilização
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo retorno do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica
+
+
+
+
+ Dados do Retorno do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que processou a NF-e
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+ Código da UF que atendeu a solicitação
+
+
+
+
+ Ano de inutilização da numeração
+
+
+
+
+ CNPJ do emitente
+
+
+
+
+ Modelo da NF-e (55, etc.)
+
+
+
+
+ Série da NF-e
+
+
+
+
+ Número da NF-e inicial
+
+
+
+
+ Número da NF-e final
+
+
+
+
+ Data e hora de recebimento, no formato AAAA-MM-DDTHH:MM:SS. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Pedido de Inutilização.
+
+
+
+
+ Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - código da UF - 2 posições ano; 10 seqüencial no ano.
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Pedido de inutilzação de númeração de NF-e processado
+
+
+
+
+
+
+
+
+
+ Tipo Versão do leiaute de Inutilização 3.10
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/leiauteInutNFe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteInutNFe_v4.00.xsd
new file mode 100755
index 00000000..819597c1
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteInutNFe_v4.00.xsd
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+
+ Tipo Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica
+
+
+
+
+ Dados do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Serviço Solicitado
+
+
+
+
+
+
+
+
+
+ Código da UF do emitente
+
+
+
+
+ Ano de inutilização da numeração
+
+
+
+
+ CNPJ do emitente
+
+
+
+
+ Modelo da NF-e (55, 65 etc.)
+
+
+
+
+ Série da NF-e
+
+
+
+
+ Número da NF-e inicial
+
+
+
+
+ Número da NF-e final
+
+
+
+
+ Justificativa do pedido de inutilização
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo retorno do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica
+
+
+
+
+ Dados do Retorno do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que processou a NF-e
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+ Código da UF que atendeu a solicitação
+
+
+
+
+ Ano de inutilização da numeração
+
+
+
+
+ CNPJ do emitente
+
+
+
+
+ Modelo da NF-e (55, etc.)
+
+
+
+
+ Série da NF-e
+
+
+
+
+ Número da NF-e inicial
+
+
+
+
+ Número da NF-e final
+
+
+
+
+ Data e hora de recebimento, no formato AAAA-MM-DDTHH:MM:SS. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Pedido de Inutilização.
+
+
+
+
+ Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - código da UF - 2 posições ano; 10 seqüencial no ano.
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Pedido de inutilzação de númeração de NF-e processado
+
+
+
+
+
+
+
+
+
+ Tipo Versão do leiaute de Inutilização 4.00
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/leiauteNFe_v3.10.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteNFe_v3.10.xsd
new file mode 100644
index 00000000..42c36d4e
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteNFe_v3.10.xsd
@@ -0,0 +1,6060 @@
+
+
+
+
+
+
+
+
+
+
+ Tipo Nota Fiscal Eletrônica
+
+
+
+
+ Informações da Nota Fiscal eletrônica
+
+
+
+
+
+ identificação da NF-e
+
+
+
+
+
+ Código da UF do emitente do Documento Fiscal. Utilizar a Tabela do IBGE.
+
+
+
+
+ Código numérico que compõe a Chave de Acesso. Número aleatório gerado pelo emitente para cada NF-e.
+
+
+
+
+
+
+
+
+
+
+ Descrição da Natureza da Operação
+
+
+
+
+
+
+
+
+
+
+ Indicador da forma de pagamento:
+0 – pagamento à vista;
+1 – pagamento à prazo;
+2 – outros.
+
+
+
+
+
+
+
+
+
+
+
+
+ Código do modelo do Documento Fiscal. 55 = NF-e; 65 = NFC-e.
+
+
+
+
+ Série do Documento Fiscal
+série normal 0-889
+Avulsa Fisco 890-899
+SCAN 900-999
+
+
+
+
+ Número do Documento Fiscal
+
+
+
+
+ Data e Hora de emissão do Documento Fiscal (AAAA-MM-DDThh:mm:ssTZD) ex.: 2012-09-01T13:00:00-03:00
+
+
+
+
+ Data e Hora da saída ou de entrada da mercadoria / produto (AAAA-MM-DDTHH:mm:ssTZD)
+
+
+
+
+ Tipo do Documento Fiscal (0 - entrada; 1 - saída)
+
+
+
+
+
+
+
+
+
+
+
+ Identificador de Local de destino da operação (1-Interna;2-Interestadual;3-Exterior)
+
+
+
+
+
+
+
+
+
+
+
+
+ Código do Município de Ocorrência do Fato Gerador (utilizar a tabela do IBGE)
+
+
+
+
+ Formato de impressão do DANFE (0-sem DANFE;1-DANFe Retrato; 2-DANFe Paisagem;3-DANFe Simplificado;
+ 4-DANFe NFC-e;5-DANFe NFC-e em mensagem eletrônica)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Forma de emissão da NF-e
+1 - Normal;
+2 - Contingência FS
+3 - Contingência SCAN
+4 - Contingência DPEC
+5 - Contingência FSDA
+6 - Contingência SVC - AN
+7 - Contingência SVC - RS
+9 - Contingência off-line NFC-e
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Digito Verificador da Chave de Acesso da NF-e
+
+
+
+
+
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Finalidade da emissão da NF-e:
+1 - NFe normal
+2 - NFe complementar
+3 - NFe de ajuste
+4 - Devolução/Retorno
+
+
+
+
+ Indica operação com consumidor final (0-Não;1-Consumidor Final)
+
+
+
+
+
+
+
+
+
+
+
+ Indicador de presença do comprador no estabelecimento comercial no momento da oepração
+ (0-Não se aplica (ex.: Nota Fiscal complementar ou de ajuste;1-Operação presencial;2-Não presencial, internet;3-Não presencial, teleatendimento;4-NFC-e entrega em domicílio;9-Não presencial, outros)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Processo de emissão utilizado com a seguinte codificação:
+0 - emissão de NF-e com aplicativo do contribuinte;
+1 - emissão de NF-e avulsa pelo Fisco;
+2 - emissão de NF-e avulsa, pelo contribuinte com seu certificado digital, através do site
+do Fisco;
+3- emissão de NF-e pelo contribuinte com aplicativo fornecido pelo Fisco.
+
+
+
+
+ versão do aplicativo utilizado no processo de
+emissão
+
+
+
+
+
+
+
+
+
+
+ Informar apenas
+para tpEmis diferente de 1
+
+
+
+ Informar a data e hora de entrada em contingência contingência no formato (AAAA-MM-DDThh:mm:ssTZD) ex.: 2012-09-01T13:00:00-03:00.
+
+
+
+
+ Informar a Justificativa da entrada
+
+
+
+
+
+
+
+
+
+
+
+ Grupo de infromações da NF referenciada
+
+
+
+
+
+ Chave de acesso das NF-e referenciadas. Chave de acesso compostas por Código da UF (tabela do IBGE) + AAMM da emissão + CNPJ do Emitente + modelo, série e número da NF-e Referenciada + Código Numérico + DV.
+
+
+
+
+ Dados da NF modelo 1/1A referenciada
+
+
+
+
+
+ Código da UF do emitente do Documento Fiscal. Utilizar a Tabela do IBGE.
+
+
+
+
+ AAMM da emissão
+
+
+
+
+
+
+
+
+
+
+ CNPJ do emitente do documento fiscal referenciado
+
+
+
+
+ Código do modelo do Documento Fiscal. Utilizar 01 para NF modelo 1/1A
+
+
+
+
+
+
+
+
+
+
+ Série do Documento Fiscal, informar zero se inexistente
+
+
+
+
+ Número do Documento Fiscal
+
+
+
+
+
+
+
+ Grupo com as informações NF de produtor referenciada
+
+
+
+
+
+ Código da UF do emitente do Documento FiscalUtilizar a Tabela do IBGE (Anexo IV - Tabela de UF, Município e País)
+
+
+
+
+ AAMM da emissão da NF de produtor
+
+
+
+
+
+
+
+
+
+
+
+ CNPJ do emitente da NF de produtor
+
+
+
+
+ CPF do emitente da NF de produtor
+
+
+
+
+
+ IE do emitente da NF de Produtor
+
+
+
+
+ Código do modelo do Documento Fiscal - utilizar 04 para NF de produtor ou 01 para NF Avulsa
+
+
+
+
+
+
+
+
+
+
+
+ Série do Documento Fiscal, informar zero se inexistentesérie
+
+
+
+
+ Número do Documento Fiscal - 1 – 999999999
+
+
+
+
+
+
+
+ Utilizar esta TAG para referenciar um CT-e emitido anteriormente, vinculada a NF-e atual
+
+
+
+
+ Grupo do Cupom Fiscal vinculado à NF-e
+
+
+
+
+
+ Código do modelo do Documento Fiscal
+Preencher com "2B", quando se tratar de Cupom Fiscal emitido por máquina registradora (não ECF), com "2C", quando se tratar de Cupom Fiscal PDV, ou "2D", quando se tratar de Cupom Fiscal (emitido por ECF)
+
+
+
+
+
+
+
+
+
+
+
+
+ Informar o número de ordem seqüencial do ECF que emitiu o Cupom Fiscal vinculado à NF-e
+
+
+
+
+
+
+
+
+
+
+ Informar o Número do Contador de Ordem de Operação - COO vinculado à NF-e
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Identificação do emitente
+
+
+
+
+
+
+ Número do CNPJ do emitente
+
+
+
+
+ Número do CPF do emitente
+
+
+
+
+
+ Razão Social ou Nome do emitente
+
+
+
+
+
+
+
+
+
+
+ Nome fantasia
+
+
+
+
+
+
+
+
+
+
+ Endereço do emitente
+
+
+
+
+ Inscrição Estadual do Emitente
+
+
+
+
+ Inscricao Estadual do Substituto Tributário
+
+
+
+
+ Grupo de informações de interesse da Prefeitura
+
+
+
+ Inscrição Municipal
+
+
+
+
+
+
+
+
+
+
+ CNAE Fiscal
+
+
+
+
+
+
+
+
+
+
+
+ Código de Regime Tributário.
+Este campo será obrigatoriamente preenchido com:
+1 – Simples Nacional;
+2 – Simples Nacional – excesso de sublimite de receita bruta;
+3 – Regime Normal.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Emissão de avulsa, informar os dados do Fisco emitente
+
+
+
+
+
+ CNPJ do Órgão emissor
+
+
+
+
+ Órgão emitente
+
+
+
+
+
+
+
+
+
+
+ Matrícula do agente
+
+
+
+
+
+
+
+
+
+
+ Nome do agente
+
+
+
+
+
+
+
+
+
+
+ Telefone
+
+
+
+
+
+
+
+
+
+
+ Sigla da Unidade da Federação
+
+
+
+
+ Número do Documento de Arrecadação de Receita
+
+
+
+
+
+
+
+
+
+
+ Data de emissão do DAR (AAAA-MM-DD)
+
+
+
+
+ Valor Total constante no DAR
+
+
+
+
+ Repartição Fiscal emitente
+
+
+
+
+
+
+
+
+
+
+ Data de pagamento do DAR (AAAA-MM-DD)
+
+
+
+
+
+
+
+ Identificação do Destinatário
+
+
+
+
+
+
+ Número do CNPJ
+
+
+
+
+ Número do CPF
+
+
+
+
+ Identificador do destinatário, em caso de comprador estrangeiro
+
+
+
+
+
+
+
+
+
+
+
+ Razão Social ou nome do destinatário
+
+
+
+
+
+
+
+
+
+
+ Dados do endereço
+
+
+
+
+ Indicador da IE do destinatário:
+1 – Contribuinte ICMSpagamento à vista;
+2 – Contribuinte isento de inscrição;
+9 – Não Contribuinte
+
+
+
+
+
+
+
+
+
+
+
+
+ Inscrição Estadual (obrigatório nas operações com contribuintes do ICMS)
+
+
+
+
+ Inscrição na SUFRAMA (Obrigatório nas operações com as áreas com benefícios de incentivos fiscais sob controle da SUFRAMA) PL_005d - 11/08/09 - alterado para aceitar 8 ou 9 dígitos
+
+
+
+
+
+
+
+
+
+
+ Inscrição Municipal do tomador do serviço
+
+
+
+
+
+
+
+
+
+
+ Informar o e-mail do destinatário. O campo pode ser utilizado para informar o e-mail
+de recepção da NF-e indicada pelo destinatário
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Identificação do Local de Retirada (informar apenas quando for diferente do endereço do remetente)
+
+
+
+
+ Identificação do Local de Entrega (informar apenas quando for diferente do endereço do destinatário)
+
+
+
+
+ Pessoas autorizadas para o download do XML da NF-e
+
+
+
+
+
+ CNPJ Autorizado
+
+
+
+
+ CPF Autorizado
+
+
+
+
+
+
+
+ Dados dos detalhes da NF-e
+
+
+
+
+
+ Dados dos produtos e serviços da NF-e
+
+
+
+
+
+ Código do produto ou serviço. Preencher com CFOP caso se trate de itens não relacionados com mercadorias/produto e que o contribuinte não possua codificação própria
+Formato ”CFOP9999”.
+
+
+
+
+
+
+
+
+
+
+ GTIN (Global Trade Item Number) do produto, antigo código EAN ou código de barras
+
+
+
+
+
+
+
+
+
+
+ Descrição do produto ou serviço
+
+
+
+
+
+
+
+
+
+
+ Código NCM (8 posições), será permitida a informação do gênero (posição do capítulo do NCM) quando a operação não for de comércio exterior (importação/exportação) ou o produto não seja tributado pelo IPI. Em caso de item de serviço ou item que não tenham produto (Ex. transferência de crédito, crédito do ativo imobilizado, etc.), informar o código 00 (zeros) (v2.0)
+
+
+
+
+
+
+
+
+
+
+ Nomenclatura de Valor aduaneio e Estatístico
+
+
+
+
+
+
+
+
+
+
+ Codigo especificador da Substuicao Tributaria - CEST, que identifica a mercadoria sujeita aos regimes de substituicao tributária e de antecipação do recolhimento do imposto
+
+
+
+
+
+
+
+
+
+
+
+ Código EX TIPI (3 posições)
+
+
+
+
+
+
+
+
+
+
+ Cfop
+
+
+
+
+
+
+
+
+
+
+ Unidade comercial
+
+
+
+
+
+
+
+
+
+
+ Quantidade Comercial do produto, alterado para aceitar de 0 a 4 casas decimais e 11 inteiros.
+
+
+
+
+ Valor unitário de comercialização - alterado para aceitar 0 a 10 casas decimais e 11 inteiros
+
+
+
+
+ Valor bruto do produto ou serviço.
+
+
+
+
+ GTIN (Global Trade Item Number) da unidade tributável, antigo código EAN ou código de barras
+
+
+
+
+
+
+
+
+
+
+ Unidade Tributável
+
+
+
+
+
+
+
+
+
+
+ Quantidade Tributável - alterado para aceitar de 0 a 4 casas decimais e 11 inteiros
+
+
+
+
+ Valor unitário de tributação - - alterado para aceitar 0 a 10 casas decimais e 11 inteiros
+
+
+
+
+ Valor Total do Frete
+
+
+
+
+ Valor Total do Seguro
+
+
+
+
+ Valor do Desconto
+
+
+
+
+ Outras despesas acessórias
+
+
+
+
+ Este campo deverá ser preenchido com:
+ 0 – o valor do item (vProd) não compõe o valor total da NF-e (vProd)
+ 1 – o valor do item (vProd) compõe o valor total da NF-e (vProd)
+
+
+
+
+
+
+
+
+
+
+
+
+ Delcaração de Importação
+(NT 2011/004)
+
+
+
+
+
+ Numero do Documento de Importação DI/DSI/DA/DRI-E (DI/DSI/DA/DRI-E) (NT2011/004)
+
+
+
+
+
+
+
+
+
+
+ Data de registro da DI/DSI/DA (AAAA-MM-DD)
+
+
+
+
+ Local do desembaraço aduaneiro
+
+
+
+
+
+
+
+
+
+
+ UF onde ocorreu o desembaraço aduaneiro
+
+
+
+
+ Data do desembaraço aduaneiro (AAAA-MM-DD)
+
+
+
+
+ Via de transporte internacional informada na DI
+ 1-Maritima;2-Fluvial;3-Lacustre;4-Aerea;5-Postal;6-Ferroviaria;7-Rodoviaria;8-Conduto;9-Meios Proprios;10-Entrada/Saida Ficta.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor Adicional ao frete para renovação de marinha mercante
+
+
+
+
+ Forma de Importação quanto a intermediação
+ 1-por conta propria;2-por conta e ordem;3-encomenda
+
+
+
+
+
+
+
+
+
+
+
+
+ CNPJ do adquirente ou do encomendante
+
+
+
+
+ Sigla da UF do adquirente ou do encomendante
+
+
+
+
+ Código do exportador (usado nos sistemas internos de informação do emitente da NF-e)
+
+
+
+
+
+
+
+
+
+
+ Adições (NT 2011/004)
+
+
+
+
+
+ Número da Adição
+
+
+
+
+
+
+
+
+
+
+ Número seqüencial do item dentro da Adição
+
+
+
+
+
+
+
+
+
+
+ Código do fabricante estrangeiro (usado nos sistemas internos de informação do emitente da NF-e)
+
+
+
+
+
+
+
+
+
+
+ Valor do desconto do item da DI – adição
+
+
+
+
+ Número do ato concessório de Drawback
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Detalhe da exportação
+
+
+
+
+
+ Número do ato concessório de Drawback
+
+
+
+
+
+
+
+
+
+
+ Exportação indireta
+
+
+
+
+
+ Registro de exportação
+
+
+
+
+
+
+
+
+
+
+ Chave de acesso da NF-e recebida para exportação
+
+
+
+
+ Quantidade do item efetivamente exportado
+
+
+
+
+
+
+
+
+
+
+ pedido de compra - Informação de interesse do emissor para controle do B2B.
+
+
+
+
+
+
+
+
+
+
+ Número do Item do Pedido de Compra - Identificação do número do item do pedido de Compra
+
+
+
+
+
+
+
+
+
+
+ Número de controle da FCI - Ficha de Conteúdo de Importação.
+
+
+
+
+ Informações específicas de produtos e serviços
+
+
+
+ Veículos novos
+
+
+
+
+
+ Tipo da Operação (1 - Venda concessionária; 2 - Faturamento direto; 3 - Venda direta; 0 - Outros)
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Chassi do veículo - VIN (código-identificação-veículo)
+
+
+
+
+
+
+
+
+
+
+
+ Cor do veículo (código de cada montadora)
+
+
+
+
+
+
+
+
+
+
+ Descrição da cor
+
+
+
+
+
+
+
+
+
+
+ Potência máxima do motor do veículo em cavalo vapor (CV). (potência-veículo)
+
+
+
+
+
+
+
+
+
+
+ Capacidade voluntária do motor expressa em centímetros cúbicos (CC). (cilindradas)
+
+
+
+
+
+
+
+
+
+
+ Peso líquido
+
+
+
+
+
+
+
+
+
+
+ Peso bruto
+
+
+
+
+
+
+
+
+
+
+ Serial (série)
+
+
+
+
+
+
+
+
+
+
+ Tipo de combustível-Tabela RENAVAM: 01-Álcool; 02-Gasolina; 03-Diesel; 16-Álcool/Gas.; 17-Gas./Álcool/GNV; 18-Gasolina/Elétrico
+
+
+
+
+
+
+
+
+
+
+ Número do motor
+
+
+
+
+
+
+
+
+
+
+ CMT-Capacidade Máxima de Tração - em Toneladas 4 casas decimais
+
+
+
+
+
+
+
+
+
+
+ Distância entre eixos
+
+
+
+
+
+
+
+
+
+
+ Ano Modelo de Fabricação
+
+
+
+
+
+
+
+
+
+
+ Ano de Fabricação
+
+
+
+
+
+
+
+
+
+
+ Tipo de pintura
+
+
+
+
+
+
+
+
+
+ Tipo de veículo (utilizar tabela RENAVAM)
+
+
+
+
+
+
+
+
+
+
+ Espécie de veículo (utilizar tabela RENAVAM)
+
+
+
+
+
+
+
+
+
+
+ Informa-se o veículo tem VIN (chassi) remarcado.
+R-Remarcado
+N-NormalVIN
+
+
+
+
+
+
+
+
+
+
+
+ Condição do veículo (1 - acabado; 2 - inacabado; 3 - semi-acabado)
+
+
+
+
+
+
+
+
+
+
+
+
+ Código Marca Modelo (utilizar tabela RENAVAM)
+
+
+
+
+
+
+
+
+
+
+ Código da Cor Segundo as regras de pré-cadastro do DENATRAN: 01-AMARELO;02-AZUL;03-BEGE;04-BRANCA;05-CINZA;06-DOURADA;07-GRENA
+08-LARANJA;09-MARROM;10-PRATA;11-PRETA;12-ROSA;13-ROXA;14-VERDE;15-VERMELHA;16-FANTASIA
+
+
+
+
+
+
+
+
+
+
+
+
+ Quantidade máxima de permitida de passageiros sentados, inclusive motorista.
+
+
+
+
+
+
+
+
+
+
+
+
+ Restrição
+0 - Não há;
+1 - Alienação Fiduciária;
+2 - Arrendamento Mercantil;
+3 - Reserva de Domínio;
+4 - Penhor de Veículos;
+9 - outras.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ grupo do detalhamento de Medicamentos e de matérias-primas farmacêuticas
+
+
+
+
+
+ Número do lote do medicamento
+
+
+
+
+
+
+
+
+
+
+ Quantidade de produtos no lote
+
+
+
+
+ Data de Fabricação do medicamento (AAAA-MM-DD)
+
+
+
+
+ Data de validade do medicamento (AAAA-MM-DD)
+
+
+
+
+ Preço Máximo ao Consumidor
+
+
+
+
+
+
+
+ Armamentos
+
+
+
+
+
+ Indicador do tipo de arma de fogo (0 - Uso permitido; 1 - Uso restrito)
+
+
+
+
+
+
+
+
+
+
+
+ Número de série da arma
+
+
+
+
+
+
+
+
+
+
+ Número de série do cano
+
+
+
+
+
+
+
+
+
+
+ Descrição completa da arma, compreendendo: calibre, marca, capacidade, tipo de funcionamento, comprimento e demais elementos que permitam a sua perfeita identificação.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Informar apenas para operações com combustíveis líquidos
+
+
+
+
+
+ Código de produto da ANP. codificação de produtos do SIMP (http://www.anp.gov.br)
+
+
+
+
+
+
+
+
+
+
+ Percentual de gas natural para o produto GLP
+
+
+
+
+ Código de autorização / registro do CODIF. Informar apenas quando a UF utilizar o CODIF (Sistema de Controle do Diferimento do Imposto nas Operações com AEAC - Álcool Etílico Anidro Combustível).
+
+
+
+
+
+
+
+
+
+
+ Quantidade de combustível
+faturada à temperatura ambiente.
+Informar quando a quantidade
+faturada informada no campo
+qCom (I10) tiver sido ajustada para
+uma temperatura diferente da
+ambiente.
+
+
+
+
+ Sigla da UF de Consumo
+
+
+
+
+ CIDE Combustíveis
+
+
+
+
+
+ BC do CIDE ( Quantidade comercializada)
+
+
+
+
+ Alíquota do CIDE (em reais)
+
+
+
+
+ Valor do CIDE
+
+
+
+
+
+
+
+ Informações do grupo de "encerrante"
+
+
+
+
+
+ Numero de identificação do Bico utilizado no abastecimento
+
+
+
+
+
+
+
+
+
+
+ Numero de identificação da bomba ao qual o bico está interligado
+
+
+
+
+
+
+
+
+
+
+ Numero de identificação do tanque ao qual o bico está interligado
+
+
+
+
+
+
+
+
+
+
+ Valor do Encerrante no ínicio do abastecimento
+
+
+
+
+ Valor do Encerrante no final do abastecimento
+
+
+
+
+
+
+
+
+
+
+ Número do RECOPI
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tributos incidentes nos produtos ou serviços da NF-e
+
+
+
+
+
+ Valor estimado total de impostos federais, estaduais e municipais
+
+
+
+
+
+
+ Dados do ICMS Normal e ST
+
+
+
+
+
+ Tributação pelo ICMS
+00 - Tributada integralmente
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+
+ Tributção pelo ICMS
+00 - Tributada integralmente
+
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS:
+0 - Margem Valor Agregado (%);
+1 - Pauta (valor);
+2 - Preço Tabelado Máximo (valor);
+3 - Valor da Operação.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do ICMS
+
+
+
+
+ Alíquota do ICMS
+
+
+
+
+ Valor do ICMS
+
+
+
+
+
+
+
+ Tributação pelo ICMS
+10 - Tributada e com cobrança do ICMS por substituição tributária
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+
+ 10 - Tributada e com cobrança do ICMS por substituição tributária
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS:
+0 - Margem Valor Agregado (%);
+1 - Pauta (valor);
+2 - Preço Tabelado Máximo (valor);
+3 - Valor da Operação.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do ICMS
+
+
+
+
+ Alíquota do ICMS
+
+
+
+
+ Valor do ICMS
+
+
+
+
+ Modalidade de determinação da BC do ICMS ST:
+0 – Preço tabelado ou máximo sugerido;
+1 - Lista Negativa (valor);
+2 - Lista Positiva (valor);
+3 - Lista Neutra (valor);
+4 - Margem Valor Agregado (%);
+5 - Pauta (valor);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual da Margem de Valor Adicionado ICMS ST
+
+
+
+
+ Percentual de redução da BC ICMS ST
+
+
+
+
+ Valor da BC do ICMS ST
+
+
+
+
+ Alíquota do ICMS ST
+
+
+
+
+ Valor do ICMS ST
+
+
+
+
+
+
+
+ Tributção pelo ICMS
+20 - Com redução de base de cálculo
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+
+ Tributção pelo ICMS
+20 - Com redução de base de cálculo
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS:
+0 - Margem Valor Agregado (%);
+1 - Pauta (valor);
+2 - Preço Tabelado Máximo (valor);
+3 - Valor da Operação.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual de redução da BC
+
+
+
+
+ Valor da BC do ICMS
+
+
+
+
+ Alíquota do ICMS
+
+
+
+
+ Valor do ICMS
+
+
+
+
+ Grupo desoneração
+
+
+
+ Valor do ICMS de desoneração
+
+
+
+
+ Motivo da desoneração do ICMS:3-Uso na agropecuária;9-Outros;12-Fomento agropecuário
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tributação pelo ICMS
+30 - Isenta ou não tributada e com cobrança do ICMS por substituição tributária
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+
+ Tributção pelo ICMS
+30 - Isenta ou não tributada e com cobrança do ICMS por substituição tributária
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS ST:
+0 – Preço tabelado ou máximo sugerido;
+1 - Lista Negativa (valor);
+2 - Lista Positiva (valor);
+3 - Lista Neutra (valor);
+4 - Margem Valor Agregado (%);
+5 - Pauta (valor).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual da Margem de Valor Adicionado ICMS ST
+
+
+
+
+ Percentual de redução da BC ICMS ST
+
+
+
+
+ Valor da BC do ICMS ST
+
+
+
+
+ Alíquota do ICMS ST
+
+
+
+
+ Valor do ICMS ST
+
+
+
+
+ Grupo desoneração
+
+
+
+ Valor do ICMS de desoneração
+
+
+
+
+ Motivo da desoneração do ICMS:6-Utilitários Motocicleta AÁrea Livre;7-SUFRAMA;9-Outros
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tributação pelo ICMS
+40 - Isenta
+41 - Não tributada
+50 - Suspensão
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+
+ Tributação pelo ICMS
+40 - Isenta
+41 - Não tributada
+50 - Suspensão
+51 - Diferimento
+
+
+
+
+
+
+
+
+
+
+
+
+
+ O valor do ICMS será informado apenas nas operações com veículos beneficiados com a desoneração condicional do ICMS.
+
+
+
+
+ Este campo será preenchido quando o campo anterior estiver preenchido.
+Informar o motivo da desoneração:
+1 – Táxi;
+3 – Produtor Agropecuário;
+4 – Frotista/Locadora;
+5 – Diplomático/Consular;
+6 – Utilitários e Motocicletas da Amazônia Ocidental e Áreas de Livre Comércio (Resolução 714/88 e 790/94 – CONTRAN e suas alterações);
+7 – SUFRAMA;
+8 - Venda a órgão Público;
+9 – Outros
+10- Deficiente Condutor
+11- Deficiente não condutor
+16 - Olimpíadas Rio 2016
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tributção pelo ICMS
+51 - Diferimento
+A exigência do preenchimento das informações do ICMS diferido fica à critério de cada UF.
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+
+ Tributção pelo ICMS
+20 - Com redução de base de cálculo
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS:
+0 - Margem Valor Agregado (%);
+1 - Pauta (valor);
+2 - Preço Tabelado Máximo (valor);
+3 - Valor da Operação.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual de redução da BC
+
+
+
+
+ Valor da BC do ICMS
+
+
+
+
+ Alíquota do ICMS
+
+
+
+
+ Valor do ICMS da Operação
+
+
+
+
+ Percentual do diferemento
+
+
+
+
+ Valor do ICMS da diferido
+
+
+
+
+ Valor do ICMS
+
+
+
+
+
+
+
+ Tributação pelo ICMS
+60 - ICMS cobrado anteriormente por substituição tributária
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+
+ Tributação pelo ICMS
+60 - ICMS cobrado anteriormente por substituição tributária
+
+
+
+
+
+
+
+
+
+
+ NT2010/004
+
+
+
+ Valor da BC do ICMS ST retido anteriormente
+
+
+
+
+ Valor do ICMS ST retido anteriormente
+
+
+
+
+
+
+
+
+ Tributação pelo ICMS
+70 - Com redução de base de cálculo e cobrança do ICMS por substituição tributária
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+
+ Tributção pelo ICMS
+70 - Com redução de base de cálculo e cobrança do ICMS por substituição tributária
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS:
+0 - Margem Valor Agregado (%);
+1 - Pauta (valor);
+2 - Preço Tabelado Máximo (valor);
+3 - Valor da Operação.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual de redução da BC
+
+
+
+
+ Valor da BC do ICMS
+
+
+
+
+ Alíquota do ICMS
+
+
+
+
+ Valor do ICMS
+
+
+
+
+ Modalidade de determinação da BC do ICMS ST:
+0 – Preço tabelado ou máximo sugerido;
+1 - Lista Negativa (valor);
+2 - Lista Positiva (valor);
+3 - Lista Neutra (valor);
+4 - Margem Valor Agregado (%);
+5 - Pauta (valor).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual da Margem de Valor Adicionado ICMS ST
+
+
+
+
+ Percentual de redução da BC ICMS ST
+
+
+
+
+ Valor da BC do ICMS ST
+
+
+
+
+ Alíquota do ICMS ST
+
+
+
+
+ Valor do ICMS ST
+
+
+
+
+ Grupo desoneração
+
+
+
+ Valor do ICMS de desoneração
+
+
+
+
+ Motivo da desoneração do ICMS:3-Uso na agropecuária;9-Outros;12-Fomento agropecuário
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tributação pelo ICMS
+90 - Outras
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+
+ Tributção pelo ICMS
+90 - Outras
+
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS:
+0 - Margem Valor Agregado (%);
+1 - Pauta (valor);
+2 - Preço Tabelado Máximo (valor);
+3 - Valor da Operação.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do ICMS
+
+
+
+
+ Percentual de redução da BC
+
+
+
+
+ Alíquota do ICMS
+
+
+
+
+ Valor do ICMS
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS ST:
+0 – Preço tabelado ou máximo sugerido;
+1 - Lista Negativa (valor);
+2 - Lista Positiva (valor);
+3 - Lista Neutra (valor);
+4 - Margem Valor Agregado (%);
+5 - Pauta (valor).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual da Margem de Valor Adicionado ICMS ST
+
+
+
+
+ Percentual de redução da BC ICMS ST
+
+
+
+
+ Valor da BC do ICMS ST
+
+
+
+
+ Alíquota do ICMS ST
+
+
+
+
+ Valor do ICMS ST
+
+
+
+
+
+ Grupo desoneração
+
+
+
+ Valor do ICMS de desoneração
+
+
+
+
+ Motivo da desoneração do ICMS:3-Uso na agropecuária;9-Outros;12-Fomento agropecuário
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Partilha do ICMS entre a UF de origem e UF de destino ou a UF definida na legislação
+Operação interestadual para consumidor final com partilha do ICMS devido na operação entre a UF de origem e a UF do destinatário ou ou a UF definida na legislação. (Ex. UF da concessionária de entrega do veículos)
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+
+ Tributação pelo ICMS
+10 - Tributada e com cobrança do ICMS por substituição tributária;
+90 – Outros.
+
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS:
+0 - Margem Valor Agregado (%);
+1 - Pauta (valor);
+2 - Preço Tabelado Máximo (valor);
+3 - Valor da Operação.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do ICMS
+
+
+
+
+ Percentual de redução da BC
+
+
+
+
+ Alíquota do ICMS
+
+
+
+
+ Valor do ICMS
+
+
+
+
+ Modalidade de determinação da BC do ICMS ST:
+0 – Preço tabelado ou máximo sugerido;
+1 - Lista Negativa (valor);
+2 - Lista Positiva (valor);
+3 - Lista Neutra (valor);
+4 - Margem Valor Agregado (%);
+5 - Pauta (valor).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual da Margem de Valor Adicionado ICMS ST
+
+
+
+
+ Percentual de redução da BC ICMS ST
+
+
+
+
+ Valor da BC do ICMS ST
+
+
+
+
+ Alíquota do ICMS ST
+
+
+
+
+ Valor do ICMS ST
+
+
+
+
+ Percentual para determinação do valor da Base de Cálculo da operação própria.
+
+
+
+
+ Sigla da UF para qual é devido o ICMS ST da operação.
+
+
+
+
+
+
+
+ Grupo de informação do ICMSST devido para a UF de destino, nas operações interestaduais de produtos que tiveram retenção antecipada de ICMS por ST na UF do remetente. Repasse via Substituto Tributário.
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+
+ Tributção pelo ICMS
+41-Não Tributado
+
+
+
+
+
+
+
+
+
+
+ Informar o valor da BC do ICMS ST retido na UF remetente
+
+
+
+
+ Informar o valor do ICMS ST retido na UF remetente (iv2.0))
+
+
+
+
+ Informar o valor da BC do ICMS ST da UF destino
+
+
+
+
+ Informar o valor da BC do ICMS ST da UF destino (v2.0)
+
+
+
+
+
+
+
+ Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=101 (v.2.0)
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+(v2.0)
+
+
+
+
+ 101- Tributada pelo Simples Nacional com permissão de crédito. (v.2.0)
+
+
+
+
+
+
+
+
+
+
+ Alíquota aplicável de cálculo do crédito (Simples Nacional). (v2.0)
+
+
+
+
+ Valor crédito do ICMS que pode ser aproveitado nos termos do art. 23 da LC 123 (Simples Nacional) (v2.0)
+
+
+
+
+
+
+
+ Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=102, 103, 300 ou 400 (v.2.0))
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+(v2.0)
+
+
+
+
+ 102- Tributada pelo Simples Nacional sem permissão de crédito.
+103 – Isenção do ICMS no Simples Nacional para faixa de receita bruta.
+300 – Imune.
+400 – Não tributda pelo Simples Nacional (v.2.0) (v.2.0)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=201 (v.2.0)
+
+
+
+
+
+ Origem da mercadoria:
+0 – Nacional;
+1 – Estrangeira – Importação direta;
+2 – Estrangeira – Adquirida no mercado interno. (v2.0)
+
+
+
+
+ 201- Tributada pelo Simples Nacional com permissão de crédito e com cobrança do ICMS por Substituição Tributária (v.2.0)
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS ST:
+0 – Preço tabelado ou máximo sugerido;
+1 - Lista Negativa (valor);
+2 - Lista Positiva (valor);
+3 - Lista Neutra (valor);
+4 - Margem Valor Agregado (%);
+5 - Pauta (valor). (v2.0)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual da Margem de Valor Adicionado ICMS ST (v2.0)
+
+
+
+
+ Percentual de redução da BC ICMS ST (v2.0)
+
+
+
+
+ Valor da BC do ICMS ST (v2.0)
+
+
+
+
+ Alíquota do ICMS ST (v2.0)
+
+
+
+
+ Valor do ICMS ST (v2.0)
+
+
+
+
+ Alíquota aplicável de cálculo do crédito (Simples Nacional). (v2.0)
+
+
+
+
+ Valor crédito do ICMS que pode ser aproveitado nos termos do art. 23 da LC 123 (Simples Nacional) (v2.0)
+
+
+
+
+
+
+
+ Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=202 ou 203 (v.2.0)
+
+
+
+
+
+ Origem da mercadoria:
+0 – Nacional;
+1 – Estrangeira – Importação direta;
+2 – Estrangeira – Adquirida no mercado interno. (v2.0)
+
+
+
+
+ 202- Tributada pelo Simples Nacional sem permissão de crédito e com cobrança do ICMS por Substituição Tributária;
+203- Isenção do ICMS nos Simples Nacional para faixa de receita bruta e com cobrança do ICMS por Substituição Tributária (v.2.0)
+
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS ST:
+0 – Preço tabelado ou máximo sugerido;
+1 - Lista Negativa (valor);
+2 - Lista Positiva (valor);
+3 - Lista Neutra (valor);
+4 - Margem Valor Agregado (%);
+5 - Pauta (valor). (v2.0)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual da Margem de Valor Adicionado ICMS ST (v2.0)
+
+
+
+
+ Percentual de redução da BC ICMS ST (v2.0)
+
+
+
+
+ Valor da BC do ICMS ST (v2.0)
+
+
+
+
+ Alíquota do ICMS ST (v2.0)
+
+
+
+
+ Valor do ICMS ST (v2.0)
+
+
+
+
+
+
+
+ Tributação do ICMS pelo SIMPLES NACIONAL,CRT=1 – Simples Nacional e CSOSN=500 (v.2.0)
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+
+ 500 – ICMS cobrado anterirmente por substituição tributária (substituído) ou por antecipação
+(v.2.0)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do ICMS ST retido anteriormente (v2.0)
+
+
+
+
+ Valor do ICMS ST retido anteriormente (v2.0)
+
+
+
+
+
+
+
+
+ Tributação do ICMS pelo SIMPLES NACIONAL, CRT=1 – Simples Nacional e CSOSN=900 (v2.0)
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+
+ Tributação pelo ICMS 900 - Outros(v2.0)
+
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS:
+0 - Margem Valor Agregado (%);
+1 - Pauta (valor);
+2 - Preço Tabelado Máximo (valor);
+3 - Valor da Operação.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do ICMS
+
+
+
+
+ Percentual de redução da BC
+
+
+
+
+ Alíquota do ICMS
+
+
+
+
+ Valor do ICMS
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS ST:
+0 – Preço tabelado ou máximo sugerido;
+1 - Lista Negativa (valor);
+2 - Lista Positiva (valor);
+3 - Lista Neutra (valor);
+4 - Margem Valor Agregado (%);
+5 - Pauta (valor).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual da Margem de Valor Adicionado ICMS ST
+
+
+
+
+ Percentual de redução da BC ICMS ST
+
+
+
+
+ Valor da BC do ICMS ST
+
+
+
+
+ Alíquota do ICMS ST
+
+
+
+
+ Valor do ICMS ST
+
+
+
+
+
+
+ Alíquota aplicável de cálculo do crédito (Simples Nacional). (v2.0)
+
+
+
+
+ Valor crédito do ICMS que pode ser aproveitado nos termos do art. 23 da LC 123 (Simples Nacional) (v2.0)
+
+
+
+
+
+
+
+
+
+
+
+
+ Dados do Imposto de Importação
+
+
+
+
+
+ Base da BC do Imposto de Importação
+
+
+
+
+ Valor das despesas aduaneiras
+
+
+
+
+ Valor do Imposto de Importação
+
+
+
+
+ Valor do Imposto sobre Operações Financeiras
+
+
+
+
+
+
+
+
+
+
+ ISSQN
+
+
+
+
+
+ Valor da BC do ISSQN
+
+
+
+
+ Alíquota do ISSQN
+
+
+
+
+ Valor da do ISSQN
+
+
+
+
+ Informar o município de ocorrência do fato gerador do ISSQN. Utilizar a Tabela do IBGE (Anexo VII - Tabela de UF, Município e País). “Atenção, não vincular com os campos B12, C10 ou E10” v2.0
+
+
+
+
+ Informar o Item da lista de serviços da LC 116/03 em que se classifica o serviço.
+
+
+
+
+ Valor dedução para redução da base de cálculo
+
+
+
+
+ Valor outras retenções
+
+
+
+
+ Valor desconto incondicionado
+
+
+
+
+ Valor desconto condicionado
+
+
+
+
+ Valor Retenção ISS
+
+
+
+
+ Exibilidade do ISS:1-Exigível;2-Não incidente;3-Isenção;4-Exportação;5-Imunidade;6-Exig.Susp. Judicial;7-Exig.Susp. ADM
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Código do serviço prestado dentro do município
+
+
+
+
+
+
+
+
+
+
+
+ Código do Município de Incidência do Imposto
+
+
+
+
+ Código de Pais
+
+
+
+
+
+
+
+
+
+
+ Número do Processo administrativo ou judicial de suspenção do processo
+
+
+
+
+
+
+
+
+
+
+
+ Indicador de Incentivo Fiscal. 1=Sim; 2=Não
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Dados do PIS
+
+
+
+
+
+ Código de Situação Tributária do PIS.
+ 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo);
+02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada);
+
+
+
+
+
+ Código de Situação Tributária do PIS.
+ 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo);
+02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada);
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do PIS
+
+
+
+
+ Alíquota do PIS (em percentual)
+
+
+
+
+ Valor do PIS
+
+
+
+
+
+
+
+ Código de Situação Tributária do PIS.
+03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto;
+
+
+
+
+
+ Código de Situação Tributária do PIS.
+03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto;
+
+
+
+
+
+
+
+
+
+
+ Quantidade Vendida (NT2011/004)
+
+
+
+
+ Alíquota do PIS (em reais) (NT2011/004)
+
+
+
+
+ Valor do PIS
+
+
+
+
+
+
+
+ Código de Situação Tributária do PIS.
+04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero);
+06 - Operação Tributável - Alíquota Zero;
+07 - Operação Isenta da contribuição;
+08 - Operação Sem Incidência da contribuição;
+09 - Operação com suspensão da contribuição;
+
+
+
+
+
+ Código de Situação Tributária do PIS.
+04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero);
+05 - Operação Tributável (ST);
+06 - Operação Tributável - Alíquota Zero;
+07 - Operação Isenta da contribuição;
+08 - Operação Sem Incidência da contribuição;
+09 - Operação com suspensão da contribuição;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Código de Situação Tributária do PIS.
+99 - Outras Operações.
+
+
+
+
+
+ Código de Situação Tributária do PIS.
+99 - Outras Operações.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do PIS
+
+
+
+
+ Alíquota do PIS (em percentual)
+
+
+
+
+
+
+ Quantidade Vendida (NT2011/004)
+
+
+
+
+ Alíquota do PIS (em reais) (NT2011/004)
+
+
+
+
+
+
+ Valor do PIS
+
+
+
+
+
+
+
+
+
+
+ Dados do PIS Substituição Tributária
+
+
+
+
+
+
+
+ Valor da BC do PIS ST
+
+
+
+
+ Alíquota do PIS ST (em percentual)
+
+
+
+
+
+
+ Quantidade Vendida
+
+
+
+
+ Alíquota do PIS ST (em reais)
+
+
+
+
+
+
+ Valor do PIS ST
+
+
+
+
+
+
+
+ Dados do COFINS
+
+
+
+
+
+ Código de Situação Tributária do COFINS.
+ 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo);
+02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada);
+
+
+
+
+
+ Código de Situação Tributária do COFINS.
+ 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo);
+02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada);
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do COFINS
+
+
+
+
+ Alíquota do COFINS (em percentual)
+
+
+
+
+ Valor do COFINS
+
+
+
+
+
+
+
+ Código de Situação Tributária do COFINS.
+03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto;
+
+
+
+
+
+ Código de Situação Tributária do COFINS.
+03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto;
+
+
+
+
+
+
+
+
+
+ Quantidade Vendida (NT2011/004)
+
+
+
+
+ Alíquota do COFINS (em reais) (NT2011/004)
+
+
+
+
+ Valor do COFINS
+
+
+
+
+
+
+
+ Código de Situação Tributária do COFINS:
+04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero);
+06 - Operação Tributável - Alíquota Zero;
+07 - Operação Isenta da contribuição;
+08 - Operação Sem Incidência da contribuição;
+09 - Operação com suspensão da contribuição;
+
+
+
+
+
+ Código de Situação Tributária do COFINS:
+04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero);
+05 - Operação Tributável (ST);
+06 - Operação Tributável - Alíquota Zero;
+07 - Operação Isenta da contribuição;
+08 - Operação Sem Incidência da contribuição;
+09 - Operação com suspensão da contribuição;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Código de Situação Tributária do COFINS:
+49 - Outras Operações de Saída
+50 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita Tributada no Mercado Interno
+51 - Operação com Direito a Crédito – Vinculada Exclusivamente a Receita Não Tributada no Mercado Interno
+52 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita de Exportação
+53 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno
+54 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas no Mercado Interno e de Exportação
+55 - Operação com Direito a Crédito - Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação
+56 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação
+60 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Tributada no Mercado Interno
+61 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Não-Tributada no Mercado Interno
+62 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita de Exportação
+63 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno
+64 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas no Mercado Interno e de Exportação
+65 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação
+66 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação
+67 - Crédito Presumido - Outras Operações
+70 - Operação de Aquisição sem Direito a Crédito
+71 - Operação de Aquisição com Isenção
+72 - Operação de Aquisição com Suspensão
+73 - Operação de Aquisição a Alíquota Zero
+74 - Operação de Aquisição sem Incidência da Contribuição
+75 - Operação de Aquisição por Substituição Tributária
+98 - Outras Operações de Entrada
+99 - Outras Operações.
+
+
+
+
+
+ Código de Situação Tributária do COFINS:
+49 - Outras Operações de Saída
+50 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita Tributada no Mercado Interno
+51 - Operação com Direito a Crédito – Vinculada Exclusivamente a Receita Não Tributada no Mercado Interno
+52 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita de Exportação
+53 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno
+54 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas no Mercado Interno e de Exportação
+55 - Operação com Direito a Crédito - Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação
+56 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação
+60 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Tributada no Mercado Interno
+61 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Não-Tributada no Mercado Interno
+62 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita de Exportação
+63 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno
+64 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas no Mercado Interno e de Exportação
+65 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação
+66 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação
+67 - Crédito Presumido - Outras Operações
+70 - Operação de Aquisição sem Direito a Crédito
+71 - Operação de Aquisição com Isenção
+72 - Operação de Aquisição com Suspensão
+73 - Operação de Aquisição a Alíquota Zero
+74 - Operação de Aquisição sem Incidência da Contribuição
+75 - Operação de Aquisição por Substituição Tributária
+98 - Outras Operações de Entrada
+99 - Outras Operações.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do COFINS
+
+
+
+
+ Alíquota do COFINS (em percentual)
+
+
+
+
+
+
+ Quantidade Vendida (NT2011/004)
+
+
+
+
+ Alíquota do COFINS (em reais) (NT2011/004)
+
+
+
+
+
+
+ Valor do COFINS
+
+
+
+
+
+
+
+
+
+
+ Dados do COFINS da
+Substituição Tributaria;
+
+
+
+
+
+
+
+ Valor da BC do COFINS ST
+
+
+
+
+ Alíquota do COFINS ST(em percentual)
+
+
+
+
+
+
+ Quantidade Vendida
+
+
+
+
+ Alíquota do COFINS ST(em reais)
+
+
+
+
+
+
+ Valor do COFINS ST
+
+
+
+
+
+
+
+ Grupo a ser informado nas vendas interestarduais para consumidor final, não contribuinte de ICMS
+
+
+
+
+
+ Valor da Base de Cálculo do ICMS na UF do destinatário.
+
+
+
+
+ Percentual adicional inserido na alíquota interna da UF de destino, relativo ao Fundo de Combate à Pobreza (FCP) naquela UF.
+
+
+
+
+ Alíquota adotada nas operações internas na UF do destinatário para o produto / mercadoria.
+
+
+
+
+ Alíquota interestadual das UF envolvidas: - 4% alíquota interestadual para produtos importados; - 7% para os Estados de origem do Sul e Sudeste (exceto ES), destinado para os Estados do Norte e Nordeste ou ES; - 12% para os demais casos.
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual de partilha para a UF do destinatário: - 40% em 2016; - 60% em 2017; - 80% em 2018; - 100% a partir de 2019.
+
+
+
+
+ Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP) da UF de destino.
+
+
+
+
+ Valor do ICMS de partilha para a UF do destinatário.
+
+
+
+
+ Valor do ICMS de partilha para a UF do remetente. Nota: A partir de 2019, este valor será zero.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual de mercadoria devolvida
+
+
+
+
+ Informação de IPI devolvido
+
+
+
+
+
+ Valor do IPI devolvido
+
+
+
+
+
+
+
+
+
+
+ Informações adicionais do produto (norma referenciada, informações complementares, etc)
+
+
+
+
+
+
+
+
+
+
+
+ Número do item do NF
+
+
+
+
+
+
+
+
+
+
+
+
+ Dados dos totais da NF-e
+
+
+
+
+
+ Totais referentes ao ICMS
+
+
+
+
+
+ BC do ICMS
+
+
+
+
+ Valor Total do ICMS
+
+
+
+
+ Valor Total do ICMS desonerado
+
+
+
+
+ Valor total do ICMS relativo ao Fundo de Combate à Pobreza (FCP) para a UF de destino.
+
+
+
+
+ Valor total do ICMS de partilha para a UF do destinatário
+
+
+
+
+ Valor total do ICMS de partilha para a UF do remetente
+
+
+
+
+ BC do ICMS ST
+
+
+
+
+ Valor Total do ICMS ST
+
+
+
+
+ Valor Total dos produtos e serviços
+
+
+
+
+ Valor Total do Frete
+
+
+
+
+ Valor Total do Seguro
+
+
+
+
+ Valor Total do Desconto
+
+
+
+
+ Valor Total do II
+
+
+
+
+ Valor Total do IPI
+
+
+
+
+ Valor do PIS
+
+
+
+
+ Valor do COFINS
+
+
+
+
+ Outras Despesas acessórias
+
+
+
+
+ Valor Total da NF-e
+
+
+
+
+ Valor estimado total de impostos federais, estaduais e municipais
+
+
+
+
+
+
+
+ Totais referentes ao ISSQN
+
+
+
+
+
+ Valor Total dos Serviços sob não-incidência ou não tributados pelo ICMS
+
+
+
+
+ Base de Cálculo do ISS
+
+
+
+
+ Valor Total do ISS
+
+
+
+
+ Valor do PIS sobre serviços
+
+
+
+
+ Valor do COFINS sobre serviços
+
+
+
+
+ Data da prestação do serviço (AAAA-MM-DD)
+
+
+
+
+ Valor dedução para redução da base de cálculo
+
+
+
+
+ Valor outras retenções
+
+
+
+
+ Valor desconto incondicionado
+
+
+
+
+ Valor desconto condicionado
+
+
+
+
+ Valor Total Retenção ISS
+
+
+
+
+ Código do regime especial de tributação
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Retenção de Tributos Federais
+
+
+
+
+
+ Valor Retido de PIS
+
+
+
+
+ Valor Retido de COFINS
+
+
+
+
+ Valor Retido de CSLL
+
+
+
+
+ Base de Cálculo do IRRF
+
+
+
+
+ Valor Retido de IRRF
+
+
+
+
+ Base de Cálculo da Retenção da Previdêncica Social
+
+
+
+
+ Valor da Retenção da Previdêncica Social
+
+
+
+
+
+
+
+
+
+
+ Dados dos transportes da NF-e
+
+
+
+
+
+ Modalidade do frete
+0- Por conta do emitente;
+1- Por conta do destinatário/remetente;
+2- Por conta de terceiros;
+9- Sem frete (v2.0)
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Dados do transportador
+
+
+
+
+
+
+ CNPJ do transportador
+
+
+
+
+ CPF do transportador
+
+
+
+
+
+ Razão Social ou nome do transportador
+
+
+
+
+
+
+
+
+
+
+ Inscrição Estadual (v2.0)
+
+
+
+
+ Endereço completo
+
+
+
+
+
+
+
+
+
+
+ Nome do munícipio
+
+
+
+
+
+
+
+
+
+
+ Sigla da UF
+
+
+
+
+
+
+
+ Dados da retenção ICMS do Transporte
+
+
+
+
+
+ Valor do Serviço
+
+
+
+
+ BC da Retenção do ICMS
+
+
+
+
+ Alíquota da Retenção
+
+
+
+
+ Valor do ICMS Retido
+
+
+
+
+ Código Fiscal de Operações e Prestações
+
+
+
+
+
+
+
+
+
+
+ Código do Município de Ocorrência do Fato Gerador (utilizar a tabela do IBGE)
+
+
+
+
+
+
+
+
+
+ Dados do veículo
+
+
+
+
+ Dados do reboque/Dolly (v2.0)
+
+
+
+
+
+ Identificação do vagão (v2.0)
+
+
+
+
+
+
+
+
+
+
+ Identificação da balsa (v2.0)
+
+
+
+
+
+
+
+
+
+
+
+ Dados dos volumes
+
+
+
+
+
+ Quantidade de volumes transportados
+
+
+
+
+
+
+
+
+
+
+ Espécie dos volumes transportados
+
+
+
+
+
+
+
+
+
+
+ Marca dos volumes transportados
+
+
+
+
+
+
+
+
+
+
+ Numeração dos volumes transportados
+
+
+
+
+
+
+
+
+
+
+ Peso líquido (em kg)
+
+
+
+
+ Peso bruto (em kg)
+
+
+
+
+
+
+
+ Número dos Lacres
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Dados da cobrança da NF-e
+
+
+
+
+
+ Dados da fatura
+
+
+
+
+
+ Número da fatura
+
+
+
+
+
+
+
+
+
+
+ Valor original da fatura
+
+
+
+
+ Valor do desconto da fatura
+
+
+
+
+ Valor líquido da fatura
+
+
+
+
+
+
+
+ Dados das duplicatas NT 2011/004
+
+
+
+
+
+ Número da duplicata
+
+
+
+
+
+
+
+
+
+
+ Data de vencimento da duplicata (AAAA-MM-DD)
+
+
+
+
+ Valor da duplicata
+
+
+
+
+
+
+
+
+
+
+ Dados de Pagamento. Obrigatório apenas para (NFC-e) NT 2012/004
+
+
+
+
+
+ Forma de Pagamento:01-Dinheiro;02-Cheque;03-Cartão de Crédito;04-Cartão de Débito;05-Crédito Loja;10-Vale Alimentação;11-Vale Refeição;12-Vale Presente;13-Vale Combustível;99 - Outros
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor do Pagamento
+
+
+
+
+ Grupo de Cartões
+
+
+
+
+
+ Tipo de Integração do processo de pagamento com o sistema de automação da empresa/
+ 1=Pagamento integrado com o sistema de automação da empresa Ex. equipamento TEF , Comercio Eletronico
+ 2=Pagamento não integrado com o sistema de automação da empresa Ex: equipamento POS
+
+
+
+
+
+
+
+
+
+
+
+
+ CNPJ da credenciadora de cartão de crédito/débito
+
+
+
+
+ Bandeira da operadora de cartão de crédito/débito:01–Visa; 02–Mastercard; 03–American Express; 04–Sorocred; 99–Outros
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Número de autorização da operação cartão de crédito/débito
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Informações adicionais da NF-e
+
+
+
+
+
+ Informações adicionais de interesse do Fisco (v2.0)
+
+
+
+
+
+
+
+
+
+
+ Informações complementares de interesse do Contribuinte
+
+
+
+
+
+
+
+
+
+
+ Campo de uso livre do contribuinte
+informar o nome do campo no atributo xCampo
+e o conteúdo do campo no xTexto
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Campo de uso exclusivo do Fisco
+informar o nome do campo no atributo xCampo
+e o conteúdo do campo no xTexto
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Grupo de informações do processo referenciado
+
+
+
+
+
+ Indentificador do processo ou ato
+concessório
+
+
+
+
+
+
+
+
+
+
+ Origem do processo, informar com:
+0 - SEFAZ;
+1 - Justiça Federal;
+2 - Justiça Estadual;
+3 - Secex/RFB;
+9 - Outros
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Informações de exportação
+
+
+
+
+
+ Sigla da UF de Embarque ou de transposição de fronteira
+
+
+
+
+ Local de Embarque ou de transposição de fronteira
+
+
+
+
+
+
+
+
+
+
+ Descrição do local de despacho
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Informações de compras (Nota de Empenho, Pedido e Contrato)
+
+
+
+
+
+ Informação da Nota de Empenho de compras públicas (NT2011/004)
+
+
+
+
+
+
+
+
+
+
+ Informação do pedido
+
+
+
+
+
+
+
+
+
+
+ Informação do contrato
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Informações de registro aquisições de cana
+
+
+
+
+
+ Identificação da safra
+
+
+
+
+
+
+
+
+
+
+ Mês e Ano de Referência, formato: MM/AAAA
+
+
+
+
+
+
+
+
+
+
+ Fornecimentos diários
+
+
+
+
+
+ Quantidade em quilogramas - peso líquido
+
+
+
+
+
+ Número do dia
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total do mês
+
+
+
+
+ Total Anterior
+
+
+
+
+ Total Geral
+
+
+
+
+ Deduções - Taxas e Contribuições
+
+
+
+
+
+ Descrição da Dedução
+
+
+
+
+
+
+
+
+
+
+ valor da dedução
+
+
+
+
+
+
+
+ Valor dos fornecimentos
+
+
+
+
+ Valor Total das Deduções
+
+
+
+
+ Valor Líquido dos fornecimentos
+
+
+
+
+
+
+
+
+ Versão do leiaute (v2.0)
+
+
+
+
+ PL_005d - 11/08/09 - validação do Id
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Informações suplementares Nota Fiscal
+
+
+
+
+
+ Texto com o QR-Code impresso no DANFE NFC-e
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Protocolo de status resultado do processamento da NF-e
+
+
+
+
+ Dados do protocolo de status
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que processou a NF-e
+
+
+
+
+ Chaves de acesso da NF-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, série e número da NF-e e código numérico+DV.
+
+
+
+
+ Data e hora de processamento, no formato AAAA-MM-DDTHH:MM:SSTZD. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Lote de NF-e enviado.
+
+
+
+
+ Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - códiga da UF - 2 posições ano; 10 seqüencial no ano.
+
+
+
+
+ Digest Value da NF-e processada. Utilizado para conferir a integridade da NF-e original.
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Pedido de Concessão de Autorização da Nota Fiscal Eletrônica
+
+
+
+
+
+ Indicador de processamento síncrono. 0=NÃO; 1=SIM=Síncrono
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Retorno do Pedido de Autorização da Nota Fiscal Eletrônica
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que recebeu o Lote.
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+ código da UF de atendimento
+
+
+
+
+ Data e hora do recebimento, no formato AAAA-MM-DDTHH:MM:SSTZD
+
+
+
+
+
+ Dados do Recibo do Lote
+
+
+
+
+
+ Número do Recibo
+
+
+
+
+ Tempo médio de resposta do serviço (em segundos) dos últimos 5 minutos
+
+
+
+
+
+
+
+ Protocolo de status resultado do processamento sincrono da NFC-e
+
+
+
+
+
+
+
+
+ Tipo Pedido de Consulta do Recido do Lote de Notas Fiscais Eletrônicas
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Número do Recibo
+
+
+
+
+
+
+
+ Tipo Retorno do Pedido de Consulta do Recido do Lote de Notas Fiscais Eletrônicas
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que processou a NF-e
+
+
+
+
+ Número do Recibo Consultado
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+ código da UF de atendimento
+
+
+
+
+ Data e hora de processamento, no formato AAAA-MM-DDTHH:MM:SSTZD. Em caso de Rejeição, com data e hora do recebimento do Lote de NF-e enviado.
+
+
+
+
+
+
+ Código da Mensagem (v2.0)
+alterado para tamanho variavel 1-4. (NT2011/004)
+
+
+
+
+
+
+
+
+
+
+ Mensagem da SEFAZ para o emissor. (v2.0)
+
+
+
+
+
+
+
+
+
+
+
+ Protocolo de status resultado do processamento da NF-e
+
+
+
+
+
+
+
+ Tipo da NF-e processada
+
+
+
+
+
+
+
+
+
+ Tipo Dados do Endereço // 24/10/08 - tamanho mínimo
+
+
+
+
+ Logradouro
+
+
+
+
+
+
+
+
+
+
+ Número
+
+
+
+
+
+
+
+
+
+
+ Complemento
+
+
+
+
+
+
+
+
+
+
+ Bairro
+
+
+
+
+
+
+
+
+
+
+ Código do município (utilizar a tabela do IBGE), informar 9999999 para operações com o exterior.
+
+
+
+
+ Nome do município, informar EXTERIOR para operações com o exterior.
+
+
+
+
+
+
+
+
+
+
+ Sigla da UF, informar EX para operações com o exterior.
+
+
+
+
+ CEP
+
+
+
+
+
+
+
+
+
+
+ Código de Pais
+
+
+
+
+
+
+
+
+
+
+ Nome do país
+
+
+
+
+
+
+
+
+
+
+ Telefone, preencher com Código DDD + número do telefone , nas operações com exterior é permtido informar o código do país + código da localidade + número do telefone
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Dados do Endereço do Emitente // 24/10/08 - desmembrado / tamanho mínimo
+
+
+
+
+ Logradouro
+
+
+
+
+
+
+
+
+
+
+ Número
+
+
+
+
+
+
+
+
+
+
+ Complemento
+
+
+
+
+
+
+
+
+
+
+ Bairro
+
+
+
+
+
+
+
+
+
+
+ Código do município
+
+
+
+
+ Nome do município
+
+
+
+
+
+
+
+
+
+
+ Sigla da UF
+
+
+
+
+ CEP - NT 2011/004
+
+
+
+
+
+
+
+
+
+
+ Código do país
+
+
+
+
+
+
+
+
+
+ Nome do país
+
+
+
+
+
+
+
+
+
+
+ Preencher com Código DDD + número do telefone (v.2.0)
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Dados do Local de Retirada ou Entrega // 24/10/08 - tamanho mínimo // v2.0
+
+
+
+
+
+ CNPJ
+
+
+
+
+ CPF (v2.0)
+
+
+
+
+
+ Logradouro
+
+
+
+
+
+
+
+
+
+
+ Número
+
+
+
+
+
+
+
+
+
+
+ Complemento
+
+
+
+
+
+
+
+
+
+
+ Bairro
+
+
+
+
+
+
+
+
+
+
+ Código do município (utilizar a tabela do IBGE)
+
+
+
+
+ Nome do município
+
+
+
+
+
+
+
+
+
+
+ Sigla da UF
+
+
+
+
+
+
+ Tipo Dados do Veículo
+
+
+
+
+ Placa do veículo (NT2011/004)
+
+
+
+
+
+
+
+
+
+
+ Sigla da UF
+
+
+
+
+ Registro Nacional de Transportador de Carga (ANTT)
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Origem da mercadoria CST ICMS origem da mercadoria: 0-Nacional exceto as indicadas nos códigos 3, 4, 5 e 8;
+1-Estrangeira - Importação direta; 2-Estrangeira - Adquirida no mercado interno; 3-Nacional, conteudo superior 40% e inferior ou igual a 70%; 4-Nacional, processos produtivos básicos; 5-Nacional, conteudo inferior 40%; 6-Estrangeira - Importação direta, com similar nacional, lista CAMEX; 7-Estrangeira - mercado interno, sem simular,lista CAMEX;8-Nacional, Conteúdo de Importação superior a 70%.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Finalidade da NF-e (1=Normal; 2=Complementar; 3=Ajuste; 4=Devolução/Retorno)
+
+
+
+
+
+
+
+
+
+
+
+ Tipo processo de emissão da NF-e
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Código da Lista de Serviços LC 116/2003
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Identificação de Lote
+
+
+
+
+
+
+
+
+ Tipo Versão da NF-e - 3.10
+
+
+
+
+
+
+
+
+ Identificador único (Globally Unique Identifier)
+
+
+
+
+
+
+
+
+ Tipo: Dados do IPI
+
+
+
+
+ Classe de Enquadramento do IPI para Cigarros e Bebidas
+
+
+
+
+
+
+
+
+
+
+ CNPJ do produtor da mercadoria, quando diferente do emitente. Somente para os casos de exportação direta ou indireta.
+
+
+
+
+ Código do selo de controle do IPI
+
+
+
+
+
+
+
+
+
+
+ Quantidade de selo de controle do IPI
+
+
+
+
+
+
+
+
+
+
+ Código de Enquadramento Legal do IPI (tabela a ser criada pela RFB)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Código da Situação Tributária do IPI:
+00-Entrada com recuperação de crédito
+49 - Outras entradas
+50-Saída tributada
+99-Outras saídas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do IPI
+
+
+
+
+ Alíquota do IPI
+
+
+
+
+
+
+ Quantidade total na unidade padrão para tributação
+
+
+
+
+ Valor por Unidade Tributável. Informar o valor do imposto Pauta por unidade de medida.
+
+
+
+
+
+
+ Valor do IPI
+
+
+
+
+
+
+
+
+
+
+ Código da Situação Tributária do IPI:
+01-Entrada tributada com alíquota zero
+02-Entrada isenta
+03-Entrada não-tributada
+04-Entrada imune
+05-Entrada com suspensão
+51-Saída tributada com alíquota zero
+52-Saída isenta
+53-Saída não-tributada
+54-Saída imune
+55-Saída com suspensão
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/leiauteNFe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteNFe_v4.00.xsd
new file mode 100755
index 00000000..5d328ca8
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteNFe_v4.00.xsd
@@ -0,0 +1,6408 @@
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Nota Fiscal Eletrônica
+
+
+
+
+ Informações da Nota Fiscal eletrônica
+
+
+
+
+
+ identificação da NF-e
+
+
+
+
+
+ Código da UF do emitente do Documento Fiscal. Utilizar a Tabela do IBGE.
+
+
+
+
+ Código numérico que compõe a Chave de Acesso. Número aleatório gerado pelo emitente para cada NF-e.
+
+
+
+
+
+
+
+
+
+
+ Descrição da Natureza da Operação
+
+
+
+
+
+
+
+
+
+
+ Código do modelo do Documento Fiscal. 55 = NF-e; 65 = NFC-e.
+
+
+
+
+ Série do Documento Fiscal
+série normal 0-889
+Avulsa Fisco 890-899
+SCAN 900-999
+
+
+
+
+ Número do Documento Fiscal
+
+
+
+
+ Data e Hora de emissão do Documento Fiscal (AAAA-MM-DDThh:mm:ssTZD) ex.: 2012-09-01T13:00:00-03:00
+
+
+
+
+ Data e Hora da saída ou de entrada da mercadoria / produto (AAAA-MM-DDTHH:mm:ssTZD)
+
+
+
+
+ Tipo do Documento Fiscal (0 - entrada; 1 - saída)
+
+
+
+
+
+
+
+
+
+
+
+ Identificador de Local de destino da operação (1-Interna;2-Interestadual;3-Exterior)
+
+
+
+
+
+
+
+
+
+
+
+
+ Código do Município de Ocorrência do Fato Gerador (utilizar a tabela do IBGE)
+
+
+
+
+ Formato de impressão do DANFE (0-sem DANFE;1-DANFe Retrato; 2-DANFe Paisagem;3-DANFe Simplificado;
+ 4-DANFe NFC-e;5-DANFe NFC-e em mensagem eletrônica)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Forma de emissão da NF-e
+1 - Normal;
+2 - Contingência FS
+3 - Contingência SCAN
+4 - Contingência DPEC
+5 - Contingência FSDA
+6 - Contingência SVC - AN
+7 - Contingência SVC - RS
+9 - Contingência off-line NFC-e
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Digito Verificador da Chave de Acesso da NF-e
+
+
+
+
+
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Finalidade da emissão da NF-e:
+1 - NFe normal
+2 - NFe complementar
+3 - NFe de ajuste
+4 - Devolução/Retorno
+
+
+
+
+ Indica operação com consumidor final (0-Não;1-Consumidor Final)
+
+
+
+
+
+
+
+
+
+
+
+ Indicador de presença do comprador no estabelecimento comercial no momento da oepração
+ (0-Não se aplica (ex.: Nota Fiscal complementar ou de ajuste;1-Operação presencial;2-Não presencial, internet;3-Não presencial, teleatendimento;4-NFC-e entrega em domicílio;5-Operação presencial, fora do estabelecimento;9-Não presencial, outros)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Processo de emissão utilizado com a seguinte codificação:
+0 - emissão de NF-e com aplicativo do contribuinte;
+1 - emissão de NF-e avulsa pelo Fisco;
+2 - emissão de NF-e avulsa, pelo contribuinte com seu certificado digital, através do site
+do Fisco;
+3- emissão de NF-e pelo contribuinte com aplicativo fornecido pelo Fisco.
+
+
+
+
+ versão do aplicativo utilizado no processo de
+emissão
+
+
+
+
+
+
+
+
+
+
+ Informar apenas
+para tpEmis diferente de 1
+
+
+
+ Informar a data e hora de entrada em contingência contingência no formato (AAAA-MM-DDThh:mm:ssTZD) ex.: 2012-09-01T13:00:00-03:00.
+
+
+
+
+ Informar a Justificativa da entrada
+
+
+
+
+
+
+
+
+
+
+
+ Grupo de infromações da NF referenciada
+
+
+
+
+
+ Chave de acesso das NF-e referenciadas. Chave de acesso compostas por Código da UF (tabela do IBGE) + AAMM da emissão + CNPJ do Emitente + modelo, série e número da NF-e Referenciada + Código Numérico + DV.
+
+
+
+
+ Dados da NF modelo 1/1A referenciada ou NF modelo 2 referenciada
+
+
+
+
+
+ Código da UF do emitente do Documento Fiscal. Utilizar a Tabela do IBGE.
+
+
+
+
+ AAMM da emissão
+
+
+
+
+
+
+
+
+
+
+ CNPJ do emitente do documento fiscal referenciado
+
+
+
+
+ Código do modelo do Documento Fiscal. Utilizar 01 para NF modelo 1/1A e 02 para NF modelo 02
+
+
+
+
+
+
+
+
+
+
+
+ Série do Documento Fiscal, informar zero se inexistente
+
+
+
+
+ Número do Documento Fiscal
+
+
+
+
+
+
+
+ Grupo com as informações NF de produtor referenciada
+
+
+
+
+
+ Código da UF do emitente do Documento FiscalUtilizar a Tabela do IBGE (Anexo IV - Tabela de UF, Município e País)
+
+
+
+
+ AAMM da emissão da NF de produtor
+
+
+
+
+
+
+
+
+
+
+
+ CNPJ do emitente da NF de produtor
+
+
+
+
+ CPF do emitente da NF de produtor
+
+
+
+
+
+ IE do emitente da NF de Produtor
+
+
+
+
+ Código do modelo do Documento Fiscal - utilizar 04 para NF de produtor ou 01 para NF Avulsa
+
+
+
+
+
+
+
+
+
+
+
+ Série do Documento Fiscal, informar zero se inexistentesérie
+
+
+
+
+ Número do Documento Fiscal - 1 – 999999999
+
+
+
+
+
+
+
+ Utilizar esta TAG para referenciar um CT-e emitido anteriormente, vinculada a NF-e atual
+
+
+
+
+ Grupo do Cupom Fiscal vinculado à NF-e
+
+
+
+
+
+ Código do modelo do Documento Fiscal
+Preencher com "2B", quando se tratar de Cupom Fiscal emitido por máquina registradora (não ECF), com "2C", quando se tratar de Cupom Fiscal PDV, ou "2D", quando se tratar de Cupom Fiscal (emitido por ECF)
+
+
+
+
+
+
+
+
+
+
+
+
+ Informar o número de ordem seqüencial do ECF que emitiu o Cupom Fiscal vinculado à NF-e
+
+
+
+
+
+
+
+
+
+
+ Informar o Número do Contador de Ordem de Operação - COO vinculado à NF-e
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Identificação do emitente
+
+
+
+
+
+
+ Número do CNPJ do emitente
+
+
+
+
+ Número do CPF do emitente
+
+
+
+
+
+ Razão Social ou Nome do emitente
+
+
+
+
+
+
+
+
+
+
+ Nome fantasia
+
+
+
+
+
+
+
+
+
+
+ Endereço do emitente
+
+
+
+
+ Inscrição Estadual do Emitente
+
+
+
+
+ Inscricao Estadual do Substituto Tributário
+
+
+
+
+ Grupo de informações de interesse da Prefeitura
+
+
+
+ Inscrição Municipal
+
+
+
+
+
+
+
+
+
+
+ CNAE Fiscal
+
+
+
+
+
+
+
+
+
+
+
+ Código de Regime Tributário.
+Este campo será obrigatoriamente preenchido com:
+1 – Simples Nacional;
+2 – Simples Nacional – excesso de sublimite de receita bruta;
+3 – Regime Normal.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Emissão de avulsa, informar os dados do Fisco emitente
+
+
+
+
+
+ CNPJ do Órgão emissor
+
+
+
+
+ Órgão emitente
+
+
+
+
+
+
+
+
+
+
+ Matrícula do agente
+
+
+
+
+
+
+
+
+
+
+ Nome do agente
+
+
+
+
+
+
+
+
+
+
+ Telefone
+
+
+
+
+
+
+
+
+
+
+ Sigla da Unidade da Federação
+
+
+
+
+ Número do Documento de Arrecadação de Receita
+
+
+
+
+
+
+
+
+
+
+ Data de emissão do DAR (AAAA-MM-DD)
+
+
+
+
+ Valor Total constante no DAR
+
+
+
+
+ Repartição Fiscal emitente
+
+
+
+
+
+
+
+
+
+
+ Data de pagamento do DAR (AAAA-MM-DD)
+
+
+
+
+
+
+
+ Identificação do Destinatário
+
+
+
+
+
+
+ Número do CNPJ
+
+
+
+
+ Número do CPF
+
+
+
+
+ Identificador do destinatário, em caso de comprador estrangeiro
+
+
+
+
+
+
+
+
+
+
+
+ Razão Social ou nome do destinatário
+
+
+
+
+
+
+
+
+
+
+ Dados do endereço
+
+
+
+
+ Indicador da IE do destinatário:
+1 – Contribuinte ICMSpagamento à vista;
+2 – Contribuinte isento de inscrição;
+9 – Não Contribuinte
+
+
+
+
+
+
+
+
+
+
+
+
+ Inscrição Estadual (obrigatório nas operações com contribuintes do ICMS)
+
+
+
+
+ Inscrição na SUFRAMA (Obrigatório nas operações com as áreas com benefícios de incentivos fiscais sob controle da SUFRAMA) PL_005d - 11/08/09 - alterado para aceitar 8 ou 9 dígitos
+
+
+
+
+
+
+
+
+
+
+ Inscrição Municipal do tomador do serviço
+
+
+
+
+
+
+
+
+
+
+ Informar o e-mail do destinatário. O campo pode ser utilizado para informar o e-mail
+de recepção da NF-e indicada pelo destinatário
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Identificação do Local de Retirada (informar apenas quando for diferente do endereço do remetente)
+
+
+
+
+ Identificação do Local de Entrega (informar apenas quando for diferente do endereço do destinatário)
+
+
+
+
+ Pessoas autorizadas para o download do XML da NF-e
+
+
+
+
+
+ CNPJ Autorizado
+
+
+
+
+ CPF Autorizado
+
+
+
+
+
+
+
+ Dados dos detalhes da NF-e
+
+
+
+
+
+ Dados dos produtos e serviços da NF-e
+
+
+
+
+
+ Código do produto ou serviço. Preencher com CFOP caso se trate de itens não relacionados com mercadorias/produto e que o contribuinte não possua codificação própria
+Formato ”CFOP9999”.
+
+
+
+
+
+
+
+
+
+
+ GTIN (Global Trade Item Number) do produto, antigo código EAN ou código de barras
+
+
+
+
+
+
+
+
+
+
+ Descrição do produto ou serviço
+
+
+
+
+
+
+
+
+
+
+ Código NCM (8 posições), será permitida a informação do gênero (posição do capítulo do NCM) quando a operação não for de comércio exterior (importação/exportação) ou o produto não seja tributado pelo IPI. Em caso de item de serviço ou item que não tenham produto (Ex. transferência de crédito, crédito do ativo imobilizado, etc.), informar o código 00 (zeros) (v2.0)
+
+
+
+
+
+
+
+
+
+
+ Nomenclatura de Valor aduaneio e Estatístico
+
+
+
+
+
+
+
+
+
+
+
+ Codigo especificador da Substuicao Tributaria - CEST, que identifica a mercadoria sujeita aos regimes de substituicao tributária e de antecipação do recolhimento do imposto
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CNPJ do Fabricante da Mercadoria, obrigatório para produto em escala NÃO relevante.
+
+
+
+
+
+
+
+
+
+
+
+
+ Código EX TIPI (3 posições)
+
+
+
+
+
+
+
+
+
+
+ Cfop
+
+
+
+
+
+
+
+
+
+
+ Unidade comercial
+
+
+
+
+
+
+
+
+
+
+ Quantidade Comercial do produto, alterado para aceitar de 0 a 4 casas decimais e 11 inteiros.
+
+
+
+
+ Valor unitário de comercialização - alterado para aceitar 0 a 10 casas decimais e 11 inteiros
+
+
+
+
+ Valor bruto do produto ou serviço.
+
+
+
+
+ GTIN (Global Trade Item Number) da unidade tributável, antigo código EAN ou código de barras
+
+
+
+
+
+
+
+
+
+
+ Unidade Tributável
+
+
+
+
+
+
+
+
+
+
+ Quantidade Tributável - alterado para aceitar de 0 a 4 casas decimais e 11 inteiros
+
+
+
+
+ Valor unitário de tributação - - alterado para aceitar 0 a 10 casas decimais e 11 inteiros
+
+
+
+
+ Valor Total do Frete
+
+
+
+
+ Valor Total do Seguro
+
+
+
+
+ Valor do Desconto
+
+
+
+
+ Outras despesas acessórias
+
+
+
+
+ Este campo deverá ser preenchido com:
+ 0 – o valor do item (vProd) não compõe o valor total da NF-e (vProd)
+ 1 – o valor do item (vProd) compõe o valor total da NF-e (vProd)
+
+
+
+
+
+
+
+
+
+
+
+ Delcaração de Importação
+(NT 2011/004)
+
+
+
+
+
+ Numero do Documento de Importação DI/DSI/DA/DRI-E (DI/DSI/DA/DRI-E) (NT2011/004)
+
+
+
+
+
+
+
+
+
+
+ Data de registro da DI/DSI/DA (AAAA-MM-DD)
+
+
+
+
+ Local do desembaraço aduaneiro
+
+
+
+
+
+
+
+
+
+
+ UF onde ocorreu o desembaraço aduaneiro
+
+
+
+
+ Data do desembaraço aduaneiro (AAAA-MM-DD)
+
+
+
+
+ Via de transporte internacional informada na DI
+ 1-Maritima;2-Fluvial;3-Lacustre;4-Aerea;5-Postal;6-Ferroviaria;7-Rodoviaria;8-Conduto;9-Meios Proprios;10-Entrada/Saida Ficta.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor Adicional ao frete para renovação de marinha mercante
+
+
+
+
+ Forma de Importação quanto a intermediação
+ 1-por conta propria;2-por conta e ordem;3-encomenda
+
+
+
+
+
+
+
+
+
+
+
+
+ CNPJ do adquirente ou do encomendante
+
+
+
+
+ Sigla da UF do adquirente ou do encomendante
+
+
+
+
+ Código do exportador (usado nos sistemas internos de informação do emitente da NF-e)
+
+
+
+
+
+
+
+
+
+
+ Adições (NT 2011/004)
+
+
+
+
+
+ Número da Adição
+
+
+
+
+
+
+
+
+
+
+ Número seqüencial do item dentro da Adição
+
+
+
+
+
+
+
+
+
+
+ Código do fabricante estrangeiro (usado nos sistemas internos de informação do emitente da NF-e)
+
+
+
+
+
+
+
+
+
+
+ Valor do desconto do item da DI – adição
+
+
+
+
+ Número do ato concessório de Drawback
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Detalhe da exportação
+
+
+
+
+
+ Número do ato concessório de Drawback
+
+
+
+
+
+
+
+
+
+
+ Exportação indireta
+
+
+
+
+
+ Registro de exportação
+
+
+
+
+
+
+
+
+
+
+ Chave de acesso da NF-e recebida para exportação
+
+
+
+
+ Quantidade do item efetivamente exportado
+
+
+
+
+
+
+
+
+
+
+ pedido de compra - Informação de interesse do emissor para controle do B2B.
+
+
+
+
+
+
+
+
+
+
+ Número do Item do Pedido de Compra - Identificação do número do item do pedido de Compra
+
+
+
+
+
+
+
+
+
+
+ Número de controle da FCI - Ficha de Conteúdo de Importação.
+
+
+
+
+
+
+
+ Número do lote do produto.
+
+
+
+
+
+
+
+
+
+
+ Quantidade de produto no lote.
+
+
+
+
+ Data de fabricação/produção. Formato "AAAA-MM-DD".
+
+
+
+
+ Data de validade. Informar o último dia do mês caso a validade não especifique o dia. Formato "AAAA-MM-DD".
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Informações específicas de produtos e serviços
+
+
+
+ Veículos novos
+
+
+
+
+
+ Tipo da Operação (1 - Venda concessionária; 2 - Faturamento direto; 3 - Venda direta; 0 - Outros)
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Chassi do veículo - VIN (código-identificação-veículo)
+
+
+
+
+
+
+
+
+
+
+
+ Cor do veículo (código de cada montadora)
+
+
+
+
+
+
+
+
+
+
+ Descrição da cor
+
+
+
+
+
+
+
+
+
+
+ Potência máxima do motor do veículo em cavalo vapor (CV). (potência-veículo)
+
+
+
+
+
+
+
+
+
+
+ Capacidade voluntária do motor expressa em centímetros cúbicos (CC). (cilindradas)
+
+
+
+
+
+
+
+
+
+
+ Peso líquido
+
+
+
+
+
+
+
+
+
+
+ Peso bruto
+
+
+
+
+
+
+
+
+
+
+ Serial (série)
+
+
+
+
+
+
+
+
+
+
+ Tipo de combustível-Tabela RENAVAM: 01-Álcool; 02-Gasolina; 03-Diesel; 16-Álcool/Gas.; 17-Gas./Álcool/GNV; 18-Gasolina/Elétrico
+
+
+
+
+
+
+
+
+
+
+ Número do motor
+
+
+
+
+
+
+
+
+
+
+ CMT-Capacidade Máxima de Tração - em Toneladas 4 casas decimais
+
+
+
+
+
+
+
+
+
+
+ Distância entre eixos
+
+
+
+
+
+
+
+
+
+
+ Ano Modelo de Fabricação
+
+
+
+
+
+
+
+
+
+
+ Ano de Fabricação
+
+
+
+
+
+
+
+
+
+
+ Tipo de pintura
+
+
+
+
+
+
+
+
+
+ Tipo de veículo (utilizar tabela RENAVAM)
+
+
+
+
+
+
+
+
+
+
+ Espécie de veículo (utilizar tabela RENAVAM)
+
+
+
+
+
+
+
+
+
+
+ Informa-se o veículo tem VIN (chassi) remarcado.
+R-Remarcado
+N-NormalVIN
+
+
+
+
+
+
+
+
+
+
+
+ Condição do veículo (1 - acabado; 2 - inacabado; 3 - semi-acabado)
+
+
+
+
+
+
+
+
+
+
+
+
+ Código Marca Modelo (utilizar tabela RENAVAM)
+
+
+
+
+
+
+
+
+
+
+ Código da Cor Segundo as regras de pré-cadastro do DENATRAN: 01-AMARELO;02-AZUL;03-BEGE;04-BRANCA;05-CINZA;06-DOURADA;07-GRENA
+08-LARANJA;09-MARROM;10-PRATA;11-PRETA;12-ROSA;13-ROXA;14-VERDE;15-VERMELHA;16-FANTASIA
+
+
+
+
+
+
+
+
+
+
+
+
+ Quantidade máxima de permitida de passageiros sentados, inclusive motorista.
+
+
+
+
+
+
+
+
+
+
+
+
+ Restrição
+0 - Não há;
+1 - Alienação Fiduciária;
+2 - Arrendamento Mercantil;
+3 - Reserva de Domínio;
+4 - Penhor de Veículos;
+9 - outras.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ grupo do detalhamento de Medicamentos e de matérias-primas farmacêuticas
+
+
+
+
+
+ Código de Produto da ANVISA. Utilizar o número do registro do produto da Câmara de Regulação do Mercado de Medicamento – CMED.
+
+
+
+
+
+
+
+
+
+ Preço Máximo ao Consumidor.
+
+
+
+
+
+
+
+ Armamentos
+
+
+
+
+
+ Indicador do tipo de arma de fogo (0 - Uso permitido; 1 - Uso restrito)
+
+
+
+
+
+
+
+
+
+
+
+ Número de série da arma
+
+
+
+
+
+
+
+
+
+
+ Número de série do cano
+
+
+
+
+
+
+
+
+
+
+ Descrição completa da arma, compreendendo: calibre, marca, capacidade, tipo de funcionamento, comprimento e demais elementos que permitam a sua perfeita identificação.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Informar apenas para operações com combustíveis líquidos
+
+
+
+
+
+ Código de produto da ANP. codificação de produtos do SIMP (http://www.anp.gov.br)
+
+
+
+
+
+
+
+
+
+
+ Descrição do Produto conforme ANP. Utilizar a descrição de produtos do Sistema de Informações de Movimentação de Produtos - SIMP (http://www.anp.gov.br/simp/).
+
+
+
+
+
+
+
+
+
+
+ Percentual do GLP derivado do petróleo no produto GLP (cProdANP=210203001). Informar em número decimal o percentual do GLP derivado de petróleo no produto GLP. Valores 0 a 100.
+
+
+
+
+ Percentual de gás natural nacional - GLGNn para o produto GLP (cProdANP=210203001). Informar em número decimal o percentual do Gás Natural Nacional - GLGNn para o produto GLP. Valores de 0 a 100.
+
+
+
+
+ Percentual de gás natural importado GLGNi para o produto GLP (cProdANP=210203001). Informar em número deciaml o percentual do Gás Natural Importado - GLGNi para o produto GLP. Valores de 0 a 100.
+
+
+
+
+ Valor de partida (cProdANP=210203001). Deve ser informado neste campo o valor por quilograma sem ICMS.
+
+
+
+
+ Código de autorização / registro do CODIF. Informar apenas quando a UF utilizar o CODIF (Sistema de Controle do Diferimento do Imposto nas Operações com AEAC - Álcool Etílico Anidro Combustível).
+
+
+
+
+
+
+
+
+
+
+ Quantidade de combustível
+faturada à temperatura ambiente.
+Informar quando a quantidade
+faturada informada no campo
+qCom (I10) tiver sido ajustada para
+uma temperatura diferente da
+ambiente.
+
+
+
+
+ Sigla da UF de Consumo
+
+
+
+
+ CIDE Combustíveis
+
+
+
+
+
+ BC do CIDE ( Quantidade comercializada)
+
+
+
+
+ Alíquota do CIDE (em reais)
+
+
+
+
+ Valor do CIDE
+
+
+
+
+
+
+
+ Informações do grupo de "encerrante"
+
+
+
+
+
+ Numero de identificação do Bico utilizado no abastecimento
+
+
+
+
+
+
+
+
+
+
+ Numero de identificação da bomba ao qual o bico está interligado
+
+
+
+
+
+
+
+
+
+
+ Numero de identificação do tanque ao qual o bico está interligado
+
+
+
+
+
+
+
+
+
+
+ Valor do Encerrante no ínicio do abastecimento
+
+
+
+
+ Valor do Encerrante no final do abastecimento
+
+
+
+
+
+
+
+
+
+
+ Número do RECOPI
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tributos incidentes nos produtos ou serviços da NF-e
+
+
+
+
+
+ Valor estimado total de impostos federais, estaduais e municipais
+
+
+
+
+
+
+ Dados do ICMS Normal e ST
+
+
+
+
+
+ Tributação pelo ICMS
+00 - Tributada integralmente
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+ Tributção pelo ICMS
+00 - Tributada integralmente
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS:
+0 - Margem Valor Agregado (%);
+1 - Pauta (valor);
+2 - Preço Tabelado Máximo (valor);
+3 - Valor da Operação.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do ICMS
+
+
+
+
+ Alíquota do ICMS
+
+
+
+
+ Valor do ICMS
+
+
+
+
+
+ Percentual de ICMS relativo ao Fundo de Combate à Pobreza (FCP).
+
+
+
+
+ Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP).
+
+
+
+
+
+
+
+
+ Tributação pelo ICMS
+10 - Tributada e com cobrança do ICMS por substituição tributária
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+ 10 - Tributada e com cobrança do ICMS por substituição tributária
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS:
+0 - Margem Valor Agregado (%);
+1 - Pauta (valor);
+2 - Preço Tabelado Máximo (valor);
+3 - Valor da Operação.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do ICMS
+
+
+
+
+ Alíquota do ICMS
+
+
+
+
+ Valor do ICMS
+
+
+
+
+
+ Valor da Base de cálculo do FCP.
+
+
+
+
+ Percentual de ICMS relativo ao Fundo de Combate à Pobreza (FCP).
+
+
+
+
+ Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP).
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS ST:
+0 – Preço tabelado ou máximo sugerido;
+1 - Lista Negativa (valor);
+2 - Lista Positiva (valor);
+3 - Lista Neutra (valor);
+4 - Margem Valor Agregado (%);
+5 - Pauta (valor);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual da Margem de Valor Adicionado ICMS ST
+
+
+
+
+ Percentual de redução da BC ICMS ST
+
+
+
+
+ Valor da BC do ICMS ST
+
+
+
+
+ Alíquota do ICMS ST
+
+
+
+
+ Valor do ICMS ST
+
+
+
+
+
+ Valor da Base de cálculo do FCP retido por substituicao tributaria.
+
+
+
+
+ Percentual de FCP retido por substituição tributária.
+
+
+
+
+ Valor do FCP retido por substituição tributária.
+
+
+
+
+
+
+
+
+ Tributção pelo ICMS
+20 - Com redução de base de cálculo
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+ Tributção pelo ICMS
+20 - Com redução de base de cálculo
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS:
+0 - Margem Valor Agregado (%);
+1 - Pauta (valor);
+2 - Preço Tabelado Máximo (valor);
+3 - Valor da Operação.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual de redução da BC
+
+
+
+
+ Valor da BC do ICMS
+
+
+
+
+ Alíquota do ICMS
+
+
+
+
+ Valor do ICMS
+
+
+
+
+
+ Valor da Base de cálculo do FCP.
+
+
+
+
+ Percentual de ICMS relativo ao Fundo de Combate à Pobreza (FCP).
+
+
+
+
+ Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP).
+
+
+
+
+
+ Grupo desoneração
+
+
+
+ Valor do ICMS de desoneração
+
+
+
+
+ Motivo da desoneração do ICMS:3-Uso na agropecuária;9-Outros;12-Fomento agropecuário
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tributação pelo ICMS
+30 - Isenta ou não tributada e com cobrança do ICMS por substituição tributária
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+ Tributção pelo ICMS
+30 - Isenta ou não tributada e com cobrança do ICMS por substituição tributária
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS ST:
+0 – Preço tabelado ou máximo sugerido;
+1 - Lista Negativa (valor);
+2 - Lista Positiva (valor);
+3 - Lista Neutra (valor);
+4 - Margem Valor Agregado (%);
+5 - Pauta (valor).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual da Margem de Valor Adicionado ICMS ST
+
+
+
+
+ Percentual de redução da BC ICMS ST
+
+
+
+
+ Valor da BC do ICMS ST
+
+
+
+
+ Alíquota do ICMS ST
+
+
+
+
+ Valor do ICMS ST
+
+
+
+
+
+ Valor da Base de cálculo do FCP.
+
+
+
+
+ Percentual de FCP retido por substituição tributária.
+
+
+
+
+ Valor do FCP retido por substituição tributária.
+
+
+
+
+
+ Grupo desoneração
+
+
+
+ Valor do ICMS de desoneração
+
+
+
+
+ Motivo da desoneração do ICMS:6-Utilitários Motocicleta AÁrea Livre;7-SUFRAMA;9-Outros
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tributação pelo ICMS
+40 - Isenta
+41 - Não tributada
+50 - Suspensão
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+ Tributação pelo ICMS
+40 - Isenta
+41 - Não tributada
+50 - Suspensão
+51 - Diferimento
+
+
+
+
+
+
+
+
+
+
+
+
+
+ O valor do ICMS será informado apenas nas operações com veículos beneficiados com a desoneração condicional do ICMS.
+
+
+
+
+ Este campo será preenchido quando o campo anterior estiver preenchido.
+Informar o motivo da desoneração:
+1 – Táxi;
+3 – Produtor Agropecuário;
+4 – Frotista/Locadora;
+5 – Diplomático/Consular;
+6 – Utilitários e Motocicletas da Amazônia Ocidental e Áreas de Livre Comércio (Resolução 714/88 e 790/94 – CONTRAN e suas alterações);
+7 – SUFRAMA;
+8 - Venda a órgão Público;
+9 – Outros
+10- Deficiente Condutor
+11- Deficiente não condutor
+16 - Olimpíadas Rio 2016
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tributção pelo ICMS
+51 - Diferimento
+A exigência do preenchimento das informações do ICMS diferido fica à critério de cada UF.
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+ Tributção pelo ICMS
+20 - Com redução de base de cálculo
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS:
+0 - Margem Valor Agregado (%);
+1 - Pauta (valor);
+2 - Preço Tabelado Máximo (valor);
+3 - Valor da Operação.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual de redução da BC
+
+
+
+
+ Valor da BC do ICMS
+
+
+
+
+ Alíquota do imposto
+
+
+
+
+ Valor do ICMS da Operação
+
+
+
+
+ Percentual do diferemento
+
+
+
+
+ Valor do ICMS da diferido
+
+
+
+
+ Valor do ICMS
+
+
+
+
+
+ Valor da Base de cálculo do FCP.
+
+
+
+
+ Percentual de ICMS relativo ao Fundo de Combate à Pobreza (FCP).
+
+
+
+
+ Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP).
+
+
+
+
+
+
+
+
+ Tributação pelo ICMS
+60 - ICMS cobrado anteriormente por substituição tributária
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+ Tributação pelo ICMS
+60 - ICMS cobrado anteriormente por substituição tributária
+
+
+
+
+
+
+
+
+
+
+ NT2010/004
+
+
+
+ Valor da BC do ICMS ST retido anteriormente
+
+
+
+
+ Aliquota suportada pelo consumidor final.
+
+
+
+
+ Valor do ICMS ST retido anteriormente
+
+
+
+
+
+
+ Valor da Base de cálculo do FCP retido anteriormente por ST.
+
+
+
+
+ Percentual de FCP retido anteriormente por substituição tributária.
+
+
+
+
+ Valor do FCP retido por substituição tributária.
+
+
+
+
+
+
+
+
+ Tributação pelo ICMS
+70 - Com redução de base de cálculo e cobrança do ICMS por substituição tributária
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+ Tributção pelo ICMS
+70 - Com redução de base de cálculo e cobrança do ICMS por substituição tributária
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS:
+0 - Margem Valor Agregado (%);
+1 - Pauta (valor);
+2 - Preço Tabelado Máximo (valor);
+3 - Valor da Operação.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual de redução da BC
+
+
+
+
+ Valor da BC do ICMS
+
+
+
+
+ Alíquota do ICMS
+
+
+
+
+ Valor do ICMS
+
+
+
+
+
+ Valor da Base de cálculo do FCP.
+
+
+
+
+ Percentual de ICMS relativo ao Fundo de Combate à Pobreza (FCP).
+
+
+
+
+ Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP).
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS ST:
+0 – Preço tabelado ou máximo sugerido;
+1 - Lista Negativa (valor);
+2 - Lista Positiva (valor);
+3 - Lista Neutra (valor);
+4 - Margem Valor Agregado (%);
+5 - Pauta (valor).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual da Margem de Valor Adicionado ICMS ST
+
+
+
+
+ Percentual de redução da BC ICMS ST
+
+
+
+
+ Valor da BC do ICMS ST
+
+
+
+
+ Alíquota do ICMS ST
+
+
+
+
+ Valor do ICMS ST
+
+
+
+
+
+ Valor da Base de cálculo do FCP retido por substituição tributária.
+
+
+
+
+ Percentual de FCP retido por substituição tributária.
+
+
+
+
+ Valor do FCP retido por substituição tributária.
+
+
+
+
+
+ Grupo desoneração
+
+
+
+ Valor do ICMS de desoneração
+
+
+
+
+ Motivo da desoneração do ICMS:3-Uso na agropecuária;9-Outros;12-Fomento agropecuário
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tributação pelo ICMS
+90 - Outras
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+ Tributção pelo ICMS
+90 - Outras
+
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS:
+0 - Margem Valor Agregado (%);
+1 - Pauta (valor);
+2 - Preço Tabelado Máximo (valor);
+3 - Valor da Operação.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do ICMS
+
+
+
+
+ Percentual de redução da BC
+
+
+
+
+ Alíquota do ICMS
+
+
+
+
+ Valor do ICMS
+
+
+
+
+
+ Valor da Base de cálculo do FCP.
+
+
+
+
+ Percentual de ICMS relativo ao Fundo de Combate à Pobreza (FCP).
+
+
+
+
+ Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP).
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS ST:
+0 – Preço tabelado ou máximo sugerido;
+1 - Lista Negativa (valor);
+2 - Lista Positiva (valor);
+3 - Lista Neutra (valor);
+4 - Margem Valor Agregado (%);
+5 - Pauta (valor).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual da Margem de Valor Adicionado ICMS ST
+
+
+
+
+ Percentual de redução da BC ICMS ST
+
+
+
+
+ Valor da BC do ICMS ST
+
+
+
+
+ Alíquota do ICMS ST
+
+
+
+
+ Valor do ICMS ST
+
+
+
+
+
+ Valor da Base de cálculo do FCP.
+
+
+
+
+ Percentual de FCP retido por substituição tributária.
+
+
+
+
+ Valor do FCP retido por substituição tributária.
+
+
+
+
+
+
+ Grupo desoneração
+
+
+
+ Valor do ICMS de desoneração
+
+
+
+
+ Motivo da desoneração do ICMS:3-Uso na agropecuária;9-Outros;12-Fomento agropecuário
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Partilha do ICMS entre a UF de origem e UF de destino ou a UF definida na legislação
+Operação interestadual para consumidor final com partilha do ICMS devido na operação entre a UF de origem e a UF do destinatário ou ou a UF definida na legislação. (Ex. UF da concessionária de entrega do veículos)
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+ Tributação pelo ICMS
+10 - Tributada e com cobrança do ICMS por substituição tributária;
+90 – Outros.
+
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS:
+0 - Margem Valor Agregado (%);
+1 - Pauta (valor);
+2 - Preço Tabelado Máximo (valor);
+3 - Valor da Operação.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do ICMS
+
+
+
+
+ Percentual de redução da BC
+
+
+
+
+ Alíquota do ICMS
+
+
+
+
+ Valor do ICMS
+
+
+
+
+ Modalidade de determinação da BC do ICMS ST:
+0 – Preço tabelado ou máximo sugerido;
+1 - Lista Negativa (valor);
+2 - Lista Positiva (valor);
+3 - Lista Neutra (valor);
+4 - Margem Valor Agregado (%);
+5 - Pauta (valor).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual da Margem de Valor Adicionado ICMS ST
+
+
+
+
+ Percentual de redução da BC ICMS ST
+
+
+
+
+ Valor da BC do ICMS ST
+
+
+
+
+ Alíquota do ICMS ST
+
+
+
+
+ Valor do ICMS ST
+
+
+
+
+ Percentual para determinação do valor da Base de Cálculo da operação própria.
+
+
+
+
+ Sigla da UF para qual é devido o ICMS ST da operação.
+
+
+
+
+
+
+
+ Grupo de informação do ICMSST devido para a UF de destino, nas operações interestaduais de produtos que tiveram retenção antecipada de ICMS por ST na UF do remetente. Repasse via Substituto Tributário.
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+ Tributção pelo ICMS
+41-Não Tributado.
+60-Cobrado anteriormente por substituição tributária.
+
+
+
+
+
+
+
+
+
+
+
+ Informar o valor da BC do ICMS ST retido na UF remetente
+
+
+
+
+ Informar o valor do ICMS ST retido na UF remetente (iv2.0))
+
+
+
+
+ Informar o valor da BC do ICMS ST da UF destino
+
+
+
+
+ Informar o valor da BC do ICMS ST da UF destino (v2.0)
+
+
+
+
+
+
+
+ Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=101 (v.2.0)
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+(v2.0)
+
+
+
+
+ 101- Tributada pelo Simples Nacional com permissão de crédito. (v.2.0)
+
+
+
+
+
+
+
+
+
+
+ Alíquota aplicável de cálculo do crédito (Simples Nacional). (v2.0)
+
+
+
+
+ Valor crédito do ICMS que pode ser aproveitado nos termos do art. 23 da LC 123 (Simples Nacional) (v2.0)
+
+
+
+
+
+
+
+ Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=102, 103, 300 ou 400 (v.2.0))
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+(v2.0)
+
+
+
+
+ 102- Tributada pelo Simples Nacional sem permissão de crédito.
+103 – Isenção do ICMS no Simples Nacional para faixa de receita bruta.
+300 – Imune.
+400 – Não tributda pelo Simples Nacional (v.2.0) (v.2.0)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=201 (v.2.0)
+
+
+
+
+
+ Origem da mercadoria:
+0 – Nacional;
+1 – Estrangeira – Importação direta;
+2 – Estrangeira – Adquirida no mercado interno. (v2.0)
+
+
+
+
+ 201- Tributada pelo Simples Nacional com permissão de crédito e com cobrança do ICMS por Substituição Tributária (v.2.0)
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS ST:
+0 – Preço tabelado ou máximo sugerido;
+1 - Lista Negativa (valor);
+2 - Lista Positiva (valor);
+3 - Lista Neutra (valor);
+4 - Margem Valor Agregado (%);
+5 - Pauta (valor). (v2.0)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual da Margem de Valor Adicionado ICMS ST (v2.0)
+
+
+
+
+ Percentual de redução da BC ICMS ST (v2.0)
+
+
+
+
+ Valor da BC do ICMS ST (v2.0)
+
+
+
+
+ Alíquota do ICMS ST (v2.0)
+
+
+
+
+ Valor do ICMS ST (v2.0)
+
+
+
+
+
+ Valor da Base de cálculo do FCP.
+
+
+
+
+ Percentual de FCP retido por substituição tributária.
+
+
+
+
+ Valor do FCP retido por substituição tributária.
+
+
+
+
+
+ Alíquota aplicável de cálculo do crédito (Simples Nacional). (v2.0)
+
+
+
+
+ Valor crédito do ICMS que pode ser aproveitado nos termos do art. 23 da LC 123 (Simples Nacional) (v2.0)
+
+
+
+
+
+
+
+ Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=202 ou 203 (v.2.0)
+
+
+
+
+
+ Origem da mercadoria:
+0 – Nacional;
+1 – Estrangeira – Importação direta;
+2 – Estrangeira – Adquirida no mercado interno. (v2.0)
+
+
+
+
+ 202- Tributada pelo Simples Nacional sem permissão de crédito e com cobrança do ICMS por Substituição Tributária;
+203- Isenção do ICMS nos Simples Nacional para faixa de receita bruta e com cobrança do ICMS por Substituição Tributária (v.2.0)
+
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS ST:
+0 – Preço tabelado ou máximo sugerido;
+1 - Lista Negativa (valor);
+2 - Lista Positiva (valor);
+3 - Lista Neutra (valor);
+4 - Margem Valor Agregado (%);
+5 - Pauta (valor). (v2.0)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual da Margem de Valor Adicionado ICMS ST (v2.0)
+
+
+
+
+ Percentual de redução da BC ICMS ST (v2.0)
+
+
+
+
+ Valor da BC do ICMS ST (v2.0)
+
+
+
+
+ Alíquota do ICMS ST (v2.0)
+
+
+
+
+ Valor do ICMS ST (v2.0)
+
+
+
+
+
+ Valor da Base de cálculo do FCP.
+
+
+
+
+ Percentual de FCP retido por substituição tributária.
+
+
+
+
+ Valor do FCP retido por substituição tributária.
+
+
+
+
+
+
+
+
+ Tributação do ICMS pelo SIMPLES NACIONAL,CRT=1 – Simples Nacional e CSOSN=500 (v.2.0)
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+ 500 – ICMS cobrado anterirmente por substituição tributária (substituído) ou por antecipação
+(v.2.0)
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do ICMS ST retido anteriormente (v2.0)
+
+
+
+
+ Aliquota suportada pelo consumidor final.
+
+
+
+
+ Valor do ICMS ST retido anteriormente (v2.0)
+
+
+
+
+
+
+ Valor da Base de cálculo do FCP retido anteriormente.
+
+
+
+
+ Percentual de FCP retido anteriormente por substituição tributária.
+
+
+
+
+ Valor do FCP retido por substituição tributária.
+
+
+
+
+
+
+
+
+ Tributação do ICMS pelo SIMPLES NACIONAL, CRT=1 – Simples Nacional e CSOSN=900 (v2.0)
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+ Tributação pelo ICMS 900 - Outros(v2.0)
+
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS:
+0 - Margem Valor Agregado (%);
+1 - Pauta (valor);
+2 - Preço Tabelado Máximo (valor);
+3 - Valor da Operação.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do ICMS
+
+
+
+
+ Percentual de redução da BC
+
+
+
+
+ Alíquota do ICMS
+
+
+
+
+ Valor do ICMS
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS ST:
+0 – Preço tabelado ou máximo sugerido;
+1 - Lista Negativa (valor);
+2 - Lista Positiva (valor);
+3 - Lista Neutra (valor);
+4 - Margem Valor Agregado (%);
+5 - Pauta (valor).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual da Margem de Valor Adicionado ICMS ST
+
+
+
+
+ Percentual de redução da BC ICMS ST
+
+
+
+
+ Valor da BC do ICMS ST
+
+
+
+
+ Alíquota do ICMS ST
+
+
+
+
+ Valor do ICMS ST
+
+
+
+
+
+ Valor da Base de cálculo do FCP.
+
+
+
+
+ Percentual de FCP retido por substituição tributária.
+
+
+
+
+ Valor do FCP retido por substituição tributária.
+
+
+
+
+
+
+
+ Alíquota aplicável de cálculo do crédito (Simples Nacional). (v2.0)
+
+
+
+
+ Valor crédito do ICMS que pode ser aproveitado nos termos do art. 23 da LC 123 (Simples Nacional) (v2.0)
+
+
+
+
+
+
+
+
+
+
+
+
+ Dados do Imposto de Importação
+
+
+
+
+
+ Base da BC do Imposto de Importação
+
+
+
+
+ Valor das despesas aduaneiras
+
+
+
+
+ Valor do Imposto de Importação
+
+
+
+
+ Valor do Imposto sobre Operações Financeiras
+
+
+
+
+
+
+
+
+
+
+ ISSQN
+
+
+
+
+
+ Valor da BC do ISSQN
+
+
+
+
+ Alíquota do ISSQN
+
+
+
+
+ Valor da do ISSQN
+
+
+
+
+ Informar o município de ocorrência do fato gerador do ISSQN. Utilizar a Tabela do IBGE (Anexo VII - Tabela de UF, Município e País). “Atenção, não vincular com os campos B12, C10 ou E10” v2.0
+
+
+
+
+ Informar o Item da lista de serviços da LC 116/03 em que se classifica o serviço.
+
+
+
+
+ Valor dedução para redução da base de cálculo
+
+
+
+
+ Valor outras retenções
+
+
+
+
+ Valor desconto incondicionado
+
+
+
+
+ Valor desconto condicionado
+
+
+
+
+ Valor Retenção ISS
+
+
+
+
+ Exibilidade do ISS:1-Exigível;2-Não incidente;3-Isenção;4-Exportação;5-Imunidade;6-Exig.Susp. Judicial;7-Exig.Susp. ADM
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Código do serviço prestado dentro do município
+
+
+
+
+
+
+
+
+
+
+
+ Código do Município de Incidência do Imposto
+
+
+
+
+ Código de Pais
+
+
+
+
+
+
+
+
+
+
+ Número do Processo administrativo ou judicial de suspenção do processo
+
+
+
+
+
+
+
+
+
+
+
+ Indicador de Incentivo Fiscal. 1=Sim; 2=Não
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Dados do PIS
+
+
+
+
+
+ Código de Situação Tributária do PIS.
+ 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo);
+02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada);
+
+
+
+
+
+ Código de Situação Tributária do PIS.
+ 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo);
+02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada);
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do PIS
+
+
+
+
+ Alíquota do PIS (em percentual)
+
+
+
+
+ Valor do PIS
+
+
+
+
+
+
+
+ Código de Situação Tributária do PIS.
+03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto;
+
+
+
+
+
+ Código de Situação Tributária do PIS.
+03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto;
+
+
+
+
+
+
+
+
+
+
+ Quantidade Vendida (NT2011/004)
+
+
+
+
+ Alíquota do PIS (em reais) (NT2011/004)
+
+
+
+
+ Valor do PIS
+
+
+
+
+
+
+
+ Código de Situação Tributária do PIS.
+04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero);
+06 - Operação Tributável - Alíquota Zero;
+07 - Operação Isenta da contribuição;
+08 - Operação Sem Incidência da contribuição;
+09 - Operação com suspensão da contribuição;
+
+
+
+
+
+ Código de Situação Tributária do PIS.
+04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero);
+05 - Operação Tributável (ST);
+06 - Operação Tributável - Alíquota Zero;
+07 - Operação Isenta da contribuição;
+08 - Operação Sem Incidência da contribuição;
+09 - Operação com suspensão da contribuição;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Código de Situação Tributária do PIS.
+99 - Outras Operações.
+
+
+
+
+
+ Código de Situação Tributária do PIS.
+99 - Outras Operações.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do PIS
+
+
+
+
+ Alíquota do PIS (em percentual)
+
+
+
+
+
+
+ Quantidade Vendida (NT2011/004)
+
+
+
+
+ Alíquota do PIS (em reais) (NT2011/004)
+
+
+
+
+
+
+ Valor do PIS
+
+
+
+
+
+
+
+
+
+
+ Dados do PIS Substituição Tributária
+
+
+
+
+
+
+
+ Valor da BC do PIS ST
+
+
+
+
+ Alíquota do PIS ST (em percentual)
+
+
+
+
+
+
+ Quantidade Vendida
+
+
+
+
+ Alíquota do PIS ST (em reais)
+
+
+
+
+
+
+ Valor do PIS ST
+
+
+
+
+
+
+
+ Dados do COFINS
+
+
+
+
+
+ Código de Situação Tributária do COFINS.
+ 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo);
+02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada);
+
+
+
+
+
+ Código de Situação Tributária do COFINS.
+ 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo);
+02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada);
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do COFINS
+
+
+
+
+ Alíquota do COFINS (em percentual)
+
+
+
+
+ Valor do COFINS
+
+
+
+
+
+
+
+ Código de Situação Tributária do COFINS.
+03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto;
+
+
+
+
+
+ Código de Situação Tributária do COFINS.
+03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto;
+
+
+
+
+
+
+
+
+
+ Quantidade Vendida (NT2011/004)
+
+
+
+
+ Alíquota do COFINS (em reais) (NT2011/004)
+
+
+
+
+ Valor do COFINS
+
+
+
+
+
+
+
+ Código de Situação Tributária do COFINS:
+04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero);
+06 - Operação Tributável - Alíquota Zero;
+07 - Operação Isenta da contribuição;
+08 - Operação Sem Incidência da contribuição;
+09 - Operação com suspensão da contribuição;
+
+
+
+
+
+ Código de Situação Tributária do COFINS:
+04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero);
+05 - Operação Tributável (ST);
+06 - Operação Tributável - Alíquota Zero;
+07 - Operação Isenta da contribuição;
+08 - Operação Sem Incidência da contribuição;
+09 - Operação com suspensão da contribuição;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Código de Situação Tributária do COFINS:
+49 - Outras Operações de Saída
+50 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita Tributada no Mercado Interno
+51 - Operação com Direito a Crédito – Vinculada Exclusivamente a Receita Não Tributada no Mercado Interno
+52 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita de Exportação
+53 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno
+54 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas no Mercado Interno e de Exportação
+55 - Operação com Direito a Crédito - Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação
+56 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação
+60 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Tributada no Mercado Interno
+61 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Não-Tributada no Mercado Interno
+62 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita de Exportação
+63 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno
+64 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas no Mercado Interno e de Exportação
+65 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação
+66 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação
+67 - Crédito Presumido - Outras Operações
+70 - Operação de Aquisição sem Direito a Crédito
+71 - Operação de Aquisição com Isenção
+72 - Operação de Aquisição com Suspensão
+73 - Operação de Aquisição a Alíquota Zero
+74 - Operação de Aquisição sem Incidência da Contribuição
+75 - Operação de Aquisição por Substituição Tributária
+98 - Outras Operações de Entrada
+99 - Outras Operações.
+
+
+
+
+
+ Código de Situação Tributária do COFINS:
+49 - Outras Operações de Saída
+50 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita Tributada no Mercado Interno
+51 - Operação com Direito a Crédito – Vinculada Exclusivamente a Receita Não Tributada no Mercado Interno
+52 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita de Exportação
+53 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno
+54 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas no Mercado Interno e de Exportação
+55 - Operação com Direito a Crédito - Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação
+56 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação
+60 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Tributada no Mercado Interno
+61 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Não-Tributada no Mercado Interno
+62 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita de Exportação
+63 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno
+64 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas no Mercado Interno e de Exportação
+65 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação
+66 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação
+67 - Crédito Presumido - Outras Operações
+70 - Operação de Aquisição sem Direito a Crédito
+71 - Operação de Aquisição com Isenção
+72 - Operação de Aquisição com Suspensão
+73 - Operação de Aquisição a Alíquota Zero
+74 - Operação de Aquisição sem Incidência da Contribuição
+75 - Operação de Aquisição por Substituição Tributária
+98 - Outras Operações de Entrada
+99 - Outras Operações.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do COFINS
+
+
+
+
+ Alíquota do COFINS (em percentual)
+
+
+
+
+
+
+ Quantidade Vendida (NT2011/004)
+
+
+
+
+ Alíquota do COFINS (em reais) (NT2011/004)
+
+
+
+
+
+
+ Valor do COFINS
+
+
+
+
+
+
+
+
+
+
+ Dados do COFINS da
+Substituição Tributaria;
+
+
+
+
+
+
+
+ Valor da BC do COFINS ST
+
+
+
+
+ Alíquota do COFINS ST(em percentual)
+
+
+
+
+
+
+ Quantidade Vendida
+
+
+
+
+ Alíquota do COFINS ST(em reais)
+
+
+
+
+
+
+ Valor do COFINS ST
+
+
+
+
+
+
+
+ Grupo a ser informado nas vendas interestarduais para consumidor final, não contribuinte de ICMS
+
+
+
+
+
+ Valor da Base de Cálculo do ICMS na UF do destinatário.
+
+
+
+
+ Valor da Base de Cálculo do FCP na UF do destinatário.
+
+
+
+
+ Percentual adicional inserido na alíquota interna da UF de destino, relativo ao Fundo de Combate à Pobreza (FCP) naquela UF.
+
+
+
+
+ Alíquota adotada nas operações internas na UF do destinatário para o produto / mercadoria.
+
+
+
+
+ Alíquota interestadual das UF envolvidas: - 4% alíquota interestadual para produtos importados; - 7% para os Estados de origem do Sul e Sudeste (exceto ES), destinado para os Estados do Norte e Nordeste ou ES; - 12% para os demais casos.
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual de partilha para a UF do destinatário: - 40% em 2016; - 60% em 2017; - 80% em 2018; - 100% a partir de 2019.
+
+
+
+
+ Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP) da UF de destino.
+
+
+
+
+ Valor do ICMS de partilha para a UF do destinatário.
+
+
+
+
+ Valor do ICMS de partilha para a UF do remetente. Nota: A partir de 2019, este valor será zero.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual de mercadoria devolvida
+
+
+
+
+ Informação de IPI devolvido
+
+
+
+
+
+ Valor do IPI devolvido
+
+
+
+
+
+
+
+
+
+
+ Informações adicionais do produto (norma referenciada, informações complementares, etc)
+
+
+
+
+
+
+
+
+
+
+
+ Número do item do NF
+
+
+
+
+
+
+
+
+
+
+
+
+ Dados dos totais da NF-e
+
+
+
+
+
+ Totais referentes ao ICMS
+
+
+
+
+
+ BC do ICMS
+
+
+
+
+ Valor Total do ICMS
+
+
+
+
+ Valor Total do ICMS desonerado
+
+
+
+
+ Valor total do ICMS relativo ao Fundo de Combate à Pobreza (FCP) para a UF de destino.
+
+
+
+
+ Valor total do ICMS de partilha para a UF do destinatário
+
+
+
+
+ Valor total do ICMS de partilha para a UF do remetente
+
+
+
+
+ Valor Total do FCP (Fundo de Combate à Pobreza).
+
+
+
+
+ BC do ICMS ST
+
+
+
+
+ Valor Total do ICMS ST
+
+
+
+
+ Valor Total do FCP (Fundo de Combate à Pobreza) retido por substituição tributária.
+
+
+
+
+ Valor Total do FCP (Fundo de Combate à Pobreza) retido anteriormente por substituição tributária.
+
+
+
+
+ Valor Total dos produtos e serviços
+
+
+
+
+ Valor Total do Frete
+
+
+
+
+ Valor Total do Seguro
+
+
+
+
+ Valor Total do Desconto
+
+
+
+
+ Valor Total do II
+
+
+
+
+ Valor Total do IPI
+
+
+
+
+ Valor Total do IPI devolvido. Deve ser informado quando preenchido o Grupo Tributos Devolvidos na emissão de nota finNFe=4 (devolução) nas operações com não contribuintes do IPI. Corresponde ao total da soma dos campos id: UA04.
+
+
+
+
+ Valor do PIS
+
+
+
+
+ Valor do COFINS
+
+
+
+
+ Outras Despesas acessórias
+
+
+
+
+ Valor Total da NF-e
+
+
+
+
+ Valor estimado total de impostos federais, estaduais e municipais
+
+
+
+
+
+
+
+ Totais referentes ao ISSQN
+
+
+
+
+
+ Valor Total dos Serviços sob não-incidência ou não tributados pelo ICMS
+
+
+
+
+ Base de Cálculo do ISS
+
+
+
+
+ Valor Total do ISS
+
+
+
+
+ Valor do PIS sobre serviços
+
+
+
+
+ Valor do COFINS sobre serviços
+
+
+
+
+ Data da prestação do serviço (AAAA-MM-DD)
+
+
+
+
+ Valor dedução para redução da base de cálculo
+
+
+
+
+ Valor outras retenções
+
+
+
+
+ Valor desconto incondicionado
+
+
+
+
+ Valor desconto condicionado
+
+
+
+
+ Valor Total Retenção ISS
+
+
+
+
+ Código do regime especial de tributação
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Retenção de Tributos Federais
+
+
+
+
+
+ Valor Retido de PIS
+
+
+
+
+ Valor Retido de COFINS
+
+
+
+
+ Valor Retido de CSLL
+
+
+
+
+ Base de Cálculo do IRRF
+
+
+
+
+ Valor Retido de IRRF
+
+
+
+
+ Base de Cálculo da Retenção da Previdêncica Social
+
+
+
+
+ Valor da Retenção da Previdêncica Social
+
+
+
+
+
+
+
+
+
+
+ Dados dos transportes da NF-e
+
+
+
+
+
+ Modalidade do frete
+0- Contratação do Frete por conta do Remetente (CIF);
+1- Contratação do Frete por conta do destinatário/remetente (FOB);
+2- Contratação do Frete por conta de terceiros;
+3- Transporte próprio por conta do remetente;
+4- Transporte próprio por conta do destinatário;
+9- Sem Ocorrência de transporte.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Dados do transportador
+
+
+
+
+
+
+ CNPJ do transportador
+
+
+
+
+ CPF do transportador
+
+
+
+
+
+ Razão Social ou nome do transportador
+
+
+
+
+
+
+
+
+
+
+ Inscrição Estadual (v2.0)
+
+
+
+
+ Endereço completo
+
+
+
+
+
+
+
+
+
+
+ Nome do munícipio
+
+
+
+
+
+
+
+
+
+
+ Sigla da UF
+
+
+
+
+
+
+
+ Dados da retenção ICMS do Transporte
+
+
+
+
+
+ Valor do Serviço
+
+
+
+
+ BC da Retenção do ICMS
+
+
+
+
+ Alíquota da Retenção
+
+
+
+
+ Valor do ICMS Retido
+
+
+
+
+ Código Fiscal de Operações e Prestações
+
+
+
+
+
+
+
+
+
+
+ Código do Município de Ocorrência do Fato Gerador (utilizar a tabela do IBGE)
+
+
+
+
+
+
+
+
+
+ Dados do veículo
+
+
+
+
+ Dados do reboque/Dolly (v2.0)
+
+
+
+
+
+ Identificação do vagão (v2.0)
+
+
+
+
+
+
+
+
+
+
+ Identificação da balsa (v2.0)
+
+
+
+
+
+
+
+
+
+
+
+ Dados dos volumes
+
+
+
+
+
+ Quantidade de volumes transportados
+
+
+
+
+
+
+
+
+
+
+ Espécie dos volumes transportados
+
+
+
+
+
+
+
+
+
+
+ Marca dos volumes transportados
+
+
+
+
+
+
+
+
+
+
+ Numeração dos volumes transportados
+
+
+
+
+
+
+
+
+
+
+ Peso líquido (em kg)
+
+
+
+
+ Peso bruto (em kg)
+
+
+
+
+
+
+
+ Número dos Lacres
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Dados da cobrança da NF-e
+
+
+
+
+
+ Dados da fatura
+
+
+
+
+
+ Número da fatura
+
+
+
+
+
+
+
+
+
+
+ Valor original da fatura
+
+
+
+
+ Valor do desconto da fatura
+
+
+
+
+ Valor líquido da fatura
+
+
+
+
+
+
+
+ Dados das duplicatas NT 2011/004
+
+
+
+
+
+ Número da duplicata
+
+
+
+
+
+
+
+
+
+
+ Data de vencimento da duplicata (AAAA-MM-DD)
+
+
+
+
+ Valor da duplicata
+
+
+
+
+
+
+
+
+
+
+ Dados de Pagamento. Obrigatório apenas para (NFC-e) NT 2012/004
+
+
+
+
+
+ Grupo de detalhamento da forma de pagamento.
+
+
+
+
+
+ Forma de Pagamento:01-Dinheiro;02-Cheque;03-Cartão de Crédito;04-Cartão de Débito;05-Crédito Loja;10-Vale Alimentação;11-Vale Refeição;12-Vale Presente;13-Vale Combustível;14 - Duplicata Mercantil;15 - Boleto Bancario;90 - Sem Pagamento;99 - Outros
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor do Pagamento. Esta tag poderá ser omitida quando a tag tPag=90 (Sem Pagamento), caso contrário deverá ser preenchida.
+
+
+
+
+ Grupo de Cartões
+
+
+
+
+
+ Tipo de Integração do processo de pagamento com o sistema de automação da empresa/
+ 1=Pagamento integrado com o sistema de automação da empresa Ex. equipamento TEF , Comercio Eletronico
+ 2=Pagamento não integrado com o sistema de automação da empresa Ex: equipamento POS
+
+
+
+
+
+
+
+
+
+
+
+ CNPJ da credenciadora de cartão de crédito/débito
+
+
+
+
+ Bandeira da operadora de cartão de crédito/débito:01–Visa; 02–Mastercard; 03–American Express; 04–Sorocred;05-Diners Club;06-Elo;07-Hipercard;08-Aura;09-Cabal;99–Outros
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Número de autorização da operação cartão de crédito/débito
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor do Troco.
+
+
+
+
+
+
+
+ Informações adicionais da NF-e
+
+
+
+
+
+ Informações adicionais de interesse do Fisco (v2.0)
+
+
+
+
+
+
+
+
+
+
+ Informações complementares de interesse do Contribuinte
+
+
+
+
+
+
+
+
+
+
+ Campo de uso livre do contribuinte
+informar o nome do campo no atributo xCampo
+e o conteúdo do campo no xTexto
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Campo de uso exclusivo do Fisco
+informar o nome do campo no atributo xCampo
+e o conteúdo do campo no xTexto
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Grupo de informações do processo referenciado
+
+
+
+
+
+ Indentificador do processo ou ato
+concessório
+
+
+
+
+
+
+
+
+
+
+ Origem do processo, informar com:
+0 - SEFAZ;
+1 - Justiça Federal;
+2 - Justiça Estadual;
+3 - Secex/RFB;
+9 - Outros
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Informações de exportação
+
+
+
+
+
+ Sigla da UF de Embarque ou de transposição de fronteira
+
+
+
+
+ Local de Embarque ou de transposição de fronteira
+
+
+
+
+
+
+
+
+
+
+ Descrição do local de despacho
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Informações de compras (Nota de Empenho, Pedido e Contrato)
+
+
+
+
+
+ Informação da Nota de Empenho de compras públicas (NT2011/004)
+
+
+
+
+
+
+
+
+
+
+ Informação do pedido
+
+
+
+
+
+
+
+
+
+
+ Informação do contrato
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Informações de registro aquisições de cana
+
+
+
+
+
+ Identificação da safra
+
+
+
+
+
+
+
+
+
+
+ Mês e Ano de Referência, formato: MM/AAAA
+
+
+
+
+
+
+
+
+
+
+ Fornecimentos diários
+
+
+
+
+
+ Quantidade em quilogramas - peso líquido
+
+
+
+
+
+ Número do dia
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total do mês
+
+
+
+
+ Total Anterior
+
+
+
+
+ Total Geral
+
+
+
+
+ Deduções - Taxas e Contribuições
+
+
+
+
+
+ Descrição da Dedução
+
+
+
+
+
+
+
+
+
+
+ valor da dedução
+
+
+
+
+
+
+
+ Valor dos fornecimentos
+
+
+
+
+ Valor Total das Deduções
+
+
+
+
+ Valor Líquido dos fornecimentos
+
+
+
+
+
+
+
+
+ Versão do leiaute (v4.00)
+
+
+
+
+ PL_005d - 11/08/09 - validação do Id
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Informações suplementares Nota Fiscal
+
+
+
+
+
+ Texto com o QR-Code impresso no DANFE NFC-e
+
+
+
+
+
+
+
+
+
+
+
+
+ Informar a URL da "Consulta por chave de acesso da NFC-e". A mesma URL que deve estar informada no DANFE NFC-e para consulta por chave de acesso.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Protocolo de status resultado do processamento da NF-e
+
+
+
+
+ Dados do protocolo de status
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que processou a NF-e
+
+
+
+
+ Chaves de acesso da NF-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, série e número da NF-e e código numérico+DV.
+
+
+
+
+ Data e hora de processamento, no formato AAAA-MM-DDTHH:MM:SSTZD. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Lote de NF-e enviado.
+
+
+
+
+ Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - códiga da UF - 2 posições ano; 10 seqüencial no ano.
+
+
+
+
+ Digest Value da NF-e processada. Utilizado para conferir a integridade da NF-e original.
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Pedido de Concessão de Autorização da Nota Fiscal Eletrônica
+
+
+
+
+
+ Indicador de processamento síncrono. 0=NÃO; 1=SIM=Síncrono
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Retorno do Pedido de Autorização da Nota Fiscal Eletrônica
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que recebeu o Lote.
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+ código da UF de atendimento
+
+
+
+
+ Data e hora do recebimento, no formato AAAA-MM-DDTHH:MM:SSTZD
+
+
+
+
+
+ Dados do Recibo do Lote
+
+
+
+
+
+ Número do Recibo
+
+
+
+
+ Tempo médio de resposta do serviço (em segundos) dos últimos 5 minutos
+
+
+
+
+
+
+
+ Protocolo de status resultado do processamento sincrono da NFC-e
+
+
+
+
+
+
+
+
+ Tipo Pedido de Consulta do Recido do Lote de Notas Fiscais Eletrônicas
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Número do Recibo
+
+
+
+
+
+
+
+ Tipo Retorno do Pedido de Consulta do Recido do Lote de Notas Fiscais Eletrônicas
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que processou a NF-e
+
+
+
+
+ Número do Recibo Consultado
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+ código da UF de atendimento
+
+
+
+
+ Data e hora de processamento, no formato AAAA-MM-DDTHH:MM:SSTZD. Em caso de Rejeição, com data e hora do recebimento do Lote de NF-e enviado.
+
+
+
+
+
+ Código da Mensagem (v2.0)
+alterado para tamanho variavel 1-4. (NT2011/004)
+
+
+
+
+
+
+
+
+
+
+ Mensagem da SEFAZ para o emissor. (v2.0)
+
+
+
+
+
+
+
+
+
+
+
+ Protocolo de status resultado do processamento da NF-e
+
+
+
+
+
+
+
+ Tipo da NF-e processada
+
+
+
+
+
+
+
+
+
+ Tipo Dados do Endereço // 24/10/08 - tamanho mínimo
+
+
+
+
+ Logradouro
+
+
+
+
+
+
+
+
+
+
+ Número
+
+
+
+
+
+
+
+
+
+
+ Complemento
+
+
+
+
+
+
+
+
+
+
+ Bairro
+
+
+
+
+
+
+
+
+
+
+ Código do município (utilizar a tabela do IBGE), informar 9999999 para operações com o exterior.
+
+
+
+
+ Nome do município, informar EXTERIOR para operações com o exterior.
+
+
+
+
+
+
+
+
+
+
+ Sigla da UF, informar EX para operações com o exterior.
+
+
+
+
+ CEP
+
+
+
+
+
+
+
+
+
+
+ Código de Pais
+
+
+
+
+
+
+
+
+
+
+ Nome do país
+
+
+
+
+
+
+
+
+
+
+ Telefone, preencher com Código DDD + número do telefone , nas operações com exterior é permtido informar o código do país + código da localidade + número do telefone
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Dados do Endereço do Emitente // 24/10/08 - desmembrado / tamanho mínimo
+
+
+
+
+ Logradouro
+
+
+
+
+
+
+
+
+
+
+ Número
+
+
+
+
+
+
+
+
+
+
+ Complemento
+
+
+
+
+
+
+
+
+
+
+ Bairro
+
+
+
+
+
+
+
+
+
+
+ Código do município
+
+
+
+
+ Nome do município
+
+
+
+
+
+
+
+
+
+
+ Sigla da UF
+
+
+
+
+ CEP - NT 2011/004
+
+
+
+
+
+
+
+
+
+
+ Código do país
+
+
+
+
+
+
+
+
+
+ Nome do país
+
+
+
+
+
+
+
+
+
+
+ Preencher com Código DDD + número do telefone (v.2.0)
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Dados do Local de Retirada ou Entrega // 24/10/08 - tamanho mínimo // v2.0
+
+
+
+
+
+ CNPJ
+
+
+
+
+ CPF (v2.0)
+
+
+
+
+
+ Logradouro
+
+
+
+
+
+
+
+
+
+
+ Número
+
+
+
+
+
+
+
+
+
+
+ Complemento
+
+
+
+
+
+
+
+
+
+
+ Bairro
+
+
+
+
+
+
+
+
+
+
+ Código do município (utilizar a tabela do IBGE)
+
+
+
+
+ Nome do município
+
+
+
+
+
+
+
+
+
+
+ Sigla da UF
+
+
+
+
+
+
+ Tipo Dados do Veículo
+
+
+
+
+ Placa do veículo (NT2011/004)
+
+
+
+
+
+
+
+
+
+
+ Sigla da UF
+
+
+
+
+ Registro Nacional de Transportador de Carga (ANTT)
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Origem da mercadoria CST ICMS origem da mercadoria: 0-Nacional exceto as indicadas nos códigos 3, 4, 5 e 8;
+1-Estrangeira - Importação direta; 2-Estrangeira - Adquirida no mercado interno; 3-Nacional, conteudo superior 40% e inferior ou igual a 70%; 4-Nacional, processos produtivos básicos; 5-Nacional, conteudo inferior 40%; 6-Estrangeira - Importação direta, com similar nacional, lista CAMEX; 7-Estrangeira - mercado interno, sem simular,lista CAMEX;8-Nacional, Conteúdo de Importação superior a 70%.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Finalidade da NF-e (1=Normal; 2=Complementar; 3=Ajuste; 4=Devolução/Retorno)
+
+
+
+
+
+
+
+
+
+
+
+ Tipo processo de emissão da NF-e
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Código da Lista de Serviços LC 116/2003
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Identificação de Lote
+
+
+
+
+
+
+
+
+ Tipo Versão da NF-e - 4.00
+
+
+
+
+
+
+
+
+ Identificador único (Globally Unique Identifier)
+
+
+
+
+
+
+
+
+ Tipo: Dados do IPI
+
+
+
+
+ CNPJ do produtor da mercadoria, quando diferente do emitente. Somente para os casos de exportação direta ou indireta.
+
+
+
+
+ Código do selo de controle do IPI
+
+
+
+
+
+
+
+
+
+
+ Quantidade de selo de controle do IPI
+
+
+
+
+
+
+
+
+
+
+ Código de Enquadramento Legal do IPI (tabela a ser criada pela RFB)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Código da Situação Tributária do IPI:
+00-Entrada com recuperação de crédito
+49 - Outras entradas
+50-Saída tributada
+99-Outras saídas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do IPI
+
+
+
+
+ Alíquota do IPI
+
+
+
+
+
+
+ Quantidade total na unidade padrão para tributação
+
+
+
+
+ Valor por Unidade Tributável. Informar o valor do imposto Pauta por unidade de medida.
+
+
+
+
+
+
+ Valor do IPI
+
+
+
+
+
+
+
+
+
+
+ Código da Situação Tributária do IPI:
+01-Entrada tributada com alíquota zero
+02-Entrada isenta
+03-Entrada não-tributada
+04-Entrada imune
+05-Entrada com suspensão
+51-Saída tributada com alíquota zero
+52-Saída isenta
+53-Saída não-tributada
+54-Saída imune
+55-Saída com suspensão
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/leiauteSuframaInternaliza_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteSuframaInternaliza_v1.00.xsd
new file mode 100644
index 00000000..99e020eb
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteSuframaInternaliza_v1.00.xsd
@@ -0,0 +1,642 @@
+
+
+
+
+
+ Tipo Evento
+
+
+
+
+
+
+
+ Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Identificação do autor do evento
+
+
+
+ CNPJ
+
+
+
+
+ CPF
+
+
+
+
+
+ Chave de Acesso da NF-e vinculada ao evento
+
+
+
+
+ Data de emissão no formato UTC. AAAA-MM-DDThh:mm:ssTZD
+
+
+
+
+ Tipo do Evento
+
+
+
+
+
+
+
+
+
+
+
+ Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial.
+
+
+
+
+
+
+
+
+
+
+ Versão do Tipo do Evento
+
+
+
+
+
+
+
+
+
+
+ Schema XML de validação do evento do Confirmação de Internalização da Mercadoria na SUFRAMA 990910
+
+
+
+
+
+ Descrição do Evento - “Confirmação de Internalização da Mercadoria na SUFRAMA”
+
+
+
+
+
+
+
+
+
+
+ Número do PIN-e - Protocolo de Internalização de Mercadoria Nacional eletronico
+
+
+
+
+
+
+
+
+
+
+ Data de ocorrência da vistoria, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm)
+
+
+
+
+ Localidade onde ocorreu a vistoria
+
+
+
+
+
+
+
+
+
+
+ Nome Posto do ponto onde ocorreu a vistoria
+
+
+
+
+
+
+
+
+
+
+ Histórico da ocorrência, se existir.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Identificador da TAG a ser assinada, a regra de formação do Id é:
+“ID” + tpEvento + chave da NF-e + nSeqEvento
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Versão do Evento
+
+
+
+
+
+
+
+
+ Tipo retorno do Evento
+
+
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que recebeu o Evento
+
+
+
+
+ Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional
+
+
+
+
+ Código do status da registro do Evento
+
+
+
+
+ Descrição literal do status do registro do Evento
+
+
+
+
+ Chave de Acesso NF-e vinculada
+
+
+
+
+ Tipo do Evento vinculado
+
+
+
+
+
+
+
+
+
+
+ Descrição do Evento
+
+
+
+
+
+
+
+
+
+
+ Seqüencial do evento
+
+
+
+
+
+
+
+
+
+
+ Identificação do destinatário da NF-e
+
+
+
+ CNPJ Destinatário
+
+
+
+
+ CPF Destiantário
+
+
+
+
+
+ email do destinatário
+
+
+
+
+
+
+
+
+
+
+ Data e Hora de do recebimento do evento ou do registro do evento formato UTC AAAA-MM-DDThh:mm:ssTZD.
+
+
+
+
+
+
+
+
+
+
+ Número do protocolo de registro do evento
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Lote de Envio
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Versão do EnvEvento
+
+
+
+
+
+
+
+
+ Tipo Retorno de Lote de Envio
+
+
+
+
+
+
+
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que recebeu o Evento
+
+
+
+
+ Código do òrgao que registrou o Evento
+
+
+
+
+ Código do status da registro do Evento
+
+
+
+
+ Descrição literal do status do registro do Evento
+
+
+
+
+
+
+
+
+ Tipo procEvento
+
+
+
+
+
+
+
+
+
+ Tipo Código de orgão (UF da tabela do IBGE + 90 RFB)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/leiauteSuframaVistoria_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteSuframaVistoria_v1.00.xsd
new file mode 100644
index 00000000..0515ae9c
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/leiauteSuframaVistoria_v1.00.xsd
@@ -0,0 +1,648 @@
+
+
+
+
+
+ Tipo Evento
+
+
+
+
+
+
+
+ Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Identificação do autor do evento
+
+
+
+ CNPJ
+
+
+
+
+ CPF
+
+
+
+
+
+ Chave de Acesso da NF-e vinculada ao evento
+
+
+
+
+ Data de emissão no formato UTC. AAAA-MM-DDThh:mm:ssTZD
+
+
+
+
+ Tipo do Evento
+
+
+
+
+
+
+
+
+
+
+
+ Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial.
+
+
+
+
+
+
+
+
+
+
+ Versão do Tipo do Evento
+
+
+
+
+
+
+
+
+
+
+ Schema XML de validação do evento doVistoria SUFRAMA 990900
+
+
+
+
+
+ Descrição do Evento - “Vistoria SUFRAMA”
+
+
+
+
+
+
+
+
+
+
+ Número do PIN-e - Protocolo de Internalização de Mercadoria Nacional eletronico
+
+
+
+
+
+
+
+
+
+
+ Data de ocorrência da vistoria, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm)
+
+
+
+
+
+
+
+
+
+
+ Localidade onde ocorreu a vistoria
+
+
+
+
+
+
+
+
+
+
+ Nome Posto do ponto onde ocorreu a vistoria
+
+
+
+
+
+
+
+
+
+
+ Histórico da ocorrência, se existir.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Identificador da TAG a ser assinada, a regra de formação do Id é:
+“ID” + tpEvento + chave da NF-e + nSeqEvento
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Versão do Evento
+
+
+
+
+
+
+
+
+ Tipo retorno do Evento
+
+
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que recebeu o Evento
+
+
+
+
+ Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional
+
+
+
+
+ Código do status da registro do Evento
+
+
+
+
+ Descrição literal do status do registro do Evento
+
+
+
+
+ Chave de Acesso NF-e vinculada
+
+
+
+
+ Tipo do Evento vinculado
+
+
+
+
+
+
+
+
+
+
+ Descrição do Evento
+
+
+
+
+
+
+
+
+
+
+ Seqüencial do evento
+
+
+
+
+
+
+
+
+
+
+ Identificação do destinatário da NF-e
+
+
+
+ CNPJ Destinatário
+
+
+
+
+ CPF Destiantário
+
+
+
+
+
+ email do destinatário
+
+
+
+
+
+
+
+
+
+
+ Data e Hora de do recebimento do evento ou do registro do evento formato UTC AAAA-MM-DDThh:mm:ssTZD.
+
+
+
+
+
+
+
+
+
+
+ Número do protocolo de registro do evento
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Lote de Envio
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Versão do EnvEvento
+
+
+
+
+
+
+
+
+ Tipo Retorno de Lote de Envio
+
+
+
+
+
+
+
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que recebeu o Evento
+
+
+
+
+ Código do òrgao que registrou o Evento
+
+
+
+
+ Código do status da registro do Evento
+
+
+
+
+ Descrição literal do status do registro do Evento
+
+
+
+
+
+
+
+
+ Tipo procEvento
+
+
+
+
+
+
+
+
+
+ Tipo Código de orgão (UF da tabela do IBGE + 90 RFB)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/nfe_v3.10.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/nfe_v3.10.xsd
new file mode 100644
index 00000000..00e7ca2a
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/nfe_v3.10.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Nota Fiscal Eletrônica
+
+
+
\ No newline at end of file
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/nfe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/nfe_v4.00.xsd
new file mode 100755
index 00000000..4fe917ae
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/nfe_v4.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Nota Fiscal Eletrônica
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/procCCeNFe_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/procCCeNFe_v1.00.xsd
new file mode 100644
index 00000000..16afeaa8
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/procCCeNFe_v1.00.xsd
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+ Schema XML de validação do proc Carta de Correção da NFe
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/procCancNFe_v1.07.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/procCancNFe_v1.07.xsd
new file mode 100644
index 00000000..d3f76e15
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/procCancNFe_v1.07.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Pedido de Cancelamento de NF-e processado
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/procConfRecebtoNFe_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/procConfRecebtoNFe_v1.00.xsd
new file mode 100644
index 00000000..e2df5548
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/procConfRecebtoNFe_v1.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do proc Confirmação de Recebimento
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/procEPEC_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/procEPEC_v1.00.xsd
new file mode 100644
index 00000000..c0c4f9bf
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/procEPEC_v1.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do proc Evento de emissão prévia em contingência
+
+
+
\ No newline at end of file
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/procEventoCancNFe_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/procEventoCancNFe_v1.00.xsd
new file mode 100644
index 00000000..4dfb32b3
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/procEventoCancNFe_v1.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do proc Cancelamento
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/procEventoNFe_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/procEventoNFe_v1.00.xsd
new file mode 100644
index 00000000..e55b02e3
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/procEventoNFe_v1.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do proc Evento NFe
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/procInutNFe_v3.10.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/procInutNFe_v3.10.xsd
new file mode 100644
index 00000000..f71065f1
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/procInutNFe_v3.10.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Pedido de inutilização de númeração de NF-e processado
+
+
+
\ No newline at end of file
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/procInutNFe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/procInutNFe_v4.00.xsd
new file mode 100755
index 00000000..ee34246e
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/procInutNFe_v4.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Pedido de inutilização de númeração de NF-e processado
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/procNFe_v3.10.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/procNFe_v3.10.xsd
new file mode 100644
index 00000000..81641b5e
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/procNFe_v3.10.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ NF-e processada
+
+
+
\ No newline at end of file
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/procNFe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/procNFe_v4.00.xsd
new file mode 100755
index 00000000..def67978
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/procNFe_v4.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ NF-e processada
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/resEvento_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/resEvento_v1.00.xsd
new file mode 100644
index 00000000..2df1178f
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/resEvento_v1.00.xsd
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+ Schema da estrutura XML gerada pelo Ambiente Nacional com o conjunto de informações resumidas de um evento de NF-e
+
+
+
+
+
+ Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 91 para identificar o Ambiente Nacional
+
+
+
+
+
+ CNPJ do Emitente
+
+
+
+
+ CPF do Emitente
+
+
+
+
+
+ Chave de acesso da NF-e
+
+
+
+
+ Data e Hora do Evento, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm)
+
+
+
+
+ Tipo do Evento
+
+
+
+
+
+
+
+
+
+
+ Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial
+
+
+
+
+
+
+
+
+
+
+ Descrição do Evento
+
+
+
+
+
+
+
+
+
+
+ Data e hora de autorização do evento no formato AAAA-MM-DDTHH:MM:SSTZD
+
+
+
+
+ Número do Protocolo do evento. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - códiga da UF - 2 posições ano; 10 seqüencial no ano
+
+
+
+
+
+
+
+
+ Tipo Versão do leiate resNFe
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/resEvento_v1.01.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/resEvento_v1.01.xsd
new file mode 100644
index 00000000..fe71388f
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/resEvento_v1.01.xsd
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+ Schema da estrutura XML gerada pelo Ambiente Nacional com o conjunto de informações resumidas de um evento de NF-e
+
+
+
+
+
+ Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 91 para identificar o Ambiente Nacional
+
+
+
+
+
+ CNPJ do Emitente
+
+
+
+
+ CPF do Emitente
+
+
+
+
+
+ Chave de acesso da NF-e
+
+
+
+
+ Data e Hora do Evento, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm)
+
+
+
+
+ Tipo do Evento
+
+
+
+
+
+
+
+
+
+
+ Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial
+
+
+
+
+
+
+
+
+
+
+ Descrição do Evento
+
+
+
+
+
+
+
+
+
+
+ Data e hora de autorização do evento no formato AAAA-MM-DDTHH:MM:SSTZD
+
+
+
+
+ Número do Protocolo do evento. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - códiga da UF - 2 posições ano; 10 seqüencial no ano
+
+
+
+
+
+
+
+
+ Tipo Versão do leiate resNFe
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/resNFe_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/resNFe_v1.00.xsd
new file mode 100644
index 00000000..8f7d27b9
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/resNFe_v1.00.xsd
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+ Schema da estrutura XML gerada pelo Ambiente Nacional com o conjunto de informações resumidas de uma NF-e
+
+
+
+
+
+ Chave de acesso da NF-e
+
+
+
+
+
+ CNPJ do Emitente
+
+
+
+
+ CPF do Emitente
+
+
+
+
+
+ Razão Social ou Nome do emitente
+
+
+
+
+
+
+
+
+
+
+ Inscrição Estadual do Emitente
+
+
+
+
+ Data e Hora de emissão do Documento Fiscal (AAAA-MM-DDThh:mm:ssTZD) ex.: 2012-09-01T13:00:00-03:00
+
+
+
+
+ Tipo do Documento Fiscal (0 - entrada; 1 - saída)
+
+
+
+
+
+
+
+
+
+
+
+ Valor Total da NF-e
+
+
+
+
+ Digest Value da NF-e processada. Utilizado para conferir a integridade da NF-e original
+
+
+
+
+ Data e hora de autorização da NF-e, no formato AAAA-MM-DDTHH:MM:SSTZD
+
+
+
+
+ Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - códiga da UF - 2 posições ano; 10 seqüencial no ano
+
+
+
+
+
+ Situação da NF-e
+ 1-Uso autorizado no momento da consulta;
+ 2-Uso denegado;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Versão do leiate resNFe
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/resNFe_v1.01.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/resNFe_v1.01.xsd
new file mode 100644
index 00000000..c959e96a
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/resNFe_v1.01.xsd
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+ Schema da estrutura XML gerada pelo Ambiente Nacional com o conjunto de informações resumidas de uma NF-e
+
+
+
+
+
+ Chave de acesso da NF-e
+
+
+
+
+
+ CNPJ do Emitente
+
+
+
+
+ CPF do Emitente
+
+
+
+
+
+ Razão Social ou Nome do emitente
+
+
+
+
+
+
+
+
+
+
+ Inscrição Estadual do Emitente
+
+
+
+
+ Data e Hora de emissão do Documento Fiscal (AAAA-MM-DDThh:mm:ssTZD) ex.: 2012-09-01T13:00:00-03:00
+
+
+
+
+ Tipo do Documento Fiscal (0 - entrada; 1 - saída)
+
+
+
+
+
+
+
+
+
+
+
+ Valor Total da NF-e
+
+
+
+
+ Digest Value da NF-e processada. Utilizado para conferir a integridade da NF-e original
+
+
+
+
+ Data e hora de autorização da NF-e, no formato AAAA-MM-DDTHH:MM:SSTZD
+
+
+
+
+ Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - códiga da UF - 2 posições ano; 10 seqüencial no ano
+
+
+
+
+
+ Situação da NF-e
+ 1-Uso autorizado no momento da consulta;
+ 2-Uso denegado;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Versão do leiate resNFe
+
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/retCancNFe_v1.07.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/retCancNFe_v1.07.xsd
new file mode 100644
index 00000000..ed733035
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/retCancNFe_v1.07.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do retorno Pedido de Cancelamento da Nota Fiscal Eletrônica
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/retConsReciNFe_v3.10.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/retConsReciNFe_v3.10.xsd
new file mode 100644
index 00000000..428b889a
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/retConsReciNFe_v3.10.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do retorno do Pedido de Consulta do Recido do Lote de Notas Fiscais Eletrônicas
+
+
+
\ No newline at end of file
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/retConsReciNFe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/retConsReciNFe_v4.00.xsd
new file mode 100755
index 00000000..dfa9246c
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/retConsReciNFe_v4.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do retorno do Pedido de Consulta do Recido do Lote de Notas Fiscais Eletrônicas
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/retConsSitNFe_v3.10.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/retConsSitNFe_v3.10.xsd
new file mode 100644
index 00000000..e5063220
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/retConsSitNFe_v3.10.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do retorno da consulta da situação atual da NF-e
+
+
+
\ No newline at end of file
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/retConsSitNFe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/retConsSitNFe_v4.00.xsd
new file mode 100755
index 00000000..2681808c
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/retConsSitNFe_v4.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do retorno da consulta da situação atual da NF-e
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/retConsStatServ_v3.10.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/retConsStatServ_v3.10.xsd
new file mode 100644
index 00000000..c61888b8
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/retConsStatServ_v3.10.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do Resultado da Consulta do Status do Serviço
+
+
+
\ No newline at end of file
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/retConsStatServ_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/retConsStatServ_v4.00.xsd
new file mode 100755
index 00000000..318e0f14
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/retConsStatServ_v4.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do Resultado da Consulta do Status do Serviço
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/retDistDFeInt_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/retDistDFeInt_v1.00.xsd
new file mode 100644
index 00000000..419c5012
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/retDistDFeInt_v1.00.xsd
@@ -0,0 +1,84 @@
+
+
+
+
+
+ Schema do resultado do pedido de distribuição de DF-e de interesse
+
+
+
+
+
+
+ Identificação do Ambiente:
+ 1 - Produção
+ 2 - Homologação
+
+
+
+
+
+ Versão do Web Service NFeDistribuicaoDFe
+
+
+
+
+ Código do status de processamento da requisição
+
+
+
+
+ Descrição literal do status do processamento da requisição
+
+
+
+
+ Data e Hora de processamento da requisição no formato AAAA-MM-DDTHH:MM:SS
+
+
+
+
+ Último NSU pesquisado no Ambiente Nacional. Se for o caso, o solicitante pode continuar a consulta a partir deste NSU para obter novos resultados.
+
+
+
+
+ Maior NSU existente no Ambiente Nacional para o CNPJ/CPF informado
+
+
+
+
+ Conjunto de informações resumidas e documentos fiscais eletrônicos de interesse da pessoa ou empresa.
+
+
+
+
+
+ Informação resumida ou documento fiscal eletrônico de interesse da pessoa ou empresa. O conteúdo desta tag estará compactado no padrão gZip. O tipo do campo é base64Binary.
+
+
+
+
+
+
+ NSU do documento fiscal
+
+
+
+
+ Identificação do Schema XML que será utilizado para validar o XML existente no conteúdo da tag docZip. Vai identificar o tipo do documento e sua versão. Exemplos: resNFe_v1.00.xsd, procNFe_v3.10.xsd, resEvento_1.00.xsd, procEventoNFe_v1.00.xsd
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/retDistDFeInt_v1.01.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/retDistDFeInt_v1.01.xsd
new file mode 100644
index 00000000..4ef8adc0
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/retDistDFeInt_v1.01.xsd
@@ -0,0 +1,86 @@
+
+
+
+
+
+ Schema do resultado do pedido de distribuição de DF-e de interesse
+
+
+
+
+
+
+ Identificação do Ambiente:
+ 1 - Produção
+ 2 - Homologação
+
+
+
+
+
+ Versão do Web Service NFeDistribuicaoDFe
+
+
+
+
+ Código do status de processamento da requisição
+
+
+
+
+ Descrição literal do status do processamento da requisição
+
+
+
+
+ Data e Hora de processamento da requisição no formato AAAA-MM-DDTHH:MM:SSTZD
+
+
+
+
+ Último NSU pesquisado no Ambiente Nacional. Se for o caso, o solicitante pode continuar a consulta a partir deste NSU para obter novos resultados.
+
+
+
+
+ Maior NSU existente no Ambiente Nacional para o CNPJ/CPF informado
+
+
+
+
+ Conjunto de informações resumidas e documentos fiscais eletrônicos de interesse da pessoa ou empresa.
+
+
+
+
+
+ Informação resumida ou documento fiscal eletrônico de interesse da pessoa ou empresa. O conteúdo desta tag estará compactado no padrão gZip. O tipo do campo é base64Binary.
+
+
+
+
+
+
+ NSU do documento fiscal
+
+
+
+
+ Identificação do Schema XML que será utilizado para validar o XML existente no conteúdo da tag docZip. Vai identificar o tipo do documento e sua versão. Exemplos: resNFe_v1.00.xsd, procNFe_v3.10.xsd, resEvento_1.00.xsd, procEventoNFe_v1.00.xsd
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/retDownloadNFe_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/retDownloadNFe_v1.00.xsd
new file mode 100644
index 00000000..333aabc9
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/retDownloadNFe_v1.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do retorno do pedido de download das NF-e
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/retEnvCCe_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/retEnvCCe_v1.00.xsd
new file mode 100644
index 00000000..d4e9cd7e
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/retEnvCCe_v1.00.xsd
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+ Schema XML de Retorno da envio do Evento Carta de Correção
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/retEnvConfRecebto_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/retEnvConfRecebto_v1.00.xsd
new file mode 100644
index 00000000..eab210fe
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/retEnvConfRecebto_v1.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de Retorno da envio do Evento Confirmao de Recebimento
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/retEnvEPEC_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/retEnvEPEC_v1.00.xsd
new file mode 100644
index 00000000..7b264ba3
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/retEnvEPEC_v1.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de Retorno da envio do Evento Emissão Prévia em Contingência
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/retEnvEventoCancNFe_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/retEnvEventoCancNFe_v1.00.xsd
new file mode 100644
index 00000000..132b0451
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/retEnvEventoCancNFe_v1.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de Retorno da envio do Evento Cancelamento
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/retEnvEvento_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/retEnvEvento_v1.00.xsd
new file mode 100644
index 00000000..3ce335bf
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/retEnvEvento_v1.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de Retorno da envio do Evento
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/retEnvSuframaInternaliza_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/retEnvSuframaInternaliza_v1.00.xsd
new file mode 100644
index 00000000..aac87bf4
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/retEnvSuframaInternaliza_v1.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de Retorno da envio do evento do Internalizacao SUFRAMA 990910
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/retEnvSuframaVistoria_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/retEnvSuframaVistoria_v1.00.xsd
new file mode 100644
index 00000000..8f89744e
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/retEnvSuframaVistoria_v1.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de Retorno da envio do evento do Vistoria SUFRAMA 990900
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/retEnviNFe_v3.10.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/retEnviNFe_v3.10.xsd
new file mode 100644
index 00000000..e44debfa
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/retEnviNFe_v3.10.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do retorno do Pedido de Concessão de Autorização da Nota Fiscal Eletrônica
+
+
+
\ No newline at end of file
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/retEnviNFe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/retEnviNFe_v4.00.xsd
new file mode 100755
index 00000000..2d1a5361
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/retEnviNFe_v4.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do retorno do Pedido de Concessão de Autorização da Nota Fiscal Eletrônica
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/retEventoEPEC_v0.01.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/retEventoEPEC_v0.01.xsd
new file mode 100644
index 00000000..374da239
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/retEventoEPEC_v0.01.xsd
@@ -0,0 +1,207 @@
+
+
+
+
+
+
+
+
+
+ Identificador de controle do Lote de envio do Evento, conforme informado na mensagem de entrada.
+
+
+
+
+
+
+
+
+
+
+ Identificação do Ambiente: 1=Produção /2=Homologação
+
+
+
+
+ Versão da aplicação que processou o evento.
+
+
+
+
+ Código da UF que registrou o Evento.
+
+
+
+
+ Código do status da resposta
+
+
+
+
+ Descrição do status da resposta
+
+
+
+
+
+
+ TAG de grupo do resultado do processamento do Evento
+
+
+
+
+
+ Grupo de informações do registro do Evento
+
+
+
+ Identificação do Ambiente: 1=Produção /2=Homologação
+
+
+
+
+ Versão da aplicação que registrou o Evento, utilizar literal que permita a identificação do órgão, como a sigla da UF ou do órgão.
+
+
+
+
+ Código da UF que registrou o Evento.
+
+
+
+
+ Código do status da resposta.
+
+
+
+
+ Descrição do status da resposta.
+
+
+
+
+ Chave de Acesso da NFC-e vinculada ao evento.
+
+
+
+
+ 110140 EPEC
+
+
+
+
+
+
+
+
+
+
+
+ EPEC autorizado
+
+
+
+
+
+
+
+
+
+
+ Sequencial do evento, conforme a mensagem de entrada.
+
+
+
+
+
+
+
+
+
+
+ Idem a mensagem de entrada.
+
+
+
+
+ Data e hora de registro do evento no formato AAAA-MM-DDTHH:MM:SSTZD (formato UTC, onde TZD é +HH:MM ou HH:MM). Se o evento for rejeitado informar a data e hora de recebimento do evento.
+
+
+
+
+ Número do Protocolo do Evento
+
+
+
+
+ Relação de Chaves de Acesso de EPEC pendentes de
+
+
+
+
+
+
+ Identificador da TAG a ser assinada, somente deve ser informado se o órgão de registro assinar a resposta.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Versão do Evento
+
+
+
+
+
+
+
+
+ Tipo Código de orgão (UF da tabela do IBGE + 91 RFB)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/retInutNFe_v3.10.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/retInutNFe_v3.10.xsd
new file mode 100644
index 00000000..ccf43d88
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/retInutNFe_v3.10.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do retorno do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica
+
+
+
\ No newline at end of file
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/retInutNFe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/retInutNFe_v4.00.xsd
new file mode 100755
index 00000000..3d91a9b0
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/retInutNFe_v4.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do retorno do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/retconsNFeDest_v1.01.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/retconsNFeDest_v1.01.xsd
new file mode 100644
index 00000000..9dea650c
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/retconsNFeDest_v1.01.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do retorno de resumo das NF-e encontradas
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/tiposBasico_v1.03.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/tiposBasico_v1.03.xsd
new file mode 100644
index 00000000..7319112c
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/tiposBasico_v1.03.xsd
@@ -0,0 +1,854 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Código da UF da tabela do IBGE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Código do Município da tabela do IBGE
+
+
+
+
+
+
+
+
+ Tipo Chave da Nota Fiscal Eletrônica
+
+
+
+
+
+
+
+
+ Tipo Número do Protocolo de Status
+
+
+
+
+
+
+
+
+ Tipo Número do Recibo do envio de lote de NF-e
+
+
+
+
+
+
+
+
+ Tipo Código da Mensagem enviada
+
+
+
+
+
+
+
+
+ Tipo Número do CNPJ
+
+
+
+
+
+
+
+
+ Tipo Número do CNPJ tmanho varíavel (3-14)
+
+
+
+
+
+
+
+
+ Tipo Número do CNPJ Opcional
+
+
+
+
+
+
+
+
+
+ Tipo Número do CPF
+
+
+
+
+
+
+
+
+ Tipo Número do CPF de tamanho variável (3-11)
+
+
+
+
+
+
+
+
+ Tipo Decimal com 5 dígitos, sendo 3 de corpo e 2 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 5 dígitos, sendo 3 de corpo e 2 decimais, utilizado em tags opcionais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 11 dígitos, sendo 8 de corpo e 3 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 11 dígitos, sendo 8 de corpo e 3 decimais utilizado em tags opcionais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 12 dígitos, sendo 8 de corpo e 4decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 12 dígitos, sendo 8 de corpo e 4 decimais, utilizado em tags opcionais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 15 dígitos, sendo 11 de corpo e 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 15 dígitos, sendo 11 de corpo e 4 decimais, utilizado em tags opcionais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 15 dígitos, sendo 12 de corpo e 3 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 15 dígitos, sendo 12 de corpo e 3 decimais, utilizado em tags opcionais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 16 dígitos, sendo 12 de corpo e 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 16 dígitos, sendo 12 de corpo e 4 decimais, utilizado em tags opcionais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais, utilizado em tags opcionais
+
+
+
+
+
+
+
+
+ Tipo Decimal com até 21 dígitos, sendo 11 de corpo e até 10 decimais // aperfeiçoamento v2.0
+
+
+
+
+
+
+
+
+ Tipo Decimal com até 15 dígitos, sendo 11 de corpo e até 4 decimais // aperfeiçoamento v2.0
+
+
+
+
+
+
+
+
+ Tipo Inscrição Estadual do Destinatário // alterado para aceitar vazio ou ISENTO - maio/2010 v2.0
+
+
+
+
+
+
+
+
+ Tipo Inscrição Estadual do ST // acrescentado EM 24/10/08
+
+
+
+
+
+
+
+
+ Tipo Inscrição Estadual do Emitente // alterado EM 24/10/08 para aceitar ISENTO
+
+
+
+
+
+
+
+
+ Tipo Modelo Documento Fiscal
+
+
+
+
+
+
+
+
+ Tipo Número do Documento Fiscal
+
+
+
+
+
+
+
+
+ Tipo Série do Documento Fiscal
+
+
+
+
+
+
+
+
+ Tipo Código do Pais
+// PL_005d - 11/08/09
+eliminado:
+ 4235-LEBUAN, ILHAS -
+acrescentado:
+7200 SAO TOME E PRINCIPE, ILHAS,
+8958 ZONA DO CANAL DO PANAMA
+9903 PROVISAO DE NAVIOS E AERONAVES
+9946 A DESIGNAR
+9950 BANCOS CENTRAIS
+9970 ORGANIZACOES INTERNACIONAIS
+ // PL_005b - 24/10/08
+ // Acrescentado:
+ 4235 - LEBUAN,ILHAS
+ 4885 - MAYOTTE (ILHAS FRANCESAS)
+// NT2011/004
+ acrescentado a tabela de paises
+//PL_006t - 21/03/2014
+acrescentado:
+5780 - Palestina
+7600 - Sudão do Sul
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Sigla da UF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Sigla da UF de emissor // acrescentado em 24/10/08
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Ambiente
+
+
+
+
+
+
+
+
+
+ Tipo Versão do Aplicativo
+
+
+
+
+
+
+
+
+ Tipo Motivo
+
+
+
+
+
+
+
+
+ Tipo Justificativa
+
+
+
+
+
+
+
+
+ Tipo Serviço solicitado
+
+
+
+
+
+ Tipo ano
+
+
+
+
+
+
+
+
+ Tipo temp médio em segundos
+
+
+
+
+
+
+
+
+ Tipo string genérico
+
+
+
+
+
+
+
+
+ Tipo data AAAA-MM-DD
+
+
+
+
+
+
+
+
+ Tipo hora HH:MM:SS // tipo acrescentado na v2.0
+
+
+
+
+
+
+
+
+ Data e Hora, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Código de orgão (UF da tabela do IBGE + 90 RFB)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/tiposBasico_v3.10.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/tiposBasico_v3.10.xsd
new file mode 100644
index 00000000..bef05496
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/tiposBasico_v3.10.xsd
@@ -0,0 +1,571 @@
+
+
+
+
+
+ Tipo Código da UF da tabela do IBGE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Código do Município da tabela do IBGE
+
+
+
+
+
+
+
+
+ Tipo Chave da Nota Fiscal Eletrônica
+
+
+
+
+
+
+
+
+
+ Tipo Número do Protocolo de Status
+
+
+
+
+
+
+
+
+
+ Tipo Número do Recibo do envio de lote de NF-e
+
+
+
+
+
+
+
+
+
+ Tipo Código da Mensagem enviada
+
+
+
+
+
+
+
+
+
+ Tipo Número do CNPJ
+
+
+
+
+
+
+
+
+
+ Tipo Número do CNPJ tmanho varíavel (3-14)
+
+
+
+
+
+
+
+
+
+ Tipo Número do CNPJ Opcional
+
+
+
+
+
+
+
+
+
+ Tipo Número do CPF
+
+
+
+
+
+
+
+
+
+ Tipo Número do CPF de tamanho variável (3-11)
+
+
+
+
+
+
+
+
+
+ Tipo Decimal com até 2 dígitos inteiros, podendo ter de 1 até 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com até 3 dígitos inteiros, podendo ter de 2 até 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com até 3 dígitos inteiros e 2 até 4 decimais. Utilizados em TAGs opcionais, não aceita valor zero.
+
+
+
+
+
+
+
+
+ Tipo Decimal com 3 inteiros (no máximo 100), com 2 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 3 inteiros (no máximo 100), com até 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 8 inteiros, podendo ter de 1 até 3 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 11 inteiros, podendo ter 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 11 inteiros, podendo ter de 1 até 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 11 inteiros, podendo ter 4 decimais (utilizado em tags opcionais)
+
+
+
+
+
+
+
+
+ Tipo Decimal com 11 inteiros, podendo ter de 1 até 10 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 12 inteiros, podendo ter 3 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 12 inteiros e 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 12 inteiros de 1 até 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 12 inteiros com 1 até 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 12 inteiros, 1 a 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais, utilizado em tags opcionais
+
+
+
+
+
+
+
+
+ Tipo Inscrição Estadual do Destinatário // alterado para aceitar vazio ou ISENTO - maio/2010 v2.0
+
+
+
+
+
+
+
+
+
+ Tipo Inscrição Estadual do Destinatário // alterado para aceitar vazio ou ISENTO - maio/2010 v2.0
+
+
+
+
+
+
+
+
+
+ Tipo Inscrição Estadual do ST // acrescentado EM 24/10/08
+
+
+
+
+
+
+
+
+
+ Tipo Inscrição Estadual do Emitente // alterado EM 24/10/08 para aceitar ISENTO
+
+
+
+
+
+
+
+
+
+ Tipo Modelo Documento Fiscal
+
+
+
+
+
+
+
+
+
+ Tipo Número do Documento Fiscal
+
+
+
+
+
+
+
+
+ Tipo Série do Documento Fiscal
+
+
+
+
+
+
+
+
+ Tipo Sigla da UF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Sigla da UF de emissor // acrescentado em 24/10/08
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Ambiente
+
+
+
+
+
+
+
+
+
+ Tipo Versão do Aplicativo
+
+
+
+
+
+
+
+
+ Tipo Motivo
+
+
+
+
+
+
+
+
+ Tipo Justificativa
+
+
+
+
+
+
+
+
+ Tipo Serviço solicitado
+
+
+
+
+
+ Tipo ano
+
+
+
+
+
+
+
+
+ Tipo temp médio em segundos
+
+
+
+
+
+
+
+
+ Tipo string genérico
+
+
+
+
+
+
+
+
+ Tipo data AAAA-MM-DD
+
+
+
+
+
+
+
+
+ Tipo hora HH:MM:SS // tipo acrescentado na v2.0
+
+
+
+
+
+
+
+
+ Data e Hora, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Código de orgão (UF da tabela do IBGE + 90 RFB)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/tiposBasico_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/tiposBasico_v4.00.xsd
new file mode 100644
index 00000000..4d6a3e04
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/tiposBasico_v4.00.xsd
@@ -0,0 +1,589 @@
+
+
+
+
+
+ Tipo Código da UF da tabela do IBGE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Código do Município da tabela do IBGE
+
+
+
+
+
+
+
+
+ Tipo Chave da Nota Fiscal Eletrônica
+
+
+
+
+
+
+
+
+
+ Tipo Número do Protocolo de Status
+
+
+
+
+
+
+
+
+
+ Tipo Número do Recibo do envio de lote de NF-e
+
+
+
+
+
+
+
+
+
+ Tipo Código da Mensagem enviada
+
+
+
+
+
+
+
+
+
+ Tipo Número do CNPJ
+
+
+
+
+
+
+
+
+
+ Tipo Número do CNPJ tmanho varíavel (3-14)
+
+
+
+
+
+
+
+
+
+ Tipo Número do CNPJ Opcional
+
+
+
+
+
+
+
+
+
+ Tipo Número do CPF
+
+
+
+
+
+
+
+
+
+ Tipo Número do CPF de tamanho variável (3-11)
+
+
+
+
+
+
+
+
+
+ Tipo Decimal com até 1 dígitos inteiros, podendo ter de 1 até 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com até 2 dígitos inteiros, podendo ter de 1 até 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com até 3 dígitos inteiros, podendo ter de 2 até 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com até 3 dígitos inteiros e 2 até 4 decimais. Utilizados em TAGs opcionais, não aceita valor zero.
+
+
+
+
+
+
+
+
+ Tipo Decimal com 3 inteiros (no máximo 100), com 2 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 3 inteiros (no máximo 100), com 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 3 inteiros (no máximo 100), com até 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 8 inteiros, podendo ter de 1 até 3 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 11 inteiros, podendo ter 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 11 inteiros, podendo ter de 1 até 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 11 inteiros, podendo ter 4 decimais (utilizado em tags opcionais)
+
+
+
+
+
+
+
+
+ Tipo Decimal com 11 inteiros, podendo ter de 1 até 10 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 12 inteiros, podendo ter 3 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 12 inteiros e 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 12 inteiros de 1 até 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 12 inteiros com 1 até 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 12 inteiros, 1 a 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais, utilizado em tags opcionais
+
+
+
+
+
+
+
+
+ Tipo Inscrição Estadual do Destinatário // alterado para aceitar vazio ou ISENTO - maio/2010 v2.0
+
+
+
+
+
+
+
+
+
+ Tipo Inscrição Estadual do Destinatário // alterado para aceitar vazio ou ISENTO - maio/2010 v2.0
+
+
+
+
+
+
+
+
+
+ Tipo Inscrição Estadual do ST // acrescentado EM 24/10/08
+
+
+
+
+
+
+
+
+
+ Tipo Inscrição Estadual do Emitente // alterado EM 24/10/08 para aceitar ISENTO
+
+
+
+
+
+
+
+
+
+ Tipo Modelo Documento Fiscal
+
+
+
+
+
+
+
+
+
+ Tipo Número do Documento Fiscal
+
+
+
+
+
+
+
+
+ Tipo Série do Documento Fiscal
+
+
+
+
+
+
+
+
+ Tipo Sigla da UF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Sigla da UF de emissor // acrescentado em 24/10/08
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Ambiente
+
+
+
+
+
+
+
+
+
+ Tipo Versão do Aplicativo
+
+
+
+
+
+
+
+
+ Tipo Motivo
+
+
+
+
+
+
+
+
+ Tipo Justificativa
+
+
+
+
+
+
+
+
+ Tipo Serviço solicitado
+
+
+
+
+
+ Tipo ano
+
+
+
+
+
+
+
+
+ Tipo temp médio em segundos
+
+
+
+
+
+
+
+
+ Tipo string genérico
+
+
+
+
+
+
+
+
+ Tipo data AAAA-MM-DD
+
+
+
+
+
+
+
+
+ Tipo hora HH:MM:SS // tipo acrescentado na v2.0
+
+
+
+
+
+
+
+
+ Data e Hora, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Código de orgão (UF da tabela do IBGE + 90 RFB)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/tiposDistDFe_v1.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/tiposDistDFe_v1.00.xsd
new file mode 100644
index 00000000..c80cf730
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/tiposDistDFe_v1.00.xsd
@@ -0,0 +1,217 @@
+
+
+
+
+ Tipo número sequencial único
+
+
+
+
+
+
+
+ Tipo quantidade de NSU
+
+
+
+
+
+
+
+
+ Tipo Versão dos leiautes do Web Service NFeDistribuicaoDFe
+
+
+
+
+
+
+
+
+ Tipo Ambiente
+
+
+
+
+
+
+
+
+
+ Tipo Código da UF da tabela do IBGE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Código de orgão (UF da tabela do IBGE + 90 RFB)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Número do CNPJ
+
+
+
+
+
+
+
+
+
+ Tipo Número do CPF
+
+
+
+
+
+
+
+
+
+ Tipo Versão do Aplicativo
+
+
+
+
+
+
+
+
+ Tipo Código da Mensagem enviada
+
+
+
+
+
+
+
+
+
+ Tipo Motivo
+
+
+
+
+
+
+
+
+ Tipo string genérico
+
+
+
+
+
+
+
+
+ Tipo Chave da Nota Fiscal Eletrônica
+
+
+
+
+
+
+
+
+
+ Tipo Número do Protocolo de Status
+
+
+
+
+
+
+
+
+
+ Data e Hora, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm)
+
+
+
+
+
+
+
+
+ Tipo Inscrição Estadual do Emitente // alterado EM 24/10/08 para aceitar ISENTO
+
+
+
+
+
+
+
+
+
+ Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/tiposDistDFe_v1.01.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/tiposDistDFe_v1.01.xsd
new file mode 100644
index 00000000..acdee403
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/tiposDistDFe_v1.01.xsd
@@ -0,0 +1,218 @@
+
+
+
+
+ Tipo número sequencial único
+
+
+
+
+
+
+
+ Tipo quantidade de NSU
+
+
+
+
+
+
+
+
+ Tipo Versão dos leiautes do Web Service NFeDistribuicaoDFe
+
+
+
+
+
+
+
+
+ Tipo Ambiente
+
+
+
+
+
+
+
+
+
+ Tipo Código da UF da tabela do IBGE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Código de orgão (UF da tabela do IBGE + 90 RFB)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Número do CNPJ
+
+
+
+
+
+
+
+
+
+ Tipo Número do CPF
+
+
+
+
+
+
+
+
+
+ Tipo Versão do Aplicativo
+
+
+
+
+
+
+
+
+ Tipo Código da Mensagem enviada
+
+
+
+
+
+
+
+
+
+ Tipo Motivo
+
+
+
+
+
+
+
+
+ Tipo string genérico
+
+
+
+
+
+
+
+
+ Tipo Chave da Nota Fiscal Eletrônica
+
+
+
+
+
+
+
+
+
+ Tipo Número do Protocolo de Status
+
+
+
+
+
+
+
+
+
+ Data e Hora, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm)
+
+
+
+
+
+
+
+
+ Tipo Inscrição Estadual do Emitente // alterado EM 24/10/08 para aceitar ISENTO
+
+
+
+
+
+
+
+
+
+ Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4/xmldsig-core-schema_v1.01.xsd b/pysped/nfe/leiaute/schema/pl_009_v4/xmldsig-core-schema_v1.01.xsd
new file mode 100755
index 00000000..65daee9a
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4/xmldsig-core-schema_v1.01.xsd
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4b/consReciNFe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4b/consReciNFe_v4.00.xsd
new file mode 100644
index 00000000..121c7427
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4b/consReciNFe_v4.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do Pedido de Consulta do Recido do Lote de Notas Fiscais Eletrônicas
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4b/consSitNFe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4b/consSitNFe_v4.00.xsd
new file mode 100644
index 00000000..c55a4dc4
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4b/consSitNFe_v4.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema de validação XML dp Pedido de Consulta da Situação Atual da Nota Fiscal Eletrônica
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4b/consStatServ_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4b/consStatServ_v4.00.xsd
new file mode 100644
index 00000000..f089e0c3
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4b/consStatServ_v4.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do Pedido de Consulta do Status do Serviço
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4b/enviNFe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4b/enviNFe_v4.00.xsd
new file mode 100644
index 00000000..05ee5dcb
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4b/enviNFe_v4.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do Pedido de Concessão de Autorização da Nota Fiscal Eletrônica
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4b/inutNFe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4b/inutNFe_v4.00.xsd
new file mode 100644
index 00000000..461d0b9a
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4b/inutNFe_v4.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4b/leiauteConsSitNFe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4b/leiauteConsSitNFe_v4.00.xsd
new file mode 100644
index 00000000..5330c83d
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4b/leiauteConsSitNFe_v4.00.xsd
@@ -0,0 +1,502 @@
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Pedido de Consulta da Situação Atual da Nota Fiscal Eletrônica
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Serviço Solicitado
+
+
+
+
+
+
+
+
+
+ Chaves de acesso da NF-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, série e número da NF-e e código numérico + DV.
+
+
+
+
+
+
+
+ Tipo Retorno de Pedido de Consulta da Situação Atual da Nota Fiscal Eletrônica
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que processou a NF-e
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+ código da UF de atendimento
+
+
+
+
+ AAAA-MM-DDTHH:MM:SSTZD
+
+
+
+
+ Chaves de acesso da NF-e consultada
+
+
+
+
+ Protocolo de autorização de uso da NF-e
+
+
+
+
+ Protocolo de homologação de cancelamento de uso da NF-e
+
+
+
+
+ Protocolo de registro de evento da NF-e
+
+
+
+
+
+
+
+ Tipo Protocolo de status resultado do processamento da NF-e
+
+
+
+
+ Dados do protocolo de status
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que processou a NF-e
+
+
+
+
+ Chaves de acesso da NF-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, série e número da NF-e e código numérico+DV.
+
+
+
+
+ Data e hora de processamento, no formato AAAA-MM-DDTHH:MM:SS (ou AAAA-MM-DDTHH:MM:SSTZD, de acordo com versão). Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Lote de NF-e enviado.
+
+
+
+
+ Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - códiga da UF - 2 posições ano; 10 seqüencial no ano.
+
+
+
+
+ Digest Value da NF-e processada. Utilizado para conferir a integridade da NF-e original.
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo retorno Pedido de Cancelamento da Nota Fiscal Eletrônica
+
+
+
+
+ Dados do Resultado do Pedido de Cancelamento da Nota Fiscal Eletrônica
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que processou o pedido de cancelamento
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+ código da UF de atendimento
+
+
+
+
+ Chaves de acesso da NF-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, série e número da NF-e e código numérico + DV.
+
+
+
+
+ Data e hora de recebimento, no formato AAAA-MM-DDTHH:MM:SS. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação.
+
+
+
+
+ Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - código da UF - 2 posições ano; 10 seqüencial no ano.
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Evento
+
+
+
+
+
+
+
+ Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Identificação do autor do evento
+
+
+
+ CNPJ
+
+
+
+
+ CPF
+
+
+
+
+
+ Chave de Acesso da NF-e vinculada ao evento
+
+
+
+
+ Data e Hora do Evento, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm)
+
+
+
+
+ Tipo do Evento
+
+
+
+
+
+
+
+
+
+
+ Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial.
+
+
+
+
+
+
+
+
+
+
+ Versão do Tipo do Evento
+
+
+
+
+
+
+
+
+
+ Detalhe Específico do Evento
+
+
+
+
+
+
+
+
+
+
+
+ Identificador da TAG a ser assinada, a regra de formação do Id é:
+“ID” + tpEvento + chave da NF-e + nSeqEvento
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo retorno do Evento
+
+
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que recebeu o Evento
+
+
+
+
+ Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional
+
+
+
+
+ Código do status da registro do Evento
+
+
+
+
+ Descrição literal do status do registro do Evento
+
+
+
+
+ Chave de Acesso NF-e vinculada
+
+
+
+
+ Tipo do Evento vinculado
+
+
+
+
+
+
+
+
+
+
+ Descrição do Evento
+
+
+
+
+
+
+
+
+
+
+ Seqüencial do evento
+
+
+
+
+
+
+
+
+
+
+ Identificação do destinatpario da NF-e
+
+
+
+ CNPJ Destinatário
+
+
+
+
+ CPF Destiantário
+
+
+
+
+
+ email do destinatário
+
+
+
+
+
+
+
+
+
+
+ Data e Hora de registro do evento formato UTC AAAA-MM-DDTHH:MM:SSTZD
+
+
+
+
+ Número do protocolo de registro do evento
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo procEvento
+
+
+
+
+
+
+
+
+
+ Tipo Versão da NF-e
+
+
+
+
+
+
+
+ Tipo Versão do leiaute de Cancelamento de NF-e - 2.00/1.07
+
+
+
+
+
+
+
+ Tipo Versão do Evento 1.00
+
+
+
+
+
+
+
+ Tipo Versão do Evento
+
+
+
+
+
+
+
+ Tipo Versão do Leiaute da Cosulta situação NF-e - 4.00
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4b/leiauteConsStatServ_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4b/leiauteConsStatServ_v4.00.xsd
new file mode 100644
index 00000000..1442cf11
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4b/leiauteConsStatServ_v4.00.xsd
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+ Tipo Pedido de Consulta do Status do Serviço
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Sigla da UF consultada
+
+
+
+
+ Serviço Solicitado
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Resultado da Consulta do Status do Serviço
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que processou a NF-e
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+ Código da UF responsável pelo serviço
+
+
+
+
+ Data e hora do recebimento da consulta no formato AAAA-MM-DDTHH:MM:SSTZD
+
+
+
+
+ Tempo médio de resposta do serviço (em segundos) dos últimos 5 minutos
+
+
+
+
+ AAAA-MM-DDTHH:MM:SSDeve ser preenchida com data e hora previstas para o retorno dos serviços prestados.
+
+
+
+
+ Campo observação utilizado para incluir informações ao contribuinte
+
+
+
+
+
+
+
+ Tipo versão do leiuate da Consulta Status do Serviço 4.00
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4b/leiauteInutNFe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4b/leiauteInutNFe_v4.00.xsd
new file mode 100644
index 00000000..819597c1
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4b/leiauteInutNFe_v4.00.xsd
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+
+ Tipo Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica
+
+
+
+
+ Dados do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Serviço Solicitado
+
+
+
+
+
+
+
+
+
+ Código da UF do emitente
+
+
+
+
+ Ano de inutilização da numeração
+
+
+
+
+ CNPJ do emitente
+
+
+
+
+ Modelo da NF-e (55, 65 etc.)
+
+
+
+
+ Série da NF-e
+
+
+
+
+ Número da NF-e inicial
+
+
+
+
+ Número da NF-e final
+
+
+
+
+ Justificativa do pedido de inutilização
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo retorno do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica
+
+
+
+
+ Dados do Retorno do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que processou a NF-e
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+ Código da UF que atendeu a solicitação
+
+
+
+
+ Ano de inutilização da numeração
+
+
+
+
+ CNPJ do emitente
+
+
+
+
+ Modelo da NF-e (55, etc.)
+
+
+
+
+ Série da NF-e
+
+
+
+
+ Número da NF-e inicial
+
+
+
+
+ Número da NF-e final
+
+
+
+
+ Data e hora de recebimento, no formato AAAA-MM-DDTHH:MM:SS. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Pedido de Inutilização.
+
+
+
+
+ Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - código da UF - 2 posições ano; 10 seqüencial no ano.
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Pedido de inutilzação de númeração de NF-e processado
+
+
+
+
+
+
+
+
+
+ Tipo Versão do leiaute de Inutilização 4.00
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4b/leiauteNFe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4b/leiauteNFe_v4.00.xsd
new file mode 100644
index 00000000..8cde564b
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4b/leiauteNFe_v4.00.xsd
@@ -0,0 +1,6480 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Nota Fiscal Eletrônica
+
+
+
+
+ Informações da Nota Fiscal eletrônica
+
+
+
+
+
+ identificação da NF-e
+
+
+
+
+
+ Código da UF do emitente do Documento Fiscal. Utilizar a Tabela do IBGE.
+
+
+
+
+ Código numérico que compõe a Chave de Acesso. Número aleatório gerado pelo emitente para cada NF-e.
+
+
+
+
+
+
+
+
+
+
+ Descrição da Natureza da Operação
+
+
+
+
+
+
+
+
+
+
+ Código do modelo do Documento Fiscal. 55 = NF-e; 65 = NFC-e.
+
+
+
+
+ Série do Documento Fiscal
+série normal 0-889
+Avulsa Fisco 890-899
+SCAN 900-999
+
+
+
+
+ Número do Documento Fiscal
+
+
+
+
+ Data e Hora de emissão do Documento Fiscal (AAAA-MM-DDThh:mm:ssTZD) ex.: 2012-09-01T13:00:00-03:00
+
+
+
+
+ Data e Hora da saída ou de entrada da mercadoria / produto (AAAA-MM-DDTHH:mm:ssTZD)
+
+
+
+
+ Tipo do Documento Fiscal (0 - entrada; 1 - saída)
+
+
+
+
+
+
+
+
+
+
+
+ Identificador de Local de destino da operação (1-Interna;2-Interestadual;3-Exterior)
+
+
+
+
+
+
+
+
+
+
+
+
+ Código do Município de Ocorrência do Fato Gerador (utilizar a tabela do IBGE)
+
+
+
+
+ Formato de impressão do DANFE (0-sem DANFE;1-DANFe Retrato; 2-DANFe Paisagem;3-DANFe Simplificado;
+ 4-DANFe NFC-e;5-DANFe NFC-e em mensagem eletrônica)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Forma de emissão da NF-e
+1 - Normal;
+2 - Contingência FS
+3 - Contingência SCAN
+4 - Contingência DPEC
+5 - Contingência FSDA
+6 - Contingência SVC - AN
+7 - Contingência SVC - RS
+9 - Contingência off-line NFC-e
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Digito Verificador da Chave de Acesso da NF-e
+
+
+
+
+
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Finalidade da emissão da NF-e:
+1 - NFe normal
+2 - NFe complementar
+3 - NFe de ajuste
+4 - Devolução/Retorno
+
+
+
+
+ Indica operação com consumidor final (0-Não;1-Consumidor Final)
+
+
+
+
+
+
+
+
+
+
+
+ Indicador de presença do comprador no estabelecimento comercial no momento da oepração
+ (0-Não se aplica (ex.: Nota Fiscal complementar ou de ajuste;1-Operação presencial;2-Não presencial, internet;3-Não presencial, teleatendimento;4-NFC-e entrega em domicílio;5-Operação presencial, fora do estabelecimento;9-Não presencial, outros)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Processo de emissão utilizado com a seguinte codificação:
+0 - emissão de NF-e com aplicativo do contribuinte;
+1 - emissão de NF-e avulsa pelo Fisco;
+2 - emissão de NF-e avulsa, pelo contribuinte com seu certificado digital, através do site
+do Fisco;
+3- emissão de NF-e pelo contribuinte com aplicativo fornecido pelo Fisco.
+
+
+
+
+ versão do aplicativo utilizado no processo de
+emissão
+
+
+
+
+
+
+
+
+
+
+ Informar apenas
+para tpEmis diferente de 1
+
+
+
+ Informar a data e hora de entrada em contingência contingência no formato (AAAA-MM-DDThh:mm:ssTZD) ex.: 2012-09-01T13:00:00-03:00.
+
+
+
+
+ Informar a Justificativa da entrada
+
+
+
+
+
+
+
+
+
+
+
+ Grupo de infromações da NF referenciada
+
+
+
+
+
+ Chave de acesso das NF-e referenciadas. Chave de acesso compostas por Código da UF (tabela do IBGE) + AAMM da emissão + CNPJ do Emitente + modelo, série e número da NF-e Referenciada + Código Numérico + DV.
+
+
+
+
+ Dados da NF modelo 1/1A referenciada ou NF modelo 2 referenciada
+
+
+
+
+
+ Código da UF do emitente do Documento Fiscal. Utilizar a Tabela do IBGE.
+
+
+
+
+ AAMM da emissão
+
+
+
+
+
+
+
+
+
+
+ CNPJ do emitente do documento fiscal referenciado
+
+
+
+
+ Código do modelo do Documento Fiscal. Utilizar 01 para NF modelo 1/1A e 02 para NF modelo 02
+
+
+
+
+
+
+
+
+
+
+
+ Série do Documento Fiscal, informar zero se inexistente
+
+
+
+
+ Número do Documento Fiscal
+
+
+
+
+
+
+
+ Grupo com as informações NF de produtor referenciada
+
+
+
+
+
+ Código da UF do emitente do Documento FiscalUtilizar a Tabela do IBGE (Anexo IV - Tabela de UF, Município e País)
+
+
+
+
+ AAMM da emissão da NF de produtor
+
+
+
+
+
+
+
+
+
+
+
+ CNPJ do emitente da NF de produtor
+
+
+
+
+ CPF do emitente da NF de produtor
+
+
+
+
+
+ IE do emitente da NF de Produtor
+
+
+
+
+ Código do modelo do Documento Fiscal - utilizar 04 para NF de produtor ou 01 para NF Avulsa
+
+
+
+
+
+
+
+
+
+
+
+ Série do Documento Fiscal, informar zero se inexistentesérie
+
+
+
+
+ Número do Documento Fiscal - 1 – 999999999
+
+
+
+
+
+
+
+ Utilizar esta TAG para referenciar um CT-e emitido anteriormente, vinculada a NF-e atual
+
+
+
+
+ Grupo do Cupom Fiscal vinculado à NF-e
+
+
+
+
+
+ Código do modelo do Documento Fiscal
+Preencher com "2B", quando se tratar de Cupom Fiscal emitido por máquina registradora (não ECF), com "2C", quando se tratar de Cupom Fiscal PDV, ou "2D", quando se tratar de Cupom Fiscal (emitido por ECF)
+
+
+
+
+
+
+
+
+
+
+
+
+ Informar o número de ordem seqüencial do ECF que emitiu o Cupom Fiscal vinculado à NF-e
+
+
+
+
+
+
+
+
+
+
+ Informar o Número do Contador de Ordem de Operação - COO vinculado à NF-e
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Identificação do emitente
+
+
+
+
+
+
+ Número do CNPJ do emitente
+
+
+
+
+ Número do CPF do emitente
+
+
+
+
+
+ Razão Social ou Nome do emitente
+
+
+
+
+
+
+
+
+
+
+ Nome fantasia
+
+
+
+
+
+
+
+
+
+
+ Endereço do emitente
+
+
+
+
+ Inscrição Estadual do Emitente
+
+
+
+
+ Inscricao Estadual do Substituto Tributário
+
+
+
+
+ Grupo de informações de interesse da Prefeitura
+
+
+
+ Inscrição Municipal
+
+
+
+
+
+
+
+
+
+
+ CNAE Fiscal
+
+
+
+
+
+
+
+
+
+
+
+ Código de Regime Tributário.
+Este campo será obrigatoriamente preenchido com:
+1 – Simples Nacional;
+2 – Simples Nacional – excesso de sublimite de receita bruta;
+3 – Regime Normal.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Emissão de avulsa, informar os dados do Fisco emitente
+
+
+
+
+
+ CNPJ do Órgão emissor
+
+
+
+
+ Órgão emitente
+
+
+
+
+
+
+
+
+
+
+ Matrícula do agente
+
+
+
+
+
+
+
+
+
+
+ Nome do agente
+
+
+
+
+
+
+
+
+
+
+ Telefone
+
+
+
+
+
+
+
+
+
+
+ Sigla da Unidade da Federação
+
+
+
+
+ Número do Documento de Arrecadação de Receita
+
+
+
+
+
+
+
+
+
+
+ Data de emissão do DAR (AAAA-MM-DD)
+
+
+
+
+ Valor Total constante no DAR
+
+
+
+
+ Repartição Fiscal emitente
+
+
+
+
+
+
+
+
+
+
+ Data de pagamento do DAR (AAAA-MM-DD)
+
+
+
+
+
+
+
+ Identificação do Destinatário
+
+
+
+
+
+
+ Número do CNPJ
+
+
+
+
+ Número do CPF
+
+
+
+
+ Identificador do destinatário, em caso de comprador estrangeiro
+
+
+
+
+
+
+
+
+
+
+
+ Razão Social ou nome do destinatário
+
+
+
+
+
+
+
+
+
+
+ Dados do endereço
+
+
+
+
+ Indicador da IE do destinatário:
+1 – Contribuinte ICMSpagamento à vista;
+2 – Contribuinte isento de inscrição;
+9 – Não Contribuinte
+
+
+
+
+
+
+
+
+
+
+
+
+ Inscrição Estadual (obrigatório nas operações com contribuintes do ICMS)
+
+
+
+
+ Inscrição na SUFRAMA (Obrigatório nas operações com as áreas com benefícios de incentivos fiscais sob controle da SUFRAMA) PL_005d - 11/08/09 - alterado para aceitar 8 ou 9 dígitos
+
+
+
+
+
+
+
+
+
+
+ Inscrição Municipal do tomador do serviço
+
+
+
+
+
+
+
+
+
+
+ Informar o e-mail do destinatário. O campo pode ser utilizado para informar o e-mail
+de recepção da NF-e indicada pelo destinatário
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Identificação do Local de Retirada (informar apenas quando for diferente do endereço do remetente)
+
+
+
+
+ Identificação do Local de Entrega (informar apenas quando for diferente do endereço do destinatário)
+
+
+
+
+ Pessoas autorizadas para o download do XML da NF-e
+
+
+
+
+
+ CNPJ Autorizado
+
+
+
+
+ CPF Autorizado
+
+
+
+
+
+
+
+ Dados dos detalhes da NF-e
+
+
+
+
+
+ Dados dos produtos e serviços da NF-e
+
+
+
+
+
+ Código do produto ou serviço. Preencher com CFOP caso se trate de itens não relacionados com mercadorias/produto e que o contribuinte não possua codificação própria
+Formato ”CFOP9999”.
+
+
+
+
+
+
+
+
+
+
+ GTIN (Global Trade Item Number) do produto, antigo código EAN ou código de barras
+
+
+
+
+
+
+
+
+
+
+ Descrição do produto ou serviço
+
+
+
+
+
+
+
+
+
+
+ Código NCM (8 posições), será permitida a informação do gênero (posição do capítulo do NCM) quando a operação não for de comércio exterior (importação/exportação) ou o produto não seja tributado pelo IPI. Em caso de item de serviço ou item que não tenham produto (Ex. transferência de crédito, crédito do ativo imobilizado, etc.), informar o código 00 (zeros) (v2.0)
+
+
+
+
+
+
+
+
+
+
+ Nomenclatura de Valor aduaneio e Estatístico
+
+
+
+
+
+
+
+
+
+
+
+ Codigo especificador da Substuicao Tributaria - CEST, que identifica a mercadoria sujeita aos regimes de substituicao tributária e de antecipação do recolhimento do imposto
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CNPJ do Fabricante da Mercadoria, obrigatório para produto em escala NÃO relevante.
+
+
+
+
+
+
+
+
+
+
+
+
+ Código EX TIPI (3 posições)
+
+
+
+
+
+
+
+
+
+
+ Cfop
+
+
+
+
+
+
+
+
+
+
+ Unidade comercial
+
+
+
+
+
+
+
+
+
+
+ Quantidade Comercial do produto, alterado para aceitar de 0 a 4 casas decimais e 11 inteiros.
+
+
+
+
+ Valor unitário de comercialização - alterado para aceitar 0 a 10 casas decimais e 11 inteiros
+
+
+
+
+ Valor bruto do produto ou serviço.
+
+
+
+
+ GTIN (Global Trade Item Number) da unidade tributável, antigo código EAN ou código de barras
+
+
+
+
+
+
+
+
+
+
+ Unidade Tributável
+
+
+
+
+
+
+
+
+
+
+ Quantidade Tributável - alterado para aceitar de 0 a 4 casas decimais e 11 inteiros
+
+
+
+
+ Valor unitário de tributação - - alterado para aceitar 0 a 10 casas decimais e 11 inteiros
+
+
+
+
+ Valor Total do Frete
+
+
+
+
+ Valor Total do Seguro
+
+
+
+
+ Valor do Desconto
+
+
+
+
+ Outras despesas acessórias
+
+
+
+
+ Este campo deverá ser preenchido com:
+ 0 – o valor do item (vProd) não compõe o valor total da NF-e (vProd)
+ 1 – o valor do item (vProd) compõe o valor total da NF-e (vProd)
+
+
+
+
+
+
+
+
+
+
+
+ Delcaração de Importação
+(NT 2011/004)
+
+
+
+
+
+ Numero do Documento de Importação DI/DSI/DA/DRI-E (DI/DSI/DA/DRI-E) (NT2011/004)
+
+
+
+
+
+
+
+
+
+
+ Data de registro da DI/DSI/DA (AAAA-MM-DD)
+
+
+
+
+ Local do desembaraço aduaneiro
+
+
+
+
+
+
+
+
+
+
+ UF onde ocorreu o desembaraço aduaneiro
+
+
+
+
+ Data do desembaraço aduaneiro (AAAA-MM-DD)
+
+
+
+
+ Via de transporte internacional informada na DI
+ 1-Maritima;2-Fluvial;3-Lacustre;4-Aerea;5-Postal;6-Ferroviaria;7-Rodoviaria;8-Conduto;9-Meios Proprios;10-Entrada/Saida Ficta.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor Adicional ao frete para renovação de marinha mercante
+
+
+
+
+ Forma de Importação quanto a intermediação
+ 1-por conta propria;2-por conta e ordem;3-encomenda
+
+
+
+
+
+
+
+
+
+
+
+
+ CNPJ do adquirente ou do encomendante
+
+
+
+
+ Sigla da UF do adquirente ou do encomendante
+
+
+
+
+ Código do exportador (usado nos sistemas internos de informação do emitente da NF-e)
+
+
+
+
+
+
+
+
+
+
+ Adições (NT 2011/004)
+
+
+
+
+
+ Número da Adição
+
+
+
+
+
+
+
+
+
+
+ Número seqüencial do item dentro da Adição
+
+
+
+
+
+
+
+
+
+
+ Código do fabricante estrangeiro (usado nos sistemas internos de informação do emitente da NF-e)
+
+
+
+
+
+
+
+
+
+
+ Valor do desconto do item da DI – adição
+
+
+
+
+ Número do ato concessório de Drawback
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Detalhe da exportação
+
+
+
+
+
+ Número do ato concessório de Drawback
+
+
+
+
+
+
+
+
+
+
+ Exportação indireta
+
+
+
+
+
+ Registro de exportação
+
+
+
+
+
+
+
+
+
+
+ Chave de acesso da NF-e recebida para exportação
+
+
+
+
+ Quantidade do item efetivamente exportado
+
+
+
+
+
+
+
+
+
+
+ pedido de compra - Informação de interesse do emissor para controle do B2B.
+
+
+
+
+
+
+
+
+
+
+ Número do Item do Pedido de Compra - Identificação do número do item do pedido de Compra
+
+
+
+
+
+
+
+
+
+
+ Número de controle da FCI - Ficha de Conteúdo de Importação.
+
+
+
+
+
+
+
+ Número do lote do produto.
+
+
+
+
+
+
+
+
+
+
+ Quantidade de produto no lote.
+
+
+
+
+ Data de fabricação/produção. Formato "AAAA-MM-DD".
+
+
+
+
+ Data de validade. Informar o último dia do mês caso a validade não especifique o dia. Formato "AAAA-MM-DD".
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Informações específicas de produtos e serviços
+
+
+
+ Veículos novos
+
+
+
+
+
+ Tipo da Operação (1 - Venda concessionária; 2 - Faturamento direto; 3 - Venda direta; 0 - Outros)
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Chassi do veículo - VIN (código-identificação-veículo)
+
+
+
+
+
+
+
+
+
+
+
+ Cor do veículo (código de cada montadora)
+
+
+
+
+
+
+
+
+
+
+ Descrição da cor
+
+
+
+
+
+
+
+
+
+
+ Potência máxima do motor do veículo em cavalo vapor (CV). (potência-veículo)
+
+
+
+
+
+
+
+
+
+
+ Capacidade voluntária do motor expressa em centímetros cúbicos (CC). (cilindradas)
+
+
+
+
+
+
+
+
+
+
+ Peso líquido
+
+
+
+
+
+
+
+
+
+
+ Peso bruto
+
+
+
+
+
+
+
+
+
+
+ Serial (série)
+
+
+
+
+
+
+
+
+
+
+ Tipo de combustível-Tabela RENAVAM: 01-Álcool; 02-Gasolina; 03-Diesel; 16-Álcool/Gas.; 17-Gas./Álcool/GNV; 18-Gasolina/Elétrico
+
+
+
+
+
+
+
+
+
+
+ Número do motor
+
+
+
+
+
+
+
+
+
+
+ CMT-Capacidade Máxima de Tração - em Toneladas 4 casas decimais
+
+
+
+
+
+
+
+
+
+
+ Distância entre eixos
+
+
+
+
+
+
+
+
+
+
+ Ano Modelo de Fabricação
+
+
+
+
+
+
+
+
+
+
+ Ano de Fabricação
+
+
+
+
+
+
+
+
+
+
+ Tipo de pintura
+
+
+
+
+
+
+
+
+
+ Tipo de veículo (utilizar tabela RENAVAM)
+
+
+
+
+
+
+
+
+
+
+ Espécie de veículo (utilizar tabela RENAVAM)
+
+
+
+
+
+
+
+
+
+
+ Informa-se o veículo tem VIN (chassi) remarcado.
+R-Remarcado
+N-NormalVIN
+
+
+
+
+
+
+
+
+
+
+
+ Condição do veículo (1 - acabado; 2 - inacabado; 3 - semi-acabado)
+
+
+
+
+
+
+
+
+
+
+
+
+ Código Marca Modelo (utilizar tabela RENAVAM)
+
+
+
+
+
+
+
+
+
+
+ Código da Cor Segundo as regras de pré-cadastro do DENATRAN: 01-AMARELO;02-AZUL;03-BEGE;04-BRANCA;05-CINZA;06-DOURADA;07-GRENA
+08-LARANJA;09-MARROM;10-PRATA;11-PRETA;12-ROSA;13-ROXA;14-VERDE;15-VERMELHA;16-FANTASIA
+
+
+
+
+
+
+
+
+
+
+
+
+ Quantidade máxima de permitida de passageiros sentados, inclusive motorista.
+
+
+
+
+
+
+
+
+
+
+
+
+ Restrição
+0 - Não há;
+1 - Alienação Fiduciária;
+2 - Arrendamento Mercantil;
+3 - Reserva de Domínio;
+4 - Penhor de Veículos;
+9 - outras.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ grupo do detalhamento de Medicamentos e de matérias-primas farmacêuticas
+
+
+
+
+
+ Utilizar o número do registro ANVISA
+Obs.: Para medicamento isento de registro na ANVISA, utilizar o número da decisão que o isenta, como por exemplo o número da Resolução da Diretoria Colegiada da ANVISA (RDC).
+
+
+
+
+
+
+
+
+
+ Preço Máximo ao Consumidor.
+
+
+
+
+
+
+
+ Armamentos
+
+
+
+
+
+ Indicador do tipo de arma de fogo (0 - Uso permitido; 1 - Uso restrito)
+
+
+
+
+
+
+
+
+
+
+
+ Número de série da arma
+
+
+
+
+
+
+
+
+
+
+ Número de série do cano
+
+
+
+
+
+
+
+
+
+
+ Descrição completa da arma, compreendendo: calibre, marca, capacidade, tipo de funcionamento, comprimento e demais elementos que permitam a sua perfeita identificação.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Informar apenas para operações com combustíveis líquidos
+
+
+
+
+
+ Código de produto da ANP. codificação de produtos do SIMP (http://www.anp.gov.br)
+
+
+
+
+
+
+
+
+
+
+ Descrição do Produto conforme ANP. Utilizar a descrição de produtos do Sistema de Informações de Movimentação de Produtos - SIMP (http://www.anp.gov.br/simp/).
+
+
+
+
+
+
+
+
+
+
+ Percentual do GLP derivado do petróleo no produto GLP (cProdANP=210203001). Informar em número decimal o percentual do GLP derivado de petróleo no produto GLP. Valores 0 a 100.
+
+
+
+
+ Percentual de gás natural nacional - GLGNn para o produto GLP (cProdANP=210203001). Informar em número decimal o percentual do Gás Natural Nacional - GLGNn para o produto GLP. Valores de 0 a 100.
+
+
+
+
+ Percentual de gás natural importado GLGNi para o produto GLP (cProdANP=210203001). Informar em número deciaml o percentual do Gás Natural Importado - GLGNi para o produto GLP. Valores de 0 a 100.
+
+
+
+
+ Valor de partida (cProdANP=210203001). Deve ser informado neste campo o valor por quilograma sem ICMS.
+
+
+
+
+ Código de autorização / registro do CODIF. Informar apenas quando a UF utilizar o CODIF (Sistema de Controle do Diferimento do Imposto nas Operações com AEAC - Álcool Etílico Anidro Combustível).
+
+
+
+
+
+
+
+
+
+
+ Quantidade de combustível
+faturada à temperatura ambiente.
+Informar quando a quantidade
+faturada informada no campo
+qCom (I10) tiver sido ajustada para
+uma temperatura diferente da
+ambiente.
+
+
+
+
+ Sigla da UF de Consumo
+
+
+
+
+ CIDE Combustíveis
+
+
+
+
+
+ BC do CIDE ( Quantidade comercializada)
+
+
+
+
+ Alíquota do CIDE (em reais)
+
+
+
+
+ Valor do CIDE
+
+
+
+
+
+
+
+ Informações do grupo de "encerrante"
+
+
+
+
+
+ Numero de identificação do Bico utilizado no abastecimento
+
+
+
+
+
+
+
+
+
+
+ Numero de identificação da bomba ao qual o bico está interligado
+
+
+
+
+
+
+
+
+
+
+ Numero de identificação do tanque ao qual o bico está interligado
+
+
+
+
+
+
+
+
+
+
+ Valor do Encerrante no ínicio do abastecimento
+
+
+
+
+ Valor do Encerrante no final do abastecimento
+
+
+
+
+
+
+
+
+
+
+ Número do RECOPI
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tributos incidentes nos produtos ou serviços da NF-e
+
+
+
+
+
+ Valor estimado total de impostos federais, estaduais e municipais
+
+
+
+
+
+
+ Dados do ICMS Normal e ST
+
+
+
+
+
+ Tributação pelo ICMS
+00 - Tributada integralmente
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+ Tributção pelo ICMS
+00 - Tributada integralmente
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS:
+0 - Margem Valor Agregado (%);
+1 - Pauta (valor);
+2 - Preço Tabelado Máximo (valor);
+3 - Valor da Operação.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do ICMS
+
+
+
+
+ Alíquota do ICMS
+
+
+
+
+ Valor do ICMS
+
+
+
+
+
+ Percentual de ICMS relativo ao Fundo de Combate à Pobreza (FCP).
+
+
+
+
+ Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP).
+
+
+
+
+
+
+
+
+ Tributação pelo ICMS
+10 - Tributada e com cobrança do ICMS por substituição tributária
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+ 10 - Tributada e com cobrança do ICMS por substituição tributária
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS:
+0 - Margem Valor Agregado (%);
+1 - Pauta (valor);
+2 - Preço Tabelado Máximo (valor);
+3 - Valor da Operação.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do ICMS
+
+
+
+
+ Alíquota do ICMS
+
+
+
+
+ Valor do ICMS
+
+
+
+
+
+ Valor da Base de cálculo do FCP.
+
+
+
+
+ Percentual de ICMS relativo ao Fundo de Combate à Pobreza (FCP).
+
+
+
+
+ Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP).
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS ST:
+0 – Preço tabelado ou máximo sugerido;
+1 - Lista Negativa (valor);
+2 - Lista Positiva (valor);
+3 - Lista Neutra (valor);
+4 - Margem Valor Agregado (%);
+5 - Pauta (valor);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual da Margem de Valor Adicionado ICMS ST
+
+
+
+
+ Percentual de redução da BC ICMS ST
+
+
+
+
+ Valor da BC do ICMS ST
+
+
+
+
+ Alíquota do ICMS ST
+
+
+
+
+ Valor do ICMS ST
+
+
+
+
+
+ Valor da Base de cálculo do FCP retido por substituicao tributaria.
+
+
+
+
+ Percentual de FCP retido por substituição tributária.
+
+
+
+
+ Valor do FCP retido por substituição tributária.
+
+
+
+
+
+
+
+
+ Tributção pelo ICMS
+20 - Com redução de base de cálculo
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+ Tributção pelo ICMS
+20 - Com redução de base de cálculo
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS:
+0 - Margem Valor Agregado (%);
+1 - Pauta (valor);
+2 - Preço Tabelado Máximo (valor);
+3 - Valor da Operação.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual de redução da BC
+
+
+
+
+ Valor da BC do ICMS
+
+
+
+
+ Alíquota do ICMS
+
+
+
+
+ Valor do ICMS
+
+
+
+
+
+ Valor da Base de cálculo do FCP.
+
+
+
+
+ Percentual de ICMS relativo ao Fundo de Combate à Pobreza (FCP).
+
+
+
+
+ Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP).
+
+
+
+
+
+ Grupo desoneração
+
+
+
+ Valor do ICMS de desoneração
+
+
+
+
+ Motivo da desoneração do ICMS:3-Uso na agropecuária;9-Outros;12-Fomento agropecuário
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tributação pelo ICMS
+30 - Isenta ou não tributada e com cobrança do ICMS por substituição tributária
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+ Tributção pelo ICMS
+30 - Isenta ou não tributada e com cobrança do ICMS por substituição tributária
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS ST:
+0 – Preço tabelado ou máximo sugerido;
+1 - Lista Negativa (valor);
+2 - Lista Positiva (valor);
+3 - Lista Neutra (valor);
+4 - Margem Valor Agregado (%);
+5 - Pauta (valor).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual da Margem de Valor Adicionado ICMS ST
+
+
+
+
+ Percentual de redução da BC ICMS ST
+
+
+
+
+ Valor da BC do ICMS ST
+
+
+
+
+ Alíquota do ICMS ST
+
+
+
+
+ Valor do ICMS ST
+
+
+
+
+
+ Valor da Base de cálculo do FCP.
+
+
+
+
+ Percentual de FCP retido por substituição tributária.
+
+
+
+
+ Valor do FCP retido por substituição tributária.
+
+
+
+
+
+ Grupo desoneração
+
+
+
+ Valor do ICMS de desoneração
+
+
+
+
+ Motivo da desoneração do ICMS:6-Utilitários Motocicleta AÁrea Livre;7-SUFRAMA;9-Outros
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tributação pelo ICMS
+40 - Isenta
+41 - Não tributada
+50 - Suspensão
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+ Tributação pelo ICMS
+40 - Isenta
+41 - Não tributada
+50 - Suspensão
+51 - Diferimento
+
+
+
+
+
+
+
+
+
+
+
+
+
+ O valor do ICMS será informado apenas nas operações com veículos beneficiados com a desoneração condicional do ICMS.
+
+
+
+
+ Este campo será preenchido quando o campo anterior estiver preenchido.
+Informar o motivo da desoneração:
+1 – Táxi;
+3 – Produtor Agropecuário;
+4 – Frotista/Locadora;
+5 – Diplomático/Consular;
+6 – Utilitários e Motocicletas da Amazônia Ocidental e Áreas de Livre Comércio (Resolução 714/88 e 790/94 – CONTRAN e suas alterações);
+7 – SUFRAMA;
+8 - Venda a órgão Público;
+9 – Outros
+10- Deficiente Condutor
+11- Deficiente não condutor
+16 - Olimpíadas Rio 2016
+90 - Solicitado pelo Fisco
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tributção pelo ICMS
+51 - Diferimento
+A exigência do preenchimento das informações do ICMS diferido fica à critério de cada UF.
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+ Tributção pelo ICMS
+20 - Com redução de base de cálculo
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS:
+0 - Margem Valor Agregado (%);
+1 - Pauta (valor);
+2 - Preço Tabelado Máximo (valor);
+3 - Valor da Operação.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual de redução da BC
+
+
+
+
+ Valor da BC do ICMS
+
+
+
+
+ Alíquota do imposto
+
+
+
+
+ Valor do ICMS da Operação
+
+
+
+
+ Percentual do diferemento
+
+
+
+
+ Valor do ICMS da diferido
+
+
+
+
+ Valor do ICMS
+
+
+
+
+
+ Valor da Base de cálculo do FCP.
+
+
+
+
+ Percentual de ICMS relativo ao Fundo de Combate à Pobreza (FCP).
+
+
+
+
+ Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP).
+
+
+
+
+
+
+
+
+ Tributação pelo ICMS
+60 - ICMS cobrado anteriormente por substituição tributária
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+ Tributação pelo ICMS
+60 - ICMS cobrado anteriormente por substituição tributária
+
+
+
+
+
+
+
+
+
+
+ NT2010/004
+
+
+
+ Valor da BC do ICMS ST retido anteriormente
+
+
+
+
+ Aliquota suportada pelo consumidor final.
+
+
+
+
+ Valor do ICMS ST retido anteriormente
+
+
+
+
+
+
+ Valor da Base de cálculo do FCP retido anteriormente por ST.
+
+
+
+
+ Percentual de FCP retido anteriormente por substituição tributária.
+
+
+
+
+ Valor do FCP retido por substituição tributária.
+
+
+
+
+
+
+
+
+ Percentual de redução da base de cálculo efetiva.
+
+
+
+
+ Valor da base de cálculo efetiva.
+
+
+
+
+ Alíquota do ICMS efetiva.
+
+
+
+
+ Valor do ICMS efetivo.
+
+
+
+
+
+
+
+
+ Tributação pelo ICMS
+70 - Com redução de base de cálculo e cobrança do ICMS por substituição tributária
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+ Tributção pelo ICMS
+70 - Com redução de base de cálculo e cobrança do ICMS por substituição tributária
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS:
+0 - Margem Valor Agregado (%);
+1 - Pauta (valor);
+2 - Preço Tabelado Máximo (valor);
+3 - Valor da Operação.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual de redução da BC
+
+
+
+
+ Valor da BC do ICMS
+
+
+
+
+ Alíquota do ICMS
+
+
+
+
+ Valor do ICMS
+
+
+
+
+
+ Valor da Base de cálculo do FCP.
+
+
+
+
+ Percentual de ICMS relativo ao Fundo de Combate à Pobreza (FCP).
+
+
+
+
+ Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP).
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS ST:
+0 – Preço tabelado ou máximo sugerido;
+1 - Lista Negativa (valor);
+2 - Lista Positiva (valor);
+3 - Lista Neutra (valor);
+4 - Margem Valor Agregado (%);
+5 - Pauta (valor).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual da Margem de Valor Adicionado ICMS ST
+
+
+
+
+ Percentual de redução da BC ICMS ST
+
+
+
+
+ Valor da BC do ICMS ST
+
+
+
+
+ Alíquota do ICMS ST
+
+
+
+
+ Valor do ICMS ST
+
+
+
+
+
+ Valor da Base de cálculo do FCP retido por substituição tributária.
+
+
+
+
+ Percentual de FCP retido por substituição tributária.
+
+
+
+
+ Valor do FCP retido por substituição tributária.
+
+
+
+
+
+ Grupo desoneração
+
+
+
+ Valor do ICMS de desoneração
+
+
+
+
+ Motivo da desoneração do ICMS:3-Uso na agropecuária;9-Outros;12-Fomento agropecuário
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tributação pelo ICMS
+90 - Outras
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+ Tributção pelo ICMS
+90 - Outras
+
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS:
+0 - Margem Valor Agregado (%);
+1 - Pauta (valor);
+2 - Preço Tabelado Máximo (valor);
+3 - Valor da Operação.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do ICMS
+
+
+
+
+ Percentual de redução da BC
+
+
+
+
+ Alíquota do ICMS
+
+
+
+
+ Valor do ICMS
+
+
+
+
+
+ Valor da Base de cálculo do FCP.
+
+
+
+
+ Percentual de ICMS relativo ao Fundo de Combate à Pobreza (FCP).
+
+
+
+
+ Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP).
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS ST:
+0 – Preço tabelado ou máximo sugerido;
+1 - Lista Negativa (valor);
+2 - Lista Positiva (valor);
+3 - Lista Neutra (valor);
+4 - Margem Valor Agregado (%);
+5 - Pauta (valor).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual da Margem de Valor Adicionado ICMS ST
+
+
+
+
+ Percentual de redução da BC ICMS ST
+
+
+
+
+ Valor da BC do ICMS ST
+
+
+
+
+ Alíquota do ICMS ST
+
+
+
+
+ Valor do ICMS ST
+
+
+
+
+
+ Valor da Base de cálculo do FCP.
+
+
+
+
+ Percentual de FCP retido por substituição tributária.
+
+
+
+
+ Valor do FCP retido por substituição tributária.
+
+
+
+
+
+
+ Grupo desoneração
+
+
+
+ Valor do ICMS de desoneração
+
+
+
+
+ Motivo da desoneração do ICMS:3-Uso na agropecuária;9-Outros;12-Fomento agropecuário
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Partilha do ICMS entre a UF de origem e UF de destino ou a UF definida na legislação
+Operação interestadual para consumidor final com partilha do ICMS devido na operação entre a UF de origem e a UF do destinatário ou ou a UF definida na legislação. (Ex. UF da concessionária de entrega do veículos)
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+ Tributação pelo ICMS
+10 - Tributada e com cobrança do ICMS por substituição tributária;
+90 – Outros.
+
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS:
+0 - Margem Valor Agregado (%);
+1 - Pauta (valor);
+2 - Preço Tabelado Máximo (valor);
+3 - Valor da Operação.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do ICMS
+
+
+
+
+ Percentual de redução da BC
+
+
+
+
+ Alíquota do ICMS
+
+
+
+
+ Valor do ICMS
+
+
+
+
+ Modalidade de determinação da BC do ICMS ST:
+0 – Preço tabelado ou máximo sugerido;
+1 - Lista Negativa (valor);
+2 - Lista Positiva (valor);
+3 - Lista Neutra (valor);
+4 - Margem Valor Agregado (%);
+5 - Pauta (valor).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual da Margem de Valor Adicionado ICMS ST
+
+
+
+
+ Percentual de redução da BC ICMS ST
+
+
+
+
+ Valor da BC do ICMS ST
+
+
+
+
+ Alíquota do ICMS ST
+
+
+
+
+ Valor do ICMS ST
+
+
+
+
+ Percentual para determinação do valor da Base de Cálculo da operação própria.
+
+
+
+
+ Sigla da UF para qual é devido o ICMS ST da operação.
+
+
+
+
+
+
+
+ Grupo de informação do ICMSST devido para a UF de destino, nas operações interestaduais de produtos que tiveram retenção antecipada de ICMS por ST na UF do remetente. Repasse via Substituto Tributário.
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+ Tributção pelo ICMS
+41-Não Tributado.
+60-Cobrado anteriormente por substituição tributária.
+
+
+
+
+
+
+
+
+
+
+
+ Informar o valor da BC do ICMS ST retido na UF remetente
+
+
+
+
+ Informar o valor do ICMS ST retido na UF remetente (iv2.0))
+
+
+
+
+ Informar o valor da BC do ICMS ST da UF destino
+
+
+
+
+ Informar o valor da BC do ICMS ST da UF destino (v2.0)
+
+
+
+
+
+
+
+ Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=101 (v.2.0)
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+(v2.0)
+
+
+
+
+ 101- Tributada pelo Simples Nacional com permissão de crédito. (v.2.0)
+
+
+
+
+
+
+
+
+
+
+ Alíquota aplicável de cálculo do crédito (Simples Nacional). (v2.0)
+
+
+
+
+ Valor crédito do ICMS que pode ser aproveitado nos termos do art. 23 da LC 123 (Simples Nacional) (v2.0)
+
+
+
+
+
+
+
+ Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=102, 103, 300 ou 400 (v.2.0))
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+(v2.0)
+
+
+
+
+ 102- Tributada pelo Simples Nacional sem permissão de crédito.
+103 – Isenção do ICMS no Simples Nacional para faixa de receita bruta.
+300 – Imune.
+400 – Não tributda pelo Simples Nacional (v.2.0) (v.2.0)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=201 (v.2.0)
+
+
+
+
+
+ Origem da mercadoria:
+0 – Nacional;
+1 – Estrangeira – Importação direta;
+2 – Estrangeira – Adquirida no mercado interno. (v2.0)
+
+
+
+
+ 201- Tributada pelo Simples Nacional com permissão de crédito e com cobrança do ICMS por Substituição Tributária (v.2.0)
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS ST:
+0 – Preço tabelado ou máximo sugerido;
+1 - Lista Negativa (valor);
+2 - Lista Positiva (valor);
+3 - Lista Neutra (valor);
+4 - Margem Valor Agregado (%);
+5 - Pauta (valor). (v2.0)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual da Margem de Valor Adicionado ICMS ST (v2.0)
+
+
+
+
+ Percentual de redução da BC ICMS ST (v2.0)
+
+
+
+
+ Valor da BC do ICMS ST (v2.0)
+
+
+
+
+ Alíquota do ICMS ST (v2.0)
+
+
+
+
+ Valor do ICMS ST (v2.0)
+
+
+
+
+
+ Valor da Base de cálculo do FCP.
+
+
+
+
+ Percentual de FCP retido por substituição tributária.
+
+
+
+
+ Valor do FCP retido por substituição tributária.
+
+
+
+
+
+ Alíquota aplicável de cálculo do crédito (Simples Nacional). (v2.0)
+
+
+
+
+ Valor crédito do ICMS que pode ser aproveitado nos termos do art. 23 da LC 123 (Simples Nacional) (v2.0)
+
+
+
+
+
+
+
+ Tributação do ICMS pelo SIMPLES NACIONAL e CSOSN=202 ou 203 (v.2.0)
+
+
+
+
+
+ Origem da mercadoria:
+0 – Nacional;
+1 – Estrangeira – Importação direta;
+2 – Estrangeira – Adquirida no mercado interno. (v2.0)
+
+
+
+
+ 202- Tributada pelo Simples Nacional sem permissão de crédito e com cobrança do ICMS por Substituição Tributária;
+203- Isenção do ICMS nos Simples Nacional para faixa de receita bruta e com cobrança do ICMS por Substituição Tributária (v.2.0)
+
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS ST:
+0 – Preço tabelado ou máximo sugerido;
+1 - Lista Negativa (valor);
+2 - Lista Positiva (valor);
+3 - Lista Neutra (valor);
+4 - Margem Valor Agregado (%);
+5 - Pauta (valor). (v2.0)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual da Margem de Valor Adicionado ICMS ST (v2.0)
+
+
+
+
+ Percentual de redução da BC ICMS ST (v2.0)
+
+
+
+
+ Valor da BC do ICMS ST (v2.0)
+
+
+
+
+ Alíquota do ICMS ST (v2.0)
+
+
+
+
+ Valor do ICMS ST (v2.0)
+
+
+
+
+
+ Valor da Base de cálculo do FCP.
+
+
+
+
+ Percentual de FCP retido por substituição tributária.
+
+
+
+
+ Valor do FCP retido por substituição tributária.
+
+
+
+
+
+
+
+
+ Tributação do ICMS pelo SIMPLES NACIONAL,CRT=1 – Simples Nacional e CSOSN=500 (v.2.0)
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+ 500 – ICMS cobrado anterirmente por substituição tributária (substituído) ou por antecipação
+(v.2.0)
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do ICMS ST retido anteriormente (v2.0)
+
+
+
+
+ Aliquota suportada pelo consumidor final.
+
+
+
+
+ Valor do ICMS ST retido anteriormente (v2.0)
+
+
+
+
+
+
+ Valor da Base de cálculo do FCP retido anteriormente.
+
+
+
+
+ Percentual de FCP retido anteriormente por substituição tributária.
+
+
+
+
+ Valor do FCP retido por substituição tributária.
+
+
+
+
+
+
+
+
+ Percentual de redução da base de cálculo efetiva.
+
+
+
+
+ Valor da base de cálculo efetiva.
+
+
+
+
+ Alíquota do ICMS efetiva.
+
+
+
+
+ Valor do ICMS efetivo.
+
+
+
+
+
+
+
+
+
+ Tributação do ICMS pelo SIMPLES NACIONAL, CRT=1 – Simples Nacional e CSOSN=900 (v2.0)
+
+
+
+
+
+ origem da mercadoria: 0 - Nacional
+1 - Estrangeira - Importação direta
+2 - Estrangeira - Adquirida no mercado interno
+
+
+
+
+ Tributação pelo ICMS 900 - Outros(v2.0)
+
+
+
+
+
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS:
+0 - Margem Valor Agregado (%);
+1 - Pauta (valor);
+2 - Preço Tabelado Máximo (valor);
+3 - Valor da Operação.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do ICMS
+
+
+
+
+ Percentual de redução da BC
+
+
+
+
+ Alíquota do ICMS
+
+
+
+
+ Valor do ICMS
+
+
+
+
+
+
+ Modalidade de determinação da BC do ICMS ST:
+0 – Preço tabelado ou máximo sugerido;
+1 - Lista Negativa (valor);
+2 - Lista Positiva (valor);
+3 - Lista Neutra (valor);
+4 - Margem Valor Agregado (%);
+5 - Pauta (valor).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual da Margem de Valor Adicionado ICMS ST
+
+
+
+
+ Percentual de redução da BC ICMS ST
+
+
+
+
+ Valor da BC do ICMS ST
+
+
+
+
+ Alíquota do ICMS ST
+
+
+
+
+ Valor do ICMS ST
+
+
+
+
+
+ Valor da Base de cálculo do FCP.
+
+
+
+
+ Percentual de FCP retido por substituição tributária.
+
+
+
+
+ Valor do FCP retido por substituição tributária.
+
+
+
+
+
+
+
+ Alíquota aplicável de cálculo do crédito (Simples Nacional). (v2.0)
+
+
+
+
+ Valor crédito do ICMS que pode ser aproveitado nos termos do art. 23 da LC 123 (Simples Nacional) (v2.0)
+
+
+
+
+
+
+
+
+
+
+
+
+ Dados do Imposto de Importação
+
+
+
+
+
+ Base da BC do Imposto de Importação
+
+
+
+
+ Valor das despesas aduaneiras
+
+
+
+
+ Valor do Imposto de Importação
+
+
+
+
+ Valor do Imposto sobre Operações Financeiras
+
+
+
+
+
+
+
+
+
+
+ ISSQN
+
+
+
+
+
+ Valor da BC do ISSQN
+
+
+
+
+ Alíquota do ISSQN
+
+
+
+
+ Valor da do ISSQN
+
+
+
+
+ Informar o município de ocorrência do fato gerador do ISSQN. Utilizar a Tabela do IBGE (Anexo VII - Tabela de UF, Município e País). “Atenção, não vincular com os campos B12, C10 ou E10” v2.0
+
+
+
+
+ Informar o Item da lista de serviços da LC 116/03 em que se classifica o serviço.
+
+
+
+
+ Valor dedução para redução da base de cálculo
+
+
+
+
+ Valor outras retenções
+
+
+
+
+ Valor desconto incondicionado
+
+
+
+
+ Valor desconto condicionado
+
+
+
+
+ Valor Retenção ISS
+
+
+
+
+ Exibilidade do ISS:1-Exigível;2-Não incidente;3-Isenção;4-Exportação;5-Imunidade;6-Exig.Susp. Judicial;7-Exig.Susp. ADM
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Código do serviço prestado dentro do município
+
+
+
+
+
+
+
+
+
+
+
+ Código do Município de Incidência do Imposto
+
+
+
+
+ Código de Pais
+
+
+
+
+
+
+
+
+
+
+ Número do Processo administrativo ou judicial de suspenção do processo
+
+
+
+
+
+
+
+
+
+
+
+ Indicador de Incentivo Fiscal. 1=Sim; 2=Não
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Dados do PIS
+
+
+
+
+
+ Código de Situação Tributária do PIS.
+ 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo);
+02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada);
+
+
+
+
+
+ Código de Situação Tributária do PIS.
+ 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo);
+02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada);
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do PIS
+
+
+
+
+ Alíquota do PIS (em percentual)
+
+
+
+
+ Valor do PIS
+
+
+
+
+
+
+
+ Código de Situação Tributária do PIS.
+03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto;
+
+
+
+
+
+ Código de Situação Tributária do PIS.
+03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto;
+
+
+
+
+
+
+
+
+
+
+ Quantidade Vendida (NT2011/004)
+
+
+
+
+ Alíquota do PIS (em reais) (NT2011/004)
+
+
+
+
+ Valor do PIS
+
+
+
+
+
+
+
+ Código de Situação Tributária do PIS.
+04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero);
+06 - Operação Tributável - Alíquota Zero;
+07 - Operação Isenta da contribuição;
+08 - Operação Sem Incidência da contribuição;
+09 - Operação com suspensão da contribuição;
+
+
+
+
+
+ Código de Situação Tributária do PIS.
+04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero);
+05 - Operação Tributável (ST);
+06 - Operação Tributável - Alíquota Zero;
+07 - Operação Isenta da contribuição;
+08 - Operação Sem Incidência da contribuição;
+09 - Operação com suspensão da contribuição;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Código de Situação Tributária do PIS.
+99 - Outras Operações.
+
+
+
+
+
+ Código de Situação Tributária do PIS.
+99 - Outras Operações.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do PIS
+
+
+
+
+ Alíquota do PIS (em percentual)
+
+
+
+
+
+
+ Quantidade Vendida (NT2011/004)
+
+
+
+
+ Alíquota do PIS (em reais) (NT2011/004)
+
+
+
+
+
+
+ Valor do PIS
+
+
+
+
+
+
+
+
+
+
+ Dados do PIS Substituição Tributária
+
+
+
+
+
+
+
+ Valor da BC do PIS ST
+
+
+
+
+ Alíquota do PIS ST (em percentual)
+
+
+
+
+
+
+ Quantidade Vendida
+
+
+
+
+ Alíquota do PIS ST (em reais)
+
+
+
+
+
+
+ Valor do PIS ST
+
+
+
+
+
+
+
+ Dados do COFINS
+
+
+
+
+
+ Código de Situação Tributária do COFINS.
+ 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo);
+02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada);
+
+
+
+
+
+ Código de Situação Tributária do COFINS.
+ 01 – Operação Tributável - Base de Cálculo = Valor da Operação Alíquota Normal (Cumulativo/Não Cumulativo);
+02 - Operação Tributável - Base de Calculo = Valor da Operação (Alíquota Diferenciada);
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do COFINS
+
+
+
+
+ Alíquota do COFINS (em percentual)
+
+
+
+
+ Valor do COFINS
+
+
+
+
+
+
+
+ Código de Situação Tributária do COFINS.
+03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto;
+
+
+
+
+
+ Código de Situação Tributária do COFINS.
+03 - Operação Tributável - Base de Calculo = Quantidade Vendida x Alíquota por Unidade de Produto;
+
+
+
+
+
+
+
+
+
+ Quantidade Vendida (NT2011/004)
+
+
+
+
+ Alíquota do COFINS (em reais) (NT2011/004)
+
+
+
+
+ Valor do COFINS
+
+
+
+
+
+
+
+ Código de Situação Tributária do COFINS:
+04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero);
+06 - Operação Tributável - Alíquota Zero;
+07 - Operação Isenta da contribuição;
+08 - Operação Sem Incidência da contribuição;
+09 - Operação com suspensão da contribuição;
+
+
+
+
+
+ Código de Situação Tributária do COFINS:
+04 - Operação Tributável - Tributação Monofásica - (Alíquota Zero);
+05 - Operação Tributável (ST);
+06 - Operação Tributável - Alíquota Zero;
+07 - Operação Isenta da contribuição;
+08 - Operação Sem Incidência da contribuição;
+09 - Operação com suspensão da contribuição;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Código de Situação Tributária do COFINS:
+49 - Outras Operações de Saída
+50 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita Tributada no Mercado Interno
+51 - Operação com Direito a Crédito – Vinculada Exclusivamente a Receita Não Tributada no Mercado Interno
+52 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita de Exportação
+53 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno
+54 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas no Mercado Interno e de Exportação
+55 - Operação com Direito a Crédito - Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação
+56 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação
+60 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Tributada no Mercado Interno
+61 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Não-Tributada no Mercado Interno
+62 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita de Exportação
+63 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno
+64 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas no Mercado Interno e de Exportação
+65 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação
+66 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação
+67 - Crédito Presumido - Outras Operações
+70 - Operação de Aquisição sem Direito a Crédito
+71 - Operação de Aquisição com Isenção
+72 - Operação de Aquisição com Suspensão
+73 - Operação de Aquisição a Alíquota Zero
+74 - Operação de Aquisição sem Incidência da Contribuição
+75 - Operação de Aquisição por Substituição Tributária
+98 - Outras Operações de Entrada
+99 - Outras Operações.
+
+
+
+
+
+ Código de Situação Tributária do COFINS:
+49 - Outras Operações de Saída
+50 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita Tributada no Mercado Interno
+51 - Operação com Direito a Crédito – Vinculada Exclusivamente a Receita Não Tributada no Mercado Interno
+52 - Operação com Direito a Crédito - Vinculada Exclusivamente a Receita de Exportação
+53 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno
+54 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas no Mercado Interno e de Exportação
+55 - Operação com Direito a Crédito - Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação
+56 - Operação com Direito a Crédito - Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação
+60 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Tributada no Mercado Interno
+61 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita Não-Tributada no Mercado Interno
+62 - Crédito Presumido - Operação de Aquisição Vinculada Exclusivamente a Receita de Exportação
+63 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno
+64 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas no Mercado Interno e de Exportação
+65 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Não-Tributadas no Mercado Interno e de Exportação
+66 - Crédito Presumido - Operação de Aquisição Vinculada a Receitas Tributadas e Não-Tributadas no Mercado Interno, e de Exportação
+67 - Crédito Presumido - Outras Operações
+70 - Operação de Aquisição sem Direito a Crédito
+71 - Operação de Aquisição com Isenção
+72 - Operação de Aquisição com Suspensão
+73 - Operação de Aquisição a Alíquota Zero
+74 - Operação de Aquisição sem Incidência da Contribuição
+75 - Operação de Aquisição por Substituição Tributária
+98 - Outras Operações de Entrada
+99 - Outras Operações.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do COFINS
+
+
+
+
+ Alíquota do COFINS (em percentual)
+
+
+
+
+
+
+ Quantidade Vendida (NT2011/004)
+
+
+
+
+ Alíquota do COFINS (em reais) (NT2011/004)
+
+
+
+
+
+
+ Valor do COFINS
+
+
+
+
+
+
+
+
+
+
+ Dados do COFINS da
+Substituição Tributaria;
+
+
+
+
+
+
+
+ Valor da BC do COFINS ST
+
+
+
+
+ Alíquota do COFINS ST(em percentual)
+
+
+
+
+
+
+ Quantidade Vendida
+
+
+
+
+ Alíquota do COFINS ST(em reais)
+
+
+
+
+
+
+ Valor do COFINS ST
+
+
+
+
+
+
+
+ Grupo a ser informado nas vendas interestarduais para consumidor final, não contribuinte de ICMS
+
+
+
+
+
+ Valor da Base de Cálculo do ICMS na UF do destinatário.
+
+
+
+
+ Valor da Base de Cálculo do FCP na UF do destinatário.
+
+
+
+
+ Percentual adicional inserido na alíquota interna da UF de destino, relativo ao Fundo de Combate à Pobreza (FCP) naquela UF.
+
+
+
+
+ Alíquota adotada nas operações internas na UF do destinatário para o produto / mercadoria.
+
+
+
+
+ Alíquota interestadual das UF envolvidas: - 4% alíquota interestadual para produtos importados; - 7% para os Estados de origem do Sul e Sudeste (exceto ES), destinado para os Estados do Norte e Nordeste ou ES; - 12% para os demais casos.
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual de partilha para a UF do destinatário: - 40% em 2016; - 60% em 2017; - 80% em 2018; - 100% a partir de 2019.
+
+
+
+
+ Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP) da UF de destino.
+
+
+
+
+ Valor do ICMS de partilha para a UF do destinatário.
+
+
+
+
+ Valor do ICMS de partilha para a UF do remetente. Nota: A partir de 2019, este valor será zero.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Percentual de mercadoria devolvida
+
+
+
+
+ Informação de IPI devolvido
+
+
+
+
+
+ Valor do IPI devolvido
+
+
+
+
+
+
+
+
+
+
+ Informações adicionais do produto (norma referenciada, informações complementares, etc)
+
+
+
+
+
+
+
+
+
+
+
+ Número do item do NF
+
+
+
+
+
+
+
+
+
+
+
+
+ Dados dos totais da NF-e
+
+
+
+
+
+ Totais referentes ao ICMS
+
+
+
+
+
+ BC do ICMS
+
+
+
+
+ Valor Total do ICMS
+
+
+
+
+ Valor Total do ICMS desonerado
+
+
+
+
+ Valor total do ICMS relativo ao Fundo de Combate à Pobreza (FCP) para a UF de destino.
+
+
+
+
+ Valor total do ICMS de partilha para a UF do destinatário
+
+
+
+
+ Valor total do ICMS de partilha para a UF do remetente
+
+
+
+
+ Valor Total do FCP (Fundo de Combate à Pobreza).
+
+
+
+
+ BC do ICMS ST
+
+
+
+
+ Valor Total do ICMS ST
+
+
+
+
+ Valor Total do FCP (Fundo de Combate à Pobreza) retido por substituição tributária.
+
+
+
+
+ Valor Total do FCP (Fundo de Combate à Pobreza) retido anteriormente por substituição tributária.
+
+
+
+
+ Valor Total dos produtos e serviços
+
+
+
+
+ Valor Total do Frete
+
+
+
+
+ Valor Total do Seguro
+
+
+
+
+ Valor Total do Desconto
+
+
+
+
+ Valor Total do II
+
+
+
+
+ Valor Total do IPI
+
+
+
+
+ Valor Total do IPI devolvido. Deve ser informado quando preenchido o Grupo Tributos Devolvidos na emissão de nota finNFe=4 (devolução) nas operações com não contribuintes do IPI. Corresponde ao total da soma dos campos id: UA04.
+
+
+
+
+ Valor do PIS
+
+
+
+
+ Valor do COFINS
+
+
+
+
+ Outras Despesas acessórias
+
+
+
+
+ Valor Total da NF-e
+
+
+
+
+ Valor estimado total de impostos federais, estaduais e municipais
+
+
+
+
+
+
+
+ Totais referentes ao ISSQN
+
+
+
+
+
+ Valor Total dos Serviços sob não-incidência ou não tributados pelo ICMS
+
+
+
+
+ Base de Cálculo do ISS
+
+
+
+
+ Valor Total do ISS
+
+
+
+
+ Valor do PIS sobre serviços
+
+
+
+
+ Valor do COFINS sobre serviços
+
+
+
+
+ Data da prestação do serviço (AAAA-MM-DD)
+
+
+
+
+ Valor dedução para redução da base de cálculo
+
+
+
+
+ Valor outras retenções
+
+
+
+
+ Valor desconto incondicionado
+
+
+
+
+ Valor desconto condicionado
+
+
+
+
+ Valor Total Retenção ISS
+
+
+
+
+ Código do regime especial de tributação
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Retenção de Tributos Federais
+
+
+
+
+
+ Valor Retido de PIS
+
+
+
+
+ Valor Retido de COFINS
+
+
+
+
+ Valor Retido de CSLL
+
+
+
+
+ Base de Cálculo do IRRF
+
+
+
+
+ Valor Retido de IRRF
+
+
+
+
+ Base de Cálculo da Retenção da Previdêncica Social
+
+
+
+
+ Valor da Retenção da Previdêncica Social
+
+
+
+
+
+
+
+
+
+
+ Dados dos transportes da NF-e
+
+
+
+
+
+ Modalidade do frete
+0- Contratação do Frete por conta do Remetente (CIF);
+1- Contratação do Frete por conta do destinatário/remetente (FOB);
+2- Contratação do Frete por conta de terceiros;
+3- Transporte próprio por conta do remetente;
+4- Transporte próprio por conta do destinatário;
+9- Sem Ocorrência de transporte.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Dados do transportador
+
+
+
+
+
+
+ CNPJ do transportador
+
+
+
+
+ CPF do transportador
+
+
+
+
+
+ Razão Social ou nome do transportador
+
+
+
+
+
+
+
+
+
+
+ Inscrição Estadual (v2.0)
+
+
+
+
+ Endereço completo
+
+
+
+
+
+
+
+
+
+
+ Nome do munícipio
+
+
+
+
+
+
+
+
+
+
+ Sigla da UF
+
+
+
+
+
+
+
+ Dados da retenção ICMS do Transporte
+
+
+
+
+
+ Valor do Serviço
+
+
+
+
+ BC da Retenção do ICMS
+
+
+
+
+ Alíquota da Retenção
+
+
+
+
+ Valor do ICMS Retido
+
+
+
+
+ Código Fiscal de Operações e Prestações
+
+
+
+
+
+
+
+
+
+
+ Código do Município de Ocorrência do Fato Gerador (utilizar a tabela do IBGE)
+
+
+
+
+
+
+
+
+
+ Dados do veículo
+
+
+
+
+ Dados do reboque/Dolly (v2.0)
+
+
+
+
+
+ Identificação do vagão (v2.0)
+
+
+
+
+
+
+
+
+
+
+ Identificação da balsa (v2.0)
+
+
+
+
+
+
+
+
+
+
+
+ Dados dos volumes
+
+
+
+
+
+ Quantidade de volumes transportados
+
+
+
+
+
+
+
+
+
+
+ Espécie dos volumes transportados
+
+
+
+
+
+
+
+
+
+
+ Marca dos volumes transportados
+
+
+
+
+
+
+
+
+
+
+ Numeração dos volumes transportados
+
+
+
+
+
+
+
+
+
+
+ Peso líquido (em kg)
+
+
+
+
+ Peso bruto (em kg)
+
+
+
+
+
+
+
+ Número dos Lacres
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Dados da cobrança da NF-e
+
+
+
+
+
+ Dados da fatura
+
+
+
+
+
+ Número da fatura
+
+
+
+
+
+
+
+
+
+
+ Valor original da fatura
+
+
+
+
+ Valor do desconto da fatura
+
+
+
+
+ Valor líquido da fatura
+
+
+
+
+
+
+
+ Dados das duplicatas NT 2011/004
+
+
+
+
+
+ Número da duplicata
+
+
+
+
+
+
+
+
+
+
+ Data de vencimento da duplicata (AAAA-MM-DD)
+
+
+
+
+ Valor da duplicata
+
+
+
+
+
+
+
+
+
+
+ Dados de Pagamento. Obrigatório apenas para (NFC-e) NT 2012/004
+
+
+
+
+
+ Grupo de detalhamento da forma de pagamento.
+
+
+
+
+
+ Indicador da Forma de Pagamento:0-Pagamento à Vista;1-Pagamento à Prazo;
+
+
+
+
+
+
+
+
+
+
+
+ Forma de Pagamento:01-Dinheiro;02-Cheque;03-Cartão de Crédito;04-Cartão de Débito;05-Crédito Loja;10-Vale Alimentação;11-Vale Refeição;12-Vale Presente;13-Vale Combustível;14 - Duplicata Mercantil;15 - Boleto Bancario;90 - Sem Pagamento;99 - Outros
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor do Pagamento. Esta tag poderá ser omitida quando a tag tPag=90 (Sem Pagamento), caso contrário deverá ser preenchida.
+
+
+
+
+ Grupo de Cartões
+
+
+
+
+
+ Tipo de Integração do processo de pagamento com o sistema de automação da empresa/
+ 1=Pagamento integrado com o sistema de automação da empresa Ex. equipamento TEF , Comercio Eletronico
+ 2=Pagamento não integrado com o sistema de automação da empresa Ex: equipamento POS
+
+
+
+
+
+
+
+
+
+
+
+ CNPJ da credenciadora de cartão de crédito/débito
+
+
+
+
+ Bandeira da operadora de cartão de crédito/débito:01–Visa; 02–Mastercard; 03–American Express; 04–Sorocred;05-Diners Club;06-Elo;07-Hipercard;08-Aura;09-Cabal;99–Outros
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Número de autorização da operação cartão de crédito/débito
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor do Troco.
+
+
+
+
+
+
+
+ Informações adicionais da NF-e
+
+
+
+
+
+ Informações adicionais de interesse do Fisco (v2.0)
+
+
+
+
+
+
+
+
+
+
+ Informações complementares de interesse do Contribuinte
+
+
+
+
+
+
+
+
+
+
+ Campo de uso livre do contribuinte
+informar o nome do campo no atributo xCampo
+e o conteúdo do campo no xTexto
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Campo de uso exclusivo do Fisco
+informar o nome do campo no atributo xCampo
+e o conteúdo do campo no xTexto
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Grupo de informações do processo referenciado
+
+
+
+
+
+ Indentificador do processo ou ato
+concessório
+
+
+
+
+
+
+
+
+
+
+ Origem do processo, informar com:
+0 - SEFAZ;
+1 - Justiça Federal;
+2 - Justiça Estadual;
+3 - Secex/RFB;
+9 - Outros
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Informações de exportação
+
+
+
+
+
+ Sigla da UF de Embarque ou de transposição de fronteira
+
+
+
+
+ Local de Embarque ou de transposição de fronteira
+
+
+
+
+
+
+
+
+
+
+ Descrição do local de despacho
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Informações de compras (Nota de Empenho, Pedido e Contrato)
+
+
+
+
+
+ Informação da Nota de Empenho de compras públicas (NT2011/004)
+
+
+
+
+
+
+
+
+
+
+ Informação do pedido
+
+
+
+
+
+
+
+
+
+
+ Informação do contrato
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Informações de registro aquisições de cana
+
+
+
+
+
+ Identificação da safra
+
+
+
+
+
+
+
+
+
+
+ Mês e Ano de Referência, formato: MM/AAAA
+
+
+
+
+
+
+
+
+
+
+ Fornecimentos diários
+
+
+
+
+
+ Quantidade em quilogramas - peso líquido
+
+
+
+
+
+ Número do dia
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total do mês
+
+
+
+
+ Total Anterior
+
+
+
+
+ Total Geral
+
+
+
+
+ Deduções - Taxas e Contribuições
+
+
+
+
+
+ Descrição da Dedução
+
+
+
+
+
+
+
+
+
+
+ valor da dedução
+
+
+
+
+
+
+
+ Valor dos fornecimentos
+
+
+
+
+ Valor Total das Deduções
+
+
+
+
+ Valor Líquido dos fornecimentos
+
+
+
+
+
+
+
+
+ Versão do leiaute (v4.00)
+
+
+
+
+ PL_005d - 11/08/09 - validação do Id
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Informações suplementares Nota Fiscal
+
+
+
+
+
+ Texto com o QR-Code impresso no DANFE NFC-e
+
+
+
+
+
+
+
+
+
+
+
+
+ Informar a URL da "Consulta por chave de acesso da NFC-e". A mesma URL que deve estar informada no DANFE NFC-e para consulta por chave de acesso.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Protocolo de status resultado do processamento da NF-e
+
+
+
+
+ Dados do protocolo de status
+
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que processou a NF-e
+
+
+
+
+ Chaves de acesso da NF-e, compostas por: UF do emitente, AAMM da emissão da NFe, CNPJ do emitente, modelo, série e número da NF-e e código numérico+DV.
+
+
+
+
+ Data e hora de processamento, no formato AAAA-MM-DDTHH:MM:SSTZD. Deve ser preenchida com data e hora da gravação no Banco em caso de Confirmação. Em caso de Rejeição, com data e hora do recebimento do Lote de NF-e enviado.
+
+
+
+
+ Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de Fazenda Estadual 2 – Receita Federal); 2 - códiga da UF - 2 posições ano; 10 seqüencial no ano.
+
+
+
+
+ Digest Value da NF-e processada. Utilizado para conferir a integridade da NF-e original.
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Pedido de Concessão de Autorização da Nota Fiscal Eletrônica
+
+
+
+
+
+ Indicador de processamento síncrono. 0=NÃO; 1=SIM=Síncrono
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Retorno do Pedido de Autorização da Nota Fiscal Eletrônica
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que recebeu o Lote.
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+ código da UF de atendimento
+
+
+
+
+ Data e hora do recebimento, no formato AAAA-MM-DDTHH:MM:SSTZD
+
+
+
+
+
+ Dados do Recibo do Lote
+
+
+
+
+
+ Número do Recibo
+
+
+
+
+ Tempo médio de resposta do serviço (em segundos) dos últimos 5 minutos
+
+
+
+
+
+
+
+ Protocolo de status resultado do processamento sincrono da NFC-e
+
+
+
+
+
+
+
+
+ Tipo Pedido de Consulta do Recido do Lote de Notas Fiscais Eletrônicas
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Número do Recibo
+
+
+
+
+
+
+
+ Tipo Retorno do Pedido de Consulta do Recido do Lote de Notas Fiscais Eletrônicas
+
+
+
+
+ Identificação do Ambiente:
+1 - Produção
+2 - Homologação
+
+
+
+
+ Versão do Aplicativo que processou a NF-e
+
+
+
+
+ Número do Recibo Consultado
+
+
+
+
+ Código do status da mensagem enviada.
+
+
+
+
+ Descrição literal do status do serviço solicitado.
+
+
+
+
+ código da UF de atendimento
+
+
+
+
+ Data e hora de processamento, no formato AAAA-MM-DDTHH:MM:SSTZD. Em caso de Rejeição, com data e hora do recebimento do Lote de NF-e enviado.
+
+
+
+
+
+ Código da Mensagem (v2.0)
+alterado para tamanho variavel 1-4. (NT2011/004)
+
+
+
+
+
+
+
+
+
+
+ Mensagem da SEFAZ para o emissor. (v2.0)
+
+
+
+
+
+
+
+
+
+
+
+ Protocolo de status resultado do processamento da NF-e
+
+
+
+
+
+
+
+ Tipo da NF-e processada
+
+
+
+
+
+
+
+
+
+ Tipo Dados do Endereço // 24/10/08 - tamanho mínimo
+
+
+
+
+ Logradouro
+
+
+
+
+
+
+
+
+
+
+ Número
+
+
+
+
+
+
+
+
+
+
+ Complemento
+
+
+
+
+
+
+
+
+
+
+ Bairro
+
+
+
+
+
+
+
+
+
+
+ Código do município (utilizar a tabela do IBGE), informar 9999999 para operações com o exterior.
+
+
+
+
+ Nome do município, informar EXTERIOR para operações com o exterior.
+
+
+
+
+
+
+
+
+
+
+ Sigla da UF, informar EX para operações com o exterior.
+
+
+
+
+ CEP
+
+
+
+
+
+
+
+
+
+
+ Código de Pais
+
+
+
+
+
+
+
+
+
+
+ Nome do país
+
+
+
+
+
+
+
+
+
+
+ Telefone, preencher com Código DDD + número do telefone , nas operações com exterior é permtido informar o código do país + código da localidade + número do telefone
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Dados do Endereço do Emitente // 24/10/08 - desmembrado / tamanho mínimo
+
+
+
+
+ Logradouro
+
+
+
+
+
+
+
+
+
+
+ Número
+
+
+
+
+
+
+
+
+
+
+ Complemento
+
+
+
+
+
+
+
+
+
+
+ Bairro
+
+
+
+
+
+
+
+
+
+
+ Código do município
+
+
+
+
+ Nome do município
+
+
+
+
+
+
+
+
+
+
+ Sigla da UF
+
+
+
+
+ CEP - NT 2011/004
+
+
+
+
+
+
+
+
+
+
+ Código do país
+
+
+
+
+
+
+
+
+
+ Nome do país
+
+
+
+
+
+
+
+
+
+
+ Preencher com Código DDD + número do telefone (v.2.0)
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Dados do Local de Retirada ou Entrega // 24/10/08 - tamanho mínimo // v2.0
+
+
+
+
+
+ CNPJ
+
+
+
+
+ CPF (v2.0)
+
+
+
+
+
+ Logradouro
+
+
+
+
+
+
+
+
+
+
+ Número
+
+
+
+
+
+
+
+
+
+
+ Complemento
+
+
+
+
+
+
+
+
+
+
+ Bairro
+
+
+
+
+
+
+
+
+
+
+ Código do município (utilizar a tabela do IBGE)
+
+
+
+
+ Nome do município
+
+
+
+
+
+
+
+
+
+
+ Sigla da UF
+
+
+
+
+
+
+ Tipo Dados do Veículo
+
+
+
+
+ Placa do veículo (NT2011/004)
+
+
+
+
+
+
+
+
+
+
+ Sigla da UF
+
+
+
+
+ Registro Nacional de Transportador de Carga (ANTT)
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Origem da mercadoria CST ICMS origem da mercadoria: 0-Nacional exceto as indicadas nos códigos 3, 4, 5 e 8;
+1-Estrangeira - Importação direta; 2-Estrangeira - Adquirida no mercado interno; 3-Nacional, conteudo superior 40% e inferior ou igual a 70%; 4-Nacional, processos produtivos básicos; 5-Nacional, conteudo inferior 40%; 6-Estrangeira - Importação direta, com similar nacional, lista CAMEX; 7-Estrangeira - mercado interno, sem simular,lista CAMEX;8-Nacional, Conteúdo de Importação superior a 70%.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Finalidade da NF-e (1=Normal; 2=Complementar; 3=Ajuste; 4=Devolução/Retorno)
+
+
+
+
+
+
+
+
+
+
+
+ Tipo processo de emissão da NF-e
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Código da Lista de Serviços LC 116/2003
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Identificação de Lote
+
+
+
+
+
+
+
+
+ Tipo Versão da NF-e - 4.00
+
+
+
+
+
+
+
+
+ Identificador único (Globally Unique Identifier)
+
+
+
+
+
+
+
+
+ Tipo: Dados do IPI
+
+
+
+
+ CNPJ do produtor da mercadoria, quando diferente do emitente. Somente para os casos de exportação direta ou indireta.
+
+
+
+
+ Código do selo de controle do IPI
+
+
+
+
+
+
+
+
+
+
+ Quantidade de selo de controle do IPI
+
+
+
+
+
+
+
+
+
+
+ Código de Enquadramento Legal do IPI (tabela a ser criada pela RFB)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Código da Situação Tributária do IPI:
+00-Entrada com recuperação de crédito
+49 - Outras entradas
+50-Saída tributada
+99-Outras saídas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Valor da BC do IPI
+
+
+
+
+ Alíquota do IPI
+
+
+
+
+
+
+ Quantidade total na unidade padrão para tributação
+
+
+
+
+ Valor por Unidade Tributável. Informar o valor do imposto Pauta por unidade de medida.
+
+
+
+
+
+
+ Valor do IPI
+
+
+
+
+
+
+
+
+
+
+ Código da Situação Tributária do IPI:
+01-Entrada tributada com alíquota zero
+02-Entrada isenta
+03-Entrada não-tributada
+04-Entrada imune
+05-Entrada com suspensão
+51-Saída tributada com alíquota zero
+52-Saída isenta
+53-Saída não-tributada
+54-Saída imune
+55-Saída com suspensão
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4b/nfe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4b/nfe_v4.00.xsd
new file mode 100644
index 00000000..4fe917ae
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4b/nfe_v4.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Nota Fiscal Eletrônica
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4b/procInutNFe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4b/procInutNFe_v4.00.xsd
new file mode 100644
index 00000000..ee34246e
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4b/procInutNFe_v4.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Pedido de inutilização de númeração de NF-e processado
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4b/procNFe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4b/procNFe_v4.00.xsd
new file mode 100644
index 00000000..def67978
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4b/procNFe_v4.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ NF-e processada
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4b/retConsReciNFe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4b/retConsReciNFe_v4.00.xsd
new file mode 100644
index 00000000..dfa9246c
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4b/retConsReciNFe_v4.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do retorno do Pedido de Consulta do Recido do Lote de Notas Fiscais Eletrônicas
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4b/retConsSitNFe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4b/retConsSitNFe_v4.00.xsd
new file mode 100644
index 00000000..2681808c
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4b/retConsSitNFe_v4.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do retorno da consulta da situação atual da NF-e
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4b/retConsStatServ_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4b/retConsStatServ_v4.00.xsd
new file mode 100644
index 00000000..318e0f14
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4b/retConsStatServ_v4.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do Resultado da Consulta do Status do Serviço
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4b/retEnviNFe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4b/retEnviNFe_v4.00.xsd
new file mode 100644
index 00000000..2d1a5361
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4b/retEnviNFe_v4.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do retorno do Pedido de Concessão de Autorização da Nota Fiscal Eletrônica
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4b/retInutNFe_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4b/retInutNFe_v4.00.xsd
new file mode 100644
index 00000000..3d91a9b0
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4b/retInutNFe_v4.00.xsd
@@ -0,0 +1,9 @@
+
+
+
+
+
+ Schema XML de validação do retorno do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4b/tiposBasico_v4.00.xsd b/pysped/nfe/leiaute/schema/pl_009_v4b/tiposBasico_v4.00.xsd
new file mode 100644
index 00000000..b5865115
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4b/tiposBasico_v4.00.xsd
@@ -0,0 +1,589 @@
+
+
+
+
+
+ Tipo Código da UF da tabela do IBGE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Código do Município da tabela do IBGE
+
+
+
+
+
+
+
+
+ Tipo Chave da Nota Fiscal Eletrônica
+
+
+
+
+
+
+
+
+
+ Tipo Número do Protocolo de Status
+
+
+
+
+
+
+
+
+
+ Tipo Número do Recibo do envio de lote de NF-e
+
+
+
+
+
+
+
+
+
+ Tipo Código da Mensagem enviada
+
+
+
+
+
+
+
+
+
+ Tipo Número do CNPJ
+
+
+
+
+
+
+
+
+
+ Tipo Número do CNPJ tmanho varíavel (3-14)
+
+
+
+
+
+
+
+
+
+ Tipo Número do CNPJ Opcional
+
+
+
+
+
+
+
+
+
+ Tipo Número do CPF
+
+
+
+
+
+
+
+
+
+ Tipo Número do CPF de tamanho variável (3-11)
+
+
+
+
+
+
+
+
+
+ Tipo Decimal com até 1 dígitos inteiros, podendo ter de 1 até 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com até 2 dígitos inteiros, podendo ter de 1 até 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com até 3 dígitos inteiros, podendo ter de 2 até 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com até 3 dígitos inteiros e 2 até 4 decimais. Utilizados em TAGs opcionais, não aceita valor zero.
+
+
+
+
+
+
+
+
+ Tipo Decimal com 3 inteiros (no máximo 100), com 2 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 3 inteiros (no máximo 100), com 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 3 inteiros (no máximo 100), com até 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 8 inteiros, podendo ter de 1 até 3 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 11 inteiros, podendo ter 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 11 inteiros, podendo ter de 1 até 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 11 inteiros, podendo ter 4 decimais (utilizado em tags opcionais)
+
+
+
+
+
+
+
+
+ Tipo Decimal com 11 inteiros, podendo ter de 1 até 10 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 12 inteiros, podendo ter 3 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 12 inteiros e 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 12 inteiros de 1 até 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 12 inteiros com 1 até 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 12 inteiros, 1 a 4 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais
+
+
+
+
+
+
+
+
+ Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais, utilizado em tags opcionais
+
+
+
+
+
+
+
+
+ Tipo Inscrição Estadual do Destinatário // alterado para aceitar vazio ou ISENTO - maio/2010 v2.0
+
+
+
+
+
+
+
+
+
+ Tipo Inscrição Estadual do Destinatário // alterado para aceitar vazio ou ISENTO - maio/2010 v2.0
+
+
+
+
+
+
+
+
+
+ Tipo Inscrição Estadual do ST // acrescentado EM 24/10/08
+
+
+
+
+
+
+
+
+
+ Tipo Inscrição Estadual do Emitente // alterado EM 24/10/08 para aceitar ISENTO
+
+
+
+
+
+
+
+
+
+ Tipo Modelo Documento Fiscal
+
+
+
+
+
+
+
+
+
+ Tipo Número do Documento Fiscal
+
+
+
+
+
+
+
+
+ Tipo Série do Documento Fiscal
+
+
+
+
+
+
+
+
+ Tipo Sigla da UF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Sigla da UF de emissor // acrescentado em 24/10/08
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Ambiente
+
+
+
+
+
+
+
+
+
+ Tipo Versão do Aplicativo
+
+
+
+
+
+
+
+
+ Tipo Motivo
+
+
+
+
+
+
+
+
+ Tipo Justificativa
+
+
+
+
+
+
+
+
+ Tipo Serviço solicitado
+
+
+
+
+
+ Tipo ano
+
+
+
+
+
+
+
+
+ Tipo temp médio em segundos
+
+
+
+
+
+
+
+
+ Tipo string genérico
+
+
+
+
+
+
+
+
+ Tipo data AAAA-MM-DD
+
+
+
+
+
+
+
+
+ Tipo hora HH:MM:SS // tipo acrescentado na v2.0
+
+
+
+
+
+
+
+
+ Data e Hora, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = +hh:mm ou -hh:mm)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tipo Código de orgão (UF da tabela do IBGE + 90 RFB)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pysped/nfe/leiaute/schema/pl_009_v4b/xmldsig-core-schema_v1.01.xsd b/pysped/nfe/leiaute/schema/pl_009_v4b/xmldsig-core-schema_v1.01.xsd
new file mode 100644
index 00000000..f7dc8dc6
--- /dev/null
+++ b/pysped/nfe/leiaute/schema/pl_009_v4b/xmldsig-core-schema_v1.01.xsd
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pysped/nfe/leiaute/soap_200.py b/pysped/nfe/leiaute/soap_200.py
index 0afb5027..f8ff4999 100644
--- a/pysped/nfe/leiaute/soap_200.py
+++ b/pysped/nfe/leiaute/soap_200.py
@@ -51,14 +51,18 @@
class NFeCabecMsg(XMLNFe):
def __init__(self):
super(NFeCabecMsg, self).__init__()
- self.webservice = ''
+ self.webservice = ''
+ self.versao = '3.10'
self.cUF = TagInteiro(nome='cUF' , codigo='', raiz='//cabecMsg', tamanho=[2, 2], valor=35)
self.versaoDados = TagDecimal(nome='versaoDados', codigo='', raiz='//cabecMsg', tamanho=[1, 4], valor='2.00')
def get_xml(self):
xml = XMLNFe.get_xml(self)
xml += ''
- xml += self.cUF.xml
+
+ if self.versao == '3.10':
+ xml += self.cUF.xml
+
xml += self.versaoDados.xml
xml += ''
return xml
@@ -97,9 +101,11 @@ def __init__(self):
super(SOAPEnvio, self).__init__()
self.webservice = ''
self.metodo = ''
+ self.versao = '3.10'
self.cUF = None
self.envio = None
self.nfeCabecMsg = NFeCabecMsg()
+ self.nfeCabecMsg.versao = self.versao
self.nfeDadosMsg = NFeDadosMsg()
self._header = {b'content-type': b'application/soap+xml; charset=utf-8'}
self.soap_action_webservice_e_metodo = False
@@ -120,9 +126,14 @@ def get_xml(self):
xml = XMLNFe.get_xml(self)
xml += ABERTURA
xml += ''
- xml += ''
- xml += self.nfeCabecMsg.xml
- xml += ''
+
+ if self.versao < '4.00':
+ xml += ''
+ xml += self.nfeCabecMsg.xml
+ xml += ''
+ else:
+ xml += ''
+
xml += ''
xml += self.nfeDadosMsg.xml
xml += ''
@@ -135,6 +146,11 @@ def set_xml(self):
xml = property(get_xml, set_xml)
def get_header(self):
+ if self.soap_action_webservice_e_metodo:
+ self._header[b'content-type'] = b'application/soap+xml; charset=utf-8; action="http://www.portalfiscal.inf.br/nfe/wsdl/' + self.webservice.encode('utf-8') + b'/' + self.metodo.encode('utf-8') + b'"'
+ else:
+ self._header[b'content-type'] = b'application/soap+xml; charset=utf-8; action="http://www.portalfiscal.inf.br/nfe/wsdl/' + self.webservice.encode('utf-8') + b'"'
+
header = self._header
return header
diff --git a/pysped/nfe/processador_nfe.py b/pysped/nfe/processador_nfe.py
index 45330199..fca555bb 100644
--- a/pysped/nfe/processador_nfe.py
+++ b/pysped/nfe/processador_nfe.py
@@ -43,14 +43,33 @@
import os
import sys
-from httplib import HTTPSConnection
import socket
import ssl
from datetime import datetime
import time
from uuid import uuid4
+from builtins import str
+from io import open
-from webservices_flags import (UF_CODIGO,
+
+if sys.version_info.major == 2:
+ from httplib import HTTPSConnection
+
+ #
+ # DANFE
+ #
+ from .danfe.danfe_geraldo import DANFE
+ from .danfe.daede import DAEDE
+ from .danfe.danfce import DANFCE
+ from .danfe.danfse import DANFSE
+
+else:
+ from http.client import HTTPSConnection
+ from .danfe.danfe import DANFE
+ from .danfe.danfce import DANFCE
+ from .danfe.danfse import DANFSE
+
+from .webservices_flags import (UF_CODIGO,
#WS_NFE_CANCELAMENTO,
WS_NFE_CONSULTA,
WS_NFE_CONSULTA_CADASTRO,
@@ -65,10 +84,11 @@
WS_NFE_CONSULTA_AUTORIZACAO,
WS_DFE_DISTRIBUICAO,
)
-import webservices_1
-import webservices_2
-import webservices_3
-import webservices_nfce_3
+from . import webservices_1
+from . import webservices_2
+from . import webservices_3
+from . import webservices_4
+from . import webservices_nfce_3
from pysped.xml_sped.certificado import Certificado
@@ -76,56 +96,59 @@
# Manual do Contribuinte versão 2.1.00
# NF-e leiaute 1.10
#
-from leiaute import SOAPEnvio_110, SOAPRetorno_110
-from leiaute import EnviNFe_110, RetEnviNFe_110
-from leiaute import ConsReciNFe_110, RetConsReciNFe_110, ProtNFe_110, ProcNFe_110
-from leiaute import CancNFe_107, RetCancNFe_107, ProcCancNFe_107
-from leiaute import InutNFe_107, RetInutNFe_107, ProcInutNFe_107
-from leiaute import ConsSitNFe_107, RetConsSitNFe_107
-from leiaute import ConsStatServ_107, RetConsStatServ_107
-from leiaute import ConsCad_101, RetConsCad_101
+from .leiaute import SOAPEnvio_110, SOAPRetorno_110
+from .leiaute import EnviNFe_110, RetEnviNFe_110
+from .leiaute import ConsReciNFe_110, RetConsReciNFe_110, ProtNFe_110, ProcNFe_110
+from .leiaute import CancNFe_107, RetCancNFe_107, ProcCancNFe_107
+from .leiaute import InutNFe_107, RetInutNFe_107, ProcInutNFe_107
+from .leiaute import ConsSitNFe_107, RetConsSitNFe_107
+from .leiaute import ConsStatServ_107, RetConsStatServ_107
+from .leiaute import ConsCad_101, RetConsCad_101
#
# Manual do Contribuinte versão 4.01
# NF-e leiaute 2.00
#
-from leiaute import SOAPEnvio_200, SOAPRetorno_200
-from leiaute import EnviNFe_200, RetEnviNFe_200
-from leiaute import ConsReciNFe_200, RetConsReciNFe_200, ProcNFe_200
-from leiaute import CancNFe_200, RetCancNFe_200, ProcCancNFe_200
-from leiaute import InutNFe_200, RetInutNFe_200, ProcInutNFe_200
-from leiaute import ConsSitNFe_201, RetConsSitNFe_201
-from leiaute import ConsStatServ_200, RetConsStatServ_200
-from leiaute import ConsCad_200, RetConsCad_200
-
-from leiaute import EventoCCe_100, EnvEventoCCe_100, RetEnvEventoCCe_100, ProcEventoCCe_100
-from leiaute import EventoCancNFe_100, EnvEventoCancNFe_100, RetEnvEventoCancNFe_100, ProcEventoCancNFe_100
-from leiaute import EventoConfRecebimento_100, EnvEventoConfRecebimento_100, RetEnvEventoConfRecebimento_100, ProcEventoConfRecebimento_100
-from leiaute import CONF_RECEBIMENTO_CONFIRMAR_OPERACAO
-from leiaute import CONF_RECEBIMENTO_CIENCIA_OPERACAO
-from leiaute import CONF_RECEBIMENTO_DESCONHECIMENTO_OPERACAO
-from leiaute import CONF_RECEBIMENTO_OPERACAO_NAO_REALIZADA
-from leiaute import DESCEVENTO_CONF_RECEBIMENTO
-
-from leiaute import ConsNFeDest_101, RetConsNFeDest_101
-from leiaute import DownloadNFe_100, RetDownloadNFe_100, TagChNFe_100
-
+from .leiaute import SOAPEnvio_200, SOAPRetorno_200
+from .leiaute import EnviNFe_200, RetEnviNFe_200
+from .leiaute import ConsReciNFe_200, RetConsReciNFe_200, ProcNFe_200
+from .leiaute import CancNFe_200, RetCancNFe_200, ProcCancNFe_200
+from .leiaute import InutNFe_200, RetInutNFe_200, ProcInutNFe_200
+from .leiaute import ConsSitNFe_201, RetConsSitNFe_201
+from .leiaute import ConsStatServ_200, RetConsStatServ_200
+from .leiaute import ConsCad_200, RetConsCad_200
+
+from .leiaute import EventoCCe_100, EnvEventoCCe_100, RetEnvEventoCCe_100, ProcEventoCCe_100
+from .leiaute import EventoCancNFe_100, EnvEventoCancNFe_100, RetEnvEventoCancNFe_100, ProcEventoCancNFe_100
+from .leiaute import EventoConfRecebimento_100, EnvEventoConfRecebimento_100, RetEnvEventoConfRecebimento_100, ProcEventoConfRecebimento_100
+from .leiaute import CONF_RECEBIMENTO_CONFIRMAR_OPERACAO
+from .leiaute import CONF_RECEBIMENTO_CIENCIA_OPERACAO
+from .leiaute import CONF_RECEBIMENTO_DESCONHECIMENTO_OPERACAO
+from .leiaute import CONF_RECEBIMENTO_OPERACAO_NAO_REALIZADA
+from .leiaute import DESCEVENTO_CONF_RECEBIMENTO
+
+from .leiaute import ConsNFeDest_101, RetConsNFeDest_101
+from .leiaute import DownloadNFe_100, RetDownloadNFe_100, TagChNFe_100
#
# NF-e leiaute 3.10
#
-from leiaute import EnviNFe_310, RetEnviNFe_310
-from leiaute import ConsReciNFe_310, RetConsReciNFe_310, ProcNFe_310
-from leiaute import InutNFe_310, RetInutNFe_310, ProcInutNFe_310
-from leiaute import ConsSitNFe_310, RetConsSitNFe_310
-from leiaute import ConsStatServ_310, RetConsStatServ_310
-
-from leiaute import DistDFeInt_100, RetDistDFeInt_100, SOAPEnvioDistDFe_100, SOAPRetornoDistDFe_100
+from .leiaute import EnviNFe_310, RetEnviNFe_310
+from .leiaute import ConsReciNFe_310, RetConsReciNFe_310, ProcNFe_310
+from .leiaute import InutNFe_310, RetInutNFe_310, ProcInutNFe_310
+from .leiaute import ConsSitNFe_310, RetConsSitNFe_310
+from .leiaute import ConsStatServ_310, RetConsStatServ_310
#
-# DANFE
+# NF-e leiaute 4.00
#
-from danfe import DANFE, DAEDE, DANFCE
+from .leiaute import EnviNFe_400, RetEnviNFe_400
+from .leiaute import ConsReciNFe_400, RetConsReciNFe_400, ProcNFe_400
+from .leiaute import InutNFe_400, RetInutNFe_400, ProcInutNFe_400
+from .leiaute import ConsSitNFe_400, RetConsSitNFe_400
+from .leiaute import ConsStatServ_400, RetConsStatServ_400
+
+from .leiaute import DistDFeInt_100, RetDistDFeInt_100, SOAPEnvioDistDFe_100, SOAPRetornoDistDFe_100
class ProcessoNFe(object):
@@ -135,10 +158,10 @@ def __init__(self, webservice=0, envio='', resposta=''):
self.resposta = resposta
def __repr__(self):
- return 'Processo: ' + webservices_3.METODO_WS[self.webservice]['metodo']
+ return 'Processo: ' + webservices_4.METODO_WS[self.webservice]['metodo']
def __unicode__(self):
- return unicode(self.__repr__())
+ return str(self.__repr__())
class ConexaoHTTPS(HTTPSConnection):
@@ -170,14 +193,14 @@ def connect(self):
if sys.version_info >= (2,7,13):
self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, ssl_version=ssl.PROTOCOL_TLS, do_handshake_on_connect=False)
else:
- self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, ssl_version=ssl.PROTOCOL_SSLv23, do_handshake_on_connect=False)
+ self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, ssl_version=ssl.PROTOCOL_TLSv1_2, do_handshake_on_connect=False)
class ProcessadorNFe(object):
def __init__(self):
self.ambiente = 2
self.estado = 'SP'
- self.versao = '3.10'
+ self.versao = '4.00'
self.modelo = '55'
self.certificado = Certificado()
self.caminho = ''
@@ -185,8 +208,15 @@ def __init__(self):
self.contingencia_SCAN = False
self.contingencia = False
self.danfe = DANFE()
- self.daede = DAEDE()
self.danfce = DANFCE()
+ self.danfse = DANFSE()
+
+ if sys.version_info.major == 2:
+ self.daede = DAEDE()
+ else:
+ self.dacce = DANFE()
+ self.duplicata = DANFE()
+
self.caminho_temporario = ''
self.maximo_tentativas_consulta_recibo = 5
self.consulta_servico_ao_enviar = False
@@ -243,8 +273,13 @@ def _conectar_servico(self, servico, envio, resposta, ambiente=None, somente_amb
self._servidor = ws_a_usar[ambiente]['servidor']
self._url = ws_a_usar[ambiente][servico]
- elif self.versao == '3.10':
- metodo_ws = webservices_3.METODO_WS
+ elif self.versao == '3.10' or self.versao == '4.00':
+ if self.versao == '3.10':
+ webservices = webservices_3
+ else:
+ webservices = webservices_4
+
+ metodo_ws = webservices.METODO_WS
if servico == WS_DFE_DISTRIBUICAO:
self._soap_envio = SOAPEnvioDistDFe_100()
@@ -252,29 +287,31 @@ def _conectar_servico(self, servico, envio, resposta, ambiente=None, somente_amb
else:
self._soap_envio = SOAPEnvio_200()
+ self._soap_envio.versao = self.versao
+ self._soap_envio.nfeCabecMsg.versao = self.versao
self._soap_retorno = SOAPRetorno_200()
self._soap_envio.cUF = UF_CODIGO[self.estado]
if self.modelo == '55':
if somente_ambiente_nacional:
- ws_a_usar = webservices_3.AN
+ ws_a_usar = webservices.AN
elif servico == WS_NFE_DOWNLOAD:
- ws_a_usar = webservices_3.SVAN
+ ws_a_usar = webservices.SVAN
elif self.contingencia_SCAN or self.contingencia:
- ws_a_usar = webservices_3.ESTADO_WS_CONTINGENCIA
+ ws_a_usar = webservices.ESTADO_WS_CONTINGENCIA[self.estado]
else:
#
# Testa a opção de um estado, para determinado serviço, usar o WS
# de outro estado
#
- if type(webservices_3.ESTADO_WS[self.estado][ambiente][servico]) == dict:
- ws_a_usar = webservices_3.ESTADO_WS[self.estado][ambiente][servico]
+ if type(webservices.ESTADO_WS[self.estado][ambiente][servico]) == dict:
+ ws_a_usar = webservices.ESTADO_WS[self.estado][ambiente][servico]
else:
- ws_a_usar = webservices_3.ESTADO_WS[self.estado]
+ ws_a_usar = webservices.ESTADO_WS[self.estado]
if 'servidor%s' % servico in ws_a_usar[ambiente]:
self._servidor = ws_a_usar[ambiente]['servidor%s' % servico]
@@ -312,11 +349,14 @@ def _conectar_servico(self, servico, envio, resposta, ambiente=None, somente_amb
#
if self.estado == 'CE' or servico == WS_DFE_DISTRIBUICAO:
self._soap_envio.soap_action_webservice_e_metodo = True
-
- if servico == WS_NFE_AUTORIZACAO:
- self._soap_envio.metodo = 'nfeAutorizacaoLote'
- elif servico == WS_NFE_CONSULTA_AUTORIZACAO:
- self._soap_envio.metodo = 'nfeRetAutorizacaoLote'
+ if self.versao == '3.10':
+ if servico == WS_NFE_AUTORIZACAO:
+ self._soap_envio.metodo = 'nfeAutorizacaoLote'
+ if servico == WS_NFE_CONSULTA_AUTORIZACAO:
+ self._soap_envio.metodo = 'nfeRetAutorizacaoLote'
+ if self.versao == '4.00':
+ if servico == WS_NFE_RECEPCAO_EVENTO:
+ self._soap_envio.metodo = 'nfeRecepcaoEventoNF'
self._soap_retorno.webservice = self._soap_envio.webservice
self._soap_retorno.metodo = self._soap_envio.metodo
@@ -334,12 +374,12 @@ def _conectar_servico(self, servico, envio, resposta, ambiente=None, somente_amb
self.caminho_temporario = self.caminho_temporario or '/tmp/'
nome_arq_chave = self.caminho_temporario + uuid4().hex
- arq_tmp = open(nome_arq_chave, 'w')
- arq_tmp.write(self.certificado.chave)
+ arq_tmp = open(nome_arq_chave, 'w', encoding='utf-8')
+ arq_tmp.write(self.certificado.chave.decode('utf-8'))
arq_tmp.close()
nome_arq_certificado = self.caminho_temporario + uuid4().hex
- arq_tmp = open(nome_arq_certificado, 'w')
+ arq_tmp = open(nome_arq_certificado, 'w', encoding='utf-8')
arq_tmp.write(self.certificado.certificado)
arq_tmp.close()
#import StringIO
@@ -355,7 +395,11 @@ def _conectar_servico(self, servico, envio, resposta, ambiente=None, somente_amb
# É preciso definir o POST abaixo como bytestring, já que importamos
# os unicode_literals... Dá um pau com xml com acentos sem isso...
#
- con.request(b'POST', b'/' + self._url.encode('utf-8'), self._soap_envio.xml.encode('utf-8'), self._soap_envio.header)
+ if sys.version_info.major == 2:
+ con.request(b'POST', b'/' + self._url.encode('utf-8'), self._soap_envio.xml.encode('utf-8'), self._soap_envio.header)
+ else:
+ con.request('POST', '/' + self._url, self._soap_envio.xml.encode('utf-8'), self._soap_envio.header)
+
resp = con.getresponse()
#
@@ -374,13 +418,22 @@ def _conectar_servico(self, servico, envio, resposta, ambiente=None, somente_amb
# Dados da resposta salvos para possível debug
self._soap_retorno.resposta.version = resp.version
self._soap_retorno.resposta.status = resp.status
- self._soap_retorno.resposta.reason = unicode(resp.reason.decode('utf-8'))
+ if sys.version_info.major == 2:
+ self._soap_retorno.resposta.reason = resp.reason.decode('utf-8')
+ else:
+ self._soap_retorno.resposta.reason = resp.reason
self._soap_retorno.resposta.msg = resp.msg
- self._soap_retorno.resposta.original = unicode(resp.read().decode('utf-8'))
+ if sys.version_info.major == 2:
+ self._soap_retorno.resposta.original = resp.read().decode('utf-8')
+ else:
+ self._soap_retorno.resposta.original = resp.read()
# Tudo certo!
if self._soap_retorno.resposta.status == 200:
- self._soap_retorno.xml = self._soap_retorno.resposta.original
+ if sys.version_info.major == 2:
+ self._soap_retorno.xml = self._soap_retorno.resposta.original
+ else:
+ self._soap_retorno.xml = self._soap_retorno.resposta.original.decode('utf-8')
#except Exception, e:
#raise e
#else:
@@ -399,6 +452,10 @@ def enviar_lote(self, numero_lote=None, lista_nfes=[]):
envio = EnviNFe_310()
resposta = RetEnviNFe_310()
+ elif self.versao == '4.00':
+ envio = EnviNFe_400()
+ resposta = RetEnviNFe_400()
+
if self.ambiente == 2: # Homologação tem detalhes especificos desde a NT2011_002
for nfe in lista_nfes:
if nfe.infNFe.ide.mod.valor != 55:
@@ -436,27 +493,27 @@ def enviar_lote(self, numero_lote=None, lista_nfes=[]):
if self.salvar_arquivos:
for n in lista_nfes:
n.monta_chave()
- arq = open(self.caminho + n.chave + '-nfe.xml', 'w')
- arq.write(n.xml.encode('utf-8'))
+ arq = open(self.caminho + n.chave + '-nfe.xml', 'w', encoding='utf-8')
+ arq.write(n.xml)
arq.close
- arq = open(self.caminho + unicode(envio.idLote.valor).strip().rjust(15, '0') + '-env-lot.xml', 'w')
- arq.write(envio.xml.encode('utf-8'))
+ arq = open(self.caminho + str(envio.idLote.valor).strip().rjust(15, '0') + '-env-lot.xml', 'w', encoding='utf-8')
+ arq.write(envio.xml)
arq.close()
self._conectar_servico(WS_NFE_ENVIO_LOTE, envio, resposta)
#resposta.validar()
if self.salvar_arquivos:
- nome_arq = self.caminho + unicode(envio.idLote.valor).strip().rjust(15, '0') + '-rec'
+ nome_arq = self.caminho + str(envio.idLote.valor).strip().rjust(15, '0') + '-rec'
if resposta.cStat.valor != '103':
nome_arq += '-rej.xml'
else:
nome_arq += '.xml'
- arq = open(nome_arq, 'w')
- arq.write(resposta.xml.encode('utf-8'))
+ arq = open(nome_arq, 'w', encoding='utf-8')
+ arq.write(resposta.xml)
arq.close()
return processo
@@ -474,6 +531,10 @@ def consultar_recibo(self, ambiente=None, numero_recibo=None):
envio = ConsReciNFe_310()
resposta = RetConsReciNFe_310()
+ elif self.versao == '4.00':
+ envio = ConsReciNFe_400()
+ resposta = RetConsReciNFe_400()
+
processo = ProcessoNFe(webservice=WS_NFE_CONSULTA_RECIBO, envio=envio, resposta=resposta)
if ambiente is None:
@@ -484,30 +545,30 @@ def consultar_recibo(self, ambiente=None, numero_recibo=None):
envio.validar()
if self.salvar_arquivos:
- arq = open(self.caminho + unicode(envio.nRec.valor).strip().rjust(15, '0') + '-ped-rec.xml', 'w')
- arq.write(envio.xml.encode('utf-8'))
+ arq = open(self.caminho + str(envio.nRec.valor).strip().rjust(15, '0') + '-ped-rec.xml', 'w', encoding='utf-8')
+ arq.write(envio.xml)
arq.close()
self._conectar_servico(WS_NFE_CONSULTA_RECIBO, envio, resposta, ambiente)
#resposta.validar()
if self.salvar_arquivos:
- nome_arq = self.caminho + unicode(envio.nRec.valor).strip().rjust(15, '0') + '-pro-rec'
+ nome_arq = self.caminho + str(envio.nRec.valor).strip().rjust(15, '0') + '-pro-rec'
if resposta.cStat.valor != '104':
nome_arq += '-rej.xml'
else:
nome_arq += '.xml'
- arq = open(nome_arq, 'w')
- arq.write(resposta.xml.encode('utf-8'))
+ arq = open(nome_arq, 'w', encoding='utf-8')
+ arq.write(resposta.xml)
arq.close()
#
# Salvar os resultados dos processamentos
#
for pn in resposta.protNFe:
- nome_arq = self.caminho + unicode(pn.infProt.chNFe.valor).strip().rjust(44, '0') + '-pro-nfe-'
+ nome_arq = self.caminho + str(pn.infProt.chNFe.valor).strip().rjust(44, '0') + '-pro-nfe-'
# NF-e autorizada
if pn.infProt.cStat.valor == '100':
@@ -521,93 +582,14 @@ def consultar_recibo(self, ambiente=None, numero_recibo=None):
else:
nome_arq += 'rej.xml'
- arq = open(nome_arq, 'w')
- arq.write(pn.xml.encode('utf-8'))
+ arq = open(nome_arq, 'w', encoding='utf-8')
+ arq.write(pn.xml)
arq.close()
return processo
def cancelar_nota(self, ambiente=None, chave_nfe=None, numero_protocolo=None, justificativa=None):
raise ValueError('Cancelamento agora deve ser feito via registro de eventos')
- #if self.versao == '1.10':
- #envio = CancNFe_107()
- #resposta = RetCancNFe_107()
-
- #elif self.versao == '2.00':
- #envio = CancNFe_200()
- #resposta = RetCancNFe_200()
-
- #processo = ProcessoNFe(webservice=WS_NFE_CANCELAMENTO, envio=envio, resposta=resposta)
-
- #if ambiente is None:
- #ambiente = self.ambiente
-
- #self.caminho = self.monta_caminho_nfe(ambiente=ambiente, chave_nfe=chave_nfe)
-
- #envio.infCanc.tpAmb.valor = ambiente
- #envio.infCanc.chNFe.valor = chave_nfe
- #envio.infCanc.nProt.valor = numero_protocolo
- #envio.infCanc.xJust.valor = justificativa
-
- #self.certificado.assina_xmlnfe(envio)
-
- #envio.validar()
- #if self.salvar_arquivos:
- #arq = open(self.caminho + unicode(envio.infCanc.chNFe.valor).strip().rjust(44, '0') + '-ped-can.xml', 'w')
- #arq.write(envio.xml.encode('utf-8'))
- #arq.close()
-
- #self._conectar_servico(WS_NFE_CANCELAMENTO, envio, resposta, ambiente)
-
- ##resposta.validar()
-
- ##
- ## Se for autorizado, monta o processo de cancelamento
- ## 101 - cancelado dentro do prazo
- ## 151 - cancelado fora do prazo
- ##
- #if resposta.infCanc.cStat.valor in ('101', '151'):
- #if self.versao == '1.10':
- #processo_cancelamento_nfe = ProcCancNFe_107()
-
- #elif self.versao == '2.00':
- #processo_cancelamento_nfe = ProcCancNFe_200()
-
- #nome_arq = self.caminho + unicode(envio.infCanc.chNFe.valor).strip().rjust(44, '0') + '-proc-canc-nfe.xml'
- #processo_cancelamento_nfe.cancNFe = envio
- #processo_cancelamento_nfe.retCancNFe = resposta
-
- #processo_cancelamento_nfe.validar()
-
- #processo.processo_cancelamento_nfe = processo_cancelamento_nfe
-
- #if self.salvar_arquivos:
- #nome_arq = self.caminho + unicode(envio.infCanc.chNFe.valor).strip().rjust(44, '0') + '-pro-can-'
-
- ## Cancelamento autorizado
- #if resposta.infCanc.cStat.valor == '101':
- #nome_arq += 'aut.xml'
- #else:
- #nome_arq += 'rej.xml'
-
- #arq = open(nome_arq, 'w')
- #arq.write(resposta.xml.encode('utf-8'))
- #arq.close()
-
- ## Se for autorizado, monta o processo de cancelamento
- #if resposta.infCanc.cStat.valor == '101':
- #nome_arq = self.caminho + unicode(envio.infCanc.chNFe.valor).strip().rjust(44, '0') + '-proc-canc-nfe.xml'
- #arq = open(nome_arq, 'w')
- #arq.write(processo_cancelamento_nfe.xml.encode('utf-8'))
- #arq.close()
-
- ## Estranhamente, o nome desse arquivo, pelo manual, deve ser chave-can.xml
- #nome_arq = self.caminho + unicode(envio.infCanc.chNFe.valor).strip().rjust(44, '0') + '-can.xml'
- #arq = open(nome_arq, 'w')
- #arq.write(processo_cancelamento_nfe.xml.encode('utf-8'))
- #arq.close()
-
- #return processo
def inutilizar_nota(self, ambiente=None, codigo_estado=None, ano=None, cnpj=None, serie=None, numero_inicial=None, numero_final=None, justificativa=None):
if self.versao == '1.10':
@@ -622,6 +604,10 @@ def inutilizar_nota(self, ambiente=None, codigo_estado=None, ano=None, cnpj=None
envio = InutNFe_310()
resposta = RetInutNFe_310()
+ elif self.versao == '4.00':
+ envio = InutNFe_400()
+ resposta = RetInutNFe_400()
+
processo = ProcessoNFe(webservice=WS_NFE_INUTILIZACAO, envio=envio, resposta=resposta)
if ambiente is None:
@@ -653,8 +639,8 @@ def inutilizar_nota(self, ambiente=None, codigo_estado=None, ano=None, cnpj=None
envio.validar()
if self.salvar_arquivos:
- arq = open(self.caminho + unicode(envio.chave).strip().rjust(41, '0') + '-ped-inu.xml', 'w')
- arq.write(envio.xml.encode('utf-8'))
+ arq = open(self.caminho + str(envio.chave).strip().rjust(41, '0') + '-ped-inu.xml', 'w', encoding='utf-8')
+ arq.write(envio.xml)
arq.close()
self._conectar_servico(WS_NFE_INUTILIZACAO, envio, resposta, ambiente)
@@ -672,6 +658,9 @@ def inutilizar_nota(self, ambiente=None, codigo_estado=None, ano=None, cnpj=None
elif self.versao == '3.10':
processo_inutilizacao_nfe = ProcInutNFe_310()
+ elif self.versao == '4.00':
+ processo_inutilizacao_nfe = ProcInutNFe_400()
+
processo_inutilizacao_nfe.inutNFe = envio
processo_inutilizacao_nfe.retInutNFe = resposta
@@ -680,7 +669,7 @@ def inutilizar_nota(self, ambiente=None, codigo_estado=None, ano=None, cnpj=None
processo.processo_inutilizacao_nfe = processo_inutilizacao_nfe
if self.salvar_arquivos:
- nome_arq = self.caminho + unicode(envio.chave).strip().rjust(41, '0') + '-pro-inu-'
+ nome_arq = self.caminho + str(envio.chave).strip().rjust(41, '0') + '-pro-inu-'
# Inutilização autorizada
if resposta.infInut.cStat.valor == '102':
@@ -688,21 +677,21 @@ def inutilizar_nota(self, ambiente=None, codigo_estado=None, ano=None, cnpj=None
else:
nome_arq += 'rej.xml'
- arq = open(nome_arq, 'w')
- arq.write(resposta.xml.encode('utf-8'))
+ arq = open(nome_arq, 'w', encoding='utf-8')
+ arq.write(resposta.xml)
arq.close()
# Se for autorizada, monta o processo de inutilização
if resposta.infInut.cStat.valor == '102':
- nome_arq = self.caminho + unicode(envio.chave).strip().rjust(41, '0') + '-proc-inut-nfe.xml'
- arq = open(nome_arq, 'w')
- arq.write(processo_inutilizacao_nfe.xml.encode('utf-8'))
+ nome_arq = self.caminho + str(envio.chave).strip().rjust(41, '0') + '-proc-inut-nfe.xml'
+ arq = open(nome_arq, 'w', encoding='utf-8')
+ arq.write(processo_inutilizacao_nfe.xml)
arq.close()
# Estranhamente, o nome desse arquivo, pelo manual, deve ser chave-inu.xml
- nome_arq = self.caminho + unicode(envio.chave).strip().rjust(41, '0') + '-inu.xml'
- arq = open(nome_arq, 'w')
- arq.write(processo_inutilizacao_nfe.xml.encode('utf-8'))
+ nome_arq = self.caminho + str(envio.chave).strip().rjust(41, '0') + '-inu.xml'
+ arq = open(nome_arq, 'w', encoding='utf-8')
+ arq.write(processo_inutilizacao_nfe.xml)
arq.close()
return processo
@@ -720,6 +709,10 @@ def consultar_nota(self, ambiente=None, chave_nfe=None, nfe=None):
envio = ConsSitNFe_310()
resposta = RetConsSitNFe_310()
+ elif self.versao == '4.00':
+ envio = ConsSitNFe_400()
+ resposta = RetConsSitNFe_400()
+
processo = ProcessoNFe(webservice=WS_NFE_CONSULTA, envio=envio, resposta=resposta)
if ambiente is None:
@@ -733,17 +726,17 @@ def consultar_nota(self, ambiente=None, chave_nfe=None, nfe=None):
envio.validar()
if self.salvar_arquivos:
- arq = open(self.caminho + unicode(chave_nfe).strip().rjust(44, '0') + '-ped-sit.xml', 'w')
- arq.write(envio.xml.encode('utf-8'))
+ arq = open(self.caminho + str(chave_nfe).strip().rjust(44, '0') + '-ped-sit.xml', 'w', encoding='utf-8')
+ arq.write(envio.xml)
arq.close()
self._conectar_servico(WS_NFE_CONSULTA, envio, resposta, ambiente)
#resposta.validar()
if self.salvar_arquivos:
- nome_arq = self.caminho + unicode(chave_nfe).strip().rjust(44, '0') + '-sit.xml'
- arq = open(nome_arq, 'w')
- arq.write(resposta.xml.encode('utf-8'))
+ nome_arq = self.caminho + str(chave_nfe).strip().rjust(44, '0') + '-sit.xml'
+ arq = open(nome_arq, 'w', encoding='utf-8')
+ arq.write(resposta.xml)
arq.close()
self.caminho = caminho_original
@@ -768,6 +761,10 @@ def consultar_servico(self, ambiente=None, codigo_estado=None):
envio = ConsStatServ_310()
resposta = RetConsStatServ_310()
+ elif self.versao == '4.00':
+ envio = ConsStatServ_400()
+ resposta = RetConsStatServ_400()
+
processo = ProcessoNFe(webservice=WS_NFE_SITUACAO, envio=envio, resposta=resposta)
if ambiente is None:
@@ -782,16 +779,16 @@ def consultar_servico(self, ambiente=None, codigo_estado=None):
envio.validar()
if self.salvar_arquivos:
- arq = open(self.caminho + envio.data.strftime('%Y%m%dT%H%M%S') + '-ped-sta.xml', 'w')
- arq.write(envio.xml.encode('utf-8'))
+ arq = open(self.caminho + envio.data.strftime('%Y%m%dT%H%M%S') + '-ped-sta.xml', 'w', encoding='utf-8')
+ arq.write(envio.xml)
arq.close()
self._conectar_servico(WS_NFE_SITUACAO, envio, resposta, ambiente)
#resposta.validar()
if self.salvar_arquivos:
- arq = open(self.caminho + envio.data.strftime('%Y%m%dT%H%M%S') + '-sta.xml', 'w')
- arq.write(resposta.xml.encode('utf-8'))
+ arq = open(self.caminho + envio.data.strftime('%Y%m%dT%H%M%S') + '-sta.xml', 'w', encoding='utf-8')
+ arq.write(resposta.xml)
arq.close()
return processo
@@ -839,7 +836,7 @@ def processar_notas(self, lista_nfes):
if (
((self.versao == '1.10') and (proc_consulta.resposta.infProt.cStat.valor in ('217', '999',)))
or
- ((self.versao in ['2.00', '3.10']) and (proc_consulta.resposta.cStat.valor in ('100', '150', '110', '301', '302')))
+ ((self.versao in ['2.00', '3.10', '4.00']) and (proc_consulta.resposta.cStat.valor in ('100', '150', '110', '301', '302')))
):
#
# Interrompe todo o processo
@@ -949,6 +946,9 @@ def montar_processo_uma_nota(self, nfe, protnfe_recibo=None, protnfe_consulta_11
elif self.versao == '3.10':
processo = ProcNFe_310()
+ elif self.versao == '4.00':
+ processo = ProcNFe_400()
+
processo.NFe = nfe
processo.protNFe = protnfe_recibo
@@ -967,24 +967,24 @@ def montar_processo_uma_nota(self, nfe, protnfe_recibo=None, protnfe_consulta_11
processo.danfce_pdf = self.danfce.conteudo_pdf
if self.salvar_arquivos:
- nome_arq = self.caminho + unicode(nfe.chave).strip().rjust(44, '0') + '-proc-nfe.xml'
- arq = open(nome_arq, 'w')
- arq.write(processo.xml.encode('utf-8'))
+ nome_arq = self.caminho + str(nfe.chave).strip().rjust(44, '0') + '-proc-nfe.xml'
+ arq = open(nome_arq, 'w', encoding='utf-8')
+ arq.write(processo.xml)
arq.close()
# Estranhamente, o nome desse arquivo, pelo manual, deve ser chave-nfe.xml ou chave-den.xml
# para notas denegadas
if protnfe_recibo.infProt.cStat.valor in ('100', '150'):
- nome_arq = self.caminho + unicode(nfe.chave).strip().rjust(44, '0') + '-nfe.xml'
+ nome_arq = self.caminho + str(nfe.chave).strip().rjust(44, '0') + '-nfe.xml'
else:
- nome_arq = self.caminho + unicode(nfe.chave).strip().rjust(44, '0') + '-den.xml'
+ nome_arq = self.caminho + str(nfe.chave).strip().rjust(44, '0') + '-den.xml'
- arq = open(nome_arq, 'w')
- arq.write(processo.xml.encode('utf-8'))
+ arq = open(nome_arq, 'w', encoding='utf-8')
+ arq.write(processo.xml)
arq.close()
- nome_arq = self.caminho + unicode(nfe.chave).strip().rjust(44, '0') + '.pdf'
- arq = open(nome_arq, 'w')
+ nome_arq = self.caminho + str(nfe.chave).strip().rjust(44, '0') + '.pdf'
+ arq = open(nome_arq, 'wb')
if nfe.infNFe.ide.mod.valor == '55':
arq.write(processo.danfe_pdf)
@@ -1031,9 +1031,9 @@ def monta_caminho_inutilizacao(self, ambiente=None, data=None, serie=None, numer
caminho = os.path.join(caminho, data.strftime('%Y-%m') + '/')
- serie = unicode(serie).strip().rjust(3, '0')
- numero_inicial = unicode(numero_inicial).strip().rjust(9, '0')
- numero_final = unicode(numero_final).strip().rjust(9, '0')
+ serie = str(serie).strip().rjust(3, '0')
+ numero_inicial = str(numero_inicial).strip().rjust(9, '0')
+ numero_final = str(numero_final).strip().rjust(9, '0')
caminho = os.path.join(caminho, serie + '-' + numero_inicial + '-' + numero_final + '/')
@@ -1105,28 +1105,28 @@ def _enviar_lote_evento(self, tipo_evento, numero_lote=None, lista_eventos=[]):
ambiente = evento.infEvento.tpAmb.valor
caminho = self.monta_caminho_nfe(ambiente=ambiente, chave_nfe=chave)
numero_sequencia = evento.infEvento.nSeqEvento.valor
- nome_arq = caminho + chave + '-' + unicode(numero_sequencia).zfill(2)
- arq = open(nome_arq + '-' + tipo_evento + '.xml', 'w')
- arq.write(evento.xml.encode('utf-8'))
+ nome_arq = caminho + chave + '-' + str(numero_sequencia).zfill(2)
+ arq = open(nome_arq + '-' + tipo_evento + '.xml', 'w', encoding='utf-8')
+ arq.write(evento.xml)
arq.close
- arq = open(caminho + unicode(envio.idLote.valor).strip().rjust(15, '0') + '-env-' + tipo_evento + '.xml', 'w')
- arq.write(envio.xml.encode('utf-8'))
+ arq = open(caminho + str(envio.idLote.valor).strip().rjust(15, '0') + '-env-' + tipo_evento + '.xml', 'w', encoding='utf-8')
+ arq.write(envio.xml)
arq.close()
self._conectar_servico(WS_NFE_RECEPCAO_EVENTO, envio, resposta, somente_ambiente_nacional=tipo_evento=='confrec')
#resposta.validar()
if self.salvar_arquivos:
- nome_arq = caminho + unicode(envio.idLote.valor).strip().rjust(15, '0') + '-rec-' + tipo_evento
+ nome_arq = caminho + str(envio.idLote.valor).strip().rjust(15, '0') + '-rec-' + tipo_evento
if resposta.cStat.valor not in ('129', '128'):
nome_arq += '-rej.xml'
else:
nome_arq += '.xml'
- arq = open(nome_arq, 'w')
- arq.write(resposta.xml.encode('utf-8'))
+ arq = open(nome_arq, 'w', encoding='utf-8')
+ arq.write(resposta.xml)
arq.close()
self.montar_processo_lista_eventos(lista_eventos, processo.resposta.dic_retEvento, processo.resposta.dic_procEvento, classe_evento)
@@ -1138,59 +1138,59 @@ def _enviar_lote_evento(self, tipo_evento, numero_lote=None, lista_eventos=[]):
chave = ret.infEvento.chNFe.valor
ambiente = ret.infEvento.tpAmb.valor
caminho = self.monta_caminho_nfe(ambiente=ambiente, chave_nfe=chave)
- nome_arq = caminho + ret.infEvento.chNFe.valor + '-' + unicode(ret.infEvento.nSeqEvento.valor).zfill(2)
+ nome_arq = caminho + ret.infEvento.chNFe.valor + '-' + str(ret.infEvento.nSeqEvento.valor).zfill(2)
#
# O evento foi aceito e vinculado à NF-e
#
if ret.infEvento.cStat.valor == '135':
- arq = open(nome_arq + '-ret-' + tipo_evento + '.xml', 'w')
- arq.write(ret.xml.encode('utf-8'))
+ arq = open(nome_arq + '-ret-' + tipo_evento + '.xml', 'w', encoding='utf-8')
+ arq.write(ret.xml)
arq.close
#
# Salva o processo do evento
#
- arq = open(nome_arq + '-proc-' + tipo_evento + '.xml', 'w')
- arq.write(processo.resposta.dic_procEvento[chave].xml.encode('utf-8'))
+ arq = open(nome_arq + '-proc-' + tipo_evento + '.xml', 'w', encoding='utf-8')
+ arq.write(processo.resposta.dic_procEvento[chave].xml)
arq.close
#
# O evento foi aceito, mas não foi vinculado à NF-e
#
elif ret.infEvento.cStat.valor == '136':
- arq = open(nome_arq + '-ret-' + tipo_evento + '-sv.xml', 'w') # -sv = sem vínculo
- arq.write(ret.xml.encode('utf-8'))
+ arq = open(nome_arq + '-ret-' + tipo_evento + '-sv.xml', 'w', encoding='utf-8') # -sv = sem vínculo
+ arq.write(ret.xml)
arq.close
#
# Salva o processo do evento
#
- arq = open(nome_arq + '-proc-' + tipo_evento + '.xml', 'w')
- arq.write(processo.resposta.dic_procEvento[chave].xml.encode('utf-8'))
+ arq = open(nome_arq + '-proc-' + tipo_evento + '.xml', 'w', encoding='utf-8')
+ arq.write(processo.resposta.dic_procEvento[chave].xml)
arq.close
#
# O evento foi aceito e vinculado à NF-e, é um cancelamento for do prazo
#
elif ret.infEvento.cStat.valor == '155':
- arq = open(nome_arq + '-ret-' + tipo_evento + '.xml', 'w')
- arq.write(ret.xml.encode('utf-8'))
+ arq = open(nome_arq + '-ret-' + tipo_evento + '.xml', 'w', encoding='utf-8')
+ arq.write(ret.xml)
arq.close
#
# Salva o processo do evento
#
- arq = open(nome_arq + '-proc-' + tipo_evento + '.xml', 'w')
- arq.write(processo.resposta.dic_procEvento[chave].xml.encode('utf-8'))
+ arq = open(nome_arq + '-proc-' + tipo_evento + '.xml', 'w', encoding='utf-8')
+ arq.write(processo.resposta.dic_procEvento[chave].xml)
arq.close
#
# O evento foi rejeitado
#
else:
- arq = open(nome_arq + '-ret-' + tipo_evento + '-rej.xml', 'w')
- arq.write(ret.xml.encode('utf-8'))
+ arq = open(nome_arq + '-ret-' + tipo_evento + '-rej.xml', 'w', encoding='utf-8')
+ arq.write(ret.xml)
arq.close
return processo
@@ -1220,16 +1220,16 @@ def consultar_notas_destinadas(self, ambiente=None, cnpj=None, ultimo_nsu='0', t
envio.validar()
if self.salvar_arquivos:
- arq = open(self.caminho + unicode(numero_lote).strip().rjust(15, '0') + '-consnfedest.xml', 'w')
- arq.write(envio.xml.encode('utf-8'))
+ arq = open(self.caminho + str(numero_lote).strip().rjust(15, '0') + '-consnfedest.xml', 'w', encoding='utf-8')
+ arq.write(envio.xml)
arq.close()
self._conectar_servico(WS_NFE_CONSULTA_DESTINADAS, envio, resposta, somente_ambiente_nacional=True)
#resposta.validar()
if self.salvar_arquivos:
- arq = open(self.caminho + unicode(numero_lote).strip().rjust(15, '0') + '-consnfedest-resp.xml', 'w')
- arq.write(resposta.original.encode('utf-8'))
+ arq = open(self.caminho + str(numero_lote).strip().rjust(15, '0') + '-consnfedest-resp.xml', 'w', encoding='utf-8')
+ arq.write(resposta.original.decode('utf-8'))
arq.close()
return processo
@@ -1248,16 +1248,16 @@ def baixar_notas_destinadas(self, ambiente=None, cnpj=None, lista_chaves=[]):
envio.validar()
if self.salvar_arquivos:
- arq = open(self.caminho + unicode(numero_lote).strip().rjust(15, '0') + '-downloadnfe.xml', 'w')
- arq.write(envio.xml.encode('utf-8'))
+ arq = open(self.caminho + str(numero_lote).strip().rjust(15, '0') + '-downloadnfe.xml', 'w', encoding='utf-8')
+ arq.write(envio.xml)
arq.close()
self._conectar_servico(WS_NFE_DOWNLOAD, envio, resposta, somente_ambiente_nacional=True)
#resposta.validar()
if self.salvar_arquivos:
- arq = open(self.caminho + unicode(numero_lote).strip().rjust(15, '0') + '-downloadnfe-resp.xml', 'w')
- arq.write(resposta.original.encode('utf-8'))
+ arq = open(self.caminho + str(numero_lote).strip().rjust(15, '0') + '-downloadnfe-resp.xml', 'w', encoding='utf-8')
+ arq.write(resposta.original.decode('utf-8'))
arq.close()
return processo
@@ -1346,11 +1346,7 @@ def consultar_cadastro(self, estado=None, ie=None, cnpj_cpf=None):
envio = ConsCad_101()
resposta = RetConsCad_101()
- elif self.versao == '2.00':
- envio = ConsCad_200()
- resposta = RetConsCad_200()
-
- elif self.versao == '3.10':
+ else:
envio = ConsCad_200()
resposta = RetConsCad_200()
@@ -1374,8 +1370,8 @@ def consultar_cadastro(self, estado=None, ie=None, cnpj_cpf=None):
envio.validar()
if self.salvar_arquivos:
- arq = open(self.caminho + nome + '-cons-cad.xml', 'w')
- arq.write(envio.xml.encode('utf-8'))
+ arq = open(self.caminho + nome + '-cons-cad.xml', 'w', encoding='utf-8')
+ arq.write(envio.xml)
arq.close()
# Consulta de cadastro é sempre feita em ambiente de produção
@@ -1383,8 +1379,8 @@ def consultar_cadastro(self, estado=None, ie=None, cnpj_cpf=None):
#resposta.validar()
if self.salvar_arquivos:
- arq = open(self.caminho + nome + '-cad.xml', 'w')
- arq.write(resposta.xml.encode('utf-8'))
+ arq = open(self.caminho + nome + '-cad.xml', 'w', encoding='utf-8')
+ arq.write(resposta.xml)
arq.close()
return processo
@@ -1402,11 +1398,11 @@ def consultar_distribuicao(self, estado=None, cnpj_cpf=None, ultimo_nsu=None, ns
envio.CPF.valor = cnpj_cpf
if ultimo_nsu is not None:
- envio.distNSU.ultNSU.valor = unicode(ultimo_nsu)
+ envio.distNSU.ultNSU.valor = str(ultimo_nsu)
elif nsu is not None:
- envio.consNSU.NSU.valor = unicode(nsu)
+ envio.consNSU.NSU.valor = str(nsu)
else:
- envio.consChNFe.chNFe.valor = unicode(chave_nfe)
+ envio.consChNFe.chNFe.valor = str(chave_nfe)
processo = ProcessoNFe(webservice=WS_DFE_DISTRIBUICAO, envio=envio, resposta=resposta)
@@ -1427,16 +1423,16 @@ def consultar_distribuicao(self, estado=None, cnpj_cpf=None, ultimo_nsu=None, ns
nome_arq = self.caminho + datetime.now().strftime('%Y%m%dT%H%M%S')
if self.salvar_arquivos:
- arq = open(nome_arq + '-cons-dist-dfe.xml', 'w')
- arq.write(envio.xml.encode('utf-8'))
+ arq = open(nome_arq + '-cons-dist-dfe.xml', 'w', encoding='utf-8')
+ arq.write(envio.xml)
arq.close()
self._conectar_servico(WS_DFE_DISTRIBUICAO, envio, resposta, somente_ambiente_nacional=True)
#resposta.validar()
if self.salvar_arquivos:
- arq = open(nome_arq + '-ret-dist-dfe.xml', 'w')
- arq.write(resposta.original.encode('utf-8'))
+ arq = open(nome_arq + '-ret-dist-dfe.xml', 'w', encoding='utf-8')
+ arq.write(resposta.original.decode('utf-8'))
arq.close()
return processo
diff --git a/pysped/nfe/webservices_4.py b/pysped/nfe/webservices_4.py
new file mode 100644
index 00000000..d795dee5
--- /dev/null
+++ b/pysped/nfe/webservices_4.py
@@ -0,0 +1,542 @@
+# -*- coding: utf-8 -*-
+#
+# PySPED - Python libraries to deal with Brazil's SPED Project
+#
+# Copyright (C) 2010-2012
+# Copyright (C) Aristides Caldeira
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Library General Public License as
+# published by the Free Software Foundation, either version 2.1 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public License
+# along with this program. If not, see .
+#
+# PySPED - Bibliotecas Python para o
+# SPED - Sistema Público de Escrituração Digital
+#
+# Copyright (C) 2010-2012
+# Copyright (C) Aristides Caldeira
+#
+# Este programa é um software livre: você pode redistribuir e/ou modificar
+# este programa sob os termos da licença GNU Library General Public License,
+# publicada pela Free Software Foundation, em sua versão 2.1 ou, de acordo
+# com sua opção, qualquer versão posterior.
+#
+# Este programa é distribuido na esperança de que venha a ser útil,
+# porém SEM QUAISQUER GARANTIAS, nem mesmo a garantia implícita de
+# COMERCIABILIDADE ou ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Veja a
+# GNU Library General Public License para mais detalhes.
+#
+# Você deve ter recebido uma cópia da GNU Library General Public License
+# juntamente com este programa. Caso esse não seja o caso, acesse:
+#
+#
+
+from __future__ import division, print_function, unicode_literals
+
+from .webservices_flags import *
+
+
+METODO_WS = {
+ WS_NFE_INUTILIZACAO: {
+ 'webservice': 'NFeInutilizacao4',
+ 'metodo' : 'nfeInutilizacaoNF',
+ },
+ WS_NFE_CONSULTA: {
+ 'webservice': 'NFeConsultaProtocolo4',
+ 'metodo' : 'nfeConsultaNF',
+ },
+ WS_NFE_SITUACAO: {
+ 'webservice': 'NFeStatusServico4',
+ 'metodo' : 'nfeStatusServicoNF',
+ },
+ WS_NFE_CONSULTA_CADASTRO: {
+ 'webservice': 'CadConsultaCadastro4',
+ 'metodo' : 'consultaCadastro',
+ },
+ WS_NFE_RECEPCAO_EVENTO: {
+ 'webservice': 'NFeRecepcaoEvento4',
+ 'metodo' : 'nfeRecepcaoEvento',
+ },
+ WS_NFE_AUTORIZACAO: {
+ 'webservice': 'NFeAutorizacao4',
+ 'metodo' : 'nfeAutorizacaoLote',
+ },
+ WS_NFE_CONSULTA_AUTORIZACAO: {
+ 'webservice': 'NFeRetAutorizacao4',
+ 'metodo' : 'nfeRetAutorizacaoLote',
+ },
+ WS_DFE_DISTRIBUICAO: {
+ 'webservice': 'NFeDistribuicaoDFe',
+ 'metodo' : 'nfeDistDFeInteresse'
+ }
+}
+
+
+SVRS = {
+ # o servidor da consulta de cadastro é diferente dos demais...
+ NFE_AMBIENTE_PRODUCAO: {
+ 'servidor' : 'nfe.svrs.rs.gov.br',
+ 'servidor%s' % WS_NFE_CONSULTA_CADASTRO: 'cad.svrs.rs.gov.br',
+ WS_NFE_INUTILIZACAO : 'ws/nfeinutilizacao/nfeinutilizacao4.asmx',
+ WS_NFE_CONSULTA : 'ws/NfeConsulta/NfeConsulta4.asmx',
+ WS_NFE_SITUACAO : 'ws/NfeStatusServico/NfeStatusServico4.asmx',
+ WS_NFE_CONSULTA_CADASTRO : 'ws/cadconsultacadastro/cadconsultacadastro4.asmx',
+ WS_NFE_RECEPCAO_EVENTO : 'ws/recepcaoevento/recepcaoevento4.asmx',
+ WS_NFE_AUTORIZACAO : 'ws/NfeAutorizacao/NFeAutorizacao4.asmx',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao4.asmx',
+ },
+ NFE_AMBIENTE_HOMOLOGACAO: {
+ 'servidor' : 'nfe-homologacao.svrs.rs.gov.br',
+ WS_NFE_INUTILIZACAO : 'ws/nfeinutilizacao/nfeinutilizacao4.asmx',
+ WS_NFE_CONSULTA : 'ws/NfeConsulta/NfeConsulta4.asmx',
+ WS_NFE_SITUACAO : 'ws/NfeStatusServico/NfeStatusServico4.asmx',
+ WS_NFE_CONSULTA_CADASTRO : 'ws/cadconsultacadastro/cadconsultacadastro4.asmx',
+ WS_NFE_RECEPCAO_EVENTO : 'ws/recepcaoevento/recepcaoevento4.asmx',
+ WS_NFE_AUTORIZACAO : 'ws/NfeAutorizacao/NFeAutorizacao4.asmx',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao4.asmx',
+ }
+}
+
+SVAN = {
+ NFE_AMBIENTE_PRODUCAO: {
+ 'servidor' : 'www.sefazvirtual.fazenda.gov.br',
+ WS_NFE_INUTILIZACAO : 'NFeInutilizacao4/NFeInutilizacao4.asmx',
+ WS_NFE_CONSULTA : 'NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx',
+ WS_NFE_SITUACAO : 'NFeStatusServico4/NFeStatusServico4.asmx',
+ WS_NFE_RECEPCAO_EVENTO : 'NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx',
+ WS_NFE_AUTORIZACAO : 'NFeAutorizacao4/NFeAutorizacao4.asmx',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'NFeRetAutorizacao4/NFeRetAutorizacao4.asmx',
+ },
+ NFE_AMBIENTE_HOMOLOGACAO: {
+ 'servidor' : 'hom.sefazvirtual.fazenda.gov.br',
+ WS_NFE_INUTILIZACAO : 'NFeInutilizacao4/NFeInutilizacao4.asmx',
+ WS_NFE_CONSULTA : 'NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx',
+ WS_NFE_SITUACAO : 'NFeStatusServico4/NFeStatusServico4.asmx',
+ WS_NFE_RECEPCAO_EVENTO : 'NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx',
+ WS_NFE_AUTORIZACAO : 'NFeAutorizacao4/NFeAutorizacao4.asmx',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'NFeRetAutorizacao4/NFeRetAutorizacao4.asmx',
+ }
+}
+
+
+SVC_AN = {
+ NFE_AMBIENTE_PRODUCAO: {
+ 'servidor' : 'www.svc.fazenda.gov.br',
+ WS_NFE_CONSULTA : 'NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx',
+ WS_NFE_SITUACAO : 'NFeStatusServico4/NFeStatusServico4.asmx',
+ WS_NFE_RECEPCAO_EVENTO : 'NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx',
+ WS_NFE_AUTORIZACAO : 'NFeAutorizacao4/NFeAutorizacao4.asmx',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'NFeRetAutorizacao4/NFeRetAutorizacao4.asmx',
+ },
+ NFE_AMBIENTE_HOMOLOGACAO: {
+ 'servidor' : 'hom.nfe.fazenda.gov.br',
+ WS_NFE_CONSULTA : 'NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx',
+ WS_NFE_SITUACAO : 'NFeStatusServico4/NFeStatusServico4.asmx',
+ WS_NFE_RECEPCAO_EVENTO : 'NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx',
+ WS_NFE_AUTORIZACAO : 'NFeAutorizacao4/NFeAutorizacao4.asmx',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'NFeRetAutorizacao4/NFeRetAutorizacao4.asmx',
+ }
+}
+
+
+SVC_RS = {
+ NFE_AMBIENTE_PRODUCAO: {
+ 'servidor' : 'nfe.svrs.rs.gov.br',
+ WS_NFE_INUTILIZACAO : 'ws/nfeinutilizacao/nfeinutilizacao4.asmx',
+ WS_NFE_CONSULTA : 'ws/NfeConsulta/NfeConsulta4.asmx',
+ WS_NFE_SITUACAO : 'ws/NfeStatusServico/NfeStatusServico4.asmx',
+ WS_NFE_RECEPCAO_EVENTO : 'ws/recepcaoevento/recepcaoevento4.asmx',
+ WS_NFE_AUTORIZACAO : 'ws/NfeAutorizacao/NFeAutorizacao4.asmx',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao4.asmx',
+ },
+ NFE_AMBIENTE_HOMOLOGACAO: {
+ 'servidor' : 'nfe-homologacao.svrs.rs.gov.br',
+ WS_NFE_INUTILIZACAO : 'ws/nfeinutilizacao/nfeinutilizacao4.asmx',
+ WS_NFE_CONSULTA : 'ws/NfeConsulta/NfeConsulta4.asmx',
+ WS_NFE_SITUACAO : 'ws/NfeStatusServico/NfeStatusServico4.asmx',
+ WS_NFE_RECEPCAO_EVENTO : 'ws/recepcaoevento/recepcaoevento4.asmx',
+ WS_NFE_AUTORIZACAO : 'ws/NfeAutorizacao/NFeAutorizacao4.asmx',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao4.asmx',
+ }
+}
+
+
+DPEC = {
+ NFE_AMBIENTE_PRODUCAO: {
+ 'servidor' : 'www.nfe.fazenda.gov.br',
+ WS_DPEC_CONSULTA: 'SCERecepcaoRFB/SCERecepcaoRFB.asmx',
+ WS_DPEC_RECEPCAO: 'SCEConsultaRFB/SCEConsultaRFB.asmx'
+ },
+ NFE_AMBIENTE_HOMOLOGACAO: {
+ 'servidor' : 'hom.nfe.fazenda.gov.br',
+ WS_DPEC_CONSULTA: 'SCERecepcaoRFB/SCERecepcaoRFB.asmx',
+ WS_DPEC_RECEPCAO: 'SCEConsultaRFB/SCEConsultaRFB.asmx'
+ }
+}
+
+
+AN = {
+ NFE_AMBIENTE_PRODUCAO: {
+ 'servidor' : 'www.nfe.fazenda.gov.br',
+ 'servidor%s' % WS_DFE_DISTRIBUICAO: 'www1.nfe.fazenda.gov.br',
+ WS_NFE_RECEPCAO_EVENTO: 'NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx',
+ WS_NFE_CONSULTA_DESTINADAS: 'NFeConsultaDest/NFeConsultaDest.asmx',
+ WS_NFE_DOWNLOAD: 'NfeDownloadNF/NfeDownloadNF.asmx',
+ WS_DFE_DISTRIBUICAO: 'NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx',
+ },
+ NFE_AMBIENTE_HOMOLOGACAO: {
+ 'servidor': 'hom.nfe.fazenda.gov.br',
+ WS_NFE_RECEPCAO_EVENTO: 'NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx',
+ WS_NFE_CONSULTA_DESTINADAS: 'NFeConsultaDest/NFeConsultaDest.asmx',
+ WS_NFE_DOWNLOAD: 'NfeDownloadNF/NfeDownloadNF.asmx',
+ WS_DFE_DISTRIBUICAO: 'NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx',
+ },
+}
+
+
+UFAM = {
+ NFE_AMBIENTE_PRODUCAO: {
+ 'servidor' : 'nfe.sefaz.am.gov.br',
+ WS_NFE_INUTILIZACAO : 'services2/services/NfeInutilizacao4',
+ WS_NFE_CONSULTA : 'services2/services/NfeConsulta4',
+ WS_NFE_SITUACAO : 'services2/services/NfeStatusServico4',
+ WS_NFE_CONSULTA_CADASTRO : 'services2/services/cadconsultacadastro2',
+ WS_NFE_RECEPCAO_EVENTO : 'services2/services/RecepcaoEvento',
+ WS_NFE_AUTORIZACAO : 'services2/services/NfeAutorizacao4',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'services2/services/NfeRetAutorizacao4',
+ },
+ NFE_AMBIENTE_HOMOLOGACAO: {
+ 'servidor' : 'homnfe.sefaz.am.gov.br',
+ WS_NFE_INUTILIZACAO : 'services2/services/NfeInutilizacao4',
+ WS_NFE_CONSULTA : 'services2/services/NfeConsulta4',
+ WS_NFE_SITUACAO : 'services2/services/NfeStatusServico4',
+ WS_NFE_CONSULTA_CADASTRO : 'services2/services/cadconsultacadastro2',
+ WS_NFE_RECEPCAO_EVENTO : 'services2/services/RecepcaoEvento',
+ WS_NFE_AUTORIZACAO : 'services2/services/NfeAutorizacao4',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'services2/services/NfeRetAutorizacao4',
+ }
+}
+
+UFBA = {
+ NFE_AMBIENTE_PRODUCAO: {
+ 'servidor' : 'nfe.sefaz.ba.gov.br',
+ WS_NFE_INUTILIZACAO : 'webservices/NFeInutilizacao4/NFeInutilizacao4.asmx',
+ WS_NFE_CONSULTA : 'webservices/NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx',
+ WS_NFE_SITUACAO : 'webservices/NFeStatusServico4/NFeStatusServico4.asmx',
+ WS_NFE_CONSULTA_CADASTRO : 'webservices/CadConsultaCadastro4/CadConsultaCadastro4.asmx',
+ WS_NFE_RECEPCAO_EVENTO : 'webservices/sre/recepcaoevento.asmx',
+ WS_NFE_AUTORIZACAO : 'webservices/NFeAutorizacao4/NFeAutorizacao4.asmx',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'webservices/NFeRetAutorizacao4/NFeRetAutorizacao4.asmx',
+ },
+ NFE_AMBIENTE_HOMOLOGACAO: {
+ 'servidor' : 'hnfe.sefaz.ba.gov.br',
+ WS_NFE_INUTILIZACAO : 'webservices/NFeInutilizacao4/NFeInutilizacao4.asmx',
+ WS_NFE_CONSULTA : 'webservices/NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx',
+ WS_NFE_SITUACAO : 'webservices/NFeStatusServico4/NFeStatusServico4.asmx',
+ WS_NFE_CONSULTA_CADASTRO : 'webservices/CadConsultaCadastro4/CadConsultaCadastro4.asmx',
+ WS_NFE_RECEPCAO_EVENTO : 'webservices/sre/recepcaoevento.asmx',
+ WS_NFE_AUTORIZACAO : 'webservices/NFeAutorizacao4/NFeAutorizacao4.asmx',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'webservices/NFeRetAutorizacao4/NFeRetAutorizacao4.asmx',
+ }
+}
+
+UFCE = {
+ NFE_AMBIENTE_PRODUCAO: {
+ 'servidor' : 'nfe.sefaz.ce.gov.br',
+ WS_NFE_INUTILIZACAO : 'nfe4/services/NFeInutilizacao4',
+ WS_NFE_CONSULTA : 'nfe4/services/NFeConsultaProtocolo4',
+ WS_NFE_SITUACAO : 'nfe4/services/NFeStatusServico4',
+ WS_NFE_CONSULTA_CADASTRO : 'nfe2/services/CadConsultaCadastro2',
+ WS_NFE_RECEPCAO_EVENTO : 'nfe4/services/NFeRecepcaoEvento4',
+ WS_NFE_AUTORIZACAO : 'nfe4/services/NFeAutorizacao4',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'nfe4/services/NFeRetAutorizacao4',
+ },
+ NFE_AMBIENTE_HOMOLOGACAO: {
+ 'servidor' : 'nfeh.sefaz.ce.gov.br',
+ WS_NFE_INUTILIZACAO : 'nfe4/services/NFeInutilizacao4',
+ WS_NFE_CONSULTA : 'nfe4/services/NFeConsultaProtocolo4',
+ WS_NFE_SITUACAO : 'nfe4/services/NFeStatusServico4',
+ WS_NFE_CONSULTA_CADASTRO : 'nfe2/services/CadConsultaCadastro2',
+ WS_NFE_RECEPCAO_EVENTO : 'nfe4/services/NFeRecepcaoEvento4',
+ WS_NFE_AUTORIZACAO : 'nfe4/services/NFeAutorizacao4',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'nfe4/services/NFeRetAutorizacao4',
+ }
+}
+
+UFGO = {
+ NFE_AMBIENTE_PRODUCAO: {
+ 'servidor' : 'nfe.sefaz.go.gov.br',
+ WS_NFE_INUTILIZACAO : 'nfe/services/NFeInutilizacao4',
+ WS_NFE_CONSULTA : 'nfe/services/NFeConsultaProtocolo4',
+ WS_NFE_SITUACAO : 'nfe/services/NFeStatusServico4',
+ WS_NFE_CONSULTA_CADASTRO : 'nfe/services/CadConsultaCadastro4',
+ WS_NFE_RECEPCAO_EVENTO : 'nfe/services/NFeRecepcaoEvento4',
+ WS_NFE_AUTORIZACAO : 'nfe/services/NFeAutorizacao4',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'nfe/services/NFeRetAutorizacao4',
+ },
+ NFE_AMBIENTE_HOMOLOGACAO: {
+ 'servidor' : 'homolog.sefaz.go.gov.br',
+ WS_NFE_INUTILIZACAO : 'nfe/services/NFeInutilizacao4',
+ WS_NFE_CONSULTA : 'nfe/services/NFeConsultaProtocolo4',
+ WS_NFE_SITUACAO : 'nfe/services/NFeStatusServico4',
+ WS_NFE_CONSULTA_CADASTRO : 'nfe/services/CadConsultaCadastro4',
+ WS_NFE_RECEPCAO_EVENTO : 'nfe/services/NFeRecepcaoEvento4',
+ WS_NFE_AUTORIZACAO : 'nfe/services/NFeAutorizacao4',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'nfe/services/NFeRetAutorizacao4',
+ }
+}
+
+UFMT = {
+ NFE_AMBIENTE_PRODUCAO: {
+ 'servidor' : 'nfe.sefaz.mt.gov.br',
+ WS_NFE_INUTILIZACAO : 'nfews/v2/services/NfeInutilizacao4',
+ WS_NFE_CONSULTA : 'nfews/v2/services/NfeConsulta4',
+ WS_NFE_SITUACAO : 'nfews/v2/services/NfeStatusServico4',
+ WS_NFE_CONSULTA_CADASTRO : 'nfews/v2/services/CadConsultaCadastro4',
+ WS_NFE_RECEPCAO_EVENTO : 'nfews/v2/services/RecepcaoEvento4',
+ WS_NFE_AUTORIZACAO : 'nfews/v2/services/NfeAutorizacao4',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'nfews/v2/services/NfeRetAutorizacao4',
+ },
+ NFE_AMBIENTE_HOMOLOGACAO: {
+ 'servidor' : 'homologacao.sefaz.mt.gov.br',
+ WS_NFE_INUTILIZACAO : 'nfews/v2/services/NfeInutilizacao4',
+ WS_NFE_CONSULTA : 'nfews/v2/services/NfeConsulta4',
+ WS_NFE_SITUACAO : 'nfews/v2/services/NfeStatusServico4',
+ WS_NFE_CONSULTA_CADASTRO : 'nfews/v2/services/CadConsultaCadastro4',
+ WS_NFE_RECEPCAO_EVENTO : 'nfews/v2/services/RecepcaoEvento4',
+ WS_NFE_AUTORIZACAO : 'nfews/v2/services/NfeAutorizacao4',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'nfews/v2/services/NfeRetAutorizacao4',
+ }
+}
+
+UFMS = {
+ NFE_AMBIENTE_PRODUCAO: {
+ 'servidor' : 'nfe.fazenda.ms.gov.br',
+ WS_NFE_INUTILIZACAO : 'ws/NFeInutilizacao4',
+ WS_NFE_CONSULTA : 'ws/NFeConsultaProtocolo4',
+ WS_NFE_SITUACAO : 'ws/NFeStatusServico4',
+ WS_NFE_CONSULTA_CADASTRO : 'ws/CadConsultaCadastro4',
+ WS_NFE_RECEPCAO_EVENTO : 'ws/NFeRecepcaoEvento4',
+ WS_NFE_AUTORIZACAO : 'ws/NFeAutorizacao4',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'ws/NFeRetAutorizacao4',
+ },
+ NFE_AMBIENTE_HOMOLOGACAO: {
+ 'servidor' : 'homologacao.nfe.ms.gov.br',
+ WS_NFE_INUTILIZACAO : 'ws/NFeInutilizacao4',
+ WS_NFE_CONSULTA : 'ws/NFeConsultaProtocolo4',
+ WS_NFE_SITUACAO : 'ws/NFeStatusServico4',
+ WS_NFE_CONSULTA_CADASTRO : 'ws/CadConsultaCadastro4',
+ WS_NFE_RECEPCAO_EVENTO : 'ws/NFeRecepcaoEvento4',
+ WS_NFE_AUTORIZACAO : 'ws/NFeAutorizacao4',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'ws/NFeRetAutorizacao4',
+ }
+}
+
+UFMG = {
+ NFE_AMBIENTE_PRODUCAO: {
+ 'servidor' : 'nfe.fazenda.mg.gov.br',
+ WS_NFE_INUTILIZACAO : 'nfe2/services/NFeInutilizacao4',
+ WS_NFE_CONSULTA : 'nfe2/services/NFeConsulta4',
+ WS_NFE_SITUACAO : 'nfe2/services/NFeStatusServico4',
+ WS_NFE_CONSULTA_CADASTRO : 'nfe2/services/cadconsultacadastro2',
+ WS_NFE_RECEPCAO_EVENTO : 'nfe2/services/NFeRecepcaoEvento4',
+ WS_NFE_AUTORIZACAO : 'nfe2/services/NFeAutorizacao4',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'nfe2/services/NFeRetAutorizacao4',
+ },
+ NFE_AMBIENTE_HOMOLOGACAO: {
+ 'servidor' : 'hnfe.fazenda.mg.gov.br',
+ WS_NFE_INUTILIZACAO : 'nfe2/services/NFeInutilizacao4',
+ WS_NFE_CONSULTA : 'nfe2/services/NFeConsulta4',
+ WS_NFE_SITUACAO : 'nfe2/services/NFeStatusServico4',
+ WS_NFE_CONSULTA_CADASTRO : 'nfe2/services/cadconsultacadastro2',
+ WS_NFE_RECEPCAO_EVENTO : 'nfe2/services/NFeRecepcaoEvento4',
+ WS_NFE_AUTORIZACAO : 'nfe2/services/NFeAutorizacao4',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'nfe2/services/NFeRetAutorizacao4',
+ }
+}
+
+UFPR = {
+ NFE_AMBIENTE_PRODUCAO: {
+ 'servidor' : 'nfe.sefa.pr.gov.br',
+ WS_NFE_INUTILIZACAO : 'nfe/NFeInutilizacao4',
+ WS_NFE_CONSULTA : 'nfe/NFeConsultaProtocolo4',
+ WS_NFE_SITUACAO : 'nfe/NFeStatusServico4',
+ WS_NFE_CONSULTA_CADASTRO : 'nfe/CadConsultaCadastro4',
+ WS_NFE_RECEPCAO_EVENTO : 'nfe/NFeRecepcaoEvento4',
+ WS_NFE_AUTORIZACAO : 'nfe/NFeAutorizacao4',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'nfe/NFeRetAutorizacao4',
+ },
+ NFE_AMBIENTE_HOMOLOGACAO: {
+ 'servidor' : 'homologacao.nfe.sefa.pr.gov.br',
+ WS_NFE_INUTILIZACAO : 'nfe/NFeInutilizacao4',
+ WS_NFE_CONSULTA : 'nfe/NFeConsultaProtocolo4',
+ WS_NFE_SITUACAO : 'nfe/NFeStatusServico4',
+ WS_NFE_CONSULTA_CADASTRO : 'nfe/CadConsultaCadastro4',
+ WS_NFE_RECEPCAO_EVENTO : 'nfe/NFeRecepcaoEvento4',
+ WS_NFE_AUTORIZACAO : 'nfe/NFeAutorizacao4',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'nfe/NFeRetAutorizacao4',
+ }
+}
+
+UFPE = {
+ NFE_AMBIENTE_PRODUCAO: {
+ 'servidor' : 'nfe.sefaz.pe.gov.br',
+ WS_NFE_INUTILIZACAO : 'nfe-service/services/NfeInutilizacao4',
+ WS_NFE_CONSULTA : 'nfe-service/services/NFeConsultaProtocolo4',
+ WS_NFE_SITUACAO : 'nfe-service/services/NFeStatusServico4',
+ WS_NFE_CONSULTA_CADASTRO: 'nfe-service/services/CadConsultaCadastro2',
+ WS_NFE_RECEPCAO_EVENTO : 'nfe-service/services/NFeRecepcaoEvento4',
+ WS_NFE_AUTORIZACAO : 'nfe-service/services/NFeAutorizacao4',
+ WS_NFE_CONSULTA_AUTORIZACAO : 'nfe-service/services/NFeRetAutorizacao4',
+ },
+ NFE_AMBIENTE_HOMOLOGACAO: {
+ 'servidor' : 'nfehomolog.sefaz.pe.gov.br',
+ WS_NFE_INUTILIZACAO : 'nfe-service/services/NfeInutilizacao4',
+ WS_NFE_CONSULTA : 'nfe-service/services/NFeConsultaProtocolo4',
+ WS_NFE_SITUACAO : 'nfe-service/services/NFeStatusServico4',
+ WS_NFE_CONSULTA_CADASTRO: 'nfe-service/services/CadConsultaCadastro2',
+ WS_NFE_RECEPCAO_EVENTO : 'nfe-service/services/NFeRecepcaoEvento4',
+ WS_NFE_AUTORIZACAO : 'nfe-service/services/NFeAutorizacao4',
+ WS_NFE_CONSULTA_AUTORIZACAO : 'nfe-service/services/NFeRetAutorizacao4',
+ }
+}
+
+
+UFRS = {
+ NFE_AMBIENTE_PRODUCAO: {
+ 'servidor' : 'nfe.sefazrs.rs.gov.br',
+ 'servidor%s' % WS_NFE_CONSULTA_CADASTRO: 'cad.sefazrs.rs.gov.br',
+ WS_NFE_INUTILIZACAO : 'ws/nfeinutilizacao/nfeinutilizacao4.asmx',
+ WS_NFE_CONSULTA : 'ws/NfeConsulta/NfeConsulta4.asmx',
+ WS_NFE_SITUACAO : 'ws/NfeStatusServico/NfeStatusServico4.asmx',
+ WS_NFE_CONSULTA_CADASTRO : 'ws/cadconsultacadastro/cadconsultacadastro4.asmx',
+ WS_NFE_RECEPCAO_EVENTO : 'ws/recepcaoevento/recepcaoevento4.asmx',
+ WS_NFE_AUTORIZACAO : 'ws/NfeAutorizacao/NFeAutorizacao4.asmx',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao4.asmx',
+ },
+ NFE_AMBIENTE_HOMOLOGACAO: {
+ 'servidor' : 'nfe-homologacao.sefazrs.rs.gov.br',
+ WS_NFE_INUTILIZACAO : 'ws/nfeinutilizacao/nfeinutilizacao4.asmx',
+ WS_NFE_CONSULTA : 'ws/NfeConsulta/NfeConsulta4.asmx',
+ WS_NFE_SITUACAO : 'ws/NfeStatusServico/NfeStatusServico4.asmx',
+ WS_NFE_RECEPCAO_EVENTO : 'ws/recepcaoevento/recepcaoevento4.asmx',
+ WS_NFE_CONSULTA_CADASTRO : 'ws/cadconsultacadastro/cadconsultacadastro4.asmx',
+ WS_NFE_AUTORIZACAO : 'ws/NfeAutorizacao/NFeAutorizacao4.asmx',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'ws/NfeRetAutorizacao/NFeRetAutorizacao4.asmx',
+ }
+}
+
+
+UFSP = {
+ NFE_AMBIENTE_PRODUCAO: {
+ 'servidor' : 'nfe.fazenda.sp.gov.br',
+ WS_NFE_INUTILIZACAO : 'ws/nfeinutilizacao4.asmx',
+ WS_NFE_CONSULTA : 'ws/nfeconsultaprotocolo4.asmx',
+ WS_NFE_SITUACAO : 'ws/nfestatusservico4.asmx',
+ WS_NFE_CONSULTA_CADASTRO : 'ws/cadconsultacadastro4.asmx',
+ WS_NFE_RECEPCAO_EVENTO : 'ws/nferecepcaoevento4.asmx',
+ WS_NFE_AUTORIZACAO : 'ws/nfeautorizacao4.asmx',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'ws/nferetautorizacao4.asmx',
+ },
+ NFE_AMBIENTE_HOMOLOGACAO: {
+ 'servidor' : 'homologacao.nfe.fazenda.sp.gov.br',
+ WS_NFE_INUTILIZACAO : 'ws/nfeinutilizacao4.asmx',
+ WS_NFE_CONSULTA : 'ws/nfeconsultaprotocolo4.asmx',
+ WS_NFE_SITUACAO : 'ws/nfestatusservico4.asmx',
+ WS_NFE_CONSULTA_CADASTRO : 'ws/cadconsultacadastro4.asmx',
+ WS_NFE_RECEPCAO_EVENTO : 'ws/nferecepcaoevento4.asmx',
+ WS_NFE_AUTORIZACAO : 'ws/nfeautorizacao4.asmx',
+ WS_NFE_CONSULTA_AUTORIZACAO: 'ws/nferetautorizacao4.asmx',
+ }
+}
+
+#
+# Informação obtida em
+# http://www.nfe.fazenda.gov.br/portal/webServices.aspx
+# Última verificação: 28/11/2017 16:15
+#
+# UF que utilizam a SVAN - Sefaz Virtual do Ambiente Nacional: MA, PA
+# UF que utilizam a SVRS - Sefaz Virtual do RS:
+# - Para serviço de Consulta Cadastro: AC, RN, PB, SC
+# - Para demais serviços relacionados com o sistema da NF-e: AC, AL, AP, DF, PB, PI, RJ, RN, RO, RR, SC, SE, TO
+# Autorizadores: AM BA CE GO MG MA MS MT PE PR RS SP
+#
+
+ESTADO_WS = {
+ 'AC': SVRS,
+ 'AL': SVRS,
+ 'AM': UFAM,
+ 'AP': SVRS,
+ 'BA': UFBA,
+ 'CE': UFCE,
+ 'DF': SVRS,
+ 'ES': SVRS,
+ 'GO': UFGO,
+ 'MA': SVAN,
+ 'MG': UFMG,
+ 'MS': UFMS,
+ 'MT': UFMT,
+ 'PA': SVAN,
+ 'PB': SVRS,
+ 'PE': UFPE,
+ 'PI': SVRS,
+ 'PR': UFPR,
+ 'RJ': SVRS,
+ 'RN': SVRS,
+ 'RO': SVRS,
+ 'RR': SVRS,
+ 'RS': UFRS,
+ 'SC': SVRS,
+ 'SE': SVRS,
+ 'SP': UFSP,
+ 'TO': SVRS,
+}
+
+
+#
+# Informação obtida em
+# http://www.nfe.fazenda.gov.br/portal/webServices.aspx
+# Última verificação: 15/08/2014 16:22
+#
+# Autorizadores em contingência:
+# - UF que utilizam a SVC-AN - Sefaz Virtual de Contingência Ambiente Nacional: AC, AL, AP, DF, ES, MG, PB, RJ, RN, RO, RR, RS, SC, SE, SP, TO
+# - UF que utilizam a SVC-RS - Sefaz Virtual de Contingência Rio Grande do Sul: AM, BA, CE, GO, MA, MS, MT, PA, PE, PI, PR
+#
+
+ESTADO_WS_CONTINGENCIA = {
+ 'AC': SVC_AN,
+ 'AL': SVC_AN,
+ 'AM': SVC_RS,
+ 'AP': SVC_AN,
+ 'BA': SVC_RS,
+ 'CE': SVC_RS,
+ 'DF': SVC_AN,
+ 'ES': SVC_AN,
+ 'GO': SVC_RS,
+ 'MA': SVC_RS,
+ 'MG': SVC_AN,
+ 'MS': SVC_RS,
+ 'MT': SVC_RS,
+ 'PA': SVC_RS,
+ 'PB': SVC_AN,
+ 'PE': SVC_RS,
+ 'PI': SVC_RS,
+ 'PR': SVC_RS,
+ 'RJ': SVC_AN,
+ 'RN': SVC_AN,
+ 'RO': SVC_AN,
+ 'RR': SVC_AN,
+ 'RS': SVC_AN,
+ 'SC': SVC_AN,
+ 'SE': SVC_AN,
+ 'SP': SVC_AN,
+ 'TO': SVC_AN,
+}
diff --git a/pysped/nfe/webservices_nfce_3.py b/pysped/nfe/webservices_nfce_3.py
index 1d4ed33d..daa18769 100644
--- a/pysped/nfe/webservices_nfce_3.py
+++ b/pysped/nfe/webservices_nfce_3.py
@@ -56,7 +56,7 @@
WS_NFE_RECEPCAO_EVENTO,
WS_DFE_DISTRIBUICAO)
-import webservices_3
+from . import webservices_3
SVRS = {
diff --git a/pysped/nfse/logo_prefeitura/sp-sao_paulo.jpeg b/pysped/nfse/logo_prefeitura/sp-sao_paulo.jpeg
new file mode 100644
index 00000000..ad641b25
Binary files /dev/null and b/pysped/nfse/logo_prefeitura/sp-sao_paulo.jpeg differ
diff --git a/pysped/nfse/logo_prefeitura/sp-sorocaba.jpeg b/pysped/nfse/logo_prefeitura/sp-sorocaba.jpeg
new file mode 100644
index 00000000..0871f305
Binary files /dev/null and b/pysped/nfse/logo_prefeitura/sp-sorocaba.jpeg differ
diff --git a/pysped/nfse/sp-sao_paulo/envio_lote_rps.xml b/pysped/nfse/sp-sao_paulo/envio_lote_rps.xml
new file mode 100644
index 00000000..f7a7f327
--- /dev/null
+++ b/pysped/nfse/sp-sao_paulo/envio_lote_rps.xml
@@ -0,0 +1,53 @@
+
+
+
+
+ ${ NFe.infNFe.emit.CNPJ.valor }
+
+ false
+ ${ NFe.infNFe.ide.dEmi.formato_iso }
+ ${ NFe.infNFe.ide.dEmi.formato_iso }
+ 1
+ ${ NFe.infNFe.total.ISSQNTot.vServ.valor }
+ ${ NFe.infNFe.total.ISSQNTot.vDeducao.valor }
+
+
+ ${ 'assinatura de SP' }
+
+ ${ NFe.infNFe.emit.IM.valor }
+ ${ NFe.infNFe.ide.serie_rps.valor or '1' }
+ ${ NFe.infNFe.ide.nRPS.valor }
+
+ RPS
+ ${ NFe.infNFe.ide.dEmi.formato_iso }
+ N
+ T
+ ${ NFe.infNFe.total.ISSQNTot.vServ.valor }
+ ${ NFe.infNFe.total.ISSQNTot.vDeducao.valor }
+ ${ NFe.infNFe.total.retTrib.vRetPIS.valor }
+ ${ NFe.infNFe.total.retTrib.vRetCOFINS.valor }
+ ${ NFe.infNFe.total.retTrib.vRetPrev.valor }
+ ${ NFe.infNFe.total.retTrib.vIRRF.valor }
+ ${ NFe.infNFe.total.retTrib.vRetCSLL.valor }
+ ${ NFe.infNFe.det[0].imposto.ISSQN.cServico.valor }
+ ${ NFe.infNFe.total.ISSQNTot.pISS.valor }
+ false
+ true
+
+ ${ NFe.infNFe.dest.CNPJ.valor }
+ ${ NFe.infNFe.dest.CPF.valor }
+
+ ${ NFe.infNFe.dest.xNome.valor }
+
+ R
+ ${ NFe.infNFe.dest.enderDest.xLgr.valor }
+ ${ NFe.infNFe.dest.enderDest.nro.valor }
+ ${ NFe.infNFe.dest.enderDest.xCpl.valor }
+ ${ NFe.infNFe.dest.enderDest.xBairro.valor }
+ ${ NFe.infNFe.dest.enderDest.cMun.valor }
+ ${ NFe.infNFe.dest.enderDest.UF.valor }
+ ${ NFe.infNFe.dest.enderDest.CEP.valor }
+
+ ${ NFe.infNFe.descServico.valor }
+
+
diff --git a/pysped/nfse/sp-sao_paulo/envio_rps.xml b/pysped/nfse/sp-sao_paulo/envio_rps.xml
new file mode 100644
index 00000000..661306e1
--- /dev/null
+++ b/pysped/nfse/sp-sao_paulo/envio_rps.xml
@@ -0,0 +1,9 @@
+
+
+
+
+ ${ NFe.infNFe.emit.CNPJ.valor }
+
+
+
+
diff --git a/pysped/nfse/sp-sao_paulo/nfe.xml b/pysped/nfse/sp-sao_paulo/nfe.xml
new file mode 100644
index 00000000..85b54334
--- /dev/null
+++ b/pysped/nfse/sp-sao_paulo/nfe.xml
@@ -0,0 +1,63 @@
+
+
+ ${ 'assinatura de SP' }
+
+
+ ${ NFe.infNFe.ide.dEmi.formato_iso }
+ ${ NFe.infNFe.ide.nRPS.valor }
+
+ ${ NFe.infNFe.emit.IM.valor }
+ ${ NFe.infNFe.ide.serie_rps.valor or '1' }
+ ${ NFe.infNFe.ide.nRPS.valor }
+
+ RPS
+ ${ NFe.infNFe.ide.dEmi.formato_iso }
+
+ ${ NFe.infNFe.emit.CNPJ.valor }
+ ${ NFe.infNFe.emit.CPF.valor }
+
+ ${ NFe.infNFe.emit.xNome.valor }
+
+ R
+ ${ NFe.infNFe.emit.enderEmi.xLgr.valor }
+ ${ NFe.infNFe.emit.enderEmi.nro.valor }
+ ${ NFe.infNFe.emit.enderEmi.xCpl.valor }
+ ${ NFe.infNFe.emit.enderEmi.xBairro.valor }
+ ${ NFe.infNFe.emit.enderEmi.cMun.valor }
+ ${ NFe.infNFe.emit.enderEmi.UF.valor }
+ ${ NFe.infNFe.emit.enderEmi.CEP.valor }
+
+
+
+
+ N
+ T
+ ${ NFe.infNFe.total.ISSQNTot.vServ.valor }
+ ${ NFe.infNFe.total.ISSQNTot.vDeducao.valor }
+ ${ NFe.infNFe.total.retTrib.vRetPIS.valor }
+ ${ NFe.infNFe.total.retTrib.vRetCOFINS.valor }
+ ${ NFe.infNFe.total.retTrib.vRetPrev.valor }
+ ${ NFe.infNFe.total.retTrib.vIRRF.valor }
+ ${ NFe.infNFe.total.retTrib.vRetCSLL.valor }
+ ${ NFe.infNFe.det[0].imposto.ISSQN.cServico.valor }
+ ${ NFe.infNFe.total.ISSQNTot.pISS.valor }
+ false
+ true
+
+ ${ NFe.infNFe.dest.CNPJ.valor }
+ ${ NFe.infNFe.dest.CPF.valor }
+
+ ${ NFe.infNFe.dest.xNome.valor }
+
+ R
+ ${ NFe.infNFe.dest.enderDest.xLgr.valor }
+ ${ NFe.infNFe.dest.enderDest.nro.valor }
+ ${ NFe.infNFe.dest.enderDest.xCpl.valor }
+ ${ NFe.infNFe.dest.enderDest.xBairro.valor }
+ ${ NFe.infNFe.dest.enderDest.cMun.valor }
+ ${ NFe.infNFe.dest.enderDest.UF.valor }
+ ${ NFe.infNFe.dest.enderDest.CEP.valor }
+
+ ${ NFe.infNFe.descServico.valor }
+ ${ NFe.infNFe.descServico.valor }| ${ NFe.infNFe.infAdic.infCpl.valor }
+
diff --git a/pysped/nfse/sp-sao_paulo/rps.xml b/pysped/nfse/sp-sao_paulo/rps.xml
new file mode 100644
index 00000000..e3f219d9
--- /dev/null
+++ b/pysped/nfse/sp-sao_paulo/rps.xml
@@ -0,0 +1,40 @@
+
+ ${ 'assinatura de SP' }
+
+ ${ NFe.infNFe.emit.IM.valor }
+ ${ NFe.infNFe.ide.serie_rps.valor or '1' }
+ ${ NFe.infNFe.ide.nRPS.valor }
+
+ RPS
+ ${ NFe.infNFe.ide.dEmi.formato_iso }
+ N
+ T
+ ${ NFe.infNFe.total.ISSQNTot.vServ.valor }
+ ${ NFe.infNFe.total.ISSQNTot.vDeducao.valor }
+ ${ NFe.infNFe.total.retTrib.vRetPIS.valor }
+ ${ NFe.infNFe.total.retTrib.vRetCOFINS.valor }
+ ${ NFe.infNFe.total.retTrib.vRetPrev.valor }
+ ${ NFe.infNFe.total.retTrib.vIRRF.valor }
+ ${ NFe.infNFe.total.retTrib.vRetCSLL.valor }
+ ${ NFe.infNFe.det[0].imposto.ISSQN.cServico.valor }
+ ${ NFe.infNFe.total.ISSQNTot.pISS.valor / 100 }
+ false
+ true
+
+ ${ NFe.infNFe.dest.CNPJ.valor }
+ ${ NFe.infNFe.dest.CPF.valor }
+
+ ${ NFe.infNFe.dest.xNome.valor }
+
+ R
+ ${ NFe.infNFe.dest.enderDest.xLgr.valor }
+ ${ NFe.infNFe.dest.enderDest.nro.valor }
+ ${ NFe.infNFe.dest.enderDest.xCpl.valor }
+ ${ NFe.infNFe.dest.enderDest.xBairro.valor }
+ ${ NFe.infNFe.dest.enderDest.cMun.valor }
+ ${ NFe.infNFe.dest.enderDest.UF.valor }
+ ${ NFe.infNFe.dest.enderDest.CEP.valor }
+
+ ${ NFe.infNFe.descServico.valor }
+ ${ NFe.infNFe.descServico.valor }| ${ NFe.infNFe.infAdic.infCpl.valor }
+
diff --git a/pysped/nfse/sp-sorocaba b/pysped/nfse/sp-sorocaba
new file mode 120000
index 00000000..4123d7d4
--- /dev/null
+++ b/pysped/nfse/sp-sorocaba
@@ -0,0 +1 @@
+sp-sao_paulo
\ No newline at end of file
diff --git a/pysped/xml_sped/__init__.py b/pysped/xml_sped/__init__.py
index e64ebbb1..60e61df5 100644
--- a/pysped/xml_sped/__init__.py
+++ b/pysped/xml_sped/__init__.py
@@ -40,14 +40,14 @@
#
-from base import ABERTURA, NAMESPACE_NFE, NAMESPACE_SIG, \
+from .base import ABERTURA, NAMESPACE_NFE, NAMESPACE_SIG, \
TagCaracter, TagData, TagDataHora, TagDecimal, TagHora, TagInteiro, \
TagDataHoraUTC, \
XMLNFe, tira_abertura, tirar_acentos, por_acentos, TagBoolean, somente_ascii, \
NAMESPACE_CTE
-from assinatura import Signature
+from .assinatura import Signature
# Pyflakes
diff --git a/pysped/xml_sped/base.py b/pysped/xml_sped/base.py
index 367d669f..dfd6acb4 100644
--- a/pysped/xml_sped/base.py
+++ b/pysped/xml_sped/base.py
@@ -39,27 +39,40 @@
#
#
-from __future__ import division, print_function, unicode_literals
+from __future__ import (division, print_function, unicode_literals,
+ absolute_import)
+
+import sys
+from past.builtins import basestring
+from builtins import int, str
+from io import open
from lxml import etree
from datetime import datetime, date, time
-from decimal import Decimal
-import locale
import unicodedata
import re
import pytz
from time import strftime
+PYBRASIL = False
+try:
+ from pybrasil.valor.decimal import Decimal
+ from pybrasil.valor import formata_valor
+ from pybrasil.data import formata_data
+
+ PYBRASIL = True
+except:
+ from decimal import Decimal
+ import locale
+
+
NAMESPACE_NFE = 'http://www.portalfiscal.inf.br/nfe'
NAMESPACE_CTE = 'http://www.portalfiscal.inf.br/cte'
NAMESPACE_SIG = 'http://www.w3.org/2000/09/xmldsig#'
NAMESPACE_NFSE = 'http://localhost:8080/WsNFe2/lote'
ABERTURA = ''
-locale.setlocale(locale.LC_ALL, b'pt_BR.UTF-8')
-locale.setlocale(locale.LC_COLLATE, b'pt_BR.UTF-8')
-
class NohXML(object):
def __init__(self, *args, **kwargs):
@@ -78,18 +91,18 @@ def _le_xml(self, arquivo):
#elif arquivo is not None:
if arquivo is not None:
if isinstance(arquivo, basestring):
- if isinstance(arquivo, str):
- arquivo = unicode(arquivo.encode('utf-8'))
+ if sys.version_info.major == 2:
+ if not isinstance(arquivo, unicode):
+ arquivo = arquivo.decode('utf-8')
if '<' in arquivo:
self._xml = etree.fromstring(tira_abertura(arquivo).encode('utf-8'))
else:
- arq = open(arquivo)
- txt = b''.join(arq.readlines())
- txt = unicode(txt.decode('utf-8'))
+ arq = open(arquivo, 'r', encoding='utf-8')
+ txt = ''.join(arq.readlines())
txt = tira_abertura(txt)
arq.close()
- self._xml = etree.fromstring(txt)
+ self._xml = etree.fromstring(txt.encode('utf-8'))
else:
self._xml = etree.parse(arquivo)
return True
@@ -174,25 +187,25 @@ def __str__(self):
return repr(self.value)
def __unicode__(self):
- return unicode(self.value)
+ return str(self.value)
class TamanhoInvalido(Exception):
def __init__(self, codigo, nome, valor, tam_min=None, tam_max=None, dec_min=None, dec_max=None):
if tam_min:
- self.value = 'O campo código ' + codigo + ', "' + nome + '", deve ter o tamanho mínimo de ' + unicode(tam_min) + ', mas o tamanho enviado foi ' + unicode(len(unicode(valor))) + ': ' + unicode(valor)
+ self.value = 'O campo código ' + codigo + ', "' + nome + '", deve ter o tamanho mínimo de ' + str(tam_min) + ', mas o tamanho enviado foi ' + str(len(str(valor))) + ': ' + str(valor)
elif tam_max:
- self.value = 'O campo código ' + codigo + ', "' + nome + '", deve ter o tamanho máximo de ' + unicode(tam_max) + ', mas o tamanho enviado foi ' + unicode(len(unicode(valor))) + ': ' + unicode(valor)
+ self.value = 'O campo código ' + codigo + ', "' + nome + '", deve ter o tamanho máximo de ' + str(tam_max) + ', mas o tamanho enviado foi ' + str(len(str(valor))) + ': ' + str(valor)
elif dec_min:
- self.value = 'O campo código ' + codigo + ', "' + nome + '", deve ter o mínimo de ' + unicode(dec_min) + ' casas decimais, mas o enviado foi ' + unicode(len(unicode(valor))) + ': ' + unicode(valor)
+ self.value = 'O campo código ' + codigo + ', "' + nome + '", deve ter o mínimo de ' + str(dec_min) + ' casas decimais, mas o enviado foi ' + str(len(str(valor))) + ': ' + str(valor)
elif dec_max:
- self.value = 'O campo código ' + codigo + ', "' + nome + '", deve ter o máximo de ' + unicode(dec_max) + ' casas decimais, mas o enviado foi ' + unicode(len(unicode(valor))) + ': ' + unicode(valor)
+ self.value = 'O campo código ' + codigo + ', "' + nome + '", deve ter o máximo de ' + str(dec_max) + ' casas decimais, mas o enviado foi ' + str(len(str(valor))) + ': ' + str(valor)
def __str__(self):
return repr(self.value)
def __unicode__(self):
- return unicode(self.value)
+ return str(self.value)
class ErroCaracterInvalido(Exception):
@@ -206,7 +219,7 @@ def __str__(self):
return repr(self.value)
def __unicode__(self):
- return unicode(self.value)
+ return str(self.value)
class TagCaracter(NohXML):
@@ -223,13 +236,14 @@ def __init__(self, *args, **kwargs):
self.alertas = []
self.raiz = None
self.cdata = False
+ self.ignora_validacao = False
# Codigo para dinamizar a criacao de instancias de entidade,
# aplicando os valores dos atributos na instanciacao
for k, v in kwargs.items():
setattr(self, k, v)
- if kwargs.has_key('valor'):
+ if 'valor' in kwargs:
self.valor = kwargs['valor']
def _testa_obrigatorio(self, valor):
@@ -238,16 +252,19 @@ def _testa_obrigatorio(self, valor):
#raise ErroObrigatorio(self.codigo, self.nome, self.propriedade)
def _testa_tamanho_minimo(self, valor):
- if self.tamanho[0] and (len(unicode(valor)) < self.tamanho[0]):
+ if self.tamanho[0] and (len(str(valor)) < self.tamanho[0]):
return TamanhoInvalido(self.codigo, self.nome, valor, tam_min=self.tamanho[0])
#raise TamanhoInvalido(self.codigo, self.nome, valor, tam_min=self.tamanho[0])
def _testa_tamanho_maximo(self, valor):
- if self.tamanho[1] and (len(unicode(valor)) > self.tamanho[1]):
+ if self.tamanho[1] and (len(str(valor)) > self.tamanho[1]):
return TamanhoInvalido(self.codigo, self.nome, valor, tam_max=self.tamanho[1])
#raise TamanhoInvalido(self.codigo, self.nome, valor, tam_max=self.tamanho[1])
def _valida(self, valor):
+ if self.ignora_validacao:
+ return True
+
self.alertas = []
v = valor
@@ -268,13 +285,15 @@ def _valida(self, valor):
def set_valor(self, novo_valor):
if novo_valor is not None:
- novo_valor = unicode(novo_valor)
+ novo_valor = str(novo_valor).replace('ŭ', 'u').replace('Ŭ', 'U')
+
#
# Remover caratceres inválidos
#
- for c in novo_valor:
- if c > 'ÿ':
- raise ErroCaracterInvalido(self.codigo, self.nome, self.propriedade, novo_valor, c)
+ if not self.ignora_validacao:
+ for c in novo_valor:
+ if c > 'ÿ':
+ raise ErroCaracterInvalido(self.codigo, self.nome, self.propriedade, novo_valor, c)
#
# É obrigatório remover os espaços no início e no final do valor
@@ -283,14 +302,19 @@ def set_valor(self, novo_valor):
if self._valida(novo_valor):
if self.cdata:
- self._valor_string = unicode(novo_valor)
+ self._valor_string = str(novo_valor)
else:
- self._valor_string = unicode(tirar_acentos(novo_valor))
+ self._valor_string = str(tirar_acentos(novo_valor))
else:
self._valor_string = ''
def get_valor(self):
- return unicode(por_acentos(self._valor_string))
+ valor = str(por_acentos(self._valor_string))
+ if valor[:6] == 'Tauga ':
+ return 'Taŭga ' + valor[6:]
+ elif valor[:6] == 'TAUGA ':
+ return 'TAŬGA ' + valor[6:]
+ return valor
valor = property(get_valor, set_valor)
@@ -356,7 +380,7 @@ def __init__(self, **kwargs):
for k, v in kwargs.items():
setattr(self, k, v)
- if kwargs.has_key('valor'):
+ if 'valor' in kwargs:
self.valor = kwargs['valor']
@@ -428,7 +452,7 @@ def __init__(self, **kwargs):
for k, v in kwargs.items():
setattr(self, k, v)
- if kwargs.has_key('valor'):
+ if 'valor' in kwargs:
self.valor = kwargs['valor']
def _valida(self, valor):
@@ -469,6 +493,24 @@ def formato_danfe(self):
else:
return self._valor_data.strftime('%d/%m/%Y')
+ @property
+ def mes_ano(self):
+ if self._valor_data is None:
+ return ''
+ else:
+ if PYBRASIL:
+ return formata_data(self._valor_data, '%B/%Y')
+ else:
+ return self._valor_data.strftime('%B/%Y')
+
+ @property
+ def formato_iso(self):
+ if self._valor_data is None:
+ return ''
+ else:
+ return self._valor_data.strftime('%Y-%m-%d')
+
+
class TagHora(TagData):
def set_valor(self, novo_valor):
if isinstance(novo_valor, basestring):
@@ -500,6 +542,10 @@ def formato_danfe(self):
else:
return self._valor_data.strftime('%H:%M:%S')
+ @property
+ def formato_iso(self):
+ return self.formato_danfe
+
class TagDataHora(TagData):
def set_valor(self, novo_valor):
@@ -541,6 +587,23 @@ def formato_danfe(self):
else:
return self._valor_data.strftime('%d/%m/%Y %H:%M:%S')
+ @property
+ def mes_ano(self):
+ if self._valor_data is None:
+ return ''
+ else:
+ if PYBRASIL:
+ return formata_data(self._valor_data, '%B/%Y')
+ else:
+ return self._valor_data.strftime('%B/%Y')
+
+ @property
+ def formato_iso(self):
+ if self._valor_data is None:
+ return ''
+ else:
+ return self._valor_data.strftime('%Y-%m-%d %H:%M:%S')
+
def fuso_horario_sistema():
diferenca = int(strftime('%z')) // 100
@@ -643,7 +706,7 @@ def formato_danfe(self):
if self._valor_data is None:
return ''
else:
- valor = self._brasilia.normalize(self._valor_data).strftime('%d/%m/%Y %H:%M:%S %Z (%z)')
+ valor = self._brasilia.normalize(self._valor_data).strftime('%d/%m/%Y %H:%M:%S (%z)')
#
# Troca as siglas:
# BRT - Brasília Time -> HOB - Horário Oficial de Brasília
@@ -663,6 +726,23 @@ def formato_danfe(self):
valor = valor.replace('FNT', 'HOFN')
return valor
+ @property
+ def mes_ano(self):
+ if self._valor_data is None:
+ return ''
+ else:
+ if PYBRASIL:
+ return formata_data(self._valor_data, '%B/%Y')
+ else:
+ return self._valor_data.strftime('%B/%Y')
+
+ @property
+ def formato_iso(self):
+ if self._valor_data is None:
+ return ''
+ else:
+ return self._valor_data.isoformat()
+
class TagInteiro(TagCaracter):
def __init__(self, **kwargs):
@@ -675,7 +755,7 @@ def __init__(self, **kwargs):
for k, v in kwargs.items():
setattr(self, k, v)
- if kwargs.has_key('valor'):
+ if 'valor' in kwargs:
self.valor = kwargs['valor']
def set_valor(self, novo_valor):
@@ -685,9 +765,9 @@ def set_valor(self, novo_valor):
else:
novo_valor = 0
- if isinstance(novo_valor, (int, long, Decimal)) and self._valida(novo_valor):
+ if isinstance(novo_valor, (int, Decimal)) and self._valida(novo_valor):
self._valor_inteiro = novo_valor
- self._valor_string = unicode(self._valor_inteiro)
+ self._valor_string = str(self._valor_inteiro)
if (len(self.tamanho) >= 3) and self.tamanho[2] and (len(self._valor_string) < self.tamanho[2]):
self._valor_string = self._valor_string.rjust(self.tamanho[2], '0')
@@ -706,7 +786,11 @@ def formato_danfe(self):
if not (self.obrigatorio or self._valor_inteiro):
return ''
- return locale.format('%d', self._valor_inteiro, grouping=True)
+ if PYBRASIL:
+ return formata_valor(self._valor_inteiro, casas_decimais=0)
+
+ else:
+ return locale.format('%d', self._valor_inteiro, grouping=True)
class TagDecimal(TagCaracter):
@@ -719,6 +803,7 @@ def __init__(self, *args, **kwargs):
self._valor_decimal = Decimal('0.0')
self._valor_string = self._formata(self._valor_decimal)
self.decimais = [None, None, None]
+ self.decimais_danfe = None
# Codigo para dinamizar a criacao de instancias de entidade,
# aplicando os valores dos atributos na instanciacao
@@ -729,21 +814,28 @@ def _parte_inteira(self, valor=None):
if valor is None:
valor = self._valor_decimal
- valor = unicode(valor).strip()
+ valor = str(valor).strip()
if '.' in valor:
valor = valor.split('.')[0]
return valor
- def _parte_decimal(self, valor=None):
+ def _parte_decimal(self, valor=None, tira_zeros=False):
if valor is None:
valor = self._valor_decimal
- valor = unicode(valor).strip()
+ valor = str(valor).strip()
if '.' in valor:
valor = valor.split('.')[1]
+
+ if tira_zeros:
+ valor = valor[::-1]
+ valor = int(valor)
+ valor = str(valor)
+ valor = valor[::-1]
+
else:
valor = ''
@@ -759,6 +851,8 @@ def _formata(self, valor):
# Tamanho mínimo das casas decimais
if (len(self.decimais) >= 3) and self.decimais[2] and (len(dec) < self.decimais[2]):
dec = dec.ljust(self.decimais[2], '0')
+ elif self.nome == 'versao':
+ dec = dec.ljust(2, '0')
texto += '.' + dec
return texto
@@ -809,7 +903,7 @@ def set_valor(self, novo_valor):
else:
novo_valor = Decimal('0.0')
- if isinstance(novo_valor, (int, long, Decimal)) and self._valida(novo_valor):
+ if isinstance(novo_valor, (int, Decimal)) and self._valida(novo_valor):
self._valor_decimal = Decimal(novo_valor)
self._valor_string = self._formata(self._valor_decimal)
else:
@@ -826,32 +920,44 @@ def formato_danfe(self):
if not (self.obrigatorio or self._valor_decimal):
return ''
+ if self.decimais_danfe is not None:
+ if self.decimais_danfe == 0:
+ formato = '%d'
+ elif len(self._parte_decimal(tira_zeros=True)) <= self.decimais_danfe:
+ formato = '%.' + str(self.decimais_danfe) + 'f'
+ else:
+ formato = '%.' + str(len(self._parte_decimal(tira_zeros=True))) + 'f'
+
# Tamanho mínimo das casas decimais
- if (len(self.decimais) >= 3) and self.decimais[2]:
+ elif (len(self.decimais) >= 3) and self.decimais[2]:
if len(self._parte_decimal()) <= self.decimais[2]:
- formato = '%.' + unicode(self.decimais[2]) + 'f'
+ formato = '%.' + str(self.decimais[2]) + 'f'
else:
- formato = '%.' + unicode(len(self._parte_decimal())) + 'f'
+ formato = '%.' + str(len(self._parte_decimal())) + 'f'
else:
formato = '%.2f'
- return locale.format(formato, self._valor_decimal, grouping=True)
+ if PYBRASIL:
+ if formato == '%d':
+ return formata_valor(self._valor_decimal, casas_decimais=0)
+
+ cd = int(formato.replace('%.', '').replace('f', ''))
+ return formata_valor(self._valor_decimal, casas_decimais=cd)
+
+ else:
+ return locale.format(formato, self._valor_decimal, grouping=True)
@property
def formato_danfce(self):
if not (self.obrigatorio or self._valor_decimal):
return ''
- # Tamanho mínimo das casas decimais
- #if (len(self.decimais) >= 3) and self.decimais[2]:
- #if len(self._parte_decimal()) <= self.decimais[2]:
- #formato = '%.' + unicode(self.decimais[2]) + 'f'
- #else:
- #formato = '%.' + unicode(len(self._parte_decimal())) + 'f'
- #else:
- formato = '%.2f'
+ if PYBRASIL:
+ return formata_valor(self._valor_decimal)
- return locale.format(formato, self._valor_decimal, grouping=True)
+ else:
+ formato = '%.2f'
+ return locale.format(formato, self._valor_decimal, grouping=True)
class XMLNFe(NohXML):
@@ -901,6 +1007,8 @@ def tirar_acentos(texto):
texto = texto.replace('>', '>')
texto = texto.replace('"', '"')
texto = texto.replace("'", ''')
+ texto = texto.replace('Ŭ', 'Ŭ')
+ texto = texto.replace('ŭ', 'ŭ')
#
# Trocar ENTER e TAB
@@ -930,6 +1038,8 @@ def por_acentos(texto):
texto = texto.replace('>', '>')
texto = texto.replace('<', '<')
texto = texto.replace('&', '&')
+ texto = texto.replace('Ŭ', 'Ŭ')
+ texto = texto.replace('ŭ', 'ŭ')
return texto
@@ -985,11 +1095,11 @@ def _tipo_para_string(valor, tipo, obrigatorio, dec_min):
# e a função strftime só aceita data com anos a partir de 1900
if (tipo in ('d', 'h', 'dh')) and isinstance(valor, (datetime, date, time,)):
valor = formata_datahora(valor, tipo)
- elif (tipo == 'n') and isinstance(valor, (int, long, float, Decimal)):
- if isinstance(valor, (int, long, float)):
- valor = Decimal(unicode(valor))
+ elif (tipo == 'n') and isinstance(valor, (int, float, Decimal)):
+ if isinstance(valor, (int, float)):
+ valor = Decimal(str(valor))
- valor = unicode(valor).strip()
+ valor = str(valor).strip()
if '.' in valor:
decimais = valor.split('.')[1]
diff --git a/pysped/xml_sped/certificado.py b/pysped/xml_sped/certificado.py
index 1a685143..2f97b4c8 100644
--- a/pysped/xml_sped/certificado.py
+++ b/pysped/xml_sped/certificado.py
@@ -41,6 +41,8 @@
from __future__ import division, print_function, unicode_literals
+from io import open
+import sys
import os
import base64
import signxml
@@ -85,7 +87,12 @@ def prepara_certificado_arquivo_pfx(self):
self.chave = crypto.dump_privatekey(crypto.FILETYPE_PEM, pkcs12.get_privatekey())
# Retorna a string decodificada do certificado
- self.prepara_certificado_txt(crypto.dump_certificate(crypto.FILETYPE_PEM, pkcs12.get_certificate()))
+ certificado = crypto.dump_certificate(crypto.FILETYPE_PEM, pkcs12.get_certificate())
+
+ if sys.version_info.major == 3:
+ certificado = certificado.decode('utf-8')
+
+ self.prepara_certificado_txt(certificado)
self._certificado_preparado = True
@@ -118,19 +125,43 @@ def prepara_certificado_txt(self, cert_txt):
cert_openssl = crypto.load_certificate(crypto.FILETYPE_PEM, self.certificado)
self.cert_openssl = cert_openssl
-
- self._emissor = dict(cert_openssl.get_issuer().get_components())
- self._proprietario = dict(cert_openssl.get_subject().get_components())
self._numero_serie = cert_openssl.get_serial_number()
- self._data_inicio_validade = datetime.strptime(cert_openssl.get_notBefore(), '%Y%m%d%H%M%SZ')
- self._data_inicio_validade = UTC.localize(self._data_inicio_validade)
- self._data_fim_validade = datetime.strptime(cert_openssl.get_notAfter(), '%Y%m%d%H%M%SZ')
- self._data_fim_validade = UTC.localize(self._data_fim_validade)
for i in range(cert_openssl.get_extension_count()):
extensao = cert_openssl.get_extension(i)
self._extensoes[extensao.get_short_name()] = extensao.get_data()
+ self._emissor = {}
+ for chave, valor in cert_openssl.get_issuer().get_components():
+ chave = chave.decode('utf-8')
+ valor = valor.decode('utf-8')
+ self._emissor[chave] = valor
+
+ self._proprietario = {}
+ for chave, valor in cert_openssl.get_subject().get_components():
+ chave = chave.decode('utf-8')
+ valor = valor.decode('utf-8')
+ self._proprietario[chave] = valor
+
+ if sys.version_info.major == 3:
+ self._data_inicio_validade = \
+ datetime.strptime(cert_openssl.get_notBefore().decode('utf-8'), '%Y%m%d%H%M%SZ')
+ self._data_fim_validade = \
+ datetime.strptime(cert_openssl.get_notAfter().decode('utf-8'), '%Y%m%d%H%M%SZ')
+
+ else:
+ #self._emissor = dict(cert_openssl.get_issuer().get_components())
+ #self._proprietario = dict(cert_openssl.get_subject().get_components())
+ self._data_inicio_validade = \
+ datetime.strptime(cert_openssl.get_notBefore(), '%Y%m%d%H%M%SZ')
+ self._data_fim_validade = \
+ datetime.strptime(cert_openssl.get_notAfter(), '%Y%m%d%H%M%SZ')
+
+ self._data_inicio_validade = \
+ UTC.localize(self._data_inicio_validade)
+ self._data_fim_validade = \
+ UTC.localize(self._data_fim_validade)
+
def _set_arquivo(self, arquivo):
self._arquivo = arquivo
self._certificado_preparado = False
@@ -154,7 +185,7 @@ def _set_chave(self, chave):
def _get_chave(self):
try:
- if self._chave: # != ''
+ if self._chave:
return self._chave
else:
raise AttributeError("'chave' precisa ser regenerada")
@@ -172,7 +203,7 @@ def _set_certificado(self, certificado):
def _get_certificado(self):
try:
- if self._certificado: # != ''
+ if self._certificado:
return self._certificado
else:
raise AttributeError("'certificado' precisa ser regenerado")
@@ -189,7 +220,7 @@ def _get_certificado(self):
def proprietario_nome(self):
if 'CN' in self.proprietario:
#
- # Alguns certrificados não têm o CNPJ na propriedade CN, somente o
+ # Alguns certificados não têm o CNPJ na propriedade CN, somente o
# nome do proprietário
#
if ':' in self.proprietario['CN']:
@@ -207,7 +238,7 @@ def proprietario_nome(self):
def proprietario_cnpj(self):
if 'CN' in self.proprietario:
#
- # Alguns certrificados não têm o CNPJ na propriedade CN, somente o
+ # Alguns certificados não têm o CNPJ na propriedade CN, somente o
# nome do proprietário
#
if ':' in self.proprietario['CN']:
@@ -298,7 +329,7 @@ def assina_xmlnfe(self, doc):
doc.Signature.xml = xml
def assina_arquivo(self, doc):
- xml = open(doc, 'r').read().decode('utf-8')
+ xml = open(doc, 'r', encoding='utf-8').read()
xml = self.assina_xml(xml)
return xml
@@ -350,8 +381,9 @@ def _obtem_doctype(self, xml):
return doctype
def _prepara_doc_xml(self, xml):
- if isinstance(xml, str):
- xml = unicode(xml.encode('utf-8'))
+ if sys.version_info.major == 2:
+ if isinstance(xml, str):
+ xml = unicode(xml.encode('utf-8'))
doctype = self._obtem_doctype(xml)
@@ -372,8 +404,9 @@ def _prepara_doc_xml(self, xml):
return xml
def _finaliza_xml(self, xml):
- if isinstance(xml, str):
- xml = unicode(xml.decode('utf-8'))
+ if sys.version_info.major == 2:
+ if isinstance(xml, str):
+ xml = unicode(xml.decode('utf-8'))
doctype = self._obtem_doctype(xml)
@@ -420,7 +453,7 @@ def assina_xml(self, xml):
#
# Retransforma o documento xml em texto
#
- xml = etree.tostring(doc_xml)
+ xml = etree.tounicode(doc_xml)
xml = self._finaliza_xml(xml)
diff --git a/setup.py b/setup.py
index 0e0a9e7c..e1085ad0 100644
--- a/setup.py
+++ b/setup.py
@@ -4,7 +4,7 @@
setup(
name = "PySPED",
- version = "1.1.0",
+ version = "1.2.0",
author = "Aristides Caldeira",
author_email = 'aristides.caldeira@tauga.com.br',
test_suite='tests',