Skip to content

Commit

Permalink
ambiente autorizador de contingencia para nfe
Browse files Browse the repository at this point in the history
  • Loading branch information
antoniospneto committed May 14, 2024
1 parent 0499709 commit bf8fa64
Showing 1 changed file with 65 additions and 21 deletions.
86 changes: 65 additions & 21 deletions src/erpbrasil/edoc/nfe.py
Original file line number Diff line number Diff line change
Expand Up @@ -166,14 +166,16 @@
SVC_AN = {
AMBIENTE_PRODUCAO: {
"servidor": "www.svc.fazenda.gov.br",
WS_NFE_INUTILIZACAO: "NFeInutilizacao4/NFeInutilizacao4.asmx?wsdl",
WS_NFE_CONSULTA: "NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx?wsdl", # noqa
WS_NFE_SITUACAO: "NFeStatusServico4/NFeStatusServico4.asmx?wsdl",
WS_NFE_RECEPCAO_EVENTO: "NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx?wsdl", # noqa
WS_NFE_AUTORIZACAO: "NFeAutorizacao4/NFeAutorizacao4.asmx?wsdl",
WS_NFE_RET_AUTORIZACAO: "NFeRetAutorizacao4/NFeRetAutorizacao4.asmx?wsdl", # noqa
},
AMBIENTE_HOMOLOGACAO: {
"servidor": "hom.svc.fazenda.gov.br",
"servidor": "hom.sefazvirtual.fazenda.gov.br",
WS_NFE_INUTILIZACAO: "NFeInutilizacao4/NFeInutilizacao4.asmx?wsdl",
WS_NFE_CONSULTA: "NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx?wsdl", # noqa
WS_NFE_SITUACAO: "NFeStatusServico4/NFeStatusServico4.asmx?wsdl",
WS_NFE_RECEPCAO_EVENTO: "NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx?wsdl", # noqa
Expand Down Expand Up @@ -675,10 +677,41 @@
"AN": AN,
}

ESTADO_WS_CONTINGENCIA = {
"AC": SVC_AN,
"AL": SVC_AN,
"AM": SVC_RS,
"AP": SVC_AN,
"BA": SVC_RS,
"CE": SVC_AN,
"DF": SVC_AN,
"ES": SVC_AN,
"GO": SVC_RS,
"MA": SVC_RS,
"MG": SVC_AN,
"MS": SVC_RS,
"MT": SVC_RS,
"PA": SVC_AN,
"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,
}


def localizar_url(servico, estado, mod="55", ambiente=2):
def localizar_url(servico, estado, mod="55", ambiente=2, contingencia=False):
sigla = SIGLA_ESTADO[estado]
ws = ESTADO_WS[sigla]

ws = ESTADO_WS_CONTINGENCIA[sigla] if contingencia else ESTADO_WS[sigla]

if servico in (WS_DFE_DISTRIBUICAO, WS_DOWNLOAD_NFE):
ws = AN
Expand Down Expand Up @@ -734,18 +767,39 @@ def __init__(
ambiente="2",
mod="55",
envio_sincrono=False,
contingencia=False,
):
super().__init__(transmissao, envio_sincrono)
self.versao = str(versao)
self.ambiente = str(ambiente)
self.uf = int(uf)
self.mod = str(mod)
self.contingencia = contingencia

def _edoc_situacao_ja_enviado(self, proc_consulta):
if proc_consulta.resposta.cStat in ("100", "110", "150", "301", "302"):
return True
return False

def _get_ws_endpoint(self, service):
"""
Obtém o endpoint de um webservice específico.
Esta função localiza a URL do endpoint para um dado serviço,
utilizando atributos da instância como a unidade federativa (UF),
o modelo (mod), o ambiente e a contingência.
"""
endpoint = (
localizar_url(
service,
str(self.uf),
self.mod,
int(self.ambiente),
self.contingencia,
),
)
return endpoint

def get_documento_id(self, edoc):
return edoc.infNFe.Id[:3], edoc.infNFe.Id[3:]

Expand All @@ -760,7 +814,7 @@ def status_servico(self):
return self._post(
raiz,
# 'https://hom.sefazvirtual.fazenda.gov.br/NFeStatusServico4/NFeStatusServico4.asmx?wsdl',
localizar_url(WS_NFE_SITUACAO, str(self.uf), self.mod, int(self.ambiente)),
self._get_ws_endpoint(WS_NFE_SITUACAO),
"nfeStatusServicoNF",
retConsStatServ,
)
Expand All @@ -777,7 +831,7 @@ def consulta_documento(self, chave):
return self._post(
raiz,
# 'https://hom.sefazvirtual.fazenda.gov.br/NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx?wsdl',
localizar_url(WS_NFE_CONSULTA, str(self.uf), self.mod, int(self.ambiente)),
self._get_ws_endpoint(WS_NFE_CONSULTA),
"nfeConsultaNF",
retConsSitNFe,
)
Expand Down Expand Up @@ -805,9 +859,7 @@ def envia_documento(self, edoc):
return self._post(
xml_envio_etree,
# 'https://hom.sefazvirtual.fazenda.gov.br/NFeAutorizacao4/NFeAutorizacao4.asmx?wsdl',
localizar_url(
WS_NFE_AUTORIZACAO, str(self.uf), self.mod, int(self.ambiente)
),
self._get_ws_endpoint(WS_NFE_AUTORIZACAO),
"nfeAutorizacaoLote",
retEnviNFe,
)
Expand All @@ -822,9 +874,7 @@ def envia_inutilizacao(self, evento):

return self._post(
xml_envio_etree,
localizar_url(
WS_NFE_INUTILIZACAO, str(self.uf), self.mod, int(self.ambiente)
),
self._get_ws_endpoint(WS_NFE_INUTILIZACAO),
"nfeInutilizacaoNF",
retInutNFe,
)
Expand All @@ -844,9 +894,7 @@ def consulta_recibo(self, numero=False, proc_envio=False):
raiz.original_tagname_ = "consReciNFe"
return self._post(
raiz,
localizar_url(
WS_NFE_RET_AUTORIZACAO, str(self.uf), self.mod, int(self.ambiente)
),
self._get_ws_endpoint(WS_NFE_RET_AUTORIZACAO),
# 'ws/nferetautorizacao4.asmx'
"nfeRetAutorizacaoLote",
retConsReciNFe,
Expand All @@ -871,9 +919,7 @@ def enviar_lote_evento(self, lista_eventos, numero_lote=False):

return self._post(
xml_envio_etree,
localizar_url(
WS_NFE_RECEPCAO_EVENTO, str(self.uf), self.mod, int(self.ambiente)
),
self._get_ws_endpoint(WS_NFE_RECEPCAO_EVENTO),
"nfeRecepcaoEvento",
retEnvEvento,
)
Expand Down Expand Up @@ -1023,9 +1069,7 @@ def consultar_distribuicao(

return self._post(
raiz,
localizar_url(
WS_DFE_DISTRIBUICAO, str(self.uf), self.mod, int(self.ambiente)
),
self._get_ws_endpoint(WS_DFE_DISTRIBUICAO),
"nfeDistDFeInteresse",
retDistDFeInt,
)
Expand Down Expand Up @@ -1091,7 +1135,7 @@ def consultar_cadastro(self, uf, cnpj=None, cpf=None, ie=None):

return self._post(
raiz,
localizar_url(WS_NFE_CADASTRO, str(self.uf), self.mod, int(self.ambiente)),
self._get_ws_endpoint(WS_NFE_CADASTRO),
"consultaCadastro",
retConsCad,
)

0 comments on commit bf8fa64

Please sign in to comment.