Comprobantes Fiscales Digitales
CFDI 3.3

Contenido/contents:
Introducion
Proceso
Generacion
Codigo Fuente
Envio
Validacion
XSLT
Pagina principal/Home page

Introduccion
Para los no Mexicanos les comento que el SAT surgio en el año 1997 como un organo desconcentrado de la Secreteria de Hacienda y Credito Publico (SHCP) y dentro de sus funciones esta la recaudacion de los impuestos.
Como informatico he visto con agrado que han impulsado la modernizacion de sus operaciones, incluso mas me agrado ver que muchos de sus desarrollos los hacen con JAVA por lo cual cada vez mas nos permite a los causantes no tener una maquina Windows para calcular los impuestos.
Uno de los proyectos mas importantes en los que estan trabajando es la reglamentacion de los Comprobantes Fiscales Digitales.
El SAT comenta que tomaron como base la experiencia Chilena pero no conozco los antecedentes,
Procedimiento
A continuacion detallo un poco los pasos a seguir para implantar el uso de factura electronica en una empresa.
  1. Previos con el SAT:
    1. Obtener la FIEL. Esa la tienen que obtener necesariamente el representante legal de la empresa en persona en las oficinas del SAT.
    2. Obtener certificados de sello digital CSD. La idea es que puedes solicitar un certificado por localidad de lugar de expedicion, pero tambien puede ser uno solo para todas las ubicaciones.
  2. Previos en tu sistema ERP (o minimo sistema de contabiliadd y cuentas por cobrar/facturacion).
    1. Tener los campos en tu archivo maestro de clientes requeridos en el formato.
    2. Depurar los RFCs, existan con homoclave y uso de RFCs genericos para venta al publico en general y para ventas al extranjero.
    3. Tener los campos de tiemestamp al segundo para el registro 'al segundo' de las facturas.
  3. Previos con tu personal.
    1. Hacer del conocimiento de las areas afectadas, distribucion, logistica, credito y cobranzas, ventas el nuevo documento a utilizar.
    2. Decidir si se imprime una copia en papel para la entrega o uso de remision o carta porte.
    3. Decidir si el ciclo de cobranza requiere papel.
    4. Decidir si solo factura electronica o tambien notas de credito electronicas o demas comprobantes fiscales digitales.
    Generacion de la Factura Electronica
  1. Para garantizar la 'simultaneidad' (que no existe en sistemas), primero se graba el asiento contable y despues en base a el se genera el archivo XML.
  2. Generar cadena original en base a los datos del ERP.
  3. Convertirla la cadena original a UTF-8.
  4. Calcular el SHA256 de la cadena original.
  5. En base a la llave privada y su contraseña calcular el sello del SHA256.
  6. Convertir el sello obtenido (que esta en binario) a formato base64.
  7. Generar el XML con los campos del XML agregando el sello recien calculado.
  8. Agregarle la Addenda solo si es requerida por el socio comercial.
    Almacenamiento de los comprobantes.
  1. Guardar los archivos XML generados en un medio que te permita:
    1. Asegurar su integridad fisica por 5-10 años.
    2. Tener un sistema 'agil' de consulta de esa informacion para uso de los empleados de la empresa y de las autoridades.
    Envio/Distribucion de la informacion
  • Envio por AS2.
  • Envio por VAN/EDI.
  • Envio por FTP.
  • Y claro la impresion y envio por papel como siempre se habia venido haciendo.
    Controles mensuales
  1. Diario de ventas.
  2. Estados de cuenta de cliente.
Generacion de la factura Electronica
Antes de entrar con los detalles de como se genera una factura electronica les voy a presentar el resultado final.
La informacion contenida en la Addenda no esta reglamentada por el SAT y puede contener la informacion que a las partes (Proveedor-Cliente) les convenga,
Ahora si vamos a la generacion, el primer paso es que la factura debe de estar ya registrada en el sistema contable (ERP, CXC, etc.) antes de emitir el comprobante, uno de los datos del comprobante es el 'timestamp' o fecha-hora-minuto-segundo en que se registro el movimiento.
El primer paso es tomar los datos ya asentados en el ERP y en base a ellos generar el formato requerido.
Se ejecuta un programa que lee los datos de la factura del ERP y en base a ellos se genera un arreglo asociativo que en un paso posterior se convertira a XML.
Posteriormente este arreglo asociativo lo convierto a XML con los requisitos fiscales validos. Mi justificacion para hacerlo en dos partes es que no solo genero 'Factura Electronica' tambien genero 'Nota de credito electronica' y 'Comprobante de pago en parcialidades electronico' entonces tengo un programa que le las tablas correpondientes del ERP para cada tipo de documento (factura, nota, comprobante) y cada uno genera el arreglo asociativo en el mismo formato.
Codigo Fuente
En esta pagina tengo a detalle los programas PHP que uso para generar la factura electronica.
Tambien menciono las utilerias para usar otros lenguajes de programacion basados en windows como visual Basic o C#.
El codigo fuente lo tengo en SourceForge para facilitar su descarga.
Envio de la Factura
Una vez generada la factura fiscal hay que hacerla llegar al socio comercial (Cliente) y aqui tambien es por el medio mutuamente acordado.
Existen muchas maneras de enviar la factura, algunos clientes exigen el uso de un buro de servicio paar recibirlas.
En mi caso yo todo se lo envio a mi buro de confianza, y ellos se encargan de reenviarlo a cada cliente. Yo ya no me procupo si es AS2, FTP, Webservices, etc.
Ademas esta la opcion de enviarlo en papel! Si, aunque sea electronica se puede hacer una impresion del comprobante Fiscal Digital y seguir el flujo administrativo normal en papel como siempre.
Validacion de las facturas electronicas
Ademas del uso de la herramienta xmlint para verificar que la estructura del documento XML cumpla con las especificaciones del SAT que uso en esta pagina.
Tambien existen varias reglas de semantica para algunos complementos especificos.
EL SAT ya dijo en su documento de preguntas frecuentes FAQ # 11 que no va a ofrecer un servicios de valdiacion. SI ya esta timbrado es correcto.
Transformando el XML con XSLT
La idea del formato XML es que la informacion este en un formato de comunicacion para que cada quien la pueda usar obteniendo los datos que necesite.
La herramienta XSLT nos permite convertir archivos XML a varios formatos, texto, HTML o a otros XML.
En esta pagina muestro unos ejemplos de lo que que podido hacer en modo batch o comandos de shell para conevrtir el archivo XML sin usar el lenguaje PHP.