Registro de Solicitud de Descarga Masiva

Registro de Solicitud de Descarga Masiva

Esta transacción permite registrar en MYSuite una solicitud (o varias a la misma vez, en dependencia de los parámetros enviados). La respuesta es una lista (un registro por cada solicitud tratada de registrar), con el resultado de dicho registro.

REGISTRAR_SOLICITUD_DM_SAT

Los parámetros de la solicitud se especificarán todos en Data1 (Data2 y Data3 vacíos).

Los parámetros serán indicados en formato string (el ya conocido NamedStringDictionary), y codificado Base64.

Ejemplo de valor para el parámetro Data1 (se muestra en varias líneas y plano para que se entienda mejor, debe especificarse en una sola y codificado Base64):
  1. <Dictionary name="Params">
      <Entry k="FielCer" v="MIIG..."/>
      <Entry k="FielKey" v="MIIFDj..."/>
      <Entry k="FielPass" v="12345678a"/>
      <Entry k="Servicio" v="CFDIS"/>
      <Entry k="FechaInicial" v="2019-03-10 00:00:00"/>
      <Entry k="FechaFinal" v="2019-03-14 23:59:59"/>
      <Entry k="TipoSolicitud" v="AMBOS"/>
      <Entry k="TipoTaxID" v="EMISOR"/>
    </Dictionary>

Definición de etiquetas Key:

FielCer: Archivo .cer del certificado FIEL (codificado Base64).

FielKey: Archivo .key del certificado FIEL (codificado Base64).

FielPass: Contraseña del certificado FIEL.

Servicio: indica el tipo de servicio de la descarga (valores posibles: CFDIS, RETENCIONES y AMBOS); obligatorio.

FechaInicial: indica la fecha inicial de la descarga (formato yyyy-MM-dd HH:mm:ss); obligatorio.

FechaFinal: indica la fecha final de la descarga (formato yyyy-MM-dd HH:mm:ss); obligatorio.

TipoSolicitud: indica el tipo de solicitud de la descarga (valores posibles: Metadata, CFDI y AMBOS); obligatorio.

TipoTaxID: indica el tipo de RFC de la descarga (valores posibles: EMISOR, RECEPTOR y AMBOS); obligatorio.

SOLICITUD

A continuación se muestra la manera en que debe realizarse la solicitud:
  1. <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ws="http://www.fact.com.mx/schema/ws">
       <soap:Header/>
       <soap:Body>
          <ws:RequestTransaction>       
             <ws:Requestor>0c320b03-d4f1-47bc-9fb4-77995f9bf33e</ws:Requestor>       
             <ws:Transaction>REGISTRAR_SOLICITUD_DM_SAT</ws:Transaction>       
             <ws:Country>MX</ws:Country>       
             <ws:Entity>JES900109Q90</ws:Entity>       
             <ws:User>0c320b03-d4f1-47bc-9fb4-77995f9bf33e</ws:User>       
             <ws:UserName>Jan_Test</ws:UserName>       
             <ws:Data1>XML Dictionary en Base64</ws:Data1>       
             <ws:Data2></ws:Data2>       
             <ws:Data3></ws:Data3>
          </ws:RequestTransaction>
       </soap:Body>
    </soap:Envelope>

RESPUESTA
  1. <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
       <soap:Body>
          <RequestTransactionResponse xmlns="http://www.fact.com.mx/schema/ws">
             <RequestTransactionResult>
                <Request>
                   <Requestor>00000000-0000-0000-0000-000000000000</Requestor>
                   <RequestorActive>true</RequestorActive>
                   <Transaction>REGISTRAR_SOLICITUD_DM_SAT</Transaction>
                   <Country>MX</Country>
                   <Entity>JES900109Q90</Entity>
                   <User>00000000-0000-0000-0000-000000000000</User>
                   <UserName>Jan_Test</UserName>
                   <Id>687d46e5-835a-40c5-8f30-213a02da3e33</Id>
                   <TimeStamp>2020-05-19T15:43:09.0702889-05:00</TimeStamp>
                </Request>
                <Response>
                   <Result>true</Result>
                   <TimeStamp>2020-05-19T15:43:10.8202914-05:00</TimeStamp>
                   <LastResult/>
                   <Code>1</Code>
                   <Description/>
                   <Hint/>
                   <Data>1251 687d46e5-835a-40c5-8f30-213a02da3e33</Data>
                   <Processor>TEST-BACK02</Processor>
                </Response>
                <ResponseData>
                   <ResponseData1>XML de respuesta codificado en Base64</ResponseData1>
                   <ResponseData2/>
                   <ResponseData3/>
                </ResponseData>
             </RequestTransactionResult>
          </RequestTransactionResponse>
       </soap:Body>
    </soap:Envelope>

