Skip to content

Commit 5f7ae70

Browse files
committed
Fixed Descarga Masiva
1 parent 6972f20 commit 5f7ae70

File tree

4 files changed

+200
-10
lines changed

4 files changed

+200
-10
lines changed

satcfdi/pacs/sat.py

Lines changed: 173 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -247,19 +247,55 @@ def todatetime(name):
247247
}
248248

249249

250-
class _CFDISolicitaDescarga(_SATRequest):
251-
xml_name = 'solicita.xml'
250+
# class _CFDISolicitaDescarga(_SATRequest):
251+
# xml_name = 'solicita.xml'
252+
# soap_url = 'https://cfdidescargamasivasolicitud.clouda.sat.gob.mx/SolicitaDescargaService.svc'
253+
# soap_action = 'http://DescargaMasivaTerceros.sat.gob.mx/ISolicitaDescargaService/SolicitaDescarga'
254+
# solicitud_xpath = '{*}Body/{*}SolicitaDescarga/{*}solicitud'
255+
#
256+
# def process_response(self, response: etree.Element):
257+
# res = response.find('{*}Body/{*}SolicitaDescargaResponse/{*}SolicitaDescargaResult')
258+
# return {
259+
# **res.attrib
260+
# }
261+
262+
class _CFDISolicitaDescargaEmitidos(_SATRequest):
263+
xml_name = 'solicitaEmitidos.xml'
252264
soap_url = 'https://cfdidescargamasivasolicitud.clouda.sat.gob.mx/SolicitaDescargaService.svc'
253-
soap_action = 'http://DescargaMasivaTerceros.sat.gob.mx/ISolicitaDescargaService/SolicitaDescarga'
254-
solicitud_xpath = '{*}Body/{*}SolicitaDescarga/{*}solicitud'
265+
soap_action = "http://DescargaMasivaTerceros.sat.gob.mx/ISolicitaDescargaService/SolicitaDescargaEmitidos"
266+
solicitud_xpath = '{*}Body/{*}SolicitaDescargaEmitidos/{*}solicitud'
255267

256268
def process_response(self, response: etree.Element):
257-
res = response.find('{*}Body/{*}SolicitaDescargaResponse/{*}SolicitaDescargaResult')
269+
res = response.find('{*}Body/{*}SolicitaDescargaEmitidosResponse/{*}SolicitaDescargaEmitidosResult')
258270
return {
259271
**res.attrib
260272
}
261273

262274

275+
class _CFDISolicitaDescargaRecibidos(_SATRequest):
276+
xml_name = 'solicitaRecibidos.xml'
277+
soap_url = 'https://cfdidescargamasivasolicitud.clouda.sat.gob.mx/SolicitaDescargaService.svc'
278+
soap_action = "http://DescargaMasivaTerceros.sat.gob.mx/ISolicitaDescargaService/SolicitaDescargaRecibidos"
279+
solicitud_xpath = '{*}Body/{*}SolicitaDescargaRecibidos/{*}solicitud'
280+
281+
def process_response(self, response: etree.Element):
282+
res = response.find('{*}Body/{*}SolicitaDescargaRecibidosResponse/{*}SolicitaDescargaRecibidosResult')
283+
return {
284+
**res.attrib
285+
}
286+
287+
class _CFDISolicitaDescargaFolio(_SATRequest):
288+
xml_name = 'solicitaFolio.xml'
289+
soap_url = 'https://cfdidescargamasivasolicitud.clouda.sat.gob.mx/SolicitaDescargaService.svc'
290+
soap_action = "http://DescargaMasivaTerceros.sat.gob.mx/ISolicitaDescargaService/SolicitaDescargaFolio"
291+
solicitud_xpath = '{*}Body/{*}SolicitaDescargaFolio/{*}solicitud'
292+
293+
def process_response(self, response: etree.Element):
294+
res = response.find('{*}Body/{*}SolicitaDescargaFolioResponse/{*}SolicitaDescargaFolioResult')
295+
return {
296+
**res.attrib
297+
}
298+
263299
class _CFDIVerificaSolicitudDescarga(_SATRequest):
264300
xml_name = 'verifica.xml'
265301
soap_url = 'https://cfdidescargamasivasolicitud.clouda.sat.gob.mx/VerificaSolicitudDescargaService.svc'
@@ -572,7 +608,61 @@ def list_69b(self, rfc: str) -> TaxpayerStatus | None:
572608
return TaxpayerStatus(r)
573609
return None
574610

