Skip to content

Commit 3605228

Browse files
committed
ambiente autorizador de contingência para nfe
1 parent e62df76 commit 3605228

File tree

1 file changed

+68
-49
lines changed

1 file changed

+68
-49
lines changed

src/erpbrasil/edoc/nfe.py

+68-49
Original file line numberDiff line numberDiff line change
@@ -166,14 +166,16 @@
166166
SVC_AN = {
167167
AMBIENTE_PRODUCAO: {
168168
"servidor": "www.svc.fazenda.gov.br",
169+
WS_NFE_INUTILIZACAO: "NFeInutilizacao4/NFeInutilizacao4.asmx?wsdl",
169170
WS_NFE_CONSULTA: "NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx?wsdl", # noqa
170171
WS_NFE_SITUACAO: "NFeStatusServico4/NFeStatusServico4.asmx?wsdl",
171172
WS_NFE_RECEPCAO_EVENTO: "NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx?wsdl", # noqa
172173
WS_NFE_AUTORIZACAO: "NFeAutorizacao4/NFeAutorizacao4.asmx?wsdl",
173174
WS_NFE_RET_AUTORIZACAO: "NFeRetAutorizacao4/NFeRetAutorizacao4.asmx?wsdl", # noqa
174175
},
175176
AMBIENTE_HOMOLOGACAO: {
176-
"servidor": "hom.svc.fazenda.gov.br",
177+
"servidor": "hom.sefazvirtual.fazenda.gov.br",
178+
WS_NFE_INUTILIZACAO: "NFeInutilizacao4/NFeInutilizacao4.asmx?wsdl",
177179
WS_NFE_CONSULTA: "NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx?wsdl", # noqa
178180
WS_NFE_SITUACAO: "NFeStatusServico4/NFeStatusServico4.asmx?wsdl",
179181
WS_NFE_RECEPCAO_EVENTO: "NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx?wsdl", # noqa
@@ -644,41 +646,49 @@
644646
},
645647
}
646648

649+
650+
# Dicionário `ESTADO_WS` mapeia unidade federativa (UF) para uma tupla contendo
651+
# o serviço de webservices (WS) normal e o serviço de contingência.
652+
# Cada chave é uma sigla de UF e cada valor é uma tupla (servico_normal,
653+
# servico_contingencia). Exceção para a chave `AN` que representa o órgão de
654+
# Ambiente Nacional e não uma UF.
647655
ESTADO_WS = {
648-
"AC": SVRS,
649-
"AL": SVRS,
650-
"AM": UFAM,
651-
"AP": SVRS,
652-
"BA": UFBA,
653-
"CE": UFCE,
654-
"DF": SVRS,
655-
"ES": SVRS,
656-
"GO": UFGO,
657-
"MA": SVAN,
658-
"MG": UFMG,
659-
"MS": UFMS,
660-
"MT": UFMT,
661-
"PA": SVRS,
662-
"PB": SVRS,
663-
"PE": UFPE,
664-
"PI": SVRS,
665-
"PR": UFPR,
666-
"RJ": SVRS,
667-
"RN": SVRS,
668-
"RO": SVRS,
669-
"RR": SVRS,
670-
"RS": UFRS,
671-
"SC": SVRS,
672-
"SE": SVRS,
673-
"SP": UFSP,
674-
"TO": SVRS,
675-
"AN": AN,
656+
"AC": (SVRS, SVC_AN),
657+
"AL": (SVRS, SVC_AN),
658+
"AM": (UFAM, SVC_RS),
659+
"AP": (SVRS, SVC_AN),
660+
"BA": (UFBA, SVC_RS),
661+
"CE": (UFCE, SVC_AN),
662+
"DF": (SVRS, SVC_AN),
663+
"ES": (SVRS, SVC_AN),
664+
"GO": (UFGO, SVC_RS),
665+
"MA": (SVAN, SVC_RS),
666+
"MG": (UFMG, SVC_AN),
667+
"MS": (UFMS, SVC_RS),
668+
"MT": (UFMT, SVC_RS),
669+
"PA": (SVRS, SVC_AN),
670+
"PB": (SVRS, SVC_AN),
671+
"PE": (UFPE, SVC_RS),
672+
"PI": (SVRS, SVC_RS),
673+
"PR": (UFPR, SVC_RS),
674+
"RJ": (SVRS, SVC_AN),
675+
"RN": (SVRS, SVC_AN),
676+
"RO": (SVRS, SVC_AN),
677+
"RR": (SVRS, SVC_AN),
678+
"RS": (UFRS, SVC_AN),
679+
"SC": (SVRS, SVC_AN),
680+
"SE": (SVRS, SVC_AN),
681+
"SP": (UFSP, SVC_AN),
682+
"TO": (SVRS, SVC_AN),
683+
"AN": (AN, AN),
676684
}
677685

678686

679-
def localizar_url(servico, estado, mod="55", ambiente=2):
687+
def localizar_url(servico, estado, mod="55", ambiente=2, contingencia=False):
680688
sigla = SIGLA_ESTADO[estado]
681-
ws = ESTADO_WS[sigla]
689+
690+
ws_normal, ws_contingencia = ESTADO_WS[sigla]
691+
ws = ws_contingencia if contingencia else ws_normal
682692

