Buscar en este blog

lunes, 13 de agosto de 2018

(VirtualXML) Mas sobre el tema de las cancelaciones (Actualizado al dia 15 de Agosto 2018)

Estamos a unos días en que entren en vigencia los nuevos cambios en el esquema de cancelaciones del SAT, por lo que considero importante hacer un resumen de todo lo que sabemos hasta ahora para que puedan empezar a tomar medidas al respecto y comenzar a indicarles el funcionamiento de las nuevas funciones de cancelación de VitualXML.

Quiero agradecer a nuestro PAC principal DFacturE, por la información y las gráficas que nos ha facilitado para escribir este artículo.

Antes de empezar, revisemos como estamos realizando el proceso de cancelación actualmente, y lo hacemos según el siguiente diagrama:


Bajo el esquema actual un CFDI solo puede tener 2 estados: CANCELADO y VIGENTE; si un CFDI esta VIGENTE luego entonces es CANCELABLE y podemos proceder con una CANCELACION DIRECTA.

Sin embargo, el nuevo esquema de cancelación es un poco mas complejo como veremos mas adelante, pero antes de continuar, debemos saber CUANDO SI se pueden cancelar facturas sin necesidad de "autorización" por parte del receptor, sin importar el monto que ampare dicho comprobante.

Estos son los casos en los que se pueden cancelar los CFDI sin necesidad de una autorización por parte del receptor, ni del proceso de cancelación a través del Buzón Tributario:
  • Comprobantes de cualquier tipo (I, E, N, P, T) y cualquier monto y que no hayan pasado mas de 72 horas desde su emisión.
  • Comprobantes de Nomina, Egreso, Traslado, Pago y Retención, sin limite de monto ni tiempo.
  • El comprobante emitido para contribuyente del Sector Primario.
  • El comprobante emitido para contribuyente del Regimen de Incorporación Fiscal (RIF). 
  • El comprobante fue emitido por un integrante del Sistema Financiero (bancos)
  • El comprobante de Ingreso con importe menor a $5,000.00 ANTES DE IMPUESTOS 
  • El comprobante de Ingreso emitido a través del portal "Mis Cuentas" de la página del SAT.
  • El comprobante de Ingreso emitido al publico en general (Rfc generico: XAXX010101000)
  • El comprobante de ingreso emitido al un cliente extranjero (Rfc genérico extranjero: XEXX010101000)
 Aquí tenemos que considerar que si no han pasado 72 horas desde la emisión del documento, yo lo puedo cancelar con la misma función con la que los he venido cancelado hasta el día de hoy (VirtualXML_CancelaUUID()).

Si el CFDI no se encuentra en los supuestos anteriores, o bien ya pasaron mas de 72 horas desde su emisión, para cancelarlos será necesario tomar en cuenta el nuevo esquema de cancelaciones, que gráficamente se presenta así:




Similarmente a como estabamos acostumbrados, el CFDI puede tener 2 estados: CANCELADO y VIGENTE, en el caso de los CFDIs vigentes, en el nuevo esquema de cancelaciones, estos pueden presentar 2 estados: CANCELABLE y NO CANCELABLE.

Para poder considerar un documento como CANCELABLE, este deberá ser de Ingreso, estar vigente, Y NO TENER DOCUMENTOS RELACIONADOS, esto último es muy importante, ya que si existen documentos relacionados al documento que se desea cancelar, el CFDI será NO CANCELABLE, para convertirlo en un CFDI CANCELABLE será necesario cancelar primero los documentos relacionados y posteriormente cancelar el documento original, SE VALIDARA LA EXISTENCIA DE DOCUMENTOS RELACIONADOS AL MOMENTO DE INTENTAR CANCELAR.

Si un documento es CANCELABLE, puede presentar 3 estados:

NO REQUIERE ACEPTACION, en este caso podemos proceder a cancelarlo directamente como lo habíamos venido haciendo hasta el dia de hoy, es decir mediante la función VirtualXML_CancelaUUID().

Un CFDI CON ACEPTACION requerirá realizar una solicitud de cancelación del mismo por 2 vías:

  1. Buzón tributario del contribuyente en el portal del SAT
  2. A través de los servicios de un PAC.
A pesar de que nuestros 3 PACs ya se encuentran autorizados para el nuevo esquema de cancelación, hasta el momento de escribir este artículo, ninguno de los 3 nos ha indicado el proceso para solicitar la cancelación a través de sus servicios, por lo que en cuanto tengamos la nueva información disponible, esta será materia de otro artículo del blog.

Una vez hecha la solicitud por cualquiera de los dos medios mencionados anteriormente, esta será enviada al SAT y el comprobante quedará en el estado de "OPERANDO", que es algo así como el limbo de los comprobantes fiscales, durante el plazo que indica el SAT para aceptar o cancelar el documento que es de 72 horas contadas a partir de la fecha de solicitud de la cancelación.

El estado del CFDI se podrá verificar desde código usando la función VirtualXML_ConsultaEstadoCFDI(), la cual ahora devolverá 3 posibles valores: VIGENTE, CANCELADO y OPERANDO.

Si el receptor ACEPTA la cancelación antes de 72 horas, el documento quedará automáticamente cancelado en los registros del SAT, y deberás utilizar la función de ConsultaEstadoCFDI() para saber si ya pasó del estado de OPERANDO al estado de CANCELADO.

