Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ativação dos ambientes autorizadores de contingencia para NFe #75

Closed
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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,
)
Loading