575-
def recover_comprobante_request(
611+
# def recover_comprobante_request(
612+
# self,
613+
# fecha_inicial: date | datetime | None = None,
614+
# fecha_final: date | datetime | None = None,
615+
# rfc_receptor: str | Sequence[str] | None = None,
616+
# rfc_emisor: str | None = None,
617+
# tipo_solicitud: TipoDescargaMasivaTerceros | str = TipoDescargaMasivaTerceros.CFDI,
618+
# tipo_comprobante: TipoDeComprobante | str | None = None,
619+
# estado_comprobante: EstadoComprobante | str | None = None,
620+
# rfc_a_cuenta_terceros: str | None = None,
621+
# complemento: str | None = None,
622+
# uuid: str | UUID | None = None) -> dict:
623+
# """
624+
# Esta operación permite solicitar la descarga de CFDIs o Metadata y como
625+
# resultado devuelve un id de solicitud o estatus de la petición realizada.
626+
#
627+
# :param fecha_inicial: Solo se buscarán CFDI, cuya fecha de emisión sea igual o mayor a la fecha inicial indicada en este parámetro.
628+
# Parámetro obligatorio. Este parámetro no debe declararse en caso de realizar una consulta por el folio fiscal (UUID).
629+
# :param fecha_final: Solo se buscarán CFDI, cuya fecha de emisión sea igual o menor a la fecha final indicada en este parámetro.
630+
# Parámetro obligatorio. Este parámetro no debe declararse en caso de realizar una consulta por el folio fiscal (UUID).
631+
# :param rfc_receptor: Contiene el/los RFCs receptores de los cuales se quiere consultar los CFDIs
632+
# Importante: El campo RfcReceptor, únicamente permite la captura de 5 registros como máximo
633+
# :param rfc_emisor: Contiene el RFC del emisor del cual se quiere consultar los CFDI.
634+
# Parámetro obligatorio. Este parámetro no debe declararse en caso de realizar una consulta por el folio fiscal (UUID).
635+
# :param tipo_solicitud: Define el tipo de descarga
636+
# :param tipo_comprobante: Define el tipo de comprobante
637+
# :param estado_comprobante: Define el estado del comprobante
638+
# :param rfc_a_cuenta_terceros: Contiene el RFC del a cuenta a tercero del cual se quiere consultar los CFDIs
639+
# :param complemento: Define el complemento de CFDI a descargar
640+
# :param uuid: Folio Fiscal
641+
# :return: respuesta de solicitud de descarga
642+
# """
643+
# arguments = {
644+
# 'FechaFinal': fecha_final,
645+
# 'FechaInicial': fecha_inicial,
646+
# 'RfcEmisor': rfc_emisor,
647+
# 'RfcReceptores': [('RfcReceptor', r) for r in iterate(rfc_receptor)] if rfc_receptor else None,
648+
# 'RfcSolicitante': self.signer.rfc,
649+
# 'TipoSolicitud': tipo_solicitud,
650+
# 'TipoComprobante': tipo_comprobante,
651+
# 'EstadoComprobante': estado_comprobante,
652+
# 'RfcACuentaTerceros': rfc_a_cuenta_terceros,
653+
# 'Complemento': complemento,
654+
# 'Folio': uuid,
655+
# }
656+
#
657+
# return self._execute_req(
658+
# _CFDISolicitaDescarga(
659+
# signer=self.signer,
660+
# arguments=arguments
661+
# ),
662+
# needs_token_fn=self._get_token_comprobante
663+
# )
664+
665+
def recover_comprobante_emited_request(
576666
self,
577667
fecha_inicial: date | datetime | None = None,
578668
fecha_final: date | datetime | None = None,
@@ -582,8 +672,7 @@ def recover_comprobante_request(
582672
tipo_comprobante: TipoDeComprobante | str | None = None,
583673
estado_comprobante: EstadoComprobante | str | None = None,
584674
rfc_a_cuenta_terceros: str | None = None,
585-
complemento: str | None = None,
586-
uuid: str | UUID | None = None) -> dict:
675+
complemento: str | None = None) -> dict:
587676
"""
588677
Esta operación permite solicitar la descarga de CFDIs o Metadata y como
589678
resultado devuelve un id de solicitud o estatus de la petición realizada.
@@ -615,11 +704,85 @@ def recover_comprobante_request(
615704
'EstadoComprobante': estado_comprobante,
616705
'RfcACuentaTerceros': rfc_a_cuenta_terceros,
617706
'Complemento': complemento,
618-
'Folio': uuid,
619707
}
620708

621709
return self._execute_req(
622-
_CFDISolicitaDescarga(
710+
_CFDISolicitaDescargaEmitidos(
711+
signer=self.signer,
712+
arguments=arguments
713+
),
714+
needs_token_fn=self._get_token_comprobante
715+
)
716+
717+
def recover_comprobante_received_request(
718+
self,
719+
fecha_inicial: date | datetime | None = None,
720+
fecha_final: date | datetime | None = None,
721+
rfc_receptor: str | None = None,
722+
rfc_emisor: str | None = None,
723+
tipo_solicitud: TipoDescargaMasivaTerceros | str = TipoDescargaMasivaTerceros.CFDI,
724+
tipo_comprobante: TipoDeComprobante | str | None = None,
725+
estado_comprobante: EstadoComprobante | str | None = None,
726+
rfc_a_cuenta_terceros: str | None = None,
727+
complemento: str | None = None) -> dict:
728+
"""
729+
Esta operación permite solicitar la descarga de CFDIs o Metadata y como
730+
resultado devuelve un id de solicitud o estatus de la petición realizada.
731+
732+
:param fecha_inicial: Solo se buscarán CFDI, cuya fecha de emisión sea igual o mayor a la fecha inicial indicada en este parámetro.
733+
Parámetro obligatorio. Este parámetro no debe declararse en caso de realizar una consulta por el folio fiscal (UUID).
734+
:param fecha_final: Solo se buscarán CFDI, cuya fecha de emisión sea igual o menor a la fecha final indicada en este parámetro.
735+
Parámetro obligatorio. Este parámetro no debe declararse en caso de realizar una consulta por el folio fiscal (UUID).
736+
:param rfc_receptor: Contiene el/los RFCs receptores de los cuales se quiere consultar los CFDIs
737+
Importante: El campo RfcReceptor, únicamente permite la captura de 5 registros como máximo
738+
:param rfc_emisor: Contiene el RFC del emisor del cual se quiere consultar los CFDI.
739+
Parámetro obligatorio. Este parámetro no debe declararse en caso de realizar una consulta por el folio fiscal (UUID).
740+
:param tipo_solicitud: Define el tipo de descarga
741+
:param tipo_comprobante: Define el tipo de comprobante
742+
:param estado_comprobante: Define el estado del comprobante
743+
:param rfc_a_cuenta_terceros: Contiene el RFC del a cuenta a tercero del cual se quiere consultar los CFDIs
744+
:param complemento: Define el complemento de CFDI a descargar
745+
:param uuid: Folio Fiscal
746+
:return: respuesta de solicitud de descarga
747+
"""
748+
arguments = {
749+
'FechaFinal': fecha_final,
750+
'FechaInicial': fecha_inicial,
751+
'RfcEmisor': rfc_emisor,
752+
'RfcReceptor': rfc_receptor,
753+
'RfcSolicitante': self.signer.rfc,
754+
'TipoSolicitud': tipo_solicitud,
755+
'TipoComprobante': tipo_comprobante,
756+
'EstadoComprobante': estado_comprobante,
757+
'RfcACuentaTerceros': rfc_a_cuenta_terceros,
758+
'Complemento': complemento,
759+
}
760+
761+
return self._execute_req(
762+
_CFDISolicitaDescargaRecibidos(
763+
signer=self.signer,
764+
arguments=arguments
765+
),
766+
needs_token_fn=self._get_token_comprobante
767+
)
768+
769+
def recover_comprobante_uuid_request(
770+
self,
771+
folio: str | UUID | None = None) -> dict:
772+
"""
773+
Esta operación permite solicitar la descarga de CFDIs o Metadata y como
774+
resultado devuelve un id de solicitud o estatus de la petición realizada.
775+
776+
:param folio: Folio Fiscal
777+
:return: respuesta de solicitud de descarga
778+
"""
779+
arguments = {
780+
'RfcSolicitante': self.signer.rfc,
781+
'Folio': folio,
782+
}
783+
784+
return self._execute_req(
785+
_CFDISolicitaDescargaFolio(
623786
signer=self.signer,
624787
arguments=arguments
625788
),
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<s:Envelope xmlns:des="http://DescargaMasivaTerceros.sat.gob.mx"
2+
xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
3+
<s:Header/>
4+
<s:Body>
5+
<des:SolicitaDescargaEmitidos>
6+
<des:solicitud/>
7+
</des:SolicitaDescargaEmitidos>
8+
</s:Body>
9+
</s:Envelope>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<s:Envelope xmlns:des="http://DescargaMasivaTerceros.sat.gob.mx"
2+
xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
3+
<s:Header/>
4+
<s:Body>
5+
<des:SolicitaDescargaFolio>
6+
<des:solicitud/>
7+
</des:SolicitaDescargaFolio>
8+
</s:Body>
9+
</s:Envelope>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<s:Envelope xmlns:des="http://DescargaMasivaTerceros.sat.gob.mx"
2+
xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
3+
<s:Header/>
4+
<s:Body>
5+
<des:SolicitaDescargaRecibidos>
6+
<des:solicitud/>
7+
</des:SolicitaDescargaRecibidos>
8+
</s:Body>
9+
</s:Envelope>

0 commit comments

Comments
 (0)