Función VirtualXML_CancelaCFDI2022
VirtualXML
Cancela un folio fiscal en los registros del SAT de acuerdo a las reglas de cancelación vigentes a partir del 1 de Enero de 2022.

Esta función genera una "petición" de cancelación al SAT unicamente, no realiza la cancelación en sí, para validar que una cancelación se realizó correctamente, esta función deberá ser llamada DOS VECES, una detras de otra, la primera  llamada genera la solicitud,  la segunda llamada, si devuelve un valor de UUID previamente cancelado (202), indica que el documento se ha cancelado con éxito.

Se sigue utilizando el buzón tributario para autorizar las cancelaciones, pero las reglas de este han cambiando, ahora el receptor solo tiene 24 horas para rechazar la cancelación y de no hacerlo dentro de este plazo, el CFDI se cancelará automáticamente.

La cancelación SIN AUTORIZACION se aplicará en los siguientes casos:

  • Cuando la cancelación se realice dentro del día hábil siguiente a su emisión independientemente del monto de la operación.
  • Cuando el CFDI ampare un monto total de hasta $1,000.00
  • Cuando sea un CFDI de Nomina, Egreso o Trasaldo
  • Cuando se haya emitido a través de la herramienta "Mis Cuentas" del SAT.
  • Cuando ampare retenciones e información de pagos.
  • Cuando sea expedido por la federación por concepto de derechos, productos y aprovechamientos.
  • Cuando se trate de un CFDI de ingresos, expedido a contribuyentes del Regimen de Incorporación Fiscal o del nuevo Regimen de Confianza.
  • Cuando el documento sea expedido al RFC de publico en general
  • Cuando el CFDI sea expedido al RFC para extranjeros
  • Cuando el CFDI ampare operaciones realizadas a través del adquirente de los bienes o sector primario
  • Cuando el CFDI haya sido emitido por un integrante del sistema financiero.
Si desea recuperar el Acuse de Cancelación de un CFDI, puede utilizar la función VirtualXML_RecuperaAcuseCancelacion()

Namespace: VirtualXML®
Aplicación: CFDI 3.3 y 4.0
Sintaxis

public static int VirtualXML_CancelaCFDI2022(
string szUsuario
string szRfcEmisor
string szMotivo
string szUuid
string szFolioSust
string szCert
string szKey
string szPwd
string szServer
string szResult
string szLog )

Parametros


szUsuario
Tipo: System  String
Nombre del usuario VirtualPAC
szRfcEmisor
Tipo: System  String
RFC del emisor del CFDI que queremos cancelar
szMotivo
Tipo: System  String
Clave del motivo de cancelación del comprobante, de acuerdo a los siguientes valores:
Valor
Descripción
01
Comprobante emitido con errores CON relación. Cuando se utilice esta clave, se deberá relacionar el folio fiscal (UUID) del comprobante que sustituye al comprobante que se está cancelando en el parametro szFolioSust
02
Comprobante emitido con errores SIN relacion. Esta clave se utiliza cuando se cancela un CFDI con errores, pero no se emite un nuevo CFDI que lo sustituya, es decir cuando se realiza una refacturación.
03
No se llevó a cabo la operación. Se utilizará cuando se emite un CFDI, por ejemplo, para enviarlo al cliente y tramitar el pago correspondiente ya que la operación será de contado, y posteriomente el receptor de la factura indica que no se autorizó el pago, motivo por el cual el emisor lo tiene que cancelar.
04
Operación nominativa relacionada en una factura global. Se utiliza cuando el cliente realiza una compra y no solicita un CFDI en primera instancia y el vendedor factura esta operación dentro de la factura global al publico en general, posteriormente el cliente solicita su CFDI y el emisor tiene que cancelar la factura global para eliminar la operacion del cliente que solicita una factura nominativa.

szUuid
Tipo: System  String
UUID del CFDI a cancelar

szFolioSust
Tipo: System  String
UUID del nuevo CFDI que sustituye al cancelado, cuando el motivo de cancelación tenga la clave 01.
szCert
Tipo: System  String
Nombre y ruta donde se encuentra el archivo .CER
szKey
Tipo: System  String
Nombre y ruta donde se encuentra el archivo .KEY
szPwd
Tipo: System  String
Password del archivo .KEY

