BREVE INTRODUCCION A LA FACTURA ELECTRONICA.
Una factura electrónica, o mejor dicho: Comprobante Fiscal Digital (CFD) es un archivo cuyo contenido esta en formato XML (esto es, etiquetas del tipo
<nombre>dato</nombre>
), y que contiene algunos elementos de validación que hacen que el emisor no pueda negar que fue emitido por el.
Las etiquetas que se emplean están especificadas dentro de un documento emitido por el SAT que se llama “Anexo 20”.
Un archivo con formato XML no es más que un archivo de texto como cualquier otro, solo texto en formato ASCII, este tipo de archivos puede ser generado y editado con cualquier editor de textos (como notepad).
EJEMPLO:
Código: Seleccionar todo
<?xml version="1.0" encoding="utf-8" ?>
- <Comprobante 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" version="2.0" serie="XX" folio="666" fecha="2011-05-23T11:01:52" sello="LxVr0Y5bmng+9t1bTnQgAUcL0cxmrimcIcixrk4=" noAprobacion="88880" anoAprobacion="2011" formaDePago="C30 DÍAS" noCertificado="000010000001089999" certificado="" condicionesDePago="30" subTotal="647.34" total="750.91" tipoDeComprobante="egreso">
- <Emisor rfc="XXXZZZZZ" nombre="XXXXXXX">
<DomicilioFiscal calle="XXX" noExterior="3775" noInterior="S/N" colonia="COL" municipio="XXX" estado="D.F." pais="MEXICO" codigoPostal="9999" />
<ExpedidoEn calle="XXXX11" noExterior="S/N" colonia="CD. XXX" municipio="VILLAHERMOSA" estado="TAB." pais="MEXICO" codigoPostal="86010" />
</Emisor>
- <Receptor rfc="ZZZZZZZ" nombre="NOMBRE DE LA EMPRESA RECEPTORA">
<Domicilio calle="CALLE" noExterior="XXX" noInterior="ZZZ" colonia="COL XXX" municipio="DISTRITO FEDERAL" estado="DISTRITO FEDERAL" pais="MEXICO" codigoPostal="9999" />
</Receptor>
- <Conceptos>
<Concepto cantidad="2" unidad="PZA" descripcion="DESCRIPCION DEL PRODUCTO" valorUnitario="323.67" importe="647.34" />
</Conceptos>
- <Impuestos totalImpuestosTrasladados="103.57">
- <Traslados>
<Traslado impuesto="IVA" tasa="16.00" importe="103.57" />
</Traslados>
</Impuestos>
</Comprobante>
Entre los elementos que aseguran la autenticidad de un Comprobante Fiscal Digital (CFD) se tiene la llamada “cadena original” que son los datos del emisor concatenados con los del receptor, concatenados con los códigos de productos concatenados con los totales, así:
cadenaOriginal: emisor?receptor?producto1?producto2?producto3?total?iva
A esta cadena se le aplica una criptografía conocida como “llave publica y llave privada”, de esa manera, con la llave privada se genera a través del algoritmo un “sello” o combinación única de caracteres, de manera que si alteras algún dato de la cadena original, el “sello” que trates de calcular de nuevo no será igual al sello original.
El sello se incorpora dentro del XML como otra etiqueta mas “<sello>AQUÍ VA EL VALOR RESULTANTE</sello>”y es lo que le da certeza al documento.
De esta manera se asegura que quien emitió la factura electrónica con su “llave privada” (tramitada ante el SAT) no pueda denegarla como emisor.
Esto aplica para los CFD’s, existe el otro esquema CFDI’s.. que lleva un grado mas de complejidad y un mayor costo, ademas de que obliga al contribuyente a depender de un proveedor autorizado (PAC).
Cuando se trata de CFDIs: aparte de lo anterior se lleva un “timbre” que es otro sello digital proporcionado por el PAC, que asigna ademas un folio SAT (en el esquema CFDI, los folios del propio contribuyente ya no tienen ningun valor para el SAT, los folios y series del contribuyente quedan como un dato meramente informativo dentro del XML si es que el contribuyente desea seguirlos manejando.
Lenguajes de programación para desarrollar la emisión de Comprobantes Fiscales Digitales:
Prácticamente cualquier lenguaje que sea capaz de generar archivos de texto plano podrá usarse para generar el archivo .XML.
Aunque aquellos lenguajes que posean objetos especializados para la manipulación de archivos .XML (lectura de atributos, lectura de nodo x nodo) son mas utiles por su versatilidad de funciones, pero al ser archivos de texto finalmente, cualquier programa podra leer e interpretar los valores contenidos en el.
Para la generación de la cadena original se cuenta con 2 alternativas:
Concatenar valor x valor, o bien usar una hoja de transformación (XSLT) que viene a ser como un mini script que lee las etiquetas del XML y generan automáticamente la cadena original, este último es mas recomendable ya que no requiere mayor esfuerzo, siempre que el lenguaje seleccionado tenga la posibilidad de trabajar con objetos XML.
Para la generación del Sello digital, se debe contar con las bibliotecas criptográficas necesarias, lenguajes como C++, Java, .NET incorporan lo necesario.
Un equipo como el iSeries tambien será capaz de generar sellos digitales siempre que se hiciera a través de C++, o bien emulando un ambiente operativo Linux para ejecutar OpenSSL (una herramienta gratuita muy usada en algunos ambientes para la generación de encriptamientos).
COMO SE HACE ENTREGA DEL CFD AL CLIENTE:
Para aquellos que emiten CFD’s o CFDI’s, el SAT les obliga a hacer entrega por algún medio electrónico del archivo .XML (que es en realidad el CFD), se acostumbra enviar también por email el PDF (que es la representación gráfica del XML, mas fácil de leer).
Los emisores de CFD tambien están obligados a entregar, si el cliente lo requiere, una REPRESENTACION IMPRESA DEL CFD, esto, es la factura en papel, que regularmente se hace imprimiendo un archivo con formato PDF o generando el reporte por cualquier otro medio hacia la impresora.
La información contenida en dicho reporte debe coincidir vs la contenida en el .XML, incluyéndose además en un lugar visible de dicho reporte: La cadena original, y el sello digital.
Los pasos necesarios para generar un CFD.
1.- El emisor debe tramitar ante el SAT su Firma Electronica Avanzada (un .cer y .key) o FIEL.
2.- El emisor debe tramitar ante el SAT su Certificado de Sello Digital (otro .cer y key).
3.- El emisor debe solicitar ante el SAT un Rango de Folios (para el caso de CFD o contratar un PAC para el caso de CFDI).
4.- Contar con un software que básicamente se encargara de:
- Recompilar la información de los productos
- Generar un archivo .xml o una cadena con el formato XML con los datos acorde a lo que especifica el SAT.
- Obtener la cadena original de este XML
- Recuperar la información de la llave privada (archivo .key) y mediante unos métodos de criptografía, generar el Sello digital con: Cadena Original + llave privada.
- Completar el XML con el sello digital y almacenar el .XML
- Enviar al cliente un archivo .PDF y un .XML con la información.