Recuperación de Lista de Alertas por Listas Negras del SAT

Recuperación de Lista de Alertas por Listas Negras del SAT

Esta transacción permite recuperar la lista (paginada y que cumplan criterios de filtrado establecidos, así como un ordenamiento indicado), con los metadatos asociados a Alertas por operaciones con empresas publicadas en las Listas Negras del SAT.

La respuesta es una mezcla de una lista (un registro por cada solicitud que cumple con los criterios de filtrado y que pertenecen a la página indicada), así como información de dicha lista (tamaño de página, cantidad de líneas totales y cantidad de páginas totales), y se entregará en dos tipos de formato diferente, en dependencia de lo especificado en los parámetros de entrada.

OBTENER_LISTA_ALERTAS_LN_HTML

El valor suministrado en el parámetro jsonData es la serialización (formato java), de una clase que contiene las propiedades page, pageSize, responseFormat, oper, order y filters (las dos primeras de tipo int y el resto de tipo string).

Definición de propiedades:

page: Indica la página que se quiere recuperar; obligatorio si oper tiene valor LINES o BOTH.

pageSize: Indica la cantidad de líneas por página; obligatorio si oper tiene valor LINES o BOTH.

responseFormat: Indica el formato que se desea como respuesta (valores posibles: JSON y XML); obligatorio.

oper: Indica el tipo de operación que se realizará (valores posibles: LINES, COUNT y BOTH); opcional, en caso de no especificarse se asume valor BOTH.

order: Indica el ordenamiento que se desea en el listado. El formato es tipo BD (MySql, MsSql, PlSql, etc.). Los campos que se pueden utilizar (de manera única o combinados, separados por coma), son: TaxID, Name, EnrolledTimeStamp, Read, Source, Kind y Active; cada campo utilizado puede tener asociado el modificador ASC o DESC. Parámetro opcional, en caso de no especificarse se asume EnrolledTimeStamp ASC (los más viejos primero).

filters: Indica los criterios de filtrado que tienen que cumplir los registros recuperados (se especifica codificado Base64), opcional.

Ejemplo de valor para el parámetro jsonData (se muestra en varias líneas para que se entienda mejor, debe especificarse en una sola):

  1. {
      "page": 1,
      "pageSize": 4,
      "responseFormat": "JSON",
      "oper": "BOTH",
      "order": "Read ASC",
      "filters": "PEZpbHRlcnM+PEZpbHRlciBOYW1lPSJSZWFkIiBPcGVyPSI9IiBWYWx1ZTE9IjAiIFZhbHVlMiA9IiIgLz48L0ZpbHRlcnM+"
    }

Como se había aclarado previamente, el valor de la propiedad filters se especifica codificado Base64. El valor de la propiedad filters del ejemplo anterior, decodificado, es este (se muestra en varias líneas, para que se entienda mejor):

  1. <Filters>
      <Filter Name="Read" Oper="=" Value1="0" Value2=""/>
    </Filters>

Pueden existir 6 criterios de filtrado, a continuación se enumeran así como el valor a especificar en el atributo Name para cada uno de ellos:

RFC: Especificar el valor TaxID en el atributo Name (no es case sensitive). RFC de la lista negra del SAT (LN69 o LN69B) con el cual se tuvo operaciones; no confundir con el RFC del cliente que realiza la solicitud.

Razón Social: Especificar el valor de la Razón Social en el atributo Name (no es case sensitive).

Leido: Especificar el valor Read en el atributo Name (no es case sensitive).

Tipo (Emitidos/Recibidos): Especificar el valor Kind en el atributo Name (no es case sensitive). Valores posibles para filtro: S/R. S para Emitidos (Sent) y R para Recibidos (Received).

Fuente (LN69/LN69B): Especificar el valor Source en el atributo Name (no es case sensitive). Valores posibles para filtro: 0/1. 0 para LN69 y 1 para LN69B.

Vigente: Especificar el valor Active en el atributo Name (no es case sensitive).

