lunes, noviembre 26, 2007

Working Harder

Saludos a todos los que amablemente visitan este blog.

Antes que nada quiero pedirles una disculpa por no escribir durante más de una semana, como sabrán soy programador y bueno, últimamente la carga de trabajo ha estado un poco pesada, sin embargo no crean que me he olvidado de escribir.

Pues la noticia de esta semana es que he terminado de programar un modulo importante, este modulo trata de la llamada "Facturación Electrónica" y ahora es cuando entramos en la fase de pruebas y depuración.

Como todos saben, aquí en México quien regula el ámbito fiscal es el SAT.

Pues déjenme platicarles que este ha sido un gran reto, ha puesto a prueba muchas de mis habilidades (¿cuales? dirían muchos). Ha exprimido mi pequeño cerebro al máximo e incluso he llegado a sentir estrés, cosa que rara vez me pasa debido a los conocimientos que adquirí de una gran persona. Recuerdo que el me platico que nunca lleva el trabajo a su casa, cosa que he puesto en práctica y da muy buenos resultados, el estrés es mínimo debido a esta sana practica. Los fines de semana pasan sin ninguna preocupación y las horas fueras del trabajo realmente se disfrutan.

Bien, regresando al tema de la facturación electrónica, pues les cuento que la programé en PHP, inicialmente el proyecto fue pensado para escribirlo en Java, desafortunadamente mis conocimientos en Java son mínimos (nulos para ser sinceros y exactos). Sin embargo me he propuesto aprender Java.

Les cuento más o menos el proceso de desarrollo, disculpen si no doy mayores detalles, pero el proceso en sí es un tanto engorroso (para mi gusto).

En sí la meta primaria es generar un archivo XML (valido y bien formado), que cuente con su correspondiente sello digital y su cadena original válida.

Todo empieza desde el sistema ERP que me genera un documento XML con los datos de la factura y que es válido para el esquema del SAT (XSD).

Después de obtener el XML entonces el documento pasa por un parser que extrae la llamada “cadena original” (que por cierto esta clase la termine en 15 minutos, hasta me sorprendí de lo fácil que me resultó escribirla). Esta cadena se compone de los valores de los atributos del documento XML separada por “pipes” (símbolo del “pipe”: |).

El formato es más o menos así. ||valor|valor1|valor2|…|valorn||.

La cadena original a su vez es digerida por el algoritmo que la mayoría conoce, el MD5 (que como muchos sabrán PHP ya trae su función).

Toda vez que la cadena original ha sido digerida al formato de MD5, entonces se procede a firmar el documento, para hacer esto el SAT específica que se use el algoritmo de encriptación RSA.

Ya que tenemos el MD5 ya firmado y encriptado en RSA se procede a convertirlo a en una cadena de caracteres imprimibles (ya que el RSA produce una cadena con caracteres y símbolos imprimibles/no imprimibles). Para hacer esto es necesario codificar la cadena en base 64 que genera una cadena más o menos así:

GqDiRrea6+E2wQhqOCVzwME4866yVEME/8PD1S1g6AV48D8VrLhKUDq0Sjqnp9IwfMAbX0ggwUCLRa+Hg5q8aYhya63If2HVqH1sA08poer080P1J6Z+BwTrQkhcb5Jw8jENXoErkFE8qdOcIdFFAuZPVT+9mkT b0Xn5Emu5U8=

Cuando obtengamos la cadena codificada en base64 el siguiente paso es anexarla al nodo “Comprobante” en el atributo “sello”.

Bien, a grosso modo, este es el proceso para realizar la facturación digital y como verán este modulito fue algo que me entretuvo un buen ratito aquí en la oficina.

Pero no crean aquí se acaba el circo, no, siempre hay algo mas, la temible “Addenda”, aquí quiero hacer un alto y decir que estoy en total desacuerdo con la “No estandarización de la addenda”. Imagínense que cada cliente tiene su propia manera de generar su Addenda, en varios formatos y tipos, en sí un p3dote.

Ya para finalizar listo las herramientas/lenguajes/programas que se usaron para la generación de este módulo con todo y Addenda válida.

· DREAMWEAVER CS3

· OPENSSL

· PHP

· PROGRESS

· XHTML

· XML

· XSD

· XSLT

Ahora sí a continuar con la fase de pruebas.

1 comentario:

  1. Anónimo1:34 p.m.

    Hola:

    Estoy en un proyecto de FE solo q en Navision pero tengo demasiadas dudas en cuanto a esto (soy novata) y agradeceria infinitamente tu ayuda por favor!!!!.

    1ro. es indispensable que la cadena original se genere apartir del xml.??? yo estoy generando mi cadena apartir de los datos de mi comprobante (almacenados en las tablas)...
    2do. el RSA que es lo que pide??? la llave publica que te da hacienda para encriptar y la llava privada para desencriptar?? no entiendo bien ese algoritmo espero me puedas explicar mas o menos como es este algoritmo... tengo el codigo en VB pero este te pide 1 password1 para encriptar y para desencriptar verifica que el password1 sea el mismo que introduces para desencriptar...
    pd: espero darme a entender :D y tu ayuda :D GRACIAS estoy desesperada

    dani_drh@yahoo.com.mx

    ResponderBorrar