683693
if servico in (WS_DFE_DISTRIBUICAO, WS_DOWNLOAD_NFE):
684694
ws = AN
@@ -734,18 +744,37 @@ def __init__(
734744
ambiente="2",
735745
mod="55",
736746
envio_sincrono=False,
747+
contingencia=False,
737748
):
738749
super().__init__(transmissao, envio_sincrono)
739750
self.versao = str(versao)
740751
self.ambiente = str(ambiente)
741752
self.uf = int(uf)
742753
self.mod = str(mod)
754+
self.contingencia = contingencia
743755

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

761+
def _get_ws_endpoint(self, service):
762+
"""
763+
Obtém o endpoint de um webservice específico.
764+
765+
Esta função localiza a URL do endpoint para um dado serviço,
766+
utilizando atributos da instância como a unidade federativa (UF),
767+
o modelo (mod), o ambiente e a contingência.
768+
"""
769+
endpoint = localizar_url(
770+
service,
771+
str(self.uf),
772+
self.mod,
773+
int(self.ambiente),
774+
self.contingencia,
775+
)
776+
return endpoint
777+
749778
def get_documento_id(self, edoc):
750779
return edoc.infNFe.Id[:3], edoc.infNFe.Id[3:]
751780

@@ -760,7 +789,7 @@ def status_servico(self):
760789
return self._post(
761790
raiz,
762791
# 'https://hom.sefazvirtual.fazenda.gov.br/NFeStatusServico4/NFeStatusServico4.asmx?wsdl',
763-
localizar_url(WS_NFE_SITUACAO, str(self.uf), self.mod, int(self.ambiente)),
792+
self._get_ws_endpoint(WS_NFE_SITUACAO),
764793
"nfeStatusServicoNF",
765794
retConsStatServ,
766795
)
@@ -777,7 +806,7 @@ def consulta_documento(self, chave):
777806
return self._post(
778807
raiz,
779808
# 'https://hom.sefazvirtual.fazenda.gov.br/NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx?wsdl',
780-
localizar_url(WS_NFE_CONSULTA, str(self.uf), self.mod, int(self.ambiente)),
809+
self._get_ws_endpoint(WS_NFE_CONSULTA),
781810
"nfeConsultaNF",
782811
retConsSitNFe,
783812
)
@@ -805,9 +834,7 @@ def envia_documento(self, edoc):
805834
return self._post(
806835
xml_envio_etree,
807836
# 'https://hom.sefazvirtual.fazenda.gov.br/NFeAutorizacao4/NFeAutorizacao4.asmx?wsdl',
808-
localizar_url(
809-
WS_NFE_AUTORIZACAO, str(self.uf), self.mod, int(self.ambiente)
810-
),
837+
self._get_ws_endpoint(WS_NFE_AUTORIZACAO),
811838
"nfeAutorizacaoLote",
812839
retEnviNFe,
813840
)
@@ -822,9 +849,7 @@ def envia_inutilizacao(self, evento):
822849

823850
return self._post(
824851
xml_envio_etree,
825-
localizar_url(
826-
WS_NFE_INUTILIZACAO, str(self.uf), self.mod, int(self.ambiente)
827-
),
852+
self._get_ws_endpoint(WS_NFE_INUTILIZACAO),
828853
"nfeInutilizacaoNF",
829854
retInutNFe,
830855
)
@@ -844,9 +869,7 @@ def consulta_recibo(self, numero=False, proc_envio=False):
844869
raiz.original_tagname_ = "consReciNFe"
845870
return self._post(
846871
raiz,
847-
localizar_url(
848-
WS_NFE_RET_AUTORIZACAO, str(self.uf), self.mod, int(self.ambiente)
849-
),
872+
self._get_ws_endpoint(WS_NFE_RET_AUTORIZACAO),
850873
# 'ws/nferetautorizacao4.asmx'
851874
"nfeRetAutorizacaoLote",
852875
retConsReciNFe,
@@ -871,9 +894,7 @@ def enviar_lote_evento(self, lista_eventos, numero_lote=False):
871894

872895
return self._post(
873896
xml_envio_etree,
874-
localizar_url(
875-
WS_NFE_RECEPCAO_EVENTO, str(self.uf), self.mod, int(self.ambiente)
876-
),
897+
self._get_ws_endpoint(WS_NFE_RECEPCAO_EVENTO),
877898
"nfeRecepcaoEvento",
878899
retEnvEvento,
879900
)
@@ -1023,9 +1044,7 @@ def consultar_distribuicao(
10231044

10241045
return self._post(
10251046
raiz,
1026-
localizar_url(
1027-
WS_DFE_DISTRIBUICAO, str(self.uf), self.mod, int(self.ambiente)
1028-
),
1047+
self._get_ws_endpoint(WS_DFE_DISTRIBUICAO),
10291048
"nfeDistDFeInteresse",
10301049
retDistDFeInt,
10311050
)
@@ -1091,7 +1110,7 @@ def consultar_cadastro(self, uf, cnpj=None, cpf=None, ie=None):
10911110

10921111
return self._post(
10931112
raiz,
1094-
localizar_url(WS_NFE_CADASTRO, str(self.uf), self.mod, int(self.ambiente)),
1113+
self._get_ws_endpoint(WS_NFE_CADASTRO),
10951114
"consultaCadastro",
10961115
retConsCad,
10971116
)

0 commit comments

Comments
 (0)