Los valores posibles para el atributo Oper son (no es case sensitive): <=, < >, >=, =, BETWEEN  y LIKE, en formato xml, los caracteres "<"  y ">"  son especiales y deben ser sustituidos ( < por &lt;  y > por &gt; ). Los operadores no pueden ser utilizados en cualquier filtro; por ejemplo: LIKE sólo tiene sentido si el campo que se está filtrando es de tipo cadena de caracteres.

Value1 es el valor con el cual se va a comparar el operador Oper con el campo especificado en Name; en el caso de Oper con valor LIKE  los % deben ser especificados.

Value2 siempre es vacío (pero obligatorio), mientras el valor de Oper no sea < > ; en este caso se necesita un segundo valor de comparación tal y como está en el ejemplo para el criterio de filtrado por Fecha de Alta.


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:JsonServiceCall>
             <ws:jsonData>{
      "page": 1,
      "pageSize": 25,
      "responseFormat": "JSON",
      "oper": "BOTH",
      "order": "TaxID ASC",
      "filters": "PEZpbHRlcnM+PEZpbHRlciBOYW1lPSJSZWFkIiBPcGVyPSI9IiBWYWx1ZTE9IjAiIFZhbHVlMiA9IiIgLz48L0ZpbHRlcnM+"
    }</ws:jsonData>
             <ws:transactionName>OBTENER_LISTA_ALERTAS_LN_HTML</ws:transactionName>
             <ws:token>wAw8LzeFYnhlw2Qc0/5MXwvO7OepjeLJd/jci7o5wxlQu5r19BZsJOIE+T1P7SOEHU95MWSyE+AMU=</ws:token>
          </ws:JsonServiceCall>
       </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>
          <JsonServiceCallResponse xmlns="http://www.fact.com.mx/schema/ws">
             <JsonServiceCallResult>
    {"Result":true,
    "Payload":"Respuesta en Base64 del formato indicado en responseFormat",
    "ErrorMsg":"",
    "ErrorCode":0,
    "Token":"wAw8LzeFYnhlw2Qc0/5MXwvO7OepjeLJd/jc1mYOxk/t2S95ZDHVAIAR2Ve31as="}
        </JsonServiceCallResult>
          </JsonServiceCallResponse>
       </soap:Body>
    </soap:Envelope>

El valor devuelto en Payload puede tener dos formatos diferentes (en dependencia de lo especificado en la propiedad responseFormat).

