1.3. Cadena Original
De acuerdo con el SAT la cadena original se entiende como:
La cadena original se genera procesando la factura electrónica en formato .XML (o cualquier otro comprobante fiscal digital CFD) con una plantilla XSL o XSLT (es el mismo tipo de archivo, se le conoce como XSLT, pero se acostumbra dejar las extensiones de archivos con 3 letras por eso el XSL) que brinda el SAT de acuerdo a la versión de CFD que se quiera obtener.
La cadena original es un elemento muy importante y delicado de el comprobante fiscal digital, en ésta se incluye información que integra a la factura es por eso que su generación debe ser con sumo cuidado y para esto es preferible usar herramientas previamente aprobadas como librerías (JAR o DLL).
A continuación se muestra un ejemplo de como obtener la cadena original usando los siguientes elementos que brinda el SAT:
- cadenaoriginal_3_0.xslt
- ejemplo1 cfdv3.xml
- En caso de no encontrar los archivos, puede descargarlos haciendo click aqui
Otros archivos con los que hacer pruebas:
Resultado:
Para obtener el resultado de cadena original en el ejemplo anterior se uso xsltproc:
- Windows: Descargar las herramientas en el siguiente enlace libxml
- Linux: Ya estan instaladas por default
$ xsltproc cadenaoriginal_3_0.xslt ejemplo1cfdv3.xml
1.3.1. Diagrama del proceso de generación
1.3.2. Ejemplos de Código
Generar Cadena Original con JAVA
import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; public class Main{ public static void main(String[] args){ StreamSource sourceXSL = new StreamSource(new File("C:/SAT/cadenaoriginal_3_0.xslt")); StreamSource sourceXML = new StreamSource(new File("C:/SAT/ejemplo1cfdv3.xml")); TransformerFactory tFactory = TransformerFactory.newInstance(); Transformer transformer = tFactory.newTransformer(sourceXSL); OutputStream output = new ByteArrayOutputStream(); transformer.transform(sourceXML, new StreamResult(output)); System.out.println(new String(((ByteArrayOutputStream) output).toByteArray())); } }
Generar Cadena Original con C# (CSharp)
using System; using System.Xml.XPath; using System.Xml.Xsl; using System.Xml; using System.IO; namespace pruebas { public class GeneradorCadenas { public GeneradorCadenas() { //Cargar el XML StreamReader reader = new StreamReader(@"C:\Users\Solucion\Factura_2319E_2012-02-20.xml"); XPathDocument myXPathDoc = new XPathDocument(reader); //Cargando el XSLT XslCompiledTransform myXslTrans = new XslCompiledTransform(); myXslTrans.Load(@"C:\Users\Solucion\cadenaoriginal_3_0.xslt"); StringWriter str = new StringWriter(); XmlTextWriter myWriter = new XmlTextWriter(str); //Aplicando transformacion myXslTrans.Transform(myXPathDoc, null, myWriter); //Resultado string result = str.ToString(); //Fin del programa. } } }
1.3.3. Herramienta
Generador de Cadena Original
Ésta herramienta toma una factura electrónica (CFD) (.xml) y obtiene su cadena original aplicando el XSLT que haya elegido en: Version de cadena
- Modalidad "Generar", Procesa un XML previamente seleccionado, calcula su cadena original y la muestra
- Modalidad "Descargar", Procesa un XML previamente seleccionado, calcula su cadena original y descarga un archivo .txt con la cadena