szServer
Tipo: System  String
Indica el servidor donde se realiza la cancelación, el valor "demo" realiza la cancelacion en el area de pruebas, el valor "produccion" realiza la cancelación real del documento en los registros del SAT.
szResult
Tipo: System  String
Nombre y ruta de un archivo de salida donde obtendremos el resultado de la cancelación proveniente del SAT. Este archivo es muy importante ya que muestra detalles importantes cuando un CFDI no ha podido ser cancelado o bien cuando se ha solicitado la cancelación al emisor por medio del buzon fiscal. Si se especifica la extensión ".INI" en el nombre de este archivo se obtendrán los resultados en el formato de un archivo INI, si se especifica cualquier otra extensión o bien se omite la extensión la información se presentará como un texto normal.
szLog
Tipo: System  String
Nombre y ruta de un archivo de salida donde obtendremos la bitácora del proceso de cancelación, Su función es similar a la del archivo VirtualXML.LOG, es decir, proporcionar información sobre los pasos seguidos durante el proceso de cancelación y su uso será unicamente para reportar al equipo de desarrollo de VirtualXML posibles fallas en el proceso de cancelación.


Valor retornado:

Tipo: Int32

Retorna un valor númerico que nos indicará el resultado de la cancelación, es importante que además de obtener el número resultado del proceso de cancelación revisemos el archivo de resultados para mas información sobre el resultado de la cancelación. Los posibles valores de retorno son:

Valor
Descripción
201
Solicitud de cancelación recibida (exitoso)
202
UUID Previamente cancelado (exitoso)
203
UUID no encontrado o no corresponde al emisor (error)
204
UUID no aplicable para cancelación (error)
205
UUID no existe (error)
206
UUID no corresponde a un CFDI del sector primario (error)
301
XML Mal formado (error)
302
Sello mal formado o inválido (error)
303
Sello no corresponde al emisor (error)
304
Certificado revocado o caduco (error)
305
Certificado inválido (error)
310
Uso de certificado de E.Firma inválido (error)
311
Clave de motivo de cancelación no válida (error)
312
UUID no relacionado de acuerdo a la clave de motivo de cancelación (error)

    Ejemplo:

    private void GeneraDocto(String version)
    {
    // Solicitamos la cancelación

    int nResultado = VirtualXML_CancelaCFDI2022("usuarioVirtualPAC",;
    "EKU9003173C9",;
    "01", # motivo
    "42a1;
    "1163458D-37D3-4057-8B0C-E2285362EBD1",;
    "EKU9003173C9_20190617_131753.cer",;
    "EKU9003173C9_20190617_131753.key",;
    "12345678a",;
    "demo",;
    "CancelaCFDI2022.ini",;
    "CancelaCFDI2022.log");
    switch ( nResult )
    {
    case 201:
    // Se ha solicitado la cancelación via buzon fiscal
    MsgBox("Se ha solicitado la cancelación al receptor");
    break;
    case 202:
    // Se ha cancelado anteriormente el CFDI
    MsgBox("CFDI Cancelado anteriormente");
    break;
    case 203:
    // UUID no encontrado o no corresponde al emisor
    MsgBox("UUID no encontrado o no corresponde al emisor , revise el archivo Resultado.INI para mas inforamción");
    break;
    case 204:
    // UUID no aplicable para cancelación
    MsgBox("UUID no aplicable para cancelación");
    break;
    case 205:
    // UUID no existe
    MsgBox("UUID no existe");
    break;
    case 206:
    // UUID no corresponde a un CFDI del sector primario
    MsgBox("UUID no corresponde a un CFDI del sector primario");
    break;
    case 301:
    // XML Mal formado
    MsgBox("XML Mal formado");
    break;
    case 302:
    // Sello mal formado o inválido
    MsgBox("Sello mal formado o inválido");
    break;
    case 303:
    // Sello no corresponde al emisor
    MsgBox("Sello no corresponde al emisor");
    break;
    case 304:
    // Certificado revocado o caduco
    MsgBox("Certificado revocado o caduco");
    break;
    case 305:
    // Certificado inválido
    MsgBox("Certificado inválido");
    break;
    case 310:
    // Uso de certificado de E.Firma inválido
    MsgBox("Uso de certificado de E.Firma inválido");
    break;
    case 311:
    // Clave de motivo de cancelación no válida
    MsgBox("Clave de motivo de cancelación no válida");
    break;
    case 312:
    // UUID no relacionado de acuerdo a la clave de motivo de cancelación
    MsgBox("UUID no relacionado de acuerdo a la clave de motivo de cancelación");
    break; }
    }

    Veáse Tambien

    VirtualXML_RecuperaAcuseCancelacion()
                                     VirtualXML_GetStatusCFDI()