En lo primero que trabajé como desarrollador de software profesional fue en la actualización de un sistema web de comprobación de gastos. Llegué a integrarle a su capacidad de recepción de comprobantes la compatibilidad con la versión 3.3 de los CFDI que se encontraba por entrar en vigor a inicios de 2018.
A diferencia del procesamiento de las facturas 3.2, a la nueva versión le añadí, entre otras cosas, el paso de la validación del sello. Así la plataforma se quedaba blindada ante cualquier archivo XML manipulado por venir.
En todos estos años jamás me he topado con algún caso de modificación deliberada. Sí con muchos errores de recodificación donde los caracteres especiales son reemplazados por mojibake que también rompe con la integridad de los datos del comprobante.
Ahora en plenitud de la versión 4.0, hace poco me llegó el reporte de una factura que estaba siendo rechazada por el sistema. Con el archivo de texto en mi poder comprobé que todo a simple vista parecía en orden y, con el visto bueno del área de finanzas, le permití saltarse la restricción.
Cuando un segundo CFDI rebotado emergió entendí que debía resolver pronto porque el problema no haría más que multiplicarse.
Hasta ese momento había confirmado que:
- Se trataban de archivos XML válidos en estructura.
- Se encontraban libres de indicios de corrupción de caracteres.
- La verificación por internet del SAT reconocía los timbres asociados como operaciones vigentes.
- En otros servicios tampoco pasaban la misma validación. Incluso apuntando a un problema con el certificado del emisor.
Entonces tuve un déjà vu. ¿Qué comparten esos servicios de terceros con el mío? Con toda seguridad, un repositorio propio con las plantillas XSLT que permiten la construcción de la cadena original útil para la generación del sello criptográfico de las facturas digitales en uso desde 2010 (dato de IA, perdón).
El SAT debió hacer algún cambio y, por tanto, mi proceso de validación quedó obsoleto. Sólo volví a descargar las XSLT y todo regresó a la normalidad. En el backlog dejé un ticket para automatizar su actualización. A ver cuándo lo atiendo porque de momento ando en otro asunto que me motiva un poco más.