jueves, 14 de abril de 2011

Factura Electrónica: todo por ser un hipster


He estado trabajando en las últimas 2 semanas con el desarrollo de la factura electrónica para la empresa. Fui al SAT para hacer la solicitud de la FIEL, de la llave y del certificado, hasta ese momento todo parecía ir bien, ahora solo faltaba empezar a desarrollar.

Quiero mencionar que como estoy en un micro empresa de sistemas aún se podía facturar con facturas por imprenta, pero una vocecita me habló al oído y dijo: "¡Hey, somos una empresa de sistemas! Eso de facturas impresas es muy siglo 20, hay que estar al último grito de la moda "(o en este caso, del SAT).

Cabe destacar que ya tenía planeado como iba a funcionar el método de facturación: generar el XML y el archivo PDF y enviarlos por correo electrónico al cliente junto con instrucciones precisas para validar su autenticidad; algo que fuera rápido, sencillo y que no requiriera trabajo alguno para el cliente y el mínimo esfuerzo para mí.

El problema empezó para saber que debo de hacer y no regarla en el proceso. Tomen en cuenta que esto es algo legal y si cometes algún error al generar la información te metes en problemas con el cliente, pero sobre todo con el SAT, así que debí tener mucho cuidado que relajo estoy haciendo.

Busqué en Internet (es decir, busqué por Google) ejemplos de facturadores, documentación y cualquier ayuda en foros de programadores que hayan trabajado sobre una aplicación. Muchos de los foros hablaban sobre el famoso “Anexo 20”, un documento donde explicaban con lujo de detalle la generación de facturas electrónicas.

No tengo fe en los documentos oficiales, mi experiencia en esta área me ha enseñado que los documentos oficiales están muy rebuscados o las instrucciones están incompletas por lo que siempre fue mi preferencia buscar en foros o blogs donde pudieran explicar mejor lo que se debe o no hacer. Pero este caso es distinto, esto tiene que ver con SAT y con eso no se juega (bueno, sí se juega, pero por el momento no tengo el tiempo ni el dinero para eso XD)

Primero fue encontrar donde estaba el dichoso documento, tengo que mencionar que la navegación de la página del SAT está pa’l perro por lo que decidí buscar en el todopoderoso Google. Encontré uno y lo empecé a leer pero me cansó, solo empecé a navegar en las secciones que a un programador pudiera interesarle, es decir, donde hay código o lo más parecido a ello.

Seguí leyendo y navegando en foros para darme cuenta que el documento que tenía en mi PC era el viejo, hay uno actualizado. Vuélvele a preguntar a Don Google para encontrar el correcto y me llevó a un foro donde hacían referencia a ese documento actualizado. Ahora, ya con el documento bueno y después de interpretar lo que decía, me dispuse a buscar ejemplos en código de un programa.

Después de encontrar un ejemplo en el lenguaje que estaba utilizando para hacer mi facturador (PHP) y de pelearme con las llaves y certificados de ejemplo (algunos ejemplos que se descargan del SAT no funcionan), descubrir que alguna información que viene en el SAT está errónea, pelearme con el encoding de los archivos, mentarle la madre a validador, al SAT y a los cabrones que redactaron el bendito “Anexo 20”, al fin pude generar una factura válida (eso es lo que me dice el bendito validador).

Tengo que hacer mención, para que los que no lo sepan, que cuando reciban una factura electrónica XML es necesario que ustedes validen que sea correcta, porque ya me ha pasado recibir facturas XML que no están bien construidas y SAT me pinta el dedo cuando las valido. Para eso llamen a la empresa que les dio la factura y exíjanle que les envíen una factura válida.

Seguí investigando otros aspectos de la factura (a pesar de que ya tenía un programa completamente funcional) y descubrí que lo que tenía estaba en una versión 2.0 y ya se había definido la versión 3.0.

En ese momento me entró el alma hipster, la de la voz inicial de que tenía que utilizar la factura electrónica, y me dije a mí mismo “Mi mismo ¿Para qué trabajar en una versión más vieja si puedes trabajar en la más nueva? Además con eso ya te quitas de problemas en un futuro no muy lejano de tener que actualizarte porque descontinúen alguna de las versiones más viejas”. Con ese razonamiento tan chilero decidí emprender la aventura a la versión 3.0.

Cabe destacar que después de revisar las diferencias entre la versión 2.0 y 3.0 me di cuenta que no eran muchas, que solo habían agregado unos campos nuevos pero que la mayoría no utilizaría. Pero como el alma hipster aún era fuerte en mí decidí que mi facturador debería tener la posibilidad de editar todas (sí, todas) las opciones que SAT especifica en el miserable “Anexo 20”.

Puse todos los campos (habidos y por haber) incluso unos que ni siquiera sabía que significaban y mucho menos para que servían, cambié la interfaz, cambié el generador de XML y de PDF, validadores, generador de cadenas, validarlo con el XSD y cuanta cosa encontré, pero al fin había terminado el código y estaba listo para generar mi XML, entré al validador y...
El sello del comprobante es Inválido.
Puuuuuu%&! Vuélve a checar todo, muévele aquí, quítale acá, ponle acuyá, comenta esto, descomenta aquello, súmale, réstale, checa el encode, revisa el pin%#$ “Anexo 20”, checa el XSD, reinicia el validador y…
El sello del comprobante es Inválido.
Me lleva la chin#$%*, quítale ahora acá y modifícale por acá y comenta esto y…
El sello del comprobante es Inválido.

GAAAAAAH!

Para no hacerles el cuento largo tardé 2 días y por mi mente pasó regresar a la versión 2.0 pero había dos inconvenientes: no había guardado de la versión 2.0 (un kamikaze de la programación jamás hace backups de sus archivos porque eso es de afeminados inseguros que no pueden controlar sus PC’s) y, sobre todo, mi orgullo. Sí, mi orgullo me detuvo: ningún jodi*? XML me va a decir que puedo o no puedo hacer y mucho menos el pin%#$ SAT.

Así que empecé a hacer lo que cualquier programador macho alfa hace: hacer que todo funcione a su mínima expresión y de ahí pa’l monte. Validé y…
El sello del comprobante es Inválido.
Ni mad%$#, busquemos en línea que puede ser: ¿Formato XML? No ¿Cadena original? Tampoco ¿PHP? No ¿Validador 3.0? ¿Eh? ¿Validador para la 3.0? A ver…
El sello del Comprobante Fiscal Digital es válido
¡A huevo! El SAT me la pe%* Hice la danza de la lluvia, agradecí al monstruo de espagueti volador, fui por un frutsi al Seven y me relajé. Ya tengo lo pesado, es hora de trabajar en lo presentable.

Después de esta ardua labor de hacer funcionar la factura aprendí unas cosas:
1) Siempre inicia con la información más básica.
2) Siempre hay una solución.
3) Los del SAT son unos pend#$%& en cuanto a tener información veraz.

2 comentarios:

Karma! dijo...

programador macho alfa... ja te la mamaste

Saul Haro dijo...

¿Y sabes qué es lo más gacho? Que aún no podemos generar facturas electrónicas debido a que al parecer necesitamos un proveedor autorizado para que coloque el sello digital.

Chale...