Operación sign-cfe
Referencia técnica para operación sign-cfe dentro del cliente local.
Objetivo
POST /sign-cfe es la operación principal para numerar y firmar un CFE con respuesta inmediata.
Se usa cuando el sistema integrador necesita el resultado en la misma llamada.
Endpoint
POST /sign-cfe
Cuándo usarlo
- emisión interactiva
- emisión con respuesta inmediata
- escenarios donde la aplicación necesita recibir
serie,numeroycfe_firmadoen el acto
Campos de request
| Campo | Obligatoriedad | Descripción |
|---|---|---|
tipo_cfe | obligatorio | Tipo de comprobante a emitir |
uuid | obligatorio | Identificador externo estable del comprobante |
xml | obligatorio | XML base sin firma |
cod_comercio | condicional | Obligatorio si se enruta por punto de emisión |
cod_terminal | condicional | Obligatorio si se enruta por punto de emisión |
adenda | opcional | Texto adicional asociado al comprobante |
emails | opcional | Destinatarios asociados al flujo |
impresora | opcional | Parámetros de impresión si el flujo lo requiere |
send_now | opcional | Indica el comportamiento posterior al firmado |
Ejemplo de request
curl -X POST http://127.0.0.1:18787/sign-cfe \
-H 'Content-Type: application/json' \
-d '{
"tipo_cfe": 101,
"uuid": "venta-pos-000123",
"cod_comercio": "1",
"cod_terminal": "1",
"xml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><CFE xmlns=\"http://cfe.dgi.gub.uy\" version=\"1.0\"><eTck>...</eTck></CFE>",
"adenda": "Pago contado",
"emails": ["[email protected]"],
"send_now": false
}'
Campos de response
| Campo | Cuándo aparece | Descripción |
|---|---|---|
uuid | siempre | UUID recibido |
tipo_cfe | siempre | Tipo de comprobante procesado |
serie | éxito | Serie asignada |
numero | éxito | Número asignado |
codigo_respuesta | siempre | Resultado funcional |
mensaje_respuesta | siempre | Mensaje complementario |
codigo_terminal | siempre | Terminal utilizada |
codigo_comercio | siempre | Comercio utilizado |
numero_inicial_cae | éxito | Inicio del rango CAE usado |
numero_final_cae | éxito | Fin del rango CAE usado |
vencimiento_cae | éxito | Vencimiento del CAE |
cfe_firmado | éxito | XML final firmado |
datos_codigo_qr | éxito | URL o datos del QR |
codigo_seguridad | éxito | Código de seguridad fiscal |
fecha_firma_cfe | éxito | Fecha y hora de firma |
imagen_qr | opcional | Imagen QR si el runtime la devuelve |
Ejemplo de response exitosa
{
"uuid": "venta-pos-000123",
"tipo_cfe": "101",
"serie": "A",
"numero": "301",
"codigo_respuesta": "00",
"mensaje_respuesta": "CFE firmado localmente",
"codigo_terminal": "1",
"codigo_comercio": "1",
"numero_inicial_cae": "301",
"numero_final_cae": "400",
"vencimiento_cae": "2028-01-01",
"cfe_firmado": "<CFE>...</CFE>",
"datos_codigo_qr": "https://...",
"codigo_seguridad": "ZmCpqT",
"fecha_firma_cfe": "2026-04-29T19:00:00Z",
"imagen_qr": null
}
Ejemplo de response con error funcional
{
"uuid": "venta-pos-000123",
"tipo_cfe": "101",
"serie": null,
"numero": null,
"codigo_respuesta": "31",
"mensaje_respuesta": "error de validacion: el XML fue rechazado por el validador local: TOT_MNTTOTAL_INVALID: MntTotal no coincide con la suma esperada",
"codigo_terminal": "1",
"codigo_comercio": "1",
"numero_inicial_cae": null,
"numero_final_cae": null,
"vencimiento_cae": null,
"cfe_firmado": null,
"datos_codigo_qr": null,
"codigo_seguridad": null,
"fecha_firma_cfe": null,
"imagen_qr": null
}
Códigos funcionales relevantes
| Código | Interpretación |
|---|---|
00 | Éxito |
31 | Rechazo de validación o XML rechazado |
96 | Error interno, firma, rango, persistencia o SOAP |
Cuando el rechazo viene del validador local, mensaje_respuesta incluye los motivos concretos encontrados. Si hay muchos errores, se devuelven los primeros motivos y un contador de errores adicionales.
Códigos HTTP relevantes
| HTTP | Interpretación |
|---|---|
200 | Operación procesada; revisar codigo_respuesta |
422 | Request inválido o XML rechazado tempranamente |
500 | Error interno del daemon |
Escenarios de error típicos
XML inválido
Resultado esperado:
- rechazo funcional
codigo_respuesta = "31"
uuid faltante
Resultado esperado:
- rechazo temprano del request
- mensaje típico:
uuid es obligatorio
tipo_cfe inválido
Resultado esperado:
- rechazo temprano del request
- mensaje típico:
tipo_cfe debe ser mayor a cero
ruteo incompleto
Resultado esperado:
- rechazo temprano del request
- mensajes típicos:
cod_comercio es obligatorio para enrutar por punto de emisióncod_terminal es obligatorio para enrutar por punto de emisión
Regla de integración
Considerar emisión exitosa solo si:
- HTTP
200 codigo_respuesta = "00"serieynumerovienen informados