Inicio  |  Timbrado  |  1.3. Cadena Original
La LCO fue actualizada por última vez el 31/ene/2023

1.3. Cadena Original

De acuerdo con el SAT la cadena original se entiende como:

"La secuencia de datos formada con la información contenida dentro de la factura electrónica, establecida en el Rubro C del Anexo 20 de la Resolución Miscelánea Fiscal."

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 en versión 3.3 usando los siguientes elementos que brinda el SAT:

El Sistema de Administración Tributaria (SAT) prevé el cambio de su versión de CFDI 3.3 a la Nueva versión de CFDI 3.3.

En Solución Factible® reiteramos nuestro compromiso de servirle preparando los escenarios y presentando la documentación existente relacionada sobre este tema, para que así, usted tome sus precauciones y la transición a este nuevo esquema de facturación sea para usted lo más simple posible. Más información Aquí

Nota: nuestro ambiente de "Testing" ya se encuentra disponible para recibir comprobantes en versión 3.3 le recomendamos realizar las pruebas que considere necesarias.

Cadena original resultado:
||3.3|FTVN|41|2017-08-14T00:00:00|01|30001000000300023699|10000|0|JPY|0.166123|11600|I|PUE|45070|EKU9003173C9|ESCUELA KEMPER URGATE SA DE CV|601|KAHO641101B39|OSCAR KALA HAAK|G01|25101800|23534855|1|EA|PZA|Concepto con divisa JPY|10000|10000|10000|002|Tasa|0.160000|1600|0|002|Tasa|0.160000|1600|1600||

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 defecto.
$ xsltproc cadenaoriginal_3_3.xslt ejemplo1cfdv33.xml

1.3.1. Diagrama del proceso de generación

diagrama generar cadena original

1.3.2. Ejemplos de Código

Generar Cadena Original con Java

                    import javax.xml.transform.Transformer;
                    import javax.xml.transform.TransformerException;
                    import javax.xml.transform.TransformerFactory;
                    import javax.xml.transform.stream.StreamResult;
                    import javax.xml.transform.stream.StreamSource;
                    import java.io.File;
                    import java.io.IOException;

                    public class CadenaOriginalGen {

                        public static void main(String[] args) throws TransformerException, IOException {
                            // cargar el archivo XSLT
                            File xslt = new File("C:/SAT/cadenaoriginal_3_3.xslt");
                            StreamSource sourceXSL = new StreamSource(xslt);

                            // cargar el CFDI
                            File cfdi = new File("C:/SAT/ejemplo1cfdv33.xml");
                            StreamSource sourceXML = new StreamSource(cfdi);

                            // crear el procesador XSLT que nos ayudará a generar la cadena original
                            // con base en las reglas del archivo XSLT
                            TransformerFactory tFactory = TransformerFactory.newInstance();
                            Transformer transformer = tFactory.newTransformer(sourceXSL);

                            // aplicar las reglas del XSLT con los datos del CFDI y escribir el resultado en output
                            transformer.transform(sourceXML, new StreamResult(System.out));
                        }
                    }
                

Generar Cadena Original con PHP (Cortesía de Julián May)

                    <?php
                        //ruta al archivo XML del CFDI
                        $xmlFile="C:/SAT/ejemplo1cfdv33.xml";

                        // Ruta al archivo XSLT
                        $xslFile = "C:/SAT/cadenaoriginal_3_3.xslt"; 

                        // Crear un objeto DOMDocument para cargar el CFDI
                        $xml = new DOMDocument("1.0","UTF-8"); 
                        // Cargar el CFDI
                        $xml->load($xmlFile);

                        // Crear un objeto DOMDocument para cargar el archivo de transformación XSLT
                        $xsl = new DOMDocument();
                        $xsl->load($xslFile);

                        // Crear el procesador XSLT que nos generará la cadena original con base en las reglas descritas en el XSLT
                        $proc = new XSLTProcessor;
                        // Cargar las reglas de transformación desde el archivo XSLT.
                        $proc->importStyleSheet($xsl);
                        // Generar la cadena original y asignarla a una variable
                        $cadenaOriginal = $proc->transformToXML($xml);

                        echo $cadenaOriginal;
                        ?>
                

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:/SAT/ejemplo1cfdv33.xml");
                                XPathDocument myXPathDoc = new XPathDocument(reader);

                                //Cargando el XSLT
                                XslCompiledTransform myXslTrans = new XslCompiledTransform();
                                myXslTrans.Load(@"C:/SAT/cadenaoriginal_3_3.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
Datos de contacto
comments powered by Disqus