Comprobantes Fiscales Digitales
Factura Eletronica

Contenido/contents:
Introducion
Marco Legal
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,
Marco Legal
Al dia de hoy (Abril 2005), las empresas o via sus Camaras de Comercio siguen pidiendo adecuaciones y reformas a la reglamentacion para reducir la cantidad de controles e informes a los que estan obligados los contribuyentes para expedir y hasta para recibir las facturas electronicas.
Yo no intento explicar la problematica para cumplir con la reglamentacion, solo les comento que en esta pagina estan las leyes de: Código Fiscal de la Federación, Reglas de Resolución Miscelánea Fiscal, Anexo 20 de la Resolución Miscelánea Fiscal y Código de Comercio.
Una cosa que si les puedo comentar es que una de dos, o capacitan a sus contadores / auditores para que entiendan XML, certificados y firmas o ustedes como gente de sistemas (o ah, perdon, lo estan leyendo contadores?) tendran que saber de contabilidad y un poco de fiscal.
Les puedo asegurar que si algun dato viene mal sera culpa de ustedes y no del contador, aunque les hayan pedido que lo validen y lo revisen y ellos en sus 'pruebas selectivas' lo hayan dado por bueno, si al paso del tiempo algo esta mal es culpa de sistemas no del usuario (que novedad verdad?).
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 FEA. Esa la tienen que obtener necesariamente el representante legal de la empresa en persona en las oficinas del SAT.
    2. Obtener rangos de folios pasra las series a emplear. Es por internet.
    3. Obtener certificados de sello digital. Tambien se obtienen por internet, la idea es que puedes solicitar un certificado por localdidad, 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. Numero exterior/interior separado de la calle.
    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 cobraznas, 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 MD5 de la cadena original.
  5. En base a la llave privada y su contraseña calcular el sello del MD5.
  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 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. Informe al SAT de los folios utilizados. Via internet.
  2. Diario de ventas.
  3. Estados de cuentad e 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. Ojo esta formatedada a varios renglones para verla mas claramente, el formato del Anexo 20 indica que no hay que dejar saltos de linea en el archivo.

