@@ -248,18 +248,6 @@ def todatetime(name):
248248 }
249249
250250
251- class _CFDISolicitaDescarga (_SATRequest ):
252- xml_name = 'solicita.xml'
253- soap_url = 'https://cfdidescargamasivasolicitud.clouda.sat.gob.mx/SolicitaDescargaService.svc'
254- soap_action = 'http://DescargaMasivaTerceros.sat.gob.mx/ISolicitaDescargaService/SolicitaDescarga'
255- solicitud_xpath = '{*}Body/{*}SolicitaDescarga/{*}solicitud'
256-
257- def process_response (self , response : etree .Element ):
258- res = response .find ('{*}Body/{*}SolicitaDescargaResponse/{*}SolicitaDescargaResult' )
259- return {
260- ** res .attrib
261- }
262-
263251class _CFDISolicitaDescargaEmitidos (_SATRequest ):
264252 xml_name = 'solicitaEmitidos.xml'
265253 soap_url = 'https://cfdidescargamasivasolicitud.clouda.sat.gob.mx/SolicitaDescargaService.svc'
@@ -351,15 +339,18 @@ def respuesta(node):
351339class _RetenAutenticacion (_CFDIAutenticacion ):
352340 soap_url = 'https://retendescargamasivasolicitud.clouda.sat.gob.mx/Autenticacion/Autenticacion.svc'
353341
342+ class _RetenSolicitaDescargaEmitidos (_CFDISolicitaDescargaEmitidos ):
343+ soap_url = 'https://retendescargamasivasolicitud.clouda.sat.gob.mx/SolicitaDescargaService.svc'
354344
355- class _RetenSolicitaDescarga ( _CFDISolicitaDescarga ):
345+ class _RetenSolicitaDescargaRecibidos ( _CFDISolicitaDescargaRecibidos ):
356346 soap_url = 'https://retendescargamasivasolicitud.clouda.sat.gob.mx/SolicitaDescargaService.svc'
357347
348+ class _RetenSolicitaDescargaFolio (_CFDISolicitaDescargaFolio ):
349+ soap_url = 'https://retendescargamasivasolicitud.clouda.sat.gob.mx/SolicitaDescargaService.svc'
358350
359351class _RetenVerificaSolicitudDescarga (_CFDIVerificaSolicitudDescarga ):
360352 soap_url = 'https://retendescargamasivasolicitud.clouda.sat.gob.mx/VerificaSolicitudDescargaService.svc'
361353
362-
363354class _RetenDescargaMasiva (_CFDIDescargaMasiva ):
364355 soap_url = 'https://retendescargamasiva.clouda.sat.gob.mx/DescargaMasivaService.svc'
365356
@@ -760,18 +751,17 @@ def recover_comprobante_download(self, id_paquete: str) -> (dict, str):
760751 needs_token_fn = self ._get_token_comprobante
761752 )
762753
763- def recover_retencion_request (
754+ def recover_retencion_emited_request (
764755 self ,
765- fecha_inicial : date = None ,
766- fecha_final : date = None ,
767- rfc_receptor : str | Sequence [str ] = None ,
768- rfc_emisor : str = None ,
756+ fecha_inicial : date | datetime | None = None ,
757+ fecha_final : date | datetime | None = None ,
758+ rfc_receptor : str | Sequence [str ] | None = None ,
759+ rfc_emisor : str | None = None ,
769760 tipo_solicitud : TipoDescargaMasivaTerceros | str = TipoDescargaMasivaTerceros .CFDI ,
770- tipo_comprobante : TipoDeComprobante | str = None ,
771- estado_comprobante : EstadoComprobante | str = None ,
772- rfc_a_cuenta_terceros : str = None ,
773- complemento : str = None ,
774- uuid : str | UUID = None ) -> dict :
761+ tipo_comprobante : TipoDeComprobante | str | None = None ,
762+ estado_comprobante : EstadoComprobante | str | None = None ,
763+ rfc_a_cuenta_terceros : str | None = None ,
764+ complemento : str | None = None ) -> dict :
775765 """
776766 Esta operación permite solicitar la descarga de CFDIs o Metadata y como
777767 resultado devuelve un id de solicitud o estatus de la petición realizada.
@@ -803,17 +793,92 @@ def recover_retencion_request(
803793 'EstadoComprobante' : estado_comprobante ,
804794 'RfcACuentaTerceros' : rfc_a_cuenta_terceros ,
805795 'Complemento' : complemento ,
806- 'Folio' : uuid ,
807796 }
808797
809798 return self ._execute_req (
810- _RetenSolicitaDescarga (
799+ _RetenSolicitaDescargaEmitidos (
800+ signer = self .signer ,
801+ arguments = arguments
802+ ),
803+ needs_token_fn = self ._get_token_retencion
804+ )
805+
806+ def recover_retencion_received_request (
807+ self ,
808+ fecha_inicial : date | datetime | None = None ,
809+ fecha_final : date | datetime | None = None ,
810+ rfc_receptor : str | None = None ,
811+ rfc_emisor : str | None = None ,
812+ tipo_solicitud : TipoDescargaMasivaTerceros | str = TipoDescargaMasivaTerceros .CFDI ,
813+ tipo_comprobante : TipoDeComprobante | str | None = None ,
814+ estado_comprobante : EstadoComprobante | str | None = None ,
815+ rfc_a_cuenta_terceros : str | None = None ,
816+ complemento : str | None = None ) -> dict :
817+ """
818+ Esta operación permite solicitar la descarga de CFDIs o Metadata y como
819+ resultado devuelve un id de solicitud o estatus de la petición realizada.
820+
821+ :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.
822+ Parámetro obligatorio. Este parámetro no debe declararse en caso de realizar una consulta por el folio fiscal (UUID).
823+ :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.
824+ Parámetro obligatorio. Este parámetro no debe declararse en caso de realizar una consulta por el folio fiscal (UUID).
825+ :param rfc_receptor: Contiene el/los RFCs receptores de los cuales se quiere consultar los CFDIs
826+ Importante: El campo RfcReceptor, únicamente permite la captura de 5 registros como máximo
827+ :param rfc_emisor: Contiene el RFC del emisor del cual se quiere consultar los CFDI.
828+ Parámetro obligatorio. Este parámetro no debe declararse en caso de realizar una consulta por el folio fiscal (UUID).
829+ :param tipo_solicitud: Define el tipo de descarga
830+ :param tipo_comprobante: Define el tipo de comprobante
831+ :param estado_comprobante: Define el estado del comprobante
832+ :param rfc_a_cuenta_terceros: Contiene el RFC del a cuenta a tercero del cual se quiere consultar los CFDIs
833+ :param complemento: Define el complemento de CFDI a descargar
834+ :param uuid: Folio Fiscal
835+ :return: respuesta de solicitud de descarga
836+ """
837+ arguments = {
838+ 'FechaFinal' : fecha_final ,
839+ 'FechaInicial' : fecha_inicial ,
840+ 'RfcEmisor' : rfc_emisor ,
841+ 'RfcReceptor' : rfc_receptor ,
842+ 'RfcSolicitante' : self .signer .rfc ,
843+ 'TipoSolicitud' : tipo_solicitud ,
844+ 'TipoComprobante' : tipo_comprobante ,
845+ 'EstadoComprobante' : estado_comprobante ,
846+ 'RfcACuentaTerceros' : rfc_a_cuenta_terceros ,
847+ 'Complemento' : complemento ,
848+ }
849+
850+ return self ._execute_req (
851+ _RetenSolicitaDescargaRecibidos (
811852 signer = self .signer ,
812853 arguments = arguments
813854 ),
814855 needs_token_fn = self ._get_token_retencion
815856 )
816857
858+ def recover_retencion_uuid_request (
859+ self ,
860+ folio : str | UUID | None = None ) -> dict :
861+ """
862+ Esta operación permite solicitar la descarga de CFDIs o Metadata y como
863+ resultado devuelve un id de solicitud o estatus de la petición realizada.
864+
865+ :param folio: Folio Fiscal
866+ :return: respuesta de solicitud de descarga
867+ """
868+ arguments = {
869+ 'RfcSolicitante' : self .signer .rfc ,
870+ 'Folio' : folio ,
871+ }
872+
873+ return self ._execute_req (
874+ _RetenSolicitaDescargaFolio (
875+ signer = self .signer ,
876+ arguments = arguments
877+ ),
878+ needs_token_fn = self ._get_token_retencion
879+ )
880+
881+
817882 def recover_retencion_status (self , id_solicitud : str ) -> dict :
818883 return self ._execute_req (
819884 _RetenVerificaSolicitudDescarga (
0 commit comments