Recomendaciones Generales
Series y Folios
Es necesario que use series diferentes para distinguir entre todos los diferentes tipos de documentos:
- Facturas
- Notas de Crédito
- Documentos de pago
- Cartas Porte
- Nóminas
Cantidades e importes
Los campos numéricos (cantidades, precios, totales, deben venir con la cantidad de decimales que desea que aparezcan en a factura, el sistema "no" agrega o quita decimales. Elementos como $ y comas, son eliminados de los números. Otros tipos de caracteres no válidos pueden generar errores al intentar facturar, lo mejor es no enviar símbolos en los números.
Llenado del layout
Como el layout se basa en llenar un archivo texto separado por pipes, es común saltar un pipe y que la información que enviamos se recorra generando errores de validación de datos o timbrado.
Para minimizar esto, si su lenguaje lo soporta utilice conceptos como sprintf o interpolación de strings.
Tomemos como ejemplo la siguiente línea:
COMPROBANTE:version|serie|folio|fecha|forma_pago|condiciones_pago|subtotal|descuento|clave_moneda|tipo_cambio|total|tipo_comprobante|metodo_pago|cp_lugar_exp|confirmacion|exportacion
Interpolación de strings
javascript
cfd.version = '4.0'
cfd.serie = 'A'
cfd.folio = '0005'
cfd.fecha = '2024-11-03'
// continuar el llenado de datos ...
cfd.confirmacion = ""
linea = `COMPROBANTE:${cfd["version"]}|${cfd["serie"]}|${cfd["folio"]}|${cfd["fecha"]}|...|${cfd["cp_lugar_exp"]}|${cfd["confirmacion"]}|${cfd["exportacion"]}`
printf
adapte a su lenguaje de programación
cfd.version = '4.0'
cfd.serie = 'A'
cfd.folio = '0005'
cfd.fecha = '2024-11-03'
// continuar el llenado de datos ...
cfd.confirmacion = ""
linea = sprintf("COMPROBANTE:%s|%s|%s|%s|...|%s|%s|%s",cfd["version"],cfd["serie"],cfd["folio"],{cfd["fecha"],...,cfd["cp_lugar_exp"],{cfd["confirmacion"],cfd["exportacion"])`
Problemas comunes al momento de integrar
- Equipos WindowsXP deben tener ServicePack3 instalado. Y Opciones de Internet > Opciones Avanzadas > TLS activo
- Si desarrolla sus propias interfaces con componentes de conexión a Web, asegurarse de que el componente utilice TLS como método de encriptamiento.
- Enviar caracteres de control en el layout. En ocasiones los usuarios copian y pegan texto de emails, documentos de word, etc. En su sistema administrativo, y esto ocasiona que se introduzcan en la base de datos de su sistema caracteres de control que no se ven al momento de presentar la información o ver el layout de texto, pero el caracter está ahí. Debe limpiar el campo y volver a escribirlo a mano si es necesario
- Ceros a la izquierda en números de folios de factura. Si sus folios de facturación van a ser: 000001, 000002, etc. Debe enviar consistentemente los ceros en todas las interfaces que se documenten posteriormente. Esto es si crea una factura : A001, llamadas posteriores deben ser A001, y no A1.
- Sus variables deben contener un valor válido antes de llenar el layout. Esto es deben llevar valors como : 0, string vacío "". Es común no inicializar variables y enviar valores como : null, undefined, nil. Que aun si no generan errores podrán salir como información timbrada en su CFDI.