Cancela un folio fiscal de RETENCIONES E
INFORMACION DE PAGOS en los registros del SAT de acuerdo a las
reglas de cancelación para este tipo de comprobantes vigentes a
partir del 1 de Enero de 2022.
Esta función genera una "petición" de cancelación al SAT únicamente, 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.
La cancelación de los CFDI de retenciones se realiza SIN AUTORIZACION DEL RECEPTOR por lo que se puede obtener el acuse de cancelación inmediatamente después de realizar la petición de cancelación cancelar el documento.
Namespace: VirtualXML® Esta función genera una "petición" de cancelación al SAT únicamente, 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.
La cancelación de los CFDI de retenciones se realiza SIN AUTORIZACION DEL RECEPTOR por lo que se puede obtener el acuse de cancelación inmediatamente después de realizar la petición de cancelación cancelar el documento.
Aplicación: 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_CancelaRetencion2022("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