Cadena original para documento de retenciones.
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 documento de retención 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 retenciones.xslt Retenciones.xml
Recibirás la cadena original:
||1.0|20001000000100005867|TEST00001|2015-01-05T10:12:48-06:00|25|Otro tipo de retención|AAA010101AAA|Empresa DEMO para Rentenciones S de TST|AAAA010101HNLMNLD2|Nacional|XAXX010101000|PÚBLICO EN GENERAL S DE TST|VAHE820926HNLLRD02|6|6|2014|14000.00|13000.00|1000.00|3500.00|1000.00|01|500.00|Pago definitivo|1000.00|02|500.00|Pago provisional||~
Construcción manual
Si deseas construirla manualmente, estas son las reglas generales:
- 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.
- El inicio de la cadena original se encuentra marcado mediante una secuencia de caracteres || (doble “pipe”).
- 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|.
- Cada dato individual se encontrará separado de su dato subsiguiente, en caso de existir, mediante un carácter | (“pipe” sencillo).
- 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.
- Los datos opcionales no expresados, no aparecerán en la cadena original y no tendrán delimitador alguno.
- El final de la cadena original será expresado mediante una cadena de caracteres || (doble “pipe”).
- Toda la cadena original se expresará en el formato de codificación UTF-8.
- 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. - 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|NumCert|FolioInt|FechaExp|CveRetenc|DescRetenc|Emisor:RFCEmisor|Emisor:NomDenRazSocE|Emisor:CURPE|Receptor:Nacionalidad|Receptor:Nacional:RFCRecep|Receptor:Nacional:NomDenRazSocR|Receptor:Nacional:CURPR|Receptor:Extranjero:NumRegIdTrib|Receptor:Extranjero:NomDenRazSocR|Periodo:MesIni|Periodo:MesFin|Periodo:Ejerc|Totales:montoTotOperacion|Totales:montoTotGrav|Totales:montoTotExent|Totales:montoTotRet|Totales:ImpRetenidos:BaseRet|Totales:ImpRetenidos:Impuesto|Totales:ImpRetenidos:montoRet|Totales:ImpRetenidos:TipoPagoRet||
* 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 y Impuestos:Retencion impuesto, importe
Puedes consultar el detalle en el siguiente documento.