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