Cliente: Veris · Verificador de Capacidad de Endeudamiento · 3 puntos pendientes de definición
{company_id}/autorizaciones/{empleado_id}/{prestamo_id}.pdf.fecha_limite_facturas en el préstamo + job nocturno que alerte cuando venza el plazo.prestamo_id en Fase 2 y lo retorna a Phantom X. En Fase 3, Phantom X incluye ese mismo prestamo_id en el payload para que N360 localice y asocie los documentos. Phantom X debe almacenarlo desde la respuesta de Fase 2.| # | Fase | Origen → Destino | Descripción | Método | Datos clave |
|---|---|---|---|---|---|
| 1 | F1 | Usuario → Phantom X | Operador solicita verificar capacidad de endeudamiento de un empleado de Veris | UI | Cédula, valor, cuotas |
| 2 | F1 | Phantom X → N360 API | Llama al Verificador de Capacidad de Endeudamiento del módulo de préstamos | POST REST/JSON | cedula, valor_requerido, num_cuotas |
| 3 | F1 | N360 API → Phantom X | Responde si el empleado tiene o no capacidad. Si no es apto, el proceso termina. | 200 JSON | apto: bool, capacidad_disponible |
| 4 | F2 | Usuario → Phantom X | Operador emite facturas y confirma los datos del préstamo a registrar | UI | Facturas, valor total, cuotas |
| 5 | F2 | Phantom X → N360 API | Registra el préstamo con facturas y adjunta PDF de autorización firmada por el empleado | POST multipart | facturas[], valor_total, num_cuotas, PDF |
| 6 | F2 | N360 API → Azure Blob | Almacena el PDF de autorización firmada | Azure SDK | Ruta: {company_id}/autorizaciones/{empleado_id}/{prestamo_id}.pdf |
| 7 | F2 | Azure Blob → N360 API | Retorna URL del documento almacenado | Azure SDK | blob_url |
| 8 | F2 | N360 API → Phantom X | Confirma el registro. Estado de facturas PDF: Pendiente de recepción | 201 JSON | prestamo_id, url_autorizacion |
| 9 | F2 | Phantom X → Usuario | Informa al operador que el préstamo fue registrado correctamente | UI | Préstamo registrado |
| 10 | F3 | Phantom X → N360 API | En proceso posterior, Phantom envía los PDFs de las facturas declaradas en Fase 2 | POST multipart | prestamo_id, facturas_pdf[] |
| 11 | F3 | N360 API → Azure Blob | Almacena cada PDF de factura (iterado por archivo) | Azure SDK | Ruta: {company_id}/facturas/{prestamo_id}/factura_N.pdf |
| 12 | F3 | Azure Blob → N360 API | Retorna URL de cada factura almacenada | Azure SDK | blob_url por factura |
| 13 | F3 | N360 API → Phantom X | Confirma recepción. Estado actualizado: Facturas recibidas | 200 JSON | estado: facturas_recibidas |
| ID | HTTP | Fase | Mensaje / Campo clave | Descripción |
|---|---|---|---|---|
| — | 200 | F1 | apto: true, capacidad_disponible: 1200.00 | Empleado verificado con capacidad suficiente. Phantom X puede continuar a Fase 2. |
| — | 200 | F1 | apto: false, capacidad_disponible: 0 | Empleado sin capacidad. El proceso termina aquí; Phantom X informa al operador. |
| — | 201 | F2 | prestamo_id, url_autorizacion, estado: ACTIVO | Préstamo registrado correctamente. prestamo_id debe ser almacenado por Phantom X para la Fase 3. |
| — | 200 | F3 | estado: facturas_recibidas, urls_facturas[] | PDFs de facturas recibidos y asociados al préstamo. Flujo completo. |
| — | 202 | F3 | mensaje: "Procesando", consultar_en: 30 | Los PDFs fueron recibidos pero el almacenamiento en Azure está en proceso. Phantom X debe reintentar en N segundos. |
| ID | HTTP | Fase | Mensaje | Causa y acción |
|---|---|---|---|---|
| VAL-001 | 400 | F1/F2/F3 | Campo requerido ausente: {campo} | El payload no incluye un campo obligatorio. N360 devuelve la lista de campos faltantes. |
| VAL-003 | 422 | F1 | Cedula invalida — verificacion de digito falla | El número de cédula no pasa el algoritmo módulo-10 del Registro Civil. Phantom X debe validar antes de enviar. |
| VAL-004 | 400 | F1 | Cedula con formato incorrecto — debe tener 10 digitos numericos | Guiones, espacios o letras en la cédula. Error de digitación del operador en Phantom X. |
| VAL-007 | 422 | F1/F2 | Monto negativo o cero no permitido | valor_requerido o valor_total es <= 0. |
| ID | HTTP | Fase | Mensaje | Causa y acción |
|---|---|---|---|---|
| EMP-001 | 404 | F1 | Empleado no encontrado con cedula {cedula} en empresa Veris | La cédula no existe en N360. Verificar que el empleado fue cargado correctamente en el sistema. |
| EMP-002 | 422 | F1 | Empleado inactivo — estado: {estado} | El empleado existe pero está INACTIVO, LIQUIDADO o en BAJA. No se puede verificar capacidad. |
| EMP-003 | 422 | F1 | Empleado en proceso de liquidacion — operacion no permitida | El empleado está en estado LIQUIDANDO. Rechazar hasta que el proceso de liquidación concluya. |
| EMP-007 | 404 | F1/F2 | Empresa Veris no encontrada o inactiva | El tenant de Veris no existe o está suspendido en N360. Escalar a soporte N360. |
| ID | HTTP | Fase | Mensaje | Causa y acción |
|---|---|---|---|---|
| CAP-001 | 422 | F1 | Capacidad insuficiente — disponible: {monto}, solicitado: {monto} | El empleado tiene capacidad, pero menor al monto requerido. Phantom X debe mostrar el monto máximo disponible. |
| CAP-002 | 422 | F1 | Capacidad no calculada — empleado sin rol de pago asignado | Falta configuración en N360. Escalar a soporte N360 para revisar la parametrización del empleado. |
| CAP-003 | 409 | F2 | Capacidad cambio entre verificacion y registro — diferencia: {monto} | Condición de carrera: otro préstamo fue registrado entre la Fase 1 y la Fase 2. N360 debe recalcular y Phantom X confirmar si desea continuar. |
| CAP-004 | 422 | F2 | Descuento excede el maximo legal permitido | El monto de la cuota supera el porcentaje máximo descontable por ley ecuatoriana. La respuesta incluye el máximo permitido. |
| CAP-006 | 200 | F1 | advertencias: ["anticipo_pendiente"] | El empleado tiene un anticipo pendiente que podría reducir la capacidad real. Se incluye en el campo advertencias[] de la respuesta exitosa; no es un error. |
| ID | HTTP | Fase | Mensaje | Causa y acción |
|---|---|---|---|---|
| DOC-001 | 202 | F3 | PDF de autorizacion no disponible aun — reintente en {n} segundos | El PDF de autorización firmada está en generación asíncrona. Phantom X debe reintentar con backoff. |
| DOC-002 | 500 | F2/F3 | Error al generar PDF — referencia: {prestamo_id} | Fallo en el motor de PDF de N360. Se registra para reintento manual. Phantom X debe alertar al operador. |
| DOC-003 | 410 | F3 | URL de documento expirada — solicite nueva URL | El token de acceso a Azure Blob venció. N360 debe re-generar la URL firmada y devolverla. |
| DOC-004 | 409 | F3 | Facturas duplicadas — ya existen PDFs para {prestamo_id} | Phantom X envió los PDFs dos veces. N360 devuelve la referencia original; no re-procesa. Idempotencia activa. |
| ID | HTTP | Fase | Mensaje | Causa y acción |
|---|---|---|---|---|
| INF-001 | 504 | F2/F3 | Timeout al conectar con Azure Blob | Azure no respondió en el tiempo configurado. N360 reintenta automáticamente (máx. 3 veces). Si persiste: alerta interna, no se expone el detalle al cliente. |
| INF-002 | 502 | F2/F3 | Servicio de almacenamiento no disponible | Azure Blob retornó 5xx o la conexión fue rechazada. Se activa circuit breaker; el préstamo queda en estado PENDIENTE_DOCUMENTOS. |
| INF-004 | 503 | Todas | N360 temporalmente fuera de servicio | Base de datos no disponible o despliegue en curso. Phantom X debe reintentar con backoff exponencial. No devolver detalle de infra al cliente. |
| INF-006 | 429 | Todas | Limite de peticiones excedido — reintentar en {n} segundos | Rate limiting activado. Phantom X debe respetar el header Retry-After de la respuesta. |
| ID | HTTP | Fase | Mensaje | Causa y acción |
|---|---|---|---|---|
| AUTH-001 | 401 | Todas | Token no enviado — incluya Authorization: Bearer en el header | El header Authorization está ausente en el request de Phantom X. |
| AUTH-002 | 401 | Todas | Token expirado — token_expired: true | El JWT venció. Phantom X debe renovar el token antes de reintentar la operación. |
| AUTH-004 | 403 | Todas | Sin permiso para operar en empresa Veris | El token es válido pero el scope no incluye el tenant de Veris. Revisar configuración del cliente en N360. |
| ID | HTTP | Fase | Mensaje | Causa y acción |
|---|---|---|---|---|
| ORD-001 | 422 | F2 | Operacion requiere verificacion previa — Fase 1 no completada | Phantom X intentó registrar el préstamo sin haber verificado capacidad primero. El flujo debe respetar el orden F1 → F2 → F3. |
| ORD-002 | 404 | F3 | prestamo_id no encontrado o expirado | El prestamo_id de la Fase 2 no existe en N360 o el plazo para enviar las facturas venció. Phantom X debe re-verificar. |
| ORD-003 | 200 | F2/F3 | Solicitud duplicada detectada — respuesta original devuelta | Idempotencia activa. Si Phantom X reenvía el mismo request (mismo prestamo_id o Idempotency-Key), N360 retorna la respuesta original sin re-procesar. No es un error. |
| ORD-005 | 422 | F2/F3 | Estado incorrecto — estado actual: {estado}, permitidos: {estados[]} | Se intentó una transición de estado no permitida (ej: registrar facturas en un préstamo ya CANCELADO). |
| ORD-006 | 422 | F2 | Periodo de nomina cerrado — no se aceptan descuentos para {periodo} | El rol de pago del período ya fue cerrado. El préstamo se procesará en el siguiente período. |