La respuesta, en caso de que los datos sean válidos, siempre será exitosa (Result con valor true). Esto no indica que la, o las solicitudes, fueron registradas de manera exitosa; cada una de ellas tendrá que ser revisada en lo que se devuelve en ResponseData1.

Ejemplo de valor devuelto en ResponseData1 para solicitud previa (aunque se muestra plano, y en varias líneas, el valor de ResponseData1 viene codificado en Base64):
  1. <?xml version="1.0" encoding="utf-8"?>
    <ResultadosRegistroSolicitudDM xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Resultados>
        <servicio>CFDIS</servicio>
        <fechaInicial>2019-03-10 00:00:00</fechaInicial>
        <fechaFinal>2019-03-14 23:59:59</fechaFinal>
        <tipoSolicitud>Metadata</tipoSolicitud>
        <tipoTaxID>EMISOR</tipoTaxID>
        <result>false</result>
        <id xsi:nil="true" />
        <errMsg>DbCmdBase failed. Database=MYSQL ExecType=SCALAR SpName=RegisterSatDMRequest Message=Existe solapamiento de fechas; Id: 16, Fecha Inicial: 2019-03-10 00:00:00, Fecha Final: 2019-03-14 23:59:59.</errMsg>
      </Resultados>
      <Resultados>
        <servicio>CFDIS</servicio>
        <fechaInicial>2019-03-10 00:00:00</fechaInicial>
        <fechaFinal>2019-03-14 23:59:59</fechaFinal>
        <tipoSolicitud>CFDI</tipoSolicitud>
        <tipoTaxID>EMISOR</tipoTaxID>
        <result>false</result>
        <id xsi:nil="true" />
        <errMsg>DbCmdBase failed. Database=MYSQL ExecType=SCALAR SpName=RegisterSatDMRequest Message=Existe solapamiento de fechas; Id: 17, Fecha Inicial: 2019-03-10 00:00:00, Fecha Final: 2019-03-14 23:59:59.</errMsg>
      </Resultados>
    </ResultadosRegistroSolicitudDM>

En ResponseData1 se devuelven dos registros ya que la solicitud especificaba valor AMBOS en TipoSolicitud.

Dos de estas solicitudes tuvieron error.

Para solicitudes con éxito, se devuelve valor en Id que identifica, de manera única, dicha solicitud y con el cual se le puede dar seguimiento en otras transacciones.

Aunque algún parámetro haya tenido valor AMBOS (como en este caso TipoSolicitud), la respuesta ya indica valores específicos para cada solicitud que se intentó generar, con o sin éxito.

Para solicitudes con error, en errMsg se devuelve un texto con el motivo del error en el registro; en caso de éxito errMsg tendrá valor null.

El resto de la información devuelta para cada solicitud (Servicio, FechaInicial, FechaFinal, TipoSolicitud y TipoTaxID), tendrá el valor indicado en los parámetros de entrada, excepto aquellos que tuvieron valor AMBOS y que son sustituidos por el valor específico en cada caso.

Para el caso de solapamiento, el mensaje de error siempre es el mismo (como el del primer y segundo caso de la respuesta de ejemplo), así que procesando dicho mensaje se puede recuperar el Id y las fechas de la solicitud con la cual hubo solapamiento.

Notas para tener en cuenta:

·         La fecha indicada en FechaInicial tiene que ser menor que la fecha indicada en FechaFinal.

·         Por ahora la única hora permitida para FechaInicial es 00:00:00 y la única hora permitida para FechaFinal es 23:59:59; esto no evita que tengan que ser especificadas ambas.

·         Todos los parámetros que se especifican en el Dictionary son obligatorios; cualquiera que no sea indicado (o que su valor sea incorrecto contra lo especificado en este documento), generará un error cuyo mensaje indica el motivo.

·         En dependencia de los valores de los parámetros Servicio, TipoSolicitud y TipoTaxID (que permiten valor AMBOS), se pueden generar hasta 8 solicitudes de una sola vez; es por ese motivo que la respuesta es una lista.

·         Cualquier error en el registro de una solicitud específica, no invalida el registro del resto de las solicitudes generadas por la misma transacción y que no tuvieron error.

·         El sistema no permite solapamientos de solicitudes; en otras palabras, no se permiten solicitudes cuyas fechas se solapen con alguna existente que sea del mismo solicitante (rfc que solicita la descarga), mismo Servicio, mismo TipoSolicitud y mismo TipoTaxID (para el solapamiento no se tienen en cuenta aquellas solicitudes ya registradas y que generaron CodigoEstadoSolicitud con valor 5003, estas indican que se superó el tope máximo a descargar y por tanto hay que disminuir el período).