Cadena original.

 

La cadena original es la secuencia de datos formada con parte de la información contenida dentro del comprobante fiscal digital.

Con la cadena original y tu certificado, podrás generar el sello que también debes colocar en el comprobante.

Para generarla puedes utilizar un transformador xslt o construirla manualmente.

Construcción automática con xslt

Para la construcción de la cadena original automática, necesitas:

  • El cfdi con toda la información (ejemplo)
  • El xslt de transformación
  • Instalar la herramienta xsltproc (Incluida en Linux y OS X. Para windows descargarla aquí).

Desde la linea de comando deberás ejecutar:

>xsltproc cadenaoriginal_3_2.xslt cfd_ejemplo.xml

Recibirás la cadena original:

||3.2|2013-12-02T22:18:24|ingreso|PAGO EN UNA SOLA EXHIBICION|1000.00|1160.00|TRANSFERENCIA ELECTRONICA|D.F.,MEXICO|DESCONOCIDO|AAA010101AAA|EMPRESA DEMO|REFORMA|BENITO JUAREZ|DISTRITO FEDERAL|MEXICO|34343|PERSONA FISCA|XAXX010101000|PUBLICO EN GENERAL|INSURGENTES|MEXICO|1|CANT|PZA|1000.00|1000.00|IVA|160.00|160.00||~

Construcción manual

Si deseas construirla manualmente, estas son las reglas generales:

  1. Ninguno de los atributos que conforman al comprobante fiscal digital deberá contener el caracter | (“pipe”) debido a que este será utilizado como caracter de control en la formación de la cadena original.
  2. El inicio de la cadena original se encuentra marcado mediante una secuencia de caracteres || (doble “pipe”).
  3. Se expresará únicamente la información del dato sin expresar el atributo al que hace referencia. Esto es, si la serie del comprobante es la “A” solo se expresará |A| y nunca |Serie A|.
  4. Cada dato individual se encontrará separado de su dato subsiguiente, en caso de existir, mediante un carácter | (“pipe” sencillo).
  5. Los espacios en blanco que se presenten dentro de la cadena original serán tratados de la siguiente manera:
    • Se deberán remplazar todos los tabuladores, retornos de carro y saltos de línea por espacios en blanco.
    • Acto seguido se elimina cualquier caracter en blanco al principio y al final de cada separador | (“pipe” sencillo).
    • Finalmente, toda secuencia de caracteres en blanco intermedias se sustituyen por un único caracter en blanco.
  6. Los datos opcionales no expresados, no aparecerán en la cadena original y no tendrán delimitador alguno.
  7. El final de la cadena original será expresado mediante una cadena de caracteres || (doble “pipe”).
  8. Toda la cadena original se expresará en el formato de codificación UTF-8.
  9. El nodo o nodos adicionales se integrarán a la cadena original como se indica en la secuencia de formación en su numeral 10, respetando la secuencia de formación y número de orden del ComplemetoConcepto.
  10. El nodo o nodos adicionales se integraran al final de la cadena original respetando la secuencia de formación para cada complemento y número de orden del Complemento.

Secuencia de formación

La secuencia de formación será siempre en el orden que se expresa a continuación, tomando en cuenta las reglas generales expresadas en el párrafo anterior.

**||version|fecha|tipoDeComprobante|formaDePago|condicionesDePago|subTotal|descuento|TipoCambio|Moneda|total|metodoDePago|LugarExpedicion|NumCtaPago|FolioFiscalOrig|SerieFolioFiscalOrig|FechaFolioFiscalOrig|MontoFolioFiscalOrig|Emisor:rfc|Emisor:nombre|Emisor:DomicilioFiscal:calle|Emisor:DomicilioFiscal:noExterior|Emisor:DomicilioFiscal:noInterior|Emisor:DomicilioFiscal:colonia|Emisor:DomicilioFiscal:localidad|Emisor:DomicilioFiscal:referencia|Emisor:DomicilioFiscal:municipio|Emisor:DomicilioFiscal:estado|Emisor:DomicilioFiscal:referencia|Emisor:DomicilioFiscal:estado|Emisor:DomicilioFiscal:pais|Emisor:DomicilioFiscal:codigoPostal|Emisor:ExpedidoEn:calle|Emisor:ExpedidoEn:noExterior|Emisor:ExpedidoEn:noInterior|Emisor:ExpedidoEn:colonia|Emisor:ExpedidoEn:localidad|Emisor:ExpedidoEn:referencia|Emisor:ExpedidoEn:municipio|Emisor:ExpedidoEn:estado|Emisor:ExpedidoEn:referencia|Emisor:ExpedidoEn:estado|Emisor:ExpedidoEn:pais|Emisor:ExpedidoEn:codigoPostal|Emisor:RegimenFiscal:Regimen|Receptor:rfc|Receptor:nombre|Receptor:DomicilioFiscal:calle|Receptor:DomicilioFiscal:noExterior|Receptor:DomicilioFiscal:noInterior|Receptor:DomicilioFiscal:colonia|Receptor:DomicilioFiscal:localidad|Receptor:DomicilioFiscal:referencia|Receptor:DomicilioFiscal:municipio|Receptor:DomicilioFiscal:estado|Receptor:DomicilioFiscal:referencia|Receptor:DomicilioFiscal:estado|Receptor:DomicilioFiscal:pais|Receptor:DomicilioFiscal:codigoPostal|Concepto:cantidad|Concepto:unidad|Concepto:noIdentificacion|Concepto:descripcion|Concepto:valorUnitario|Concepto:importe|Concepto:InformacionAduanera:numero|Concepto:InformacionAduanera:fecha|Concepto:InformacionAduanera:aduana|Concepto:CuentaPredial:numero|ComplementoConcepto|Impuestos:Retencion:impuesto|Impuestos:Retencion:importe|Impuestos:totalImpuestosRetenidos|Impuestos:Traslado:impuesto|Impuestos:Traslado:importe|Impuestos:totalImpuestosTrasladados||

* Los campos no obligatorios en la definición del CFDI, se podrían ignorar en la cadena. Como Emisor:ExpedidoEn Receptor:ExpedidoEn

* Para cada uno de los nodos de Emisor:RegimenFiscal, se deberá incluir cada valor Regimen

* Para cada uno de los nodos de Concepto:InformacionAduanera deberá incluir cada valor numero, fecha, aduana

* Para todos los nodos de Impuestos:Trasladado e Impuestos:Retencion impuesto, importe

Puedes consultar el detalle en el Anexo 20, página 48