Browse Source

Início desenvolvimento NF-e 4.00

pull/19/head
Junior Tada 8 years ago
parent
commit
6653f26c02
  1. 2
      pynfe/__init__.py
  2. 79
      pynfe/processamento/comunicacao.py
  3. 237
      pynfe/processamento/serializacao.py
  4. 2
      pynfe/utils/flags.py
  5. 111
      pynfe/utils/webservices.py

2
pynfe/__init__.py

@ -1,5 +1,5 @@
def get_version():
return '0.2'
return '0.4'
__version__ = get_version()
__author__ = 'Marinho Brandao, Junior Tada, Leonardo Tada'

79
pynfe/processamento/comunicacao.py

@ -41,7 +41,7 @@ class ComunicacaoSefaz(Comunicacao):
etree.SubElement(raiz, 'indSinc').text = str(indSinc) # 0 para assincrono, 1 para sincrono
raiz.append(nota_fiscal)
# Monta XML para envio da requisição
xml = self._construir_xml_status_pr(cabecalho=self._cabecalho_soap(metodo='NfeAutorizacao'), metodo='NfeAutorizacao', dados=raiz)
xml = self._construir_xml_soap('NFeAutorizacao4', raiz)
# Faz request no Servidor da Sefaz
retorno = self._post(url, xml)
@ -96,8 +96,7 @@ class ComunicacaoSefaz(Comunicacao):
etree.SubElement(raiz, 'tpAmb').text = str(self._ambiente)
etree.SubElement(raiz, 'nRec').text = numero
# Monta XML para envio da requisição
xml = self._construir_xml_status_pr(cabecalho=self._cabecalho_soap(metodo='NfeRetAutorizacao'), metodo='NfeRetAutorizacao', dados=raiz)
xml = self._construir_xml_soap('NFeRetAutorizacao4', raiz)
return self._post(url, xml)
def consulta_nota(self, modelo, chave):
@ -112,8 +111,7 @@ class ComunicacaoSefaz(Comunicacao):
etree.SubElement(raiz, 'xServ').text = 'CONSULTAR'
etree.SubElement(raiz, 'chNFe').text = chave
# Monta XML para envio da requisição
xml = self._construir_xml_status_pr(cabecalho=self._cabecalho_soap(metodo='NfeConsulta2'), metodo='NfeConsulta2', dados=raiz)
xml = self._construir_xml_soap('NFeConsultaProtocolo4', raiz)
return self._post(url, xml)
def consulta_notas_cnpj(self, cnpj, nsu=0):
@ -140,7 +138,7 @@ class ComunicacaoSefaz(Comunicacao):
etree.SubElement(raiz, 'ultNSU').text = str(nsu)
# Monta XML para envio da requisição
xml = self._construir_xml_status_pr(cabecalho=self._cabecalho_soap(metodo='NfeConsultaDest'), metodo='NfeConsultaDest', dados=raiz)
xml = self._construir_xml_soap('NfeConsultaDest', raiz)
return self._post(url, xml)
@ -167,7 +165,7 @@ class ComunicacaoSefaz(Comunicacao):
etree.SubElement(info, 'CNPJ').text = cnpj
#etree.SubElement(info, 'CPF').text = cpf
# Monta XML para envio da requisição
xml = self._construir_xml_status_pr(cabecalho=self._cabecalho_soap(metodo='CadConsultaCadastro2'), metodo='CadConsultaCadastro2', dados=raiz)
xml = self._construir_xml_soap('CadConsultaCadastro4', raiz)
# Chama método que efetua a requisição POST no servidor SOAP
return self._post(url, xml)
@ -186,24 +184,19 @@ class ComunicacaoSefaz(Comunicacao):
raiz = etree.Element('envEvento', versao='1.00', xmlns=NAMESPACE_NFE)
etree.SubElement(raiz, 'idLote').text = str(idlote) # numero autoincremental gerado pelo sistema
raiz.append(evento)
xml = self._construir_xml_status_pr(cabecalho=self._cabecalho_soap(metodo='RecepcaoEvento'), metodo='RecepcaoEvento', dados=raiz)
xml = self._construir_xml_soap('NFeRecepcaoEvento4', raiz)
return self._post(url, xml)
def status_servico(self, modelo):
""" Verifica status do servidor da receita. """
""" modelo é a string com tipo de serviço que deseja consultar
Ex: nfe ou nfce
"""
url = self._get_url(modelo=modelo, consulta='STATUS')
""" modelo é a string com tipo de serviço que deseja consultar Ex: nfe ou nfce """
url = self._get_url(modelo, 'STATUS')
# Monta XML do corpo da requisição
raiz = etree.Element('consStatServ', versao=VERSAO_PADRAO, xmlns=NAMESPACE_NFE)
etree.SubElement(raiz, 'tpAmb').text = str(self._ambiente)
etree.SubElement(raiz, 'cUF').text = CODIGOS_ESTADOS[self.uf.upper()]
etree.SubElement(raiz, 'xServ').text = 'STATUS'
# Monta XML para envio da requisição
xml = self._construir_xml_status_pr(cabecalho=self._cabecalho_soap(metodo='NfeStatusServico2'), metodo='NfeStatusServico2', dados=raiz)
# Chama método que efetua a requisição POST no servidor SOAP
xml = self._construir_xml_soap('NFeStatusServico4', raiz)
return self._post(url, xml)
def download(self, cnpj, chave):
@ -222,7 +215,7 @@ class ComunicacaoSefaz(Comunicacao):
etree.SubElement(raiz, 'chNFe').text = str(chave)
# Monta XML para envio da requisição
xml = self._construir_xml_status_pr(cabecalho=self._cabecalho_soap(metodo='NfeDownloadNF'), metodo='NfeDownloadNF', dados=raiz)
xml = self._construir_xml_soap('NfeDownloadNF', raiz)
return self._post(url, xml)
@ -266,7 +259,7 @@ class ComunicacaoSefaz(Comunicacao):
xml = a1.assinar(raiz)
# Monta XML para envio da requisição
xml = self._construir_xml_status_pr(cabecalho=self._cabecalho_soap(metodo='NfeInutilizacao2'), metodo='NfeInutilizacao2', dados=xml)
xml = self._construir_xml_soap('NFeInutilizacao4', xml)
# Faz request no Servidor da Sefaz e retorna resposta
return self._post(url, xml)
@ -381,33 +374,19 @@ class ComunicacaoSefaz(Comunicacao):
etree.SubElement(raiz, 'cUF').text = CODIGOS_ESTADOS[self.uf.upper()]
return raiz
def _construir_xml_soap(self, cabecalho, metodo, dados):
def _construir_xml_soap(self, metodo, dados):
"""Mota o XML para o envio via SOAP"""
raiz = etree.Element('{%s}Envelope'%NAMESPACE_SOAP, nsmap={'soap12': NAMESPACE_SOAP})
c= etree.SubElement(raiz, '{%s}Header'%NAMESPACE_SOAP)
c.append(cabecalho)
raiz = etree.Element('{%s}Envelope'%NAMESPACE_SOAP, nsmap={'xsi': NAMESPACE_XSI, 'xsd': NAMESPACE_XSD,'soap': NAMESPACE_SOAP})
body = etree.SubElement(raiz, '{%s}Body'%NAMESPACE_SOAP)
a = etree.SubElement(body, 'nfeDadosMsg', xmlns=NAMESPACE_METODO+metodo)
a.append(dados)
return raiz
def _construir_xml_status_pr(self, cabecalho, metodo, dados):
u"""Mota o XML para o envio via SOAP"""
raiz = etree.Element('{%s}Envelope' % NAMESPACE_SOAP, nsmap={'xsi': NAMESPACE_XSI, 'xsd': NAMESPACE_XSD,'soap': NAMESPACE_SOAP})
c = etree.SubElement(raiz, '{%s}Header' % NAMESPACE_SOAP)
c.append(cabecalho)
body = etree.SubElement(raiz, '{%s}Body' % NAMESPACE_SOAP)
a = etree.SubElement(body, 'nfeDadosMsg', xmlns=NAMESPACE_METODO+metodo)
a.append(dados)
return raiz
def _post_header(self):
u"""Retorna um dicionário com os atributos para o cabeçalho da requisição HTTP"""
"""Retorna um dicionário com os atributos para o cabeçalho da requisição HTTP"""
return {
u'content-type': u'application/soap+xml; charset=utf-8;',
u'Accept': u'application/soap+xml; charset=utf-8;',
'content-type': 'application/soap+xml; charset=utf-8;',
'Accept': 'application/soap+xml; charset=utf-8;',
}
def _post(self, url, xml):
@ -422,19 +401,11 @@ class ComunicacaoSefaz(Comunicacao):
lambda x:x.group(0).replace('&lt;','<').replace('&gt;','>').replace('amp;',''),
etree.tostring(xml, encoding='unicode').replace('\n',''))
xml = xml_declaration + xml
# adapter para substituir ssl por tls
# s = requests.Session()
# s.mount(url, AdapterTLSV1())
# print(xml)
# # print(self._post_header())
# # Faz o request com o servidor
# result = s.post(url, xml, headers=self._post_header(), cert=chave_cert, verify=False, timeout=120)
# result.encoding = 'utf-8'
# return result
# debug dev 4.00
print(xml)
print(url)
# Faz o request com o servidor
result = requests.post(url, xml, headers=self._post_header(), cert=chave_cert, verify=False, timeout=120)
result = requests.post(url, xml, headers=self._post_header(), cert=chave_cert, verify=False)
result.encoding = 'utf-8'
return result
except requests.exceptions.RequestException as e:
@ -665,15 +636,3 @@ class ComunicacaoNfse(Comunicacao):
raise Exception('Método não implementado no autorizador.')
except Exception as e:
raise e
""" Adapter para conexão tls """
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager
import ssl
class AdapterTLSV1(HTTPAdapter):
def init_poolmanager(self, connections, maxsize, block=False):
self.poolmanager = PoolManager(num_pools=connections,
maxsize=maxsize,
block=block,
ssl_version=ssl.PROTOCOL_TLSv1_2)