Si después de las 72 horas el receptor explicitamente NO RECHAZA la solicitud de cancelación, el documento quedará cancelado en los registros del SAT y no habrá necesidad de hacer ningún otro procedimiento adicional, a este proceso se le llama "aceptación FICTA o aceptación por plazo vencido", esto minimiza en impacto que nuestros usuarios pudieran tener en sus sistemas, sin embargo, es su responsabilidad el estar revisando constantemente el estado del CFDI hasta que transcurran las 72 horas de plazo.

En caso de que el receptor RECHACE la cancelación del documento y el emisor vuelva a solicitarla, nuevamente tendrá el plazo de 72 horas para manifestarse al respecto, pero en este segundo intento de cancelación, si no hay respuesta por parte del receptor NO SE CANCELARA EL DOCUMENTO, a esto se le llama "rechazo FICTO".

En el caso de que existan documentos relacionados a un CFDI que se quiera cancelar, se deberá seguir el orden inverso para ir cancelado los documentos relacionados ANTES de cancelar el CFDI que los referencie.

Debemos de tener en cuenta que nuestros emisores estan en los dos lados, tanto necesitan cancelar CFDIs como autorizar la cancelación de CFDIs, por ello VirtualXml incluirá 5 funciones para realizar el proceso de cancelación, de momento estos son los PROTOTIPOS de las funciones, aun nos falta pulirlas, ver su lista de parámetros, probarlas e incluirlas en la DLL, NO SON FUNCIONALES NI ESTAN INCLUIDAS EN VIRTUALXML, así que por favor, no pidan documentación, parámetros ni área de pruebas hasta que les informemos que ya están implementadas y que ya hemos liberado una nueva versión de la DLL.

Serán 5 funciones para cancelación, divididas en 2 categorías:

Funciones para cancelar CFDI emitidos:

VirtualXML_ConsultaStatusCFDI() : esta función se utiliza para obtener el estado del CFDI antes de intentar cancelarlo y devolverá los siguientes valores:
  • Codigo: 201 Mensaje: Comprobante obtenido satisfactoriamente, Cancelable: Cancelable SIN aceptacion
  • Codigo: 211 Mensaje: Comprogante obtenido satisfactoriamente, Cancelable: Cancelable CON aceptacion
  • Codigo: 602 Mensaje: Comprobante no encontrado, Cancelable: No aplica
  • Codigo: 215 Mensaje: El UUID no cumple con la estructura válida, Cancelable: No aplica
VirtualXML_CancelaUUID(): Es la función que se utiliza actualmente solo que ahora devolverá los siguientes valores:
  • Codigo: 201 Mensaje: UUID Correctamente cancelado
  • Codigo: 211 Mensaje: UUID Cancelable con aceptacion
  • Codigo: 221 Mensaje: El UUID enviado no tiene un formato valido
  • Codigo: 205 Mensaje: El comprobante aun no se encuentra reportado en el SAT 
VirtualXML_ConsultaDocumentos relacionados(): Esta función se utiliza para obtener todos los documentos relacionados del documento que se intenta cancelar así como los documentos relacionados que puedieran tener los primeros documentos relacionados (en pocas palabras, los documentos relacionados de los documentos relacionados)., devuelve los sigentes valores:
  • Codigo:2000 Mensaje: Se encontraron CFDIs relacionados y un texto con la estructura "padre, UUID,RFCMISOR,RFCRECEPTOR", seguido del texto "hijo,UUID,RFCEMISOR,RFCRECEPTOR"
  • Codigo:2001 Mensaje: No existen CFDI relacionados

Funciones para consultar las peticiones recibidas de emisores:

VirtualXML_ConsultaPeticionesPendientes(): Esta función se utiliza para obtener una lista de los UUID que estan pendientes de Autorizar/Rechazar solicitados por nuestros emisores, devuelve los sigientes valroes:
  • Codigo: 1001 Mensaje: Una lista con los UUIDS pendientes de Autorizar/Rechazar, uno por renglon
  • Codigo: 1101 Mensaje: No hay UUIDs pendientes de cancelar.
VirtualXML_AceptacionRechazo(): Esta funcion se utiliza para Autorizar/Rechazar UUIDs ya sea masiva o individualmente, Regresa los siguientes valores:
  • Codigo: 1000, Mensaje: "UUID, Aceptado ó Rechazado" dependiendo si se autorizo o se rechazo la autorización
  • Codigo: 1001, Mensaje: "UUID, Rechazado,No existen peticiones de cancelacion en espera"
Tengan en cuenta que estas dos funciones son nuevas y son explicitamente para autorizar o rechazar la cancelación de documentos.

En los proximos días publicaremos mas información sobre estas funciones a fin de que puedan implementarlas en sus sistemas.

El SAT ha publicado un video donde podrán conocer mas a detalle aspectos relacionados con el nuevo esquema de cancelación:


3 comentarios:

  1. Una pregunta, supongo que una vez hecha la solicitud de cancelación, si el cliente acepta, queda también Cancelado el documento en SAT,sólo tengo que asegurarme de preguntar a través de la función VirtualXML_ConsultaEstadoCFDI() para poder informar a mi sistema el estatus del CFDI. Es correcto?

    La función VirtualXML_ConsultaEstadoCFDI(), según la documentación actual, indica: si existe , si no existe, si esta cancelado o si el servicio no esta disponible. Va a existir un estatus diferente para los que están en estatus de 'OPERANDO'?
    Gracias

    ResponderEliminar
  2. Se podrá utilizar el executable VirtualXML.exe con un script para la función de la cancelación?

    ResponderEliminar
    Respuestas
    1. Vamos a crear una linea de comandos especial para realizar cancelaciones pero primero tenemos que meter las funciones en la DLL.

      Eliminar