Notice: Undefined variable: ancho in /home/httpd/www/fortiz/sat/index.php on line 190
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<Comprobante anoAprobacion="2006" certificado="MIIEeTCCA2GgAwIBAgIUMDAwMDEwMDAwMDAwMDA4MjM3NDcwDQYJKoZIhvcNAQEFBQAwggGKMS8wLQYDVQQKDCZTZXJ2aWNpbyBkZSBBZG1pbmlzdHJhY2nDs24gVHJpYnV0YXJpYTE4MDYGA1UECwwvQWRtaW5pc3RyYWNpw7NuIGRlIFNlZ3VyaWRhZCBkZSBsYSBJbmZvcm1hY2nDs24xODA2BgNVBAMML0EuQy4gZGVsIFNlcnZpY2lvIGRlIEFkbWluaXN0cmFjacOzbiBUcmlidXRhcmlhMSYwJAYDVQQQEx1Bdi4gSGlkYWxnbyA3NywgQ29sLiBHdWVycmVybzEOMAwGA1UEERMFMDYzMDAxEjAQBgNVBAcMCUNveW9hY8OhbjEZMBcGA1UECBMQRGlzdHJpdG8gRmVkZXJhbDELMAkGA1UEBhMCTVgxFTATBgNVBC0TDFNBVDk3MDcwMU5OMzEhMB8GCSqGSIb3DQEJARYSYXNpc25ldEBzYXQuZ29iLm14MTUwMwYJKoZIhvcNAQkCEyZSZXNwb25zYWJsZTogQ2VzYXIgTHVpcyBQZXJhbGVzIFRlbGxlejAeFw0wNjA5MDgxMzQwMjFaFw0wODA5MDcxMzQwMjFaMIHFMSUwIwYDVQQtExxGSkM3ODAzMTVFOTEgLyBBRUJSNDIwMTE5Mk44MR4wHAYDVQQFExUgLyBBRUJSNDIwMTE5SERGTlJEMDkxIjAgBgNVBAoTGUZBQiBKQUJPTiBDT1JPTkEgU0EgREUgQ1YxEDAOBgNVBAsTB2dlbmVyYWwxIjAgBgNVBAMTGUZBQiBKQUJPTiBDT1JPTkEgU0EgREUgQ1YxIjAgBgNVBCkTGUZBQiBKQUJPTiBDT1JPTkEgU0EgREUgQ1YwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOx6usU1zIZTEKYRVxfZBUjvQcB9sVtLgrgAGDDL6K3vpExpl6/Q8g+fT+UTlLveg7JVheQamsQTZhMTUGnny4OTGpfdSn5SPnvCchBqq7gEGXi26jjwOrs3PO0mSIa6VweMCPPKFQ56RYaJ18kpiNgWUdl9yivh/SO5godmWZOpAgMBAAGjHTAbMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgbAMA0GCSqGSIb3DQEBBQUAA4IBAQDDAzYjTyHcYXjPzXIPfUtHizC8G/XjeOvcdScS/rsxHVbbusuKpAS8hK5hjT00GXKjB5u7NEkNEOJiOgZl08mk5FKuKqqXUbGB35atKdDMEMhN56RMbYump9tJJ8JQlbvuMywiL2J3GpO9wSdZ044Z37Szv5bE3/G8oM4/kz7rhsOrsVAFwodfIvHYDZmRQlYqPV5B7X8AzhUmehJ8rg3faJfjQLhVRgsCt27HCLIzLXYKRPSLNg0X1mxi745Ailxwk7nO7HIEN7coXdaMbkczFD4Fhe9aaskyj9mMwo/XASLiQb5PlBqE2uLQITUUbU5w4P32wlZGMqX4XxA3zG+h" descuento="0" fecha="2006-11-20T08:50:48" folio="051661" formaDePago="EL PAGO DE ESTA FACTURA (CONTRAPRESTACION) SE EFECTUARA EN UNA SOLA EXHIBICION, SI POR ALGUNA RAZON NO FUERA ASI, EMITIREMOS LOS COMPROBANTES DE LAS PARCIALIDADES RESPECTIVAS" noAprobacion="2951" noCertificado="00001000000000823747" sello="wVLpmRWPFxC6UzitqsdZkljtcYA8ESYPg21Tx0P3p8EAvmIUOSb8OqDw0d+RPswU2BTN77rzygmOvS5O3L6kv4q8u9Yg04b1CjOUbo+YggrJgxUsG3ymMOl4eh/JQ1utNzwJk44ZBeTnWldT4Hm5V5ThKW5yXlc/udV61PnSzIo=" serie="FAXA" subTotal="43824.69" tipoDeComprobante="ingreso" total="50398.39" version="2.0" xmlns="http://www.sat.gob.mx/cfd/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/cfd/2 http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd">
    <Emisor nombre="FABRICA DE JABON LA CORONA, S.A. DE C.V." rfc="FJC780315E91">
        <DomicilioFiscal calle="CARLOS B. ZETINA" codigoPostal="55348" colonia="INDUSTRIAL XALOSTOC" estado="MEXICO" localidad="ECATEPEC DE MORELOS" municipio="ECATEPEC" noExterior="80" pais="MEXICO" />
        <ExpedidoEn calle="CARLOS B.ZETINA NO.80" codigoPostal="55348" estado="EDO. DE MEXICO" localidad="XALOSTOC, EDO. DE MEXICO" municipio="XALOSTOC, EDO. DE MEXICO" pais="MEXICO" />
    </Emisor>
    <Receptor nombre="NUEVA WAL-MART DE MEXICO SRL DE CV" rfc="NWM9709244W4">
        <Domicilio calle="NEXTENGO" codigoPostal="2770" colonia="STA. CRUZ ACAYUCAN" estado="DISTRITO FEDERAL" localidad="AZCAPOTZALCO" municipio="AZCAPOTZALCO" noExterior="78" pais="MEXICO" />
    </Receptor>
    <Conceptos>
        <Concepto cantidad="22" descripcion="TEPEYAC 25P 400 G C/ENV" importe="2441.34" valorUnitario="110.97" />
        <Concepto cantidad="11" descripcion="ZOTE AZUL 25P 400 G." importe="1220.67" valorUnitario="110.97" />
        <Concepto cantidad="22" descripcion="ZOTE BCO. 25P 400 G" importe="2441.34" valorUnitario="110.97" />
        <Concepto cantidad="7" descripcion="ZOTE BCO. 50P 200 G" importe="776.79" valorUnitario="110.97" />
        <Concepto cantidad="44" descripcion="ZOTE ROSA 25P 400 G" importe="4882.68" valorUnitario="110.97" />
        <Concepto cantidad="6" descripcion="ZOTE ROSA 50P 200 G" importe="665.82" valorUnitario="110.97" />
        <Concepto cantidad="12" descripcion="ROMA 4P 5 KGS" importe="2620.08" valorUnitario="218.34" />
        <Concepto cantidad="24" descripcion="ROMA 10P 2 KGS" importe="5273.64" valorUnitario="219.74" />
        <Concepto cantidad="120" descripcion="ROMA 10P 1 KG" importe="13354.20" valorUnitario="111.29" />
        <Concepto cantidad="12" descripcion="FOCA 10P 2 KGS" importe="2806.38" valorUnitario="233.87" />
        <Concepto cantidad="10" descripcion="BLANCA NIEVES 10P 2 KGS" importe="2014.65" valorUnitario="201.47" />
        <Concepto cantidad="40" descripcion="BLANCA NIEVES 10P 1 KG" importe="4086.00" valorUnitario="102.15" />
        <Concepto cantidad="5" descripcion="BRILOZA 10P 1 KG" importe="510.75" valorUnitario="102.15" />
        <Concepto cantidad="6" descripcion="FOCA 12B 1LT" importe="730.35" valorUnitario="121.73" />
    </Conceptos>
    <Impuestos totalImpuestosTrasladados="6573.70">
        <Traslados>
            <Traslado importe="6573.70" impuesto="IVA" tasa="15.00" />
        </Traslados>
    </Impuestos>