237
pynfe/processamento/serializacao.py

@ -747,240 +747,3 @@ class SerializacaoNfse(object):
return SerializacaoBetha().cancelar(nfse)
else:
raise Exception('Autorizador não suportado para cancelamento!')
class SerializacaoPipes(Serializacao):
"""Serialização utilizada pela SEFAZ-SP para a importação de notas."""
def exportar(self, destino, **kwargs):
pass
def _serializar_emitente(self, emitente, retorna_string=True):
cod_municipio, municipio = obter_municipio_e_codigo(
dict(codigo=emitente.endereco_cod_municipio,
municipio=emitente.endereco_municipio),
emitente.endereco_uf
)
serial_emitente_list = [
'\nC',
emitente.razao_social,
emitente.nome_fantasia,
emitente.inscricao_estadual,
emitente.inscricao_estadual_subst_tributaria,
emitente.inscricao_municipal,
emitente.cnae_fiscal,
emitente.codigo_de_regime_tributario,
'\nC02',
emitente.cnpj,
'\nC05',
emitente.endereco_logradouro,
emitente.endereco_numero,
emitente.endereco_complemento,
emitente.endereco_bairro,
cod_municipio,
municipio,
obter_uf_por_codigo(emitente.endereco_uf),
emitente.endereco_cep.replace('-',''),
emitente.endereco_pais,
obter_pais_por_codigo(emitente.endereco_pais),
emitente.endereco_telefone,
]
if retorna_string:
return '|'.join(map(str,serial_emitente_list))
return serial_emitente_list
def _serializar_cliente(self, cliente, retorna_string=True):
cod_municipio, municipio = obter_municipio_e_codigo(
dict(codigo=cliente.endereco_cod_municipio,
municipio=cliente.endereco_municipio),
cliente.endereco_uf
)
serial_data = [
'\nE',
cliente.razao_social,
'2', # indIEDest
cliente.inscricao_estadual,
cliente.inscricao_suframa,
'', # IM
cliente.email,
'\nE02' if cliente.tipo_documento == 'CNPJ' else '\nE03',
cliente.numero_documento,
'\nE05',
cliente.endereco_logradouro,
cliente.endereco_numero,
cliente.endereco_complemento,
cliente.endereco_bairro,
cod_municipio,
municipio,
obter_uf_por_codigo(cliente.endereco_uf),
cliente.endereco_cep.replace('-',''),
cliente.endereco_pais,
obter_pais_por_codigo(cliente.endereco_pais),
cliente.endereco_telefone
]
if retorna_string:
return '|'.join(map(str,serial_data))
return serial_data
def _serializar_produto_servico(self, produto_servico, retorna_string=True):
serial_data = [
'\nI',
produto_servico.codigo,
produto_servico.ean,
produto_servico.descricao,
produto_servico.ncm,
produto_servico.ex_tipi,
produto_servico.cfop,
produto_servico.unidade_comercial,
formatar_decimal(produto_servico.quantidade_comercial),
formatar_decimal(produto_servico.valor_unitario_comercial),
formatar_decimal(produto_servico.valor_total_bruto),
produto_servico.ean_tributavel,
produto_servico.unidade_tributavel,
formatar_decimal(produto_servico.quantidade_tributavel),
formatar_decimal(produto_servico.valor_unitario_tributavel),
formatar_decimal(produto_servico.total_frete) if produto_servico.total_frete else '',
formatar_decimal(produto_servico.total_seguro) if produto_servico.total_seguro else '',
formatar_decimal(produto_servico.desconto) if produto_servico.desconto else '',
formatar_decimal(produto_servico.outras_despesas_acessorias) if produto_servico.outras_despesas_acessorias else '',
produto_servico.compoe_valor_total,
produto_servico.numero_pedido,
produto_servico.numero_do_item,
'', # nFCI
'\nM', #IMPOSTOS
'\nN', #ICMS
'\nN06',
produto_servico.icms_origem,
produto_servico.icms_modalidade_determinacao_bc,
produto_servico.icms_valor if produto_servico.icms_valor else '',
produto_servico.icms_motivo_desoneracao if produto_servico.icms_valor else '',
'\nQ', #PIS
'\nQ02',
produto_servico.pis_tipo_calculo,
formatar_decimal(produto_servico.pis_valor_base_calculo),
formatar_decimal(produto_servico.pis_aliquota_percentual),
formatar_decimal(produto_servico.pis_valor),
'\nS', #COFINS
'\nS02',
produto_servico.cofins_situacao_tributaria,
formatar_decimal(produto_servico.cofins_valor_base_calculo),
formatar_decimal(produto_servico.cofins_aliquota_percentual),
formatar_decimal(produto_servico.cofins_valor)
]
if retorna_string:
return '|'.join(map(str, serial_data))
return serial_data
def _serializar_nota_fiscal(self, nota_fiscal, retorna_string=True):
cod_municipio, municipio = obter_municipio_e_codigo(
dict(codigo='',
municipio=nota_fiscal.municipio),
nota_fiscal.uf
)
if nota_fiscal.emitente.endereco_uf == nota_fiscal.cliente.endereco_uf:
id_dest = '1'
else:
id_dest = '2'
tz = time.strftime("%z")
tz = "{}:{}".format(tz[:-2], tz[-2:])
serial_data = [
'A',
'3.10',
nota_fiscal.identificador_unico,
'\nB',
CODIGOS_ESTADOS.get(nota_fiscal.uf, nota_fiscal.uf),
nota_fiscal.codigo_numerico_aleatorio,
nota_fiscal.natureza_operacao,
nota_fiscal.forma_pagamento,
nota_fiscal.modelo,
nota_fiscal.serie,
nota_fiscal.numero_nf,
nota_fiscal.data_emissao.strftime('%Y-%m-%dT%H:%M:%S') + tz,
nota_fiscal.data_saida_entrada.strftime('%Y-%m-%dT%H:%M:%S') + tz,
nota_fiscal.tipo_documento,
id_dest, # idDest
cod_municipio,
nota_fiscal.tipo_impressao_danfe,
nota_fiscal.forma_emissao,
nota_fiscal.dv_codigo_numerico_aleatorio,
self._ambiente,
nota_fiscal.finalidade_emissao,
nota_fiscal.cliente_final, # indFinal
nota_fiscal.indicador_presencial, # indPres
nota_fiscal.processo_emissao,
'%s %s' % (self._nome_aplicacao,
nota_fiscal.versao_processo_emissao),
'', # dhCont - Data e Hora da entrada em contingência
'', # xJust - Justificativa da entrada em contingência
]
serial_data += self._serializar_emitente(nota_fiscal.emitente,
retorna_string=False)
serial_data += self._serializar_cliente(nota_fiscal.cliente,
retorna_string=False)
# Produtos e serviços
produtos_servicos = enumerate(nota_fiscal.produtos_e_servicos, start=1)
for num, produto_servico in produtos_servicos:
num_produto = [
'\nH',
num, # Número do produto na lista
''
'' # End Pipe
]
serial_data += num_produto
serial_data += self._serializar_produto_servico(produto_servico,
retorna_string=False)
serial_data += [
'\nW', #Valores totais NFe,
'\nW02',
formatar_decimal(nota_fiscal.totais_icms_base_calculo),
formatar_decimal(nota_fiscal.totais_icms_total),
'', # ICMSDeson
formatar_decimal(nota_fiscal.totais_icms_st_base_calculo),
formatar_decimal(nota_fiscal.totais_icms_st_total),
formatar_decimal(nota_fiscal.totais_icms_total_produtos_e_servicos),
formatar_decimal(nota_fiscal.totais_icms_total_frete),
formatar_decimal(nota_fiscal.totais_icms_total_seguro),
formatar_decimal(nota_fiscal.totais_icms_total_desconto),
formatar_decimal(nota_fiscal.totais_icms_total_ii),
formatar_decimal(nota_fiscal.totais_icms_total_ipi),
formatar_decimal(nota_fiscal.totais_icms_pis),
formatar_decimal(nota_fiscal.totais_icms_cofins),
formatar_decimal(nota_fiscal.totais_icms_outras_despesas_acessorias),
formatar_decimal(nota_fiscal.totais_icms_total_nota),
'', # vTotTrib
'\nX',
nota_fiscal.transporte_modalidade_frete,
'\nZ',
nota_fiscal.informacoes_adicionais_interesse_fisco,
nota_fiscal.informacoes_complementares_interesse_contribuinte,
'' # End Pipe
]
if retorna_string:
try:
return '|'.join(map(remover_acentos, serial_data))
except TypeError as err:
enum_args = '\n'.join(
map(
lambda x: str(x[0]) + ' ' + str(x[1]),
enumerate(serial_data)
)
)
message = err.message + '\n' + enum_args
raise TypeError(message)
return serial_data

