Integración por bandeja de archivos
Referencia técnica para integración por bandeja de archivos dentro del cliente local.
Objetivo
Esta guía describe cómo integrar un sistema externo con el cliente local usando intercambio de archivos.
Está pensada para integradores. Cubre:
- carpetas de trabajo
- formatos soportados
- respuestas esperadas
- ruteo por punto de emisión
- impresión automática
Estructura de carpetas
La bandeja trabaja con estas ubicaciones lógicas:
- carpeta base
- carpeta de entrada
- carpeta temporal
- carpeta de salida
- carpeta de error
Ejemplo:
BandejaArchivos/
Entrada/
Temporal/
Salida/
Error/
Flujo:
- el integrador deja el archivo en
Entrada - el cliente local lo mueve a
Temporal - si sale bien termina en
Salida - si falla termina en
Error
Ruteo por punto de emisión
Hay dos modos:
- usar el perfil activo del daemon
- enviar
cod_comercioycod_terminalpara enrutar a un punto de emisión específico
Regla:
- si se envía uno de esos campos, deben enviarse ambos
Formato JSON
Ejemplo:
{
"tipo_cfe": 111,
"uuid": "externo-123",
"cod_comercio": "1",
"cod_terminal": "1",
"xml": "<CFE xmlns=\"http://cfe.dgi.gub.uy\" version=\"1.0\">...</CFE>",
"adenda": "Texto opcional",
"emails": ["cliente@example.com"],
"impresora": "CajaFiscal;FORMATO=personalizado;COPIAS=2",
"send_now": true
}
Campos principales:
| Campo | Obligatorio | Descripción |
|---|---|---|
tipo_cfe | Sí | Tipo de comprobante |
uuid | Sí | Identificador externo único |
xml | Sí | XML del CFE sin firmar |
cod_comercio | No | Ruteo por punto de emisión |
cod_terminal | No | Ruteo por punto de emisión |
adenda | No | Texto adicional |
emails | No | Destinatarios opcionales |
impresora | No | Especificación de impresión |
send_now | No | Si es true, intenta enviar al servidor |
Formato TXT compatible
Actualmente el mensaje soportado es:
310: solicitud de numeración y firma local
La respuesta es:
311
Ejemplo:
310|UUID|111|||1|120000|20150101|FCTEST01|TEST01|||||||||||
<CFE xmlns="http://cfe.dgi.gub.uy" version="1.0">
...
</CFE>
<Adenda>
Texto de adenda
</Adenda>
Campos relevantes de la primera línea:
| Posición | Campo | Uso actual |
|---|---|---|
| 1 | Tipo de mensaje | Debe ser 310 |
| 2 | UUID | Identificador externo |
| 3 | Tipo CFE | Tipo de comprobante |
| 9 | Código de terminal | Ruteo por perfil |
| 10 | Código de comercio | Ruteo por perfil |
| 20 | Destino de impresión | Especificación de impresora |
| 22 | Email para envío PDF | Destinatario adicional |
Respuesta 311
Cuando el procesamiento termina, el daemon genera un archivo *-response.txt.
Si el procesamiento fue correcto:
- el original pasa a
Salida - se genera
*-response.txt - debajo de la primera línea se deja el XML firmado
Si falla:
- el original pasa a
Error - se genera
*.error.txt - también se genera
*.response.txt
La respuesta puede incluir:
UUIDTipoCfeSerieNumeroCodigoRespuestaMensajeRespuestaCodigoTerminalCodigoComercioNumeroInicialCAENumeroFinalCAEVencimientoCAECFEFirmadoFechaFirmaCFECodigoSeguridadDatosCodigoQr
Códigos de respuesta
El resultado funcional principal viaja en:
CodigoRespuestaMensajeRespuesta
Regla práctica:
- considerar emitido un comprobante solo si existe respuesta de éxito y la operación devolvió serie y número válidos
Impresión automática
La impresión puede enviarse:
- en JSON, con
impresora - en TXT, usando
Destino de impresión
Ejemplos:
CajaFiscalCajaFiscal;COPIAS=2CajaFiscal;FORMATO=personalizado;COPIAS=2CajaFiscal;FORMATO=escpos;COPIAS=2CajaFiscal;FORMATO=rollo;COPIAS=2
Parámetros:
| Parámetro | Descripción |
|---|---|
| nombre base | Nombre o destino de impresora |
FORMATO=personalizado | Plantilla HTML/PDF |
FORMATO=escpos | Térmica ESC/POS RAW |
FORMATO=roll, FORMATO=rollo, FORMATO=tml | PDF tipo ticket usando parser .tml |
COPIAS=2 | Cantidad de copias |
Errores frecuentes
- falta
cod_comercioocod_terminalal enrutar por punto de emisión - no existe el perfil local para ese punto
- no hay impresora configurada
- error de firma
- error de rango
- error SOAP
Recomendaciones
- usar
uuidrealmente únicos - no considerar éxito solo porque el archivo salió de
Entrada - registrar en el sistema externo
uuid,tipo_cfe,serie,numero,codigo_respuestaymensaje_respuesta - si se usa ruteo por punto de emisión, enviar siempre
cod_comercioycod_terminal