</Comprobante>
Lo primero que les puede llamar la atencion es el texto que esta dentro de las etiquetas Addenda, aqui incluyo la misma factura pero en formato EDI. Esto es un requisito no fiscal a nivel comercial que algunos clientes le piden a sus proveedores, en este caso Wal-Mart de Mexico.
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.
Ya existen varios programas comerciales para generar el codigo EDI, es mas, ya muchos usuarios generaban las facturas EDI a nivel comercial antes de que el SAT reglamentara las facturas electronicas, por lo que voy a considerar que ustedes ya tienen un procedimiento o programa que les genera el archivo EDI en base a la informacion contenida en su ERP. Como ejemplo les muestro un programa que lee mi ERP y genera el formato EDIFACT D01B INVOIC de la factura.
Ademas 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#.
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.
WalMart pide que se envie por AS2, que es un medio via Internet de comunicacion segura y cifrada, segun el software que empleen es la manera de enviarlos, pero usando el software de iSoft es tan sencillo como copiar el archivo XML al buzon de salida asignado al 'Partner' Wal-mart.
Tambien pueden pedir que se envie por la VAN de EDI, y en ese caso hay que usar el metodo usual proporcionado por el proveedor. En el caso del software Gentran de Sterling Commerce tengo un archivo BAT de windows que concatena los datos del buzon y lo manda por modem.
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. Estoy evaluando XSLT para transformar la factura XML en un formato agrabadable al humano ya que lo tenga listo aqui nos vemos ;) .
Validacion de las facturas electronicas
Ademas del uso de la herramienta xsdvalid para verificar que la estructura del documento XML cumpla con las especificaciones del SAT que uso en esta pagina.
Tambien hay que hacer una validacion de vigencia de los folios y certificados recibidos. En esta pagina del SAT esta la lista de obligaciones que deben de cumplir tantos los que expiden como los que reciben los comprobants fiscales digitales.
Es de espeical interes esta pagina donde dicen que usted puede consultar la validez de los folios y series de sus Comprobantes Fiscales Digitales (CFD) recibidos se puede usar su pagina para consultar la validez, solo hay un pequeño problema.
Si recibes una o dos facturas al dia, pues bueno, entras y tecleas a mano esa informacion en su pagina y te dice si el folio, serie, certificado esta vigente. Pero que ocurre si te llegan cientos de facturas al dia como por ejemplo Walmart, Soriana o alguna otra empresa que 'exiga' que le manden las facturas electronicas por computadora.
Se supone que el SAT ofrecio un webservice para que la computadora pudiera validar contra el SAT cada factura recibida, pero hasta la fecha sigue en pruebas y lo unico que liberaron fue la opciones de descargar en tu computadora dos archivos de texto plano para que los integres en tu sistema y tu puedas validar esa informacion.
En esta pagina tengo un ejemplo de uso de esos archivos planos para validar los folios serie y certificado de sellos de cada RFC..
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.