Cancelación con motivo de cancelación para CFDI
Este servicio permite solicitar la cancelación de uno o varios CFDI al SAT. Recordando siempre que el que el SAT reciba la petición de cancelación no significa que se llevará a cabo la cancelación.
Contenido
- Características generales
- Requisitos para cancelar un CFDI
-
Integración
- Cancelación a través de Web Service
- Cancelación a través de archivo de texto plano
-
Web Service de Cancelación
- ¿Qué necesito?
- Ubicación del servicio.
- Método [
Cancelar
]: Cancelación desconectada - Solicitud Cancelar
- Respuesta Cancelar
- Método [
CancelarSolicitudFirmada
]: Cancelación con firma de origen - Solicitud Firma de origen
- Respuesta firma de origen
- Método [
GetFolioStatusDetail
]: Cancelación asíncrona - Solicitud GetFolioStatusDetail
- Respuesta GetFolioStatusDetail
- Método [
GetTransactionStatusDetail
]: Consulta de resultado por lote - Solicitud GetTransactionStatusDetail
- Respuesta GetTransactionStatusDetail
- Códigos de Respuesta de Cancelación del SAT
- Preguntas Frecuentes
Características generales
En el esquema de Comprobantes Fiscales Digitales por Internet (CFDI), el SAT resguarda en su base de datos centralizada todos los comprobantes certificados por los Proveedores Autorizado de Certificación para el padrón completo de contribuyentes. Por lo tanto, debido a este modelo centralizado, la cancelación de un CFDI consiste en solicitar directamente al SAT la cancelación del comprobante, mediante la Cancelación del CFDI.
La Cancelación de CFDI puede ser ejecutada por el contribuyente directamente en el portal de factura electrónica del SAT, o a través de un PAC como Sovos Reachcore. Con la reforma al Código Fiscal de la Federación (CFF) para 2017 se modificó el artículo 29-A, con el cual se habilita a los contribuyentes receptores del CFDI para que sean informados de la solicitud de cancelación y estén en posibilidad de aceptar o rechazar las solicitudes de cancelación.
Bajo este esquema las cancelaciones ya no pueden ser síncronas, es decir, cuando hay una solicitud de cancelación se debe llevar a cabo una consulta de estado del CFDI que se solicitó cancelar para poder saber si el receptor aceptó la cancelación o si el CFDI que se solicitó cancelar estuvo en uno de los supuestos para no solicitar al receptor la autorización de la cancelación. Los escenarios para este supuesto son:
- Cuando la cancelación se realice dentro de las 24 horas siguientes a su expedición
- Se trate de un CFDI de Egreso (sin relaciones)
- Se trate de un CFDI de Nómina (sin relaciones)
- Se trate de un CFDI de Traslado (sin relaciones)
- Se trate de un CFDI de Retenciones e Información de Pagos
- CFDI de residentes en el extranjero, para efectos fiscales conforme a la regla 2.7.1.26
- CFDI de Ingresos expedidos en operaciones con el público general, según la regla 2.7.1.24.
- CFDI de Ingresos expedidos a contribuyentes del RIF
- CFDI de Ingresos por un monto de hasta $1,000.00 MXN
Para que el SAT de trámite a una solicitud de cancelación, se debe de cumplir con lo siguiente:
- La solicitud de cancelación del UUID (folio fiscal), este firmada electrónicamente con el certificado de sello digital (CSD) del emisor.
- El UUID (folio fiscal) debe pertenecer al emisor del comprobante.
-
Se debe proporcionar el motivo por el que se lleva a cabo la cancelación.
- En caso de que se proporcione como motivo la clave 01 "Comprobante emitido con errores con relación", deberá relacionarse el folio fiscal del comprobante que sustituye al cancelado.
Información a tener en cuenta
- Este servicio envía la petición de cancelación a los sistemas del SAT. El resultado de la cancelación no depende de Sovos: depende del SAT.
- Se debe considerar que existen Comprobantes que no son cancelables según los criterios establecidos por el SAT. Si no se considera que un Comprobante puede tener el estado de "No Cancelable", y no se modifican las condiciones de un Comprobante: el resultado de "No Cancelable" siempre será el esperado. Se recomienda hacer uso del servicio de consulta de estado de un CFDI o usar el método de GetTransactionStatus que complementa al servicio de cancelación para conocer si un comprobante es Cancelable o no.
- Se recomienda espaciar las peticiones de cancelación y de consulta de estado de cancelación para dar oportunidad a que los sistemas del SAT puedan reflejar las cancelaciones. Nuestro servicio hace las consultas por 72 horas aunque la autoridad manifiesta que su proceso se lleva sólo 24 horas.
Cancelación desconectada (asíncrona)
En esta modalidad, el contribuyente solicita a Sovos Reachcore llevar a cabo el trámite de cancelación de hasta de 2,000 folios en una sola operación. El resultado de esta operación será un identificador de seguimiento con el que se podrá consultar en cualquier momento el progreso de la entrega de folios fiscales al SAT.
Requisitos para cancelar un CFDI
Para realizar la cancelación de un folio fiscal de un CFDI es necesario contar con lo siguiente:
- El folio fiscal (UUID)
- El RFC del Emisor del comprobante o comprobantes a cancelar. Estos datos pueden ser extraídos del CFDI, ya sea del documento XML o de la representación impresa PDF.
-
El Certificado de Sello Digital (CSD) vigente del RFC emisor del comprobante.
El CSD generalmente consta de tres partes:
- El Certificado, que es un archivo con extensión .cer
- La llave privada, que es un archivo con extensión .key
- y la contraseña de la llave privada.
Para obtener un certificado de sello digital (CSD) del SAT, consulta el sitio del SAT para generar una Solicitud para tu Certificado de Sello Digital para emitir facturas.
Integración
Existen dos medios de integración para hacer enviar las solicitudes de cancelación a Sovos Reachcore:
- Web Service de Cancelación
- Archivo de texto plano a través de SFTP
Aquí se explica lo relacionado con el Web Service. Si deseas realizar la cancelación por medio de archivo de texto plano, es necesario crear el archivo de texto plano conforme se indica en la siguiente liga: archivo de texto plano para cancelación indicando motivo de cancelación. El archivo puede enviarse vía SFTP o cargándolo en el portal de Sovos Reachcore.
Para obtener información adicional, por favor contáctenos o contacte a su ejecutivo de cuenta.
Web Service de Cancelación.
En este Web Service se podrán realizar las siguientes operaciones:
¿Qué necesito?
Para hacer uso del web service de cancelación se necesita:
- Contar con un contrato de servicios con Sovos Reachcore. En caso de no tener uno, por favor envía un correo a sales-mexico@sovos.com
- Haber generado un API Key en tu cuenta Sovos Reachcore, ya que es un identificador que te autentica en los Servicios Web de la plataforma. Para consultar como generar el API Key, consulta este artículo: Generar API Key para Web Services.
Ubicación del servicio.
Las URLs donde se encuentra la definición del Web Service (WSDL) para cada uno de los ambientes son:
Ambiente | Ubicación del WSDL |
---|---|
Pruebas | https://oat.reachcore.com/api/ws/6.0/pacservices/Cancelacion.svc/basic?singleWsdl |
Producción | https://go.reachcore.com/api/ws/6.0/pacservices/Cancelacion.svc/basic?singleWsdl |
Método [Cancelar
]: Cancelación desconectada
En este método del Web Service, se puede recibir una lista de hasta 2,000 folios fiscales a cancelar. Para poder utilizar este método, se requiere que el CSD este registrado en Sovos Reachcore para firmar la solicitud de cancelación. Este es un método de cancelación desconectada por lo que es requerida una segunda petición para saber el estado de la cancelación.
Solicitud Cancelar
Elemento | Uso | Descripción |
---|---|---|
ApiKey | Requerido | Identificador de autenticación, que se genera en el portal de Reachcore. |
RFC | Requerido | Indica la clave en el RFC del dueño de los folios fiscales y se relaciona con el CSD con el que se llevará a cabo la firma electrónica de la solicitud de cancelación. |
Folios | Requerido | Arreglo de CancelFolio:
|
Datos opcionales Total y RecipientRFC
Para conocer el estado de un CFDI en el SAT es necesario consultar y proporcionar el RFC Emisor, RFC Receptor, Total del Comprobante y el Folio Fiscal.
Para consultar el estado de un UUID que ha sido enviado a cancelar, se debe hacer la consulta de estado del CFDI ya sea por medio del servicio de consulta de estado de CFDI, o por medio de los métodos GetFolioStatusDetail
o GetTransactionStatusDetail
(proporcionando el id de seguimiento que se obtiene como respuesta éxitosa al momento de cancelar).
Reachcore tiene el detalle de los últimos 3 meses para comprobantes que ha certificado por lo que si un UUID es de un comprobante mayor a 3 meses: Reachcore ya no cuenta con la información para llevar a cabo la consulta de estado.
Reachcore tampoco tiene el detalle para consultar
Ejemplo de Solicitud de Cancelación
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cus="http://www.reachcore.com/CFDI/customHeaders" xmlns:urn="urn:reachcore.com:services:api:ws:pacservices:6.0">
<soapenv:Header>
<cus:ApiKey>7F3FA21M61.....19E42D72E3</cus:ApiKey>
</soapenv:Header>
<soapenv:Body>
<urn:CancelacionFiscalRequest>
<urn:RFC>AAA010101AAA</urn:RFC>
<urn:Folios>
<urn:CancelFolio>
<urn:UUID>d6855812-af48-4e8f-b30e-3dcb8bd0b40d</urn:UUID>
<urn:Reason>02</urn:Reason>
</urn:CancelFolio>
</urn:Folios>
</urn:CancelacionFiscalRequest>
</soapenv:Body>
</soapenv:Envelope>
Catálogo de motivos de cancelación
Clave | Descripción |
---|---|
01 | Comprobante emitido con errores con relación |
02 | Comprobante emitido con errores sin relación |
03 | No se llevó a cabo la operación |
04 | Operación nominativa relacionada en una factura global |
Ejemplo de Respuesta de Cancelación
Elemento | Descripción |
---|---|
Error | En caso que el elemento OnError tenga el valor true, se mostrara la descripción del error por medio de una estructura XML con los nodos Code y Message . Los errores son con respecto a la petición de cancelación y no tendrán que ver con el contenido de la petición. |
OnError | false : Transacción exitosa. true : Error al procesarse la transacción. |
TrackingId | Identificador de seguimiento de la operación. En caso de necesitar soporte se debe proporcionar este valor. |
Ejemplo de respuesta:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<CancelacionFiscalResponse xmlns="urn:reachcore.com:services:api:ws:pacservices:6.0">
<OnError>false</OnError>
<TrackingId>73cce105-aaa6-44ad-9d4e-01de09898b1c</TrackingId>
</CancelacionFiscalResponse>
</s:Body>
</s:Envelope>
Método [CancelarSolicitudFirmada
]: Cancelación con firma de origen
Este método se utiliza para solicitar la cancelación del(los) folios fiscales para CFDI; sin embargo, cuando no es posible registrar el CSD en Sovos Reachcore, el XML de la solicitud de cancelación firmado con el CSD del emisor es enviado en la solicitud de este método, conforme a lo definido por el SAT para la solicitud de cancelación. La respuesta de esta operación es idéntica a la del método Cancelar
.
Ejemplo de Solicitud de Cancelación con firma de Origen
Elemento | Uso | Descripción |
---|---|---|
ApiKey | Requerido | Identificador de autenticación, que se genera en el portal de Reachcore. |
SignedApplication | Requerido | XML con la solicitud de cancelación conforme lo especificado por el SAT en Anexo 20, indicando el o la lista de folios fiscales de los comprobantes a cancelar, el RFC del emisor, la hora de la operación y el motivo de cancelación. Este XML debe ser firmado electrónicamente con la llave privada del emisor. Para referencia del firmado consultar: ¿Cómo firmar una solicitud de cancelación con la llave privada del emisor? |
UUIDs | Opcional | Arreglo del objeto FoliosToQuery donde, si se usa el arreglo FoliosToQuery , se deben reportar los siguientes datos:
|
TransactionProperties | Opcional | Arreglo que indicará a Reachcore cómo procesar la petición. En este momento no hay Transaction Properties soportados para el método de cancelación con firma de origen. |
Ejemplo de Solicitud:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cus="http://www.reachcore.com/CFDI/customHeaders" xmlns:urn="urn:reachcore.com:services:api:ws:pacservices:6.0">
<soapenv:Header>
<cus:ApiKey>7F3FA21M61.....19E42D72E3</cus:ApiKey>
</soapenv:Header>
<soapenv:Body>
<urn:CancelarSolicitudFirmadaRequest>
<urn:SignedApplication><![CDATA[<Cancelacion Fecha="2022-01-06T20:00:00" RfcEmisor="EKU9003173C9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://cancelacfd.sat.gob.mx"><Folios><Folio UUID="7E57607A-AB62-4E34-90AF-D5FA73221BE1" Motivo="01" FolioSustitucion="48318D72-8AA0-4497-8081-0DA3D8B6BB9D" /></Folios><Folios><Folio UUID="F96052BF-1EF7-48FE-9836-0B2CBD6F7C0D" Motivo="03" /></Folios><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /><DigestValue>vBJlbXR9xVDB1TxZ77B6DLaRMDg=</DigestValue></Reference></SignedInfo><SignatureValue>hTiPnWZTWGW6Z4emZMvUkVpZ0VechiTvrAxuaSgpqKXlBiyTSN44e1O2uKUcEomlANwOQM5UcQVKuO80HaiiOyC/X5t4c3fefQrP086dD/q8TryV3cSQKP/iRvdEHi/wtL0u0ylhARud4kS1/bDn0q5If4NKox6KLM4O/M4ReMHTUErpVyzXHGMzO7kRONyf7vPDtG46ap+rhu6Ien8DxgZCOHFF7cXy0zTqsKHCMhOoWG95s0HnJ6OVPqOFiqvwIBviWKKtNInN6dH/h1hVYCH8jWoorbK89TSOQLoktkonxvrkl267Tq+wiIwHZnDo6srLTDjkWqbeL9WFjpcjRQ==</SignatureValue><KeyInfo><X509Data><X509IssuerSerial><X509IssuerName>OID.1.2.840.113549.1.9.2=responsable: ACDMA-SAT, OID.2.5.4.45=2.5.4.45, L=COYOACAN, S=CIUDAD DE MEXICO, C=MX, PostalCode=06370, STREET=3ra cerrada de cadiz, E=oscar.martinez@sat.gob.mx, OU=SAT-IES Authority, O=SERVICIO DE ADMINISTRACION TRIBUTARIA, CN=AC UAT</X509IssuerName><X509SerialNumber>292233162870206001759766198444326234574038512436</X509SerialNumber></X509IssuerSerial><X509Certificate>MIIFuzCCA6OgAwIBAgIUMzAwMDEwMDAwMDA0MDAwMDI0MzQwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWRpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMTkwNjE3MTk0NDE0WhcNMjMwNjE3MTk0NDE0WjCB4jEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gWElRQjg5MTExNlFFNDEeMBwGA1UEBRMVIC8gWElRQjg5MTExNk1HUk1aUjA1MR4wHAYDVQQLExVFc2N1ZWxhIEtlbXBlciBVcmdhdGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCN0peKpgfOL75iYRv1fqq+oVYsLPVUR/GibYmGKc9InHFy5lYF6OTYjnIIvmkOdRobbGlCUxORX/tLsl8Ya9gm6Yo7hHnODRBIDup3GISFzB/96R9K/MzYQOcscMIoBDARaycnLvy7FlMvO7/rlVnsSARxZRO8Kz8Zkksj2zpeYpjZIya/369+oGqQk1cTRkHo59JvJ4Tfbk/3iIyf4H/Ini9nBe9cYWo0MnKob7DDt/vsdi5tA8mMtA953LapNyCZIDCRQQlUGNgDqY9/8F5mUvVgkcczsIgGdvf9vMQPSf3jjCiKj7j6ucxl1+FwJWmbvgNmiaUR/0q4m2rm78lFAgMBAAGjHTAbMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgbAMA0GCSqGSIb3DQEBCwUAA4ICAQBcpj1TjT4jiinIujIdAlFzE6kRwYJCnDG08zSp4kSnShjxADGEXH2chehKMV0FY7c4njA5eDGdA/G2OCTPvF5rpeCZP5Dw504RZkYDl2suRz+wa1sNBVpbnBJEK0fQcN3IftBwsgNFdFhUtCyw3lus1SSJbPxjLHS6FcZZ51YSeIfcNXOAuTqdimusaXq15GrSrCOkM6n2jfj2sMJYM2HXaXJ6rGTEgYmhYdwxWtil6RfZB+fGQ/H9I9WLnl4KTZUS6C9+NLHh4FPDhSk19fpS2S/56aqgFoGAkXAYt9Fy5ECaPcULIfJ1DEbsXKyRdCv3JY89+0MNkOdaDnsemS2o5Gl08zI4iYtt3L40gAZ60NPh31kVLnYNsmvfNxYyKp+AeJtDHyW9w7ftM0Hoi+BuRmcAQSKFV3pk8j51la+jrRBrAUv8blbRcQ5BiZUwJzHFEKIwTsRGoRyEx96sNnB03n6GTwjIGz92SmLdNl95r9rkvp+2m4S6q1lPuXaFg7DGBrXWC8iyqeWE2iobdwIIuXPTMVqQb12m1dAkJVRO5NdHnP/MpqOvOgLqoZBNHGyBg4Gqm4sCJHCxA1c8Elfa2RQTCk0tAzllL4vOnI1GHkGJn65xokGsaU4B4D36xh7eWrfj4/pgWHmtoDAYa8wzSwo2GVCZOs+mtEgOQB91/g==</X509Certificate></X509Data></KeyInfo></Signature></Cancelacion>]]></urn:SignedApplication>
</urn:CancelarSolicitudFirmadaRequest>
</soapenv:Body>
</soapenv:Envelope>
Acerca de la sección opcional UUIDs
UUIDs
La sección de UUIDs servirá para permitir a Reachcore la consulta de estado de los folios fiscales que se enviaron a cancelar. Esta funcionalidad se incorporará próximamente en la plataforma y permitirá obtener detalle de los folios fiscales que se solicitó cancelar por medio del método de GetTransactionStatus
. Si se usa esta sección opcional, se espera que se proporcione detalle de los 3 atributos solicitados: UUID
para vincular la información del RFC Receptor
y del Total
con el folio fiscal que se solicitó cancelar. Si falta alguno de estos datos: no se podrá llevar a cabo la consula de estado.
Ejemplo de Respuesta de Cancelación con firma de origen
Elemento | Descripción |
---|---|
Error | En caso que el elemento OnError tenga el valor true, se mostrara la descripción del error por medio de una estructura XML con los nodos Code y Message |
OnError | false : Transacción exitosa. true : Error al procesarse la transacción. |
TrackingId | En caso que el elemento OnError tenga el valor false, se mostrara un identificador de seguimiento de la operación. |
Ejemplo de Respuesta:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<CancelarSolicituFirmadaResponse xmlns="urn:reachcore.com:services:api:ws:pacservices:6.0">
<OnError>false</OnError>
<TrackingId>68818c13-ac25-4367-8713-5e6ac7fe8234</TrackingId>
</CancelarSolicituFirmadaResponse>
</s:Body>
</s:Envelope>
Método [GetFolioStatusDetail
]: Obtener el estado de un Folio Fiscal que fue enviado previamente a cancelar
En este método, se podrá conocer el estado de un Comprobante previamente certificado por Reachcore y que haya tenido una solicitud de cancelación ya sea por el Servicio Web o por archivo de integración.
Limitantes
La consulta de estado de CFDI hacia el SAT requiere de conocer: UUID
, RFC Emisor
, RFC Receptor
, y Total
. Cuando Reachcore ha certificado el Comprobante: conoce estos datos, pero sólo conserva el detalle de los últimos 6 meses de lo certificado por plataforma estándar. Para conocer más detalles acerca de las diferencias entre plataforma estándar y no estándar comuniquese con su ejecutivo de cuenta o bien, envíe un correo a MEX-soporte@sovos.com
Ejemplo de Solicitud de Estado de un Folio Fiscal
Elemento | Uso | Descripción |
---|---|---|
ApiKey | Requerido | Identificador de autenticación, que se genera en el portal de Sovos Reachcore. |
UUID | Requerido | Folio fiscal del comprobante a consultar. |
Formato de UUID
Cada folio fiscal debe tener el formato de UUID válido, descrito por la siguiente expresión regular:[a-f0-9A-F]{8}-[a-f0-9A-F]{4}-[a-f0-9A-F]{4}-[a-f0-9A-F]{4}-[a-f0-9A-F]{12}
Ejemplo:F9123206-D86C-49EE-80F3-C288CC948631
Ejemplo de Solicitud:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cus="http://www.reachcore.com/CFDI/customHeaders" xmlns:urn="urn:reachcore.com:services:api:ws:pacservices:6.0">
<soapenv:Header>
<cus:ApiKey>51e9d1097f634f20b....9e405d933f769303391008</cus:ApiKey>
</soapenv:Header>
<soapenv:Body>
<urn:FolioStatusRequest>
<urn:UUID>3895094A-5681-4363-8C4A-BE15A17200AA</urn:UUID>
</urn:FolioStatusRequest>
</soapenv:Body>
</soapenv:Envelope>
Ejemplo de Respuesta a Solicitud de Estado de un Folio Fiscal
Elemento | Descripción |
---|---|
OnError (requerido) |
false : Transacción exitosa. true : Error al procesarse la transacción. |
Error (condicional) |
En caso que el elemento Error tenga el valor true, se mostrara la descripción del error. |
SatSentRequest (requerido) |
false : El folio fiscal aún no se envía al SAT para solicitar la cancelación. true : El folio fiscal ha sido enviado al SAT para solicitar su cancelación. |
UUID (requerido) |
El Folio Fiscal del que se entrega detalle |
UUIDStatus (opcional) |
Estructura donde se proporciona una lista con:
|
RelatedUUIDs (opcional) |
Estructura FolioFiscalDetail , donde se da el detalle recursivo para informar
|
Ejemplo de Respuesta:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<FolioStatusResponse xmlns="urn:reachcore.com:services:api:ws:pacservices:6.0">
<OnError>false</OnError>
<SatSentRequest>true</SatSentRequest>
<ResultCode>202</ResultCode>
<ResultMessage>Petición de cancelación recibida anteriormente.</ResultMessage>
<UUID>3895094A-5681-4363-8C4A-BE15A17200AA</UUID>
<UUIDStatus>
<StatusCode>S - Comprobante obtenido satisfactoriamente.</StatusCode>
<IsCancellable>Cancelable con aceptación</IsCancellable>
<State>Cancelado</State>
<QueryDate>2021-12-27T18:00:00</QueryDate>
</UUIDStatus>
<RelatedUUIDs/>
</FolioStatusResponse>
</s:Body>
</s:Envelope>
Limitantes
Si Reachcore no certificó el Comprobante o ya han pasado más de 6 meses desde su certificación: no se cuenta con elementos para hacer la consulta de estado del CFDI. Para este escenario, la respuesta se verá de la siguiente forma
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<FolioStatusResponse xmlns="urn:reachcore.com:services:api:ws:pacservices:6.0">
<OnError>false</OnError>
<Error>
<Code/>
</Error>
<SatSentRequest>true</SatSentRequest>
<ResultCode>201</ResultCode>
<ResultMessage>Petición de cancelación recibida</ResultMessage>
<UUID>74e4b36d-e4b5-4ee2-9e5b-64c5362dd56e</UUID>
<UUIDStatus>
<State>SIN ELEMENTOS PARA LLEVAR A CABO LA CONSULTA EN EL SAT</State>
<QueryDate>0001-01-01T00:00:00</QueryDate>
</UUIDStatus>
<RelatedUUIDs/>
</FolioStatusResponse>
</s:Body>
</s:Envelope>
Método [GetTransactionStatusDetail
]: Consulta de resultado por lote
En este método, se podrá conocer el estado del lote con la solicitud realizada cancelación, ya sea por el Web Service o por archivo de integración.
Limitantes
La consulta de estado de CFDI hacia el SAT requiere de conocer: UUID
, RFC Emisor
, RFC Receptor
, y Total
. Cuando Reachcore ha certificado el Comprobante: conoce estos datos, pero sólo conserva el detalle de los últimos 6 meses de lo certificado por plataforma estándar. Para conocer más detalles acerca de las diferencias entre plataforma estándar y no estándar comuniquese con su ejecutivo de cuenta o bien, envíe un correo a MEX-soporte@sovos.com
Ejemplo de Solicitud de Estado de un lote de cancelación
Elemento | Uso | Descripción |
---|---|---|
ApiKey | Requerido | Identificador de autenticación, que se genera en el portal de Reachcore. |
TrackingId | Requerido | Identificador de seguimiento de la transacción, el cual es devuelto por una llamada previa a la operación Cancelar o el que se obtiene como respuesta del archivo de texto plano. |
Ejemplo de Solicitud:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cus="http://www.reachcore.com/CFDI/customHeaders" xmlns:urn="urn:reachcore.com:services:api:ws:pacservices:6.0">
<soapenv:Header>
<cus:ApiKey>51e9d1097f634f20b.......406d9e405d933f769303391008</cus:ApiKey>
</soapenv:Header>
<soapenv:Body>
<urn:TransactionStatusRequest>
<urn:TrackingId>e6123fb8-723b-4d9a-8ff0-e4a69803e380</urn:TrackingId>
</urn:TransactionStatusRequest>
</soapenv:Body>
</soapenv:Envelope>
Ejemplo de Respuesta a Solicitud de Estado de lote de cancelación
Elemento | Descripción |
---|---|
OnError | false : Transacción exitosa.true : Error al procesarse la transacción. |
ErrorMessage | En caso que el elemento OnError tenga el valor true, se mostrara la descripción del error por medio de una estructura XML con los nodos Code y Message . |
TotalUUIDs | Total de Folios fiscales que contenía el lote |
UUIDsSentToSAT | Total de Folios fiscales distintos que tienen un acuse de recibido por parte del SAT. |
UUIDsRejectedSAT | Total de Folios fiscales del lote de cancelación que no tienen un acuse de recibido por parte del SAT. |
Finished |
|
UUIDs | Arreglo del objeto FolioFiscalDetail , el cual está conformado por:
|
Una lote queda en estado finalizado cuando cada uno de los comprobantes que se solicitaron cancelar se encuentra en alguno de los siguientes estados:
- Cancelado exitosamente.
- No pudo ser cancelado ante el SAT con un motivo de rechazo definitivo. Las razones de rechazo definitivas son las que se listan como no reintentables en la sección de Códigos de Respuesta del SAT para Cancelación.
Ejemplo de Respuesta
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<TransactionStatusResponse xmlns="urn:reachcore.com:services:api:ws:pacservices:6.0">
<OnError>false</OnError>
<TotalUUIDs>5</TotalUUIDs>
<UUIDsSentToSAT>5</UUIDsSentToSAT>
<UUIDsRejectedSAT>0</UUIDsRejectedSAT>
<Finished>true</Finished>
<UUIDs>
<FolioFiscalDetail>
<UUID>17ed0948-a4ae-4ebd-b581-522bbc800e73</UUID>
<RequestSentToSAT>true</RequestSentToSAT>
<ResultCode>202</ResultCode>
<ResultMessage>Petición de cancelación recibida anteriormente.</ResultMessage>
<UUIDStatus>
<StatusCode>S - Comprobante obtenido satisfactoriamente.</StatusCode>
<IsCancellable>Cancelable sin aceptación</IsCancellable>
<State>Cancelado</State>
<CancellationStatus>Cancelado sin aceptación</CancellationStatus>
<QueryDate>2022-01-31T19:29:27.367</QueryDate>
</UUIDStatus>
</FolioFiscalDetail>
<FolioFiscalDetail>
<UUID>19d18962-e614-4c7a-8a7c-80bd9e0d2af6</UUID>
<RequestSentToSAT>true</RequestSentToSAT>
<ResultCode>202</ResultCode>
<ResultMessage>Petición de cancelación recibida anteriormente.</ResultMessage>
<UUIDStatus>
<StatusCode>S - Comprobante obtenido satisfactoriamente.</StatusCode>
<IsCancellable>Cancelable sin aceptación</IsCancellable>
<State>Cancelado</State>
<CancellationStatus>Cancelado sin aceptación</CancellationStatus>
<QueryDate>2022-01-31T19:29:26.817</QueryDate>
</UUIDStatus>
</FolioFiscalDetail>
<FolioFiscalDetail>
<UUID>1b640b2d-e218-4230-b309-e25d1c2404c0</UUID>
<RequestSentToSAT>true</RequestSentToSAT>
<ResultCode>202</ResultCode>
<ResultMessage>Petición de cancelación recibida anteriormente.</ResultMessage>
<UUIDStatus>
<StatusCode>S - Comprobante obtenido satisfactoriamente.</StatusCode>
<IsCancellable>Cancelable sin aceptación</IsCancellable>
<State>Cancelado</State>
<CancellationStatus>Cancelado sin aceptación</CancellationStatus>
<QueryDate>2022-01-31T19:29:27.083</QueryDate>
</UUIDStatus>
</FolioFiscalDetail>
<FolioFiscalDetail>
<UUID>1ca30c9c-3a38-47bc-b399-ebd4596516a1</UUID>
<RequestSentToSAT>true</RequestSentToSAT>
<ResultCode>201</ResultCode>
<ResultMessage>Petición de cancelación recibida</ResultMessage>
<UUIDStatus>
<StatusCode>S - Comprobante obtenido satisfactoriamente.</StatusCode>
<IsCancellable>Cancelable sin aceptación</IsCancellable>
<State>Cancelado</State>
<CancellationStatus>Cancelado sin aceptación</CancellationStatus>
<QueryDate>2022-01-31T19:29:26.223</QueryDate>
</UUIDStatus>
</FolioFiscalDetail>
<FolioFiscalDetail>
<UUID>1f82ee83-3860-4e35-81e5-6a24401cb693</UUID>
<RequestSentToSAT>true</RequestSentToSAT>
<ResultCode>201</ResultCode>
<ResultMessage>Petición de cancelación recibida</ResultMessage>
<UUIDStatus>
<StatusCode>S - Comprobante obtenido satisfactoriamente.</StatusCode>
<IsCancellable>Cancelable sin aceptación</IsCancellable>
<State>Cancelado</State>
<CancellationStatus>Cancelado sin aceptación</CancellationStatus>
<QueryDate>2022-01-31T19:29:28.197</QueryDate>
</UUIDStatus>
</FolioFiscalDetail>
</UUIDs>
</TransactionStatusResponse>
</s:Body>
</s:Envelope>
El proceso de cancelación tiene dos fases: Enviar la petición de cancelación al SAT y si se tiene la información para hacer la consulta de estado: Realizar la consulta de estado en el SAT. El elemento Finished
con valor true
indica que el servicio de cancelación ha terminado el proceso de enviar la petición de cancelación y los intentos de obtener el estado en el SAT de los Comprobantes en el lote. Mientras se está en el proceso de cancelación, una consulta de estado al lote de cancelación se verá de la siguiente forma:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<TransactionStatusResponse xmlns="urn:reachcore.com:services:api:ws:pacservices:6.0">
<OnError>false</OnError>
<TotalUUIDs>1</TotalUUIDs>
<UUIDsSentToSAT>0</UUIDsSentToSAT>
<UUIDsRejectedSAT>1</UUIDsRejectedSAT>
<Finished>false</Finished>
<UUIDs>
<FolioFiscalDetail>
<UUID>0952bfa9-ae90-4c01-a7a9-ba19698cfcd8</UUID>
<RequestSentToSAT>true</RequestSentToSAT>
<ResultCode>201</ResultCode>
<ResultMessage>Petición de cancelación recibida</ResultMessage>
<UUIDStatus>
<State>EN PROCESO DE CONSULTA DE ESTADO EN EL SAT</State>
<CancellationStatus>DESCONOCIDO</CancellationStatus>
<QueryDate>0001-01-01T00:00:00</QueryDate>
</UUIDStatus>
</FolioFiscalDetail>
</UUIDs>
</TransactionStatusResponse>
</s:Body>
</s:Envelope>
Si Sovos Reachcore no tiene los elementos para hacer la consulta de estado, la respuesta se verá de la siguiente forma:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<TransactionStatusResponse xmlns="urn:reachcore.com:services:api:ws:pacservices:6.0">
<OnError>false</OnError>
<TotalUUIDs>1</TotalUUIDs>
<UUIDsSentToSAT>0</UUIDsSentToSAT>
<UUIDsRejectedSAT>1</UUIDsRejectedSAT>
<Finished>false</Finished>
<UUIDs>
<FolioFiscalDetail>
<UUID>054d6de1-5b86-42db-a475-c748f3bbba38</UUID>
<RequestSentToSAT>true</RequestSentToSAT>
<ResultCode>201</ResultCode>
<ResultMessage>Petición de cancelación recibida</ResultMessage>
<UUIDStatus>
<State>SIN ELEMENTOS PARA LLEVAR A CABO LA CONSULTA EN EL SAT</State>
<QueryDate>0001-01-01T00:00:00</QueryDate>
</UUIDStatus>
</FolioFiscalDetail>
</UUIDs>
</TransactionStatusResponse>
</s:Body>
</s:Envelope>
Códigos de Respuesta de Cancelación del SAT
Para cada solicitud de cancelación de un comprobante, el SAT la autoriza o rechaza especificando un código de estatus. En la siguiente tabla se describen los códigos de status conocidos y sus significados.
Código | Descripción | Significado | ¿Reintentable? | ¿Qué hacer? |
---|---|---|---|---|
201 | Solicitud de cancelación recibida | Se ha recibido la petición de cancelación. No necesariamente significa que el Comprobante se ha cancelado. | No | Consultar el estado del Comprobante en el SAT. Si el Comprobante pudo ser cancelado, su estado cambiará a Cancelado . |
202 | Solicitud de cancelación recibida anteriormente | Se ha recibido la petición de cancelación anteriormente. No necesariamente significa que el Comprobante se ha cancelado. | No | Consultar el estado del Comprobante en el SAT. Si el Comprobante pudo ser cancelado, su estado cambió a Cancelado . |
203 | UUID No encontrado o no corresponde a emisor | El Folio Fiscal que se solicitó cancelar no se ha podido encontrar, o se encontró pero no fue emitido por el RFC especificado. | No | Indicar el RFC Emisor correcto para ese comprobante y hacer una nueva solicitud. |
204 | UUID No aplicable para cancelación | El Folio Fiscal no se puede cancelar. El SAT no especifica bajo que criterios puede ocurrir este código, pero no es frecuente. | No | Consultar directamente en el SAT en Asistencia al Contribuyente el motivo por el que no se autoriza la cancelación del comprobante. Sovos Reachcore no puede hacer nada al respecto. |
205 | UUID No existente | El SAT todavía no publica en su portal de internet el comprobante, y por lo tanto aún no puede ser cancelado. | Si | Asegurar que el comprobante ya está entregado al SAT y re-intentar la cancelación. |
207 | No se especificó el motivo de cancelación o el motivo no es valido | Ocure cuando se utiliza el motivo 01 (Comprobantes emitidos con errores con relación), y el Folio Sustitución no cumple con la estructura establecida o bien, se esta indicando el mismo folio del CFDI a cancelar. |
No | Revisar el formato del UUID que se envía en el Folio Sustitución y verificar que el UUID esté en mayúsculas y que sea distinto al del UUID que se intenta cancelar. |
208 | La fecha de solicitud de cancelación es mayor a la fecha de declaración del comprobante | La fecha de emisión del folio fiscal excede la fecha de cancelación permitida para el periodo de declaración anual del ejercicio al que pertenece el comprobante. | No | En la RMF para 2022, que entró en vigor el 01 de enero de 2022, se establece el plazo para la cancelación de CFDI por medio de la regla 2.7.1.47., y en ésta se establece que la cancelación de los CFDI se podrá efectuar a más tardar en el mes en el cual se deba presentar la declaración anual del ISR correspondiente al ejercicio fiscal en el cual se expidió el citado comprobante. |
209 | Folio Sustitución no requerido | La petición de cancelación envió un motivo de cancelación que no requiere de un Folio de Sustitución. | No | Modificar la petición de cancelación para no especificar el folio de sustitución. |
211 | La fecha de solicitud de cancelación límite para factura global | La factura global que se intenta cancelar está en la fecha límite para su cancelación. | No | |
212 | Relación no valida o inexistente | La petición de cancelación no tiene una relación o bien: la relación que se especificó no es valida. | No | Revisar la petición de cancelación y volver a intentar. |
301 | XML mal formado | El XML de solicitud que se envió al SAT no está correctamente formado. Sólo relevante para el método de cancelación en línea con solicitud firmada de origen. | No | Verificar que la solicitud de cancelación fue creada de acuerdo a la especificación del SAT. |
302 | Sello mal formado o inválido | El Sello que se usó para generar la solicitud de cancelación es incorrecto. | No | Verificar la solicitud de cancelación con firma de origen que fue entregada a Reachcore. |
303 | Sello no corresponde a emisor | El certificado de sello digital (CSD) con el que se firmó la solicitud no corresponde al RFC del Emisor del CFDI. | No | Verificar que el certificado de sello digital corresponde al RFC Emisor del comprobante. |
304 | Sello revocado o caduco | El certificado de sello digital con el que se firmó la solicitud de cancelación ha sido revocado o no esta vigente. | No | Solicitar al SAT un nuevo certificado de sello digital y volver a solicitar la cancelación con este nuevo certificado. |
305 | Certificado inválido | No se está usando para firmar la solicitud de cancelación un certificado expedido por el SAT | No | Verificar que el certificado de sello digital este expedido por el SAT para el RFC emisor del comprobante y volver a solicitar la cancelación con dicho certificado. |
310 | Uso de certificado e.firma inválido | Se está usando un certificado de e.firma en vez de un Certificado de Sello Digital (CSD) | No | Firmar nuevamente la petición de cancelación que se entrega a reachcore por el método de firma de origen con un CSD. |
311 | Clave de motivo de cancelación no válida | La clave proporcionada en el atributo MotivoCancelacion no es valida de acuerdo a los valores permitidos. |
No | Revisar que la clave que se proporcionó esté entre los valores 01 , 02 , 03 , o 04 . |
312 | UUID no relacionado de acuerdo a la clave de motivo de cancelación | El UUID que se proporcionó como Folio que Sustituye no está relacionado al UUID que se solicitó cancelar. | No | Revisar la relación que hay entre el CFDI que sustituye y el que se está solicitando cancelar. |
Para mayor información o aclaración de dudas relacionadas con esta guía de implementación con el servicio de Cancelación, por favor envía un correo a MEX-soporte@sovos.com. También puedes consultar las preguntas frecuentes de cancelación en la siguiente liga: Preguntas frecuentes cancelación
Preguntas Frecuentes
1. ¿Qué hacer si mi RFC tiene caracteres especiales como el &
?
A diferencia del servicio de emisión, en donde el XML se encapsula con un ensobretado CDATA, el RFC en este método viaja sin este ensobretado, por lo que se deben usar secuencias de escape cuando en los valores especificados dentro del nodo RFC exista algún caso especial.
En el caso del caracter &
se debe usar la secuencia & de manera que si el RFC es &&&010101000
, se tendría que enviar como &&&010101000
2. Presento inconsistencias en el servicio de cancelación de CFDI al utilizar el motivo de cancelación "01"
En algunas ocasiones la autoridad presenta inconsistencias en las cancelaciones que usan el motivo de cancelación 01
(Comprobantes emitidos con errores con relación) en donde peticiones de cancelación se procesas conforme a lo definido y en ocasiones no. Al respecto la autoridad nos comparte lo siguiente:
- Se deberán cancelar los CFDI que se encuentren relacionados al comprobante que se desea cancelar, incluyendo el CFDI que los sustituye, utilizando el motivo de cancelación
02
(Comprobantes emitidos con errores sin relación). - Posteriormente, se realizará la solicitud de cancelación del CFDI referido, registrando la clave
02
(Comprobantes emitidos con errores sin relación). - Una vez cancelados los comprobantes señalados en los pasos 1 y 2, emite un nuevo comprobante con la información correcta y la clave de tipo relación
04
sustitución de CFDI previos relacionando el folio fiscal del comprobante que se sustituye.
Preguntas frecuentes y escenarios de cancelación conforme a la Reforma Fiscal 2022
El siguiente es un extracto de las preguntas y respuestas que están publicados en el PDF denominado "Preguntas frecuentes y escenarios de cancelación conforme a la Reforma Fiscal 2022" publicado en el portal del SAT por medio de la página Actualización factura electrónica – Reforma Fiscal 2022 por medio de la sección de Contenidos Relacionados Publicado en diciembre de 2021.
1.- Si emití una factura o CFDI con la versión 3.3, al solicitar la cancelación ¿es necesario indicar el motivo de cancelación o solo aplica para la versión 4.0?
A partir del 1 de enero de 2022 será requerido señalar el motivo por el cual se cancela el comprobante, esto aplica a todas las versiones de la factura o CFDI.
Fundamento legal: Artículo 29-A sexto párrafo del Código Fiscal de la Federación.
2.- ¿En qué casos se deberá seleccionar como motivo de cancelación la opción "01" Comprobante emitido con errores con relación?
Este supuesto aplica cuando la factura generada contiene un error en la clave del producto, valor unitario, descuento o cualquier otro dato, por lo que se debe reexpedir. En este caso, primero se sustituye la factura y cuando se solicita la cancelación, se incorpora el folio de la factura que sustituye a la cancelada.
3.- ¿En qué casos se deberá seleccionar como motivo de cancelación la opción "02" Comprobante emitido con errores sin relación?
Este supuesto aplica cuando la factura generada contiene un error en la clave del producto, valor unitario, descuento o cualquier otro dato y no se requiera relacionar con otra factura generada.
4.- ¿En qué casos se deberá seleccionar como motivo de cancelación la opción "03" No se llevó a cabo la operación?
Este supuesto aplica cuando se facturó una operación que no se concreta.
5.- ¿En qué casos se deberá seleccionar como motivo de cancelación la opción "04" Operación nominativa relacionada en la factura global?
Este supuesto aplica cuando se incluye una venta en la factura global de operaciones con el público en general y posterior a ello, el cliente solicita su factura nominativa, lo que conlleva a cancelar la factura global y reexpedirla, así como generar la factura nominativa al cliente.
6.- Emití una factura, pero mi cliente me pide cancelarla por errores en la descripción, ¿cómo debo realizar la cancelación de dicho comprobante?
Al momento de realizar la solicitud de cancelación, sigue estos pasos:
- Deberás emitir el comprobante que contiene los datos correctos y registrar la clave "04" (Sustitución de los CFDI previos) relacionando el folio fiscal del comprobante que se sustituye.
- Podrás realizar la solicitud de cancelación ingresando a sat.gob.mx, en el servicio Cancela y recupera tus facturas, o bien, a través de los servicios de un PAC (Proveedor de Certificación Autorizado).
- Al registrar la solicitud de cancelación deberás seleccionar la opción "01" Comprobante emitido con errores con relación e incluir el folio fiscal del comprobante emitido en el paso 1.
- Al enviar tu solicitud de cancelación se validará si se requiere la aceptación del receptor para llevar a cabo la cancelación.
Fundamento legal: Artículo 29-A sexto párrafo del Código Fiscal de la Federación
7.- En caso de que se haya emitido una factura de una venta o de la prestación de un servicio el cual no se llevó a cabo, ¿qué motivo de cancelación se deberá señalar en la solicitud de cancelación correspondiente?
El emisor de la factura deberá registrar la clave "03" No se llevó a cabo la operación en el apartado Motivo de cancelación.
Fundamento legal: Artículo 29-A sexto párrafo del Código Fiscal de la Federación
8.- Emití una factura con error en el RFC de mi cliente, la cual aún no ha sido entregada al mismo, ¿para cancelarla tendré que relacionarla primero a la factura que la sustituye?
Se podrá realizar la solicitud de cancelación registrando en el apartado motivo de cancelación, la clave "02" (Comprobante emitido con errores sin relación).
Posteriormente se deberá emitir el comprobante fiscal con los datos correctos y registrar la clave "04" (Sustitución de las facturas o CFDI previos) relacionando el folio fiscal del comprobante que se sustituye.
Fundamento legal: Artículo 29-A sexto párrafo del Código Fiscal de la Federación
9.- Mi cliente me solicita la factura de un producto que se encuentra relacionado en la factura global emitida por las operaciones con el público en general del periodo mensual, ¿qué debo hacer para emitir el comprobante solicitado?
El emisor deberá solicitar la cancelación de la factura global y registrar como motivo de cancelación la clave "04" (Operación nominativa relacionada en la
factura global).
Posteriormente se deberá emitir el comprobante fiscal global sin considerar el comprobante de operaciones con el público en general de la operación que se factura de manera nominativa.
Por último, se deberá generar la factura nominativa solicitada por el cliente.
Regresar