Ejemplo de valor devuelto en Payload, formato
JSON (aunque se muestra plano, y en varias líneas, el valor de Payload viene codificado Base64):
  1. {
      "PageSize": 4,
      "LinesCount": 100,
      "PagesCount": 25,
      "Lines":
        "[{\"IdUser\":381,\"Read\":0,\"IdAlert\":2,\"Kind\":\"S\",\"Source\":\"0\",\"TaxID\":\"\\u0026CA060106UG6\",\"Name\":\"Nombre Empresa \\u0026CA060106UG6\",\"Active\":true},
          {\"IdUser\":381,\"Read\":0,\"IdAlert\":4,\"Kind\":\"S\",\"Source\":\"0\",\"TaxID\":\"\\u0026DP0504056D9\",\"Name\":\"Nombre Empresa \\u0026DP0504056D9\",\"Active\":true},
          {\"IdUser\":381,\"Read\":0,\"IdAlert\":6,\"Kind\":\"S\",\"Source\":\"0\",\"TaxID\":\"\\u0026GP020128G89\",\"Name\":\"Nombre Empresa \\u0026GP020128G89\",\"Active\":true},
          {\"IdUser\":381,\"Read\":0,\"IdAlert\":8,\"Kind\":\"S\",\"Source\":\"0\",\"TaxID\":\"\\u0026IN051111Q96\",\"Name\":\"Nombre Empresa \\u0026IN051111Q96\",\"Active\":true}
        ]"
    }

A continuación se describen los atributos que vienen en Payload:

LinesCount y PagesCount solo se devuelven si el parámetro oper tuvo valor COUNT o BOTH.

Lines solo se devuelve si el parámetro oper tuvo valor LINES o BOTH.

PageSize indica la cantidad de registros por páginas que se tuvo en cuenta para el cálculo de PagesCount y también para el tamaño de Lines.

LinesCount indica la cantidad total de registros que cumplieron con los criterios de filtrado especificados.

PagesCount indica la cantidad total de páginas de tamaño PageSize para los registros que cumplieron con los criterios de filtrado especificados.

Lines DataTable con los metadatos de cada registro que cumplió con los criterios de filtrado especificados y que pertenece a la página especificada en el parámetro page de acuerdo con el criterio de ordenamiento especificado en el parámetro order.

A continuación, se explica el significado de la información que se devuelve en este DataTable.

IdUser identifica, de manera única, el usuario asociado a una alerta determinada. Este, en conjunto con IdAlert conforman el identificador que se utiliza para poder marcar como leída o no leída.

Read indica si la alerta ya ha sido marcada como leída o no por el usuario (0, 1); 0 para no leída, 1 para leída.

IdAlert identifica, de manera única, el registro asociado a una alerta. Este, en conjunto con IdUser conforman el identificador que se utiliza para poder marcar como leída o no leída.

Kind tipo de alerta (S, R); S para Emitidos (Sent), R para Recibidos (Received).

Source fuente de la alerta (0, 1); 0 para lista LN69, 1 para lista LN69B.

TaxID RFC de la lista negra del SAT (LN69 o LN69B) con el cual se tuvo operaciones; no confundir con el RFC cliente que realiza la solicitud.

Name Razón Social asociado al RFC de la lista negra del SAT (LN69 o LN69B) con el cual se tuvo operaciones; no confundir con el RFC cliente que realiza la solicitud.

Active indica si la alerta está asociado a un RFC que ya dejó de estar en la lista negra del SAT; no confundir con el RFC cliente que realiza la solicitud.

Imported indica si el cfdi que genera la alerta es uno importado o fue generado en la propia plataforma de MYSuite.


Si el parámetro responseFormat hubiera tenido valor XML, el valor devuelto en Payload para la misma solicitud previa hubiera sido este (aunque se muestra plano, y en varias líneas, recuerda siempre que el valor de Payload viene codificado Base64):
  1. <?xml version="1.0" encoding="utf-8"?>
    <ListRetrieverResult xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <PageSize>4</PageSize>
      <LinesCount>100</LinesCount>
      <PagesCount>25</PagesCount>
      <Lines>
        <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
          <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
            <xs:complexType>
              <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element name="Table1">
                  <xs:complexType>
                    <xs:sequence>
                      <xs:element name="IdUser" type="xs:unsignedInt" minOccurs="0" />
                      <xs:element name="Read" type="xs:long" minOccurs="0" />
                      <xs:element name="IdAlert" type="xs:int" minOccurs="0" />
                      <xs:element name="Kind" type="xs:string" minOccurs="0" />
                      <xs:element name="Source" type="xs:string" minOccurs="0" />
                      <xs:element name="TaxID" type="xs:string" minOccurs="0" />
                      <xs:element name="Name" type="xs:string" minOccurs="0" />
                      <xs:element name="Active" type="xs:boolean" minOccurs="0" />
                    </xs:sequence>
                  </xs:complexType>
                </xs:element>
              </xs:choice>
            </xs:complexType>
          </xs:element>
        </xs:schema>
        <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
          <NewDataSet>
            <Table1 diffgr:id="Table11" msdata:rowOrder="0">
              <IdUser>381</IdUser>
              <Read>0</Read>
              <IdAlert>2</IdAlert>
              <Kind>S</Kind>
              <Source>0</Source>
              <TaxID>&amp;CA060106UG6</TaxID>
              <Name>Nombre Empresa &amp;CA060106UG6</Name>
              <Active>true</Active>
            </Table1>
            <Table1 diffgr:id="Table12" msdata:rowOrder="1">
              <IdUser>381</IdUser>
              <Read>0</Read>
              <IdAlert>4</IdAlert>
              <Kind>S</Kind>
              <Source>0</Source>
              <TaxID>&amp;DP0504056D9</TaxID>
              <Name>Nombre Empresa &amp;DP0504056D9</Name>
              <Active>true</Active>
            </Table1>
            <Table1 diffgr:id="Table13" msdata:rowOrder="2">
              <IdUser>381</IdUser>
              <Read>0</Read>
              <IdAlert>6</IdAlert>
              <Kind>S</Kind>
              <Source>0</Source>
              <TaxID>&amp;GP020128G89</TaxID>
              <Name>Nombre Empresa &amp;GP020128G89</Name>
              <Active>true</Active>
            </Table1>
            <Table1 diffgr:id="Table14" msdata:rowOrder="3">
              <IdUser>381</IdUser>
              <Read>0</Read>
              <IdAlert>8</IdAlert>
              <Kind>S</Kind>
              <Source>0</Source>
              <TaxID>&amp;IN051111Q96</TaxID>
              <Name>Nombre Empresa &amp;IN051111Q96</Name>
              <Active>true</Active>
            </Table1>
          </NewDataSet>
        </diffgr:diffgram>
      </Lines>
    </ListRetrieverResult>

Noten que la información devuelto es la misma que antes; solo en un formato diferente.

A pesar de que existe un parámetro de entrada pageSize que indica la cantidad de registros por página que se desean recuperar la transacción devuelve la información PageSize; esto porque existe un máximo de 500 registros que se pueden devolver, si el valor indicado en el parámetro pageSize es mayor que 500, entonces este se fija en dicho valor, por eso la respuesta aclara con qué tamaño de página fue recuperada toda la información. Siempre que el parámetro pageSize sea menor o igual a 500, lo devuelto en PageSize tendrá el mismo valor.

No se permite recuperar alertas que pertenecen a un RFC diferente al que realiza la transacción; en otras palabras, todas las alertas devueltas en el DataTable Lines pertenecen al RFC que está invocando la transacción.

Si no se sabe usuario para el cual se solicitan las alertas (caso de autenticación con token de tipo FIEL o de integración por Requestor con usuario indicado inexistente o en formato incorrecto), se devolverán las alertas asociadas al RFC en cuestión (el que solicita la transacción), y todos los campos en el DataTable Lines asociados al usuario (IdUser y Read), tendrán valor NULL.

A continuación encontrará ejemplos adjuntos utilizando esta transacción que le servirán de guía para llevar su integración de manera eficiente.

    • Related Articles

    • Recuperación de Lista de Alertas por Listas Negras del SAT

      Esta transacción permite recuperar la lista (paginada y que cumplan criterios de filtrado establecidos, así como un ordenamiento indicado), con los metadatos asociados a Alertas por operaciones con empresas publicadas en las Listas Negras del SAT. La ...
    • Búsqueda de RFC en Listas Negras del SAT

      Esta transacción permite la búsqueda de un RFC particular en las Listas Negras del SAT. La respuesta es una, o dos listas (en dependencia del parámetro de búsqueda especificado), con el detalle de cada registro encontrado. OBTENER_INFO_LN_SAT_HTML El ...
    • Búsqueda de RFC en Listas Negras del SAT

      Esta transacción permite la búsqueda de un RFC particular en las Listas Negras del SAT. La respuesta es una, o dos listas (en dependencia del parámetro de búsqueda especificado), con el detalle de cada registro encontrado. OBTENER_INFO_LN_SAT Los ...
    • Cambio de Estado (Leída/No Leída), de Alerta en Listas Negras del SAT.

      Esta transacción permite cambiar el estado de Leída / No Leída a una alerta por operaciones con empresas publicadas en las Listas Negras del SAT. CAMBIAR_ESTADO_LEIDA_ALERTA_LN_HTML El valor suministrado en el parámetro jsonData es la serialización ...
    • Cambio de Estado (Leída/No Leída), de Alerta en Listas Negras del SAT.

      Esta transacción permite cambiar el estado de Leída / No Leída a una alerta por operaciones con empresas publicadas en las Listas Negras del SAT. CAMBIAR_ESTADO_LEIDA_ALERTA_LN El parámetro de la solicitud se especifica en Data1 (Data2 y Data3 ...