Usar XSL-FO para personalizar facturas electrónicas – Parte 1

Hace poco me preguntaron si había alguna forma de personalizar las facturas electrónicas que produce el SAT en México, ya saben, las facturas generadas por la opción de facturación gratuita en la página del SAT que parece haber sido diseñada por un alumno de prepa en su primer curso de HTML (te perdiste la mejor parte si no estuviste ahí para ver la página cuando requería versiones viejas/obsoletas de Java). En fin, ya que tengo esta mala costumbre de siempre hacer las cosas de la manera difícil 😛 decidí buscar las alternativas free open source para llevar a cabo la tarea de personalizar las facturas electrónicas. Por supuesto, hay versiones comerciales de software que prometen hacerlo de una forma sencilla, incluso versiones online “gratuitas” que no puedes personalizar a menos que compres una licencia. Las alternativas free open source existen pero, como era de esperarse, requiren hacerlo de la manera difícil. En este caso, una de estas alternativas es usar XSL-FO en conjunto con Apache FOP. Usar CSS3 para formatear el documento XML de la factura es otra opción1.

Nota: En la versión 3.3 del formato XML oficial del SAT, algunos campos cambiaron únicamente en el nombre de los campos de minúsculas (por ejemplo, nombre) a primera letra mayúscula (por ejemplo, Nombre). Ese es un cambio estúpido. No sólo pudieron mantener compatibilidad con versiones viejas al mantener el nombre el minúsculas, sino que al hacer este cambio innecesario rompieron todo el software que ya se había programado para versiones viejas; ¡el campo DomicilioFiscal no sólo ya no es requerido sino que ya no es ni siquera opcional ni está documentado! ¡¿Qué rayos estaban pensando?! Esto significa que ahora el domicilio debe estar escrito manualmente en el código y que debes crear una versión diferente del archivo XSL-FO para cada empresa que quiera facturar usando tu código, ¡es estúpido!. Lo mismo pasa con el domicilio del receptor, si quieres imprimir la dirección del receptor en cada una de tus facturas, entonces estás en problemas, buena suerte con eso. Al menos supongo que aún se puede inyectar ese campo en un XML para hacerlo más o menos compatible con software viejo sin tener que hacer grandes cambios.

En fin, ¿qué más se puede esperar de la gente que programó el portal de facturación electrónica del SAT?. En esta serie de posts usaré la versión 3.3 del formato XML del SAT.

Read More