2
pynfe/utils/flags.py

@ -10,7 +10,7 @@ NAMESPACE_METODO = 'http://www.portalfiscal.inf.br/nfe/wsdl/'
NAMESPACE_SOAP_NFSE = 'http://schemas.xmlsoap.org/soap/envelope/'
NAMESPACE_BETHA = 'http://www.betha.com.br/e-nota-contribuinte-ws'
VERSAO_PADRAO = '3.10'
VERSAO_PADRAO = '4.00'
VERSAO_QRCODE = '100'

111
pynfe/utils/webservices.py

@ -162,6 +162,13 @@ NFCE = {
'EVENTOS': '',
'QR': ''
},
# Os Web Services de homologação da NFC-e 4.00 são:
# https://homologacao.nfce.fazenda.sp.gov.br/ws/NFeAutorizacao4.asmx
# https://homologacao.nfce.fazenda.sp.gov.br/ws/NFeStatusServico4.asmx
# https://homologacao.nfce.fazenda.sp.gov.br/ws/NFeConsultaProtocolo4.asmx
# https://homologacao.nfce.fazenda.sp.gov.br/ws/NFeRetAutorizacao4.asmx
# https://homologacao.nfce.fazenda.sp.gov.br/ws/NFeRecepcaoEvento4.asmx
# https://homologacao.nfce.fazenda.sp.gov.br/ws/NFeInutilizacao4.asmx
'SP': {
'STATUS': 'nfce.fazenda.sp.gov.br/ws/nfestatusservico2.asmx',
'AUTORIZACAO': 'nfce.fazenda.sp.gov.br/ws/nfeautorizacao.asmx',
@ -245,10 +252,12 @@ NFCE = {
}
# Nfe
# homologação => http://hom.nfe.fazenda.gov.br/PORTAL/WebServices.aspx
# produção => https://www.nfe.fazenda.gov.br/portal/webServices.aspx
NFE = {
# Alguns serviços são disponibilizados apenas pelo ambiente nacional
'AN': {
'EVENTOS': 'nfe.fazenda.gov.br/RecepcaoEvento/RecepcaoEvento.asmx', # versao: 1.00
'EVENTOS': 'nfe.fazenda.gov.br/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx', # versao: 4.00
'DISTRIBUICAO': 'nfe.fazenda.gov.br/NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx',
'DOWNLOAD': 'nfe.fazenda.gov.br/NfeDownloadNF/NfeDownloadNF.asmx', # versao: 2.00/3.10
'DESTINADAS': 'nfe.fazenda.gov.br/NFeConsultaDest/NFeConsultaDest.asmx', # versao: 2.00/3.10
@ -270,12 +279,12 @@ NFE = {
'CADASTRO': 'https://sistemas.sefaz.ma.gov.br/wscadastro/CadConsultaCadastro2?wsdl'
},
'CE': {
'STATUS': 'sefaz.ce.gov.br/nfe2/services/NfeStatusServico2?wsdl',
'AUTORIZACAO': 'sefaz.ce.gov.br/nfe2/services/NfeAutorizacao?wsdl',
'RECIBO': 'sefaz.ce.gov.br/nfe2/services/NfeRetAutorizacao?wsdl',
'CHAVE': 'sefaz.ce.gov.br/nfe2/services/NfeConsulta2?wsdl',
'INUTILIZACAO': 'sefaz.ce.gov.br/nfe2/services/NfeInutilizacao2?wsdl',
'EVENTOS': 'sefaz.ce.gov.br/nfe2/services/RecepcaoEvento?wsdl',
'STATUS': 'sefaz.ce.gov.br/nfe4/services/NFeStatusServico4?WSDL',
'AUTORIZACAO': 'sefaz.ce.gov.br/nfe4/services/NFeAutorizacao4?WSDL',
'RECIBO': 'sefaz.ce.gov.br/nfe4/services/NFeRetAutorizacao4?WSDL',
'CHAVE': 'sefaz.ce.gov.br/nfe4/services/NFeConsultaProtocolo4?WSDL',
'INUTILIZACAO': 'sefaz.ce.gov.br/nfe4/services/NFeInutilizacao4?WSDL',
'EVENTOS': 'sefaz.ce.gov.br/nfe4/services/NFeRecepcaoEvento4?WSDL',
'CADASTRO': 'sefaz.ce.gov.br/nfe2/services/CadConsultaCadastro2?wsdl',
'DOWNLOAD': 'sefaz.ce.gov.br/nfe2/services/NfeDownloadNF?wsdl',
'HTTPS': 'https://nfe.',
@ -304,46 +313,46 @@ NFE = {
'HOMOLOGACAO': 'https://h'
},
'MG': {
'STATUS': 'nfe.fazenda.mg.gov.br/nfe2/services/NfeStatus2',
'AUTORIZACAO': 'nfe.fazenda.mg.gov.br/nfe2/services/NfeAutorizacao',
'RECIBO': 'nfe.fazenda.mg.gov.br/nfe2/services/NfeRetAutorizacao',
'CHAVE': 'nfe.fazenda.mg.gov.br/nfe2/services/NfeConsulta2',
'INUTILIZACAO': 'nfe.fazenda.mg.gov.br/nfe2/services/NfeInutilizacao2',
'STATUS': 'nfe.fazenda.mg.gov.br/nfe2/services/NFeStatusServico4',
'AUTORIZACAO': 'nfe.fazenda.mg.gov.br/nfe2/services/NFeAutorizacao4',
'RECIBO': 'nfe.fazenda.mg.gov.br/nfe2/services/NFeRetAutorizacao4',
'CHAVE': 'nfe.fazenda.mg.gov.br/nfe2/services/NFeConsulta4',
'INUTILIZACAO': 'nfe.fazenda.mg.gov.br/nfe2/services/NFeInutilizacao4',
'EVENTOS': 'nfe.fazenda.mg.gov.br/nfe2/services/RecepcaoEvento',
'CADASTRO': 'nfe.fazenda.mg.gov.br/nfe2/services/cadconsultacadastro2',
'HTTPS': 'https://',
'HOMOLOGACAO': 'https://h'
},
'SP': {
'STATUS': 'nfe.fazenda.sp.gov.br/ws/nfestatusservico2.asmx',
'AUTORIZACAO': 'nfe.fazenda.sp.gov.br/ws/nfeautorizacao.asmx',
'RECIBO': 'nfe.fazenda.sp.gov.br/ws/nferetautorizacao.asmx',
'CHAVE': 'nfe.fazenda.sp.gov.br/ws/nfeconsulta2.asmx',
'INUTILIZACAO': 'nfe.fazenda.sp.gov.br/ws/nfeinutilizacao2.asmx',
'EVENTOS': 'nfe.fazenda.sp.gov.br/ws/recepcaoevento.asmx',
'CADASTRO': 'nfe.fazenda.sp.gov.br/ws/cadconsultacadastro2.asmx',
'STATUS': 'nfe.fazenda.sp.gov.br/ws/NFeStatusServico4.asmx',
'AUTORIZACAO': 'nfe.fazenda.sp.gov.br/ws/nfeautorizacao4.asmx',
'RECIBO': 'nfe.fazenda.sp.gov.br/ws/nferetautorizacao4.asmx',
'CHAVE': 'nfe.fazenda.sp.gov.br/ws/nfeconsulta4.asmx',
'INUTILIZACAO': 'nfe.fazenda.sp.gov.br/ws/nfeinutilizacao4.asmx',
'EVENTOS': 'nfe.fazenda.sp.gov.br/ws/nferecepcaoevento4.asmx',
'CADASTRO': 'nfe.fazenda.sp.gov.br/ws/cadconsultacadastro4.asmx',
'HTTPS': 'https://',
'HOMOLOGACAO': 'https://homologacao.'
},
'PR': {
'STATUS': 'nfe.fazenda.pr.gov.br/nfe/NFeStatusServico3', # CONSULTA STATUS DO SERVICO
'AUTORIZACAO': 'nfe.fazenda.pr.gov.br/nfe/NFeAutorizacao3', # AUTORIZACAO
'RECIBO': 'nfe.fazenda.pr.gov.br/nfe/NFeRetAutorizacao3', # CONSULTA RECIBO
'CHAVE': 'nfe.fazenda.pr.gov.br/nfe/NFeConsulta3', # CONSULTA CHAVE DE ACESSO
'INUTILIZACAO': 'nfe.fazenda.pr.gov.br/nfe/NFeInutilizacao3', # INUTILIZAÇAO
'EVENTOS': 'nfe.fazenda.pr.gov.br/nfe/NFeRecepcaoEvento', # REGISTRO DE EVENTOS
'CADASTRO': 'nfe.fazenda.pr.gov.br/nfe/CadConsultaCadastro2', # CONSULTA CADASTRO
'STATUS': 'nfe.sefa.pr.gov.br/nfe/NFeStatusServico4', # CONSULTA STATUS DO SERVICO
'AUTORIZACAO': 'nfe.sefa.pr.gov.br/nfe/NFeAutorizacao4', # AUTORIZACAO
'RECIBO': 'nfe.sefa.pr.gov.br/nfe/NFeRetAutorizacao4', # CONSULTA RECIBO
'CHAVE': 'nfe.sefa.pr.gov.br/nfe/NFeConsultaProtocolo4', # CONSULTA CHAVE DE ACESSO
'INUTILIZACAO': 'nfe.sefa.pr.gov.br/nfe/NFeInutilizacao4', # INUTILIZAÇAO
'EVENTOS': 'nfe.sefa.pr.gov.br/nfe/NFeRecepcaoEvento4', # REGISTRO DE EVENTOS
'CADASTRO': 'nfe.sefa.pr.gov.br/nfe/CadConsultaCadastro4', # CONSULTA CADASTRO
'HTTPS': 'https://',
'HOMOLOGACAO': 'https://homologacao.'
},
# https://www.sefaz.rs.gov.br/site/MontaDuvidas.aspx?al=l_rel_end_ws_nfe
'RS': {
'STATUS': 'sefazrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico2.asmx',
'AUTORIZACAO': 'sefazrs.rs.gov.br/ws/NfeAutorizacao/NFeAutorizacao.asmx',
'RECIBO': 'sefazrs.rs.gov.br/ws/NfeRetAutorizacao/NFeRetAutorizacao.asmx',
'CHAVE': 'sefazrs.rs.gov.br/ws/NfeConsulta/NfeConsulta2.asmx',
'INUTILIZACAO': 'sefazrs.rs.gov.br/ws/nfeinutilizacao/nfeinutilizacao2.asmx',
'EVENTOS': 'sefazrs.rs.gov.br/ws/recepcaoevento/recepcaoevento.asmx',
'STATUS': 'sefazrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico4.asmx',
'AUTORIZACAO': 'sefazrs.rs.gov.br/ws/NfeAutorizacao/NFeAutorizacao4.asmx',
'RECIBO': 'sefazrs.rs.gov.br/ws/NfeRetAutorizacao/NFeRetAutorizacao4.asmx',
'CHAVE': 'sefazrs.rs.gov.br/ws/NfeConsulta/NfeConsulta4.asmx',
'INUTILIZACAO': 'sefazrs.rs.gov.br/ws/nfeinutilizacao/nfeinutilizacao4.asmx',
'EVENTOS': 'sefazrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx',
'CADASTRO': 'https://cad.sefazrs.rs.gov.br/ws/cadconsultacadastro/cadconsultacadastro2.asmx',
'DOWNLOAD': 'sefazrs.rs.gov.br/ws/nfeDownloadNF/nfeDownloadNF.asmx',
'DESTINADAS': 'sefazrs.rs.gov.br/ws/nfeConsultaDest/nfeConsultaDest.asmx',
@ -351,12 +360,12 @@ NFE = {
'HOMOLOGACAO': 'https://nfe-homologacao.'
},
'MS': {
'STATUS': 'nfe.fazenda.ms.gov.br/producao/services2/NfeStatusServico2',
'AUTORIZACAO': 'nfe.fazenda.ms.gov.br/producao/services2/NfeAutorizacao',
'RECIBO': 'nfe.fazenda.ms.gov.br/producao/services2/NfeRetAutorizacao',
'CHAVE': 'nfe.fazenda.ms.gov.br/producao/services2/NfeConsulta2',
'INUTILIZACAO': 'nfe.fazenda.ms.gov.br/producao/services2/NfeInutilizacao2',
'EVENTOS': 'nfe.fazenda.ms.gov.br/producao/services2/RecepcaoEvento',
'STATUS': 'nfe.ms.gov.br/ws/NFeStatusServico4',
'AUTORIZACAO': 'nfe.ms.gov.br/ws/NFeAutorizacao4',
'RECIBO': 'nfe.ms.gov.br/ws/NFeRetAutorizacao4',
'CHAVE': 'nfe.ms.gov.br/ws/NFeConsultaProtocolo4',
'INUTILIZACAO': 'nfe.ms.gov.br/ws/NFeInutilizacao4',
'EVENTOS': 'nfe.ms.gov.br/ws/NFeRecepcaoEvento4',
'CADASTRO': 'nfe.fazenda.ms.gov.br/producao/services2/CadConsultaCadastro2',
'HTTPS': 'https://',
'HOMOLOGACAO': 'https://homologacao.'
@ -373,13 +382,13 @@ NFE = {
'HOMOLOGACAO': 'https://homologacao.'
},
'GO': {
'STATUS': 'sefaz.go.gov.br/nfe/services/v2/NfeStatusServico2?wsdl',
'AUTORIZACAO': 'sefaz.go.gov.br/nfe/services/v2/NfeAutorizacao?wsdl',
'RECIBO': 'sefaz.go.gov.br/nfe/services/v2/NfeRetAutorizacao?wsdl',
'CHAVE': 'sefaz.go.gov.br/nfe/services/v2/NfeConsulta2?wsdl',
'INUTILIZACAO': 'sefaz.go.gov.br/nfe/services/v2/NfeInutilizacao2?wsdl',
'EVENTOS': 'sefaz.go.gov.br/nfe/services/v2/RecepcaoEvento?wsdl',
'CADASTRO': 'sefaz.go.gov.br/nfe/services/v2/CadConsultaCadastro2?wsdl',
'STATUS': 'sefaz.go.gov.br/nfe/services/NFeStatusServico4?wsdl',
'AUTORIZACAO': 'sefaz.go.gov.br/nfe/services/NFeAutorizacao4?wsdl',
'RECIBO': 'sefaz.go.gov.br/nfe/services/NFeRetAutorizacao4?wsdl',
'CHAVE': 'sefaz.go.gov.br/nfe/services/NFeConsultaProtocolo4?wsdl',
'INUTILIZACAO': 'sefaz.go.gov.br/nfe/services/NFeInutilizacao4?wsdl',
'EVENTOS': 'sefaz.go.gov.br/nfe/services/NFeRecepcaoEvento4?wsdl',
'CADASTRO': 'sefaz.go.gov.br/nfe/services/CadConsultaCadastro4?wsdl',
'HTTPS': 'https://nfe.',
'HOMOLOGACAO': 'https://homolog.'
},
@ -395,12 +404,12 @@ NFE = {
'HOMOLOGACAO': 'https://hom.'
},
'SVRS': {
'STATUS': 'svrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico2.asmx',
'AUTORIZACAO': 'svrs.rs.gov.br/ws/NfeAutorizacao/NFeAutorizacao.asmx',
'RECIBO': 'svrs.rs.gov.br/ws/NfeRetAutorizacao/NFeRetAutorizacao.asmx',
'CHAVE': 'svrs.rs.gov.br/ws/NfeConsulta/NfeConsulta2.asmx',
'INUTILIZACAO': 'svrs.rs.gov.br/ws/nfeinutilizacao/nfeinutilizacao2.asmx',
'EVENTOS': 'svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento.asmx',
'STATUS': 'svrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico4.asmx',
'AUTORIZACAO': 'svrs.rs.gov.br/ws/NfeAutorizacao/NFeAutorizacao4.asmx',
'RECIBO': 'svrs.rs.gov.br/ws/NfeRetAutorizacao/NFeRetAutorizacao4.asmx',
'CHAVE': 'svrs.rs.gov.br/ws/NfeConsulta/NfeConsulta4.asmx',
'INUTILIZACAO': 'svrs.rs.gov.br/ws/nfeinutilizacao/nfeinutilizacao4.asmx',
'EVENTOS': 'svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx',
'CADASTRO': 'https://cad.svrs.rs.gov.br/ws/cadconsultacadastro/cadconsultacadastro2.asmx',
'HTTPS': 'https://nfe.',
'HOMOLOGACAO': 'https://nfe-homologacao.'

Loading…
Cancel
Save