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:
Namespace: VirtualXML® 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.
Aplicación: CFDI 3.3 y 4.0
Sintaxis
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. |
- 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.
- 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",;
"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