ImagLend — Pipeline de Originacion Configurable
Proposito
El pipeline de originacion define los pasos que un solicitante debe completar para obtener un credito. Es configurable por producto — cada tenant define que pasos incluir, en que orden, cuales son obligatorios y que condiciones aplican. Esto permite desde un microcredito express (4 pasos) hasta un credito hipotecario complejo (10+ pasos).
Flujo Tipico (Optimizado para Costos)
Nota: La validacion de identidad (paso costoso) se ejecuta DESPUES de la aprobacion para ahorrar costos. Si el credito se rechaza por score o AML, no se gasta en biometria.
Configuracion del Pipeline
El pipeline se define como parte de la product_version en un campo origination_pipeline:
{
"origination_pipeline": {
"steps": [
{
"id": "landing",
"type": "landing",
"order": 1,
"required": true,
"phase": "public",
"config": {}
},
{
"id": "register",
"type": "user_registration",
"order": 2,
"required": true,
"phase": "public",
"config": {
"create_keycloak_user": true,
"require_phone": true,
"require_email": true
}
},
{
"id": "consent",
"type": "legal_consent",
"order": 3,
"required": true,
"phase": "public",
"config": {
"documents": [
{ "code": "privacy_policy", "version": "2.0", "required": true },
{ "code": "terms_conditions", "version": "3.1", "required": true },
{ "code": "data_treatment", "version": "1.0", "required": true }
]
}
},
{
"id": "contact_validation",
"type": "contact_verification",
"order": 4,
"required": true,
"phase": "public",
"config": {
"channels": ["sms", "email"],
"sms_provider": "twilio",
"check_uniqueness": true,
"allow_whatsapp": true
}
},
{
"id": "application_form",
"type": "form",
"order": 5,
"required": true,
"phase": "public",
"config": {
"sections": ["personal", "financial", "employment", "references"],
"fields_by_section": {
"personal": ["full_name", "birth_date", "gender", "marital_status", "address"],
"financial": ["monthly_income", "monthly_expenses", "other_income", "other_debts"],
"employment": ["activity_type", "company_name", "position", "time_in_job"],
"references": ["reference_1_name", "reference_1_phone"]
}
}
},
{
"id": "bureau_check",
"type": "compliance_check",
"order": 6,
"required": false,
"phase": "backend",
"config": {
"providers": ["datacredito_co", "transunion_co"],
"check_types": ["credit_score", "aml_lists", "pep_lists"],
"auto_reject_if": {
"score_below": 400,
"in_aml_list": true,
"in_pep_list": false
}
}
},
{
"id": "analyst_review",
"type": "manual_review",
"order": 7,
"required": true,
"phase": "backend",
"config": {
"auto_approve": {
"enabled": true,
"conditions": {
"score_above": 700,
"amount_below": 1000000,
"no_aml_flags": true
}
},
"assignment_strategy": "round_robin",
"sla_hours": 24
}
},
{
"id": "identity_validation",
"type": "identity_validation",
"order": 8,
"required": true,
"phase": "post_approval",
"config": {
"flow_id": "uuid-del-flujo-de-validacion",
"trigger": "after_approval",
"skip_if_validated_within_days": 30
}
},
{
"id": "signature",
"type": "document_signature",
"order": 9,
"required": true,
"phase": "post_approval",
"config": {
"documents": ["credit_contract", "pagare", "insurance_policy"],
"signature_type": "electronic_otp",
"provider_code": "electronic-generic",
"multi_signer": false
}
},
{
"id": "disbursement",
"type": "disbursement",
"order": 10,
"required": true,
"phase": "post_signature",
"config": {
"method": "bank_transfer",
"delay_hours": 0,
"require_bank_details": true
}
}
]
}
}Tipos de Paso
| Tipo | Descripcion | Ejecutado por | Fase |
|---|---|---|---|
landing | Landing page con simulador | Frontend publico | public |
user_registration | Crear usuario en Keycloak del tenant | Backend + Keycloak | public |
legal_consent | Mostrar y registrar aceptacion de documentos legales | Frontend + Backend | public |
contact_verification | Validar telefono (OTP SMS/WhatsApp) y email | Backend + proveedor | public |
form | Formulario configurable con secciones y campos | Frontend | public |
compliance_check | Consultas a bureaus, listas AML/PEP | Backend + proveedores | backend |
manual_review | Revision por analista humano (con auto-aprobacion opcional) | Panel admin | backend |
identity_validation | Validacion biometrica via ImagFlow | ImagFlow | post_approval |
document_signature | Firma de documentos via ImagSign | ImagSign | post_approval |
disbursement | Transferencia de fondos | Backend | post_signature |
Fases del Pipeline
| Fase | Quien ejecuta | Cuando |
|---|---|---|
public | Usuario final (wizard publico) | Durante la solicitud online |
backend | Sistema automatico o analista | Despues de que el usuario envia la solicitud |
post_approval | Usuario final (notificado) | Despues de que el credito es aprobado |
post_signature | Sistema automatico | Despues de que se firma el contrato |
Registro de Usuario (Paso 2)
Al registrarse, el solicitante se crea como usuario del tenant:
| Accion | Detalle |
|---|---|
| Crear en Keycloak | Usuario en el realm del tenant con rol applicant |
| Crear en Subject 360 | Perfil en ImagID asociado al documento |
| Validar unicidad | Email y telefono no deben estar en uso por otro usuario del tenant |
| Credenciales | Se genera password temporal o se usa passwordless (magic link) |
| Sesion | El usuario queda logueado para completar el wizard |
| Re-login | Puede volver despues a ver estado de su credito |
Despues del registro, el wizard ya no usa access_token sino la sesion del usuario.
Aceptacion Legal (Paso 3)
Modelo de Datos
{
"legal_consents": [
{
"id": "consent-uuid",
"application_id": "app-uuid",
"user_id": "user-uuid",
"document_code": "privacy_policy",
"document_version": "2.0",
"document_hash": "sha256:abc123...",
"accepted_at": "2026-05-18T10:30:00Z",
"ip_address": "190.25.100.50",
"device_fingerprint": "fp-xyz789",
"user_agent": "Mozilla/5.0..."
}
]
}Reglas
- Cada documento legal tiene versiones inmutables
- Si el documento cambia, se crea nueva version
- Las aceptaciones anteriores siguen validas para su version
- Se almacena evidencia completa (IP, device, timestamp, hash del documento)
- El usuario debe aceptar TODOS los documentos marcados como required
- Los documentos se muestran como PDF descargable + checkbox de aceptacion
Validacion de Contacto (Paso 4)
| Canal | Metodo | Validacion |
|---|---|---|
| SMS | OTP 6 digitos, TTL 5 min, max 3 intentos | Numero valido + codigo correcto |
| OTP via WhatsApp Business API | Numero valido + codigo correcto | |
| Link de verificacion o OTP | Email valido + click/codigo |
Unicidad: Antes de enviar OTP, se verifica que el telefono/email no este registrado por otro usuario del mismo tenant. Si ya existe, se ofrece login en vez de registro.
Auto-Aprobacion (Paso 7)
Configurable por producto. Si se cumplen TODAS las condiciones, se salta el analisis manual:
{
"auto_approve": {
"enabled": true,
"conditions": {
"score_above": 700,
"amount_below": 1000000,
"no_aml_flags": true,
"no_active_defaults": true,
"existing_customer": false
}
}
}Si alguna condicion no se cumple, la solicitud va a revision manual (analista).
Validacion de Identidad Post-Aprobacion (Paso 8)
La validacion de identidad es costosa (proveedores de biometria cobran por transaccion). Se ejecuta DESPUES de aprobar para optimizar costos:
Optimizacion: Si el usuario ya fue validado en los ultimos N dias (configurable: skip_if_validated_within_days), se salta este paso.
Ejemplos de Configuracion por Tipo de Producto
Microcredito Express (minimo de pasos)
{
"steps": [
{ "id": "landing", "type": "landing", "order": 1 },
{ "id": "register", "type": "user_registration", "order": 2 },
{ "id": "consent", "type": "legal_consent", "order": 3 },
{ "id": "contact_validation", "type": "contact_verification", "order": 4 },
{ "id": "application_form", "type": "form", "order": 5 },
{ "id": "analyst_review", "type": "manual_review", "order": 6, "config": { "auto_approve": { "enabled": true, "conditions": { "amount_below": 500000 } } } },
{ "id": "signature", "type": "document_signature", "order": 7 },
{ "id": "disbursement", "type": "disbursement", "order": 8 }
]
}Sin bureau, sin AML, sin validacion de identidad. Auto-aprobacion si monto < 500k.
Credito de Consumo (flujo completo)
{
"steps": [
{ "id": "landing", "type": "landing", "order": 1 },
{ "id": "register", "type": "user_registration", "order": 2 },
{ "id": "consent", "type": "legal_consent", "order": 3 },
{ "id": "contact_validation", "type": "contact_verification", "order": 4 },
{ "id": "application_form", "type": "form", "order": 5 },
{ "id": "bureau_check", "type": "compliance_check", "order": 6 },
{ "id": "analyst_review", "type": "manual_review", "order": 7 },
{ "id": "identity_validation", "type": "identity_validation", "order": 8 },
{ "id": "signature", "type": "document_signature", "order": 9 },
{ "id": "disbursement", "type": "disbursement", "order": 10 }
]
}Bureau + AML, analisis manual obligatorio, validacion de identidad post-aprobacion.
Credito con Codeudor (multi-firmante)
{
"steps": [
"...pasos 1-8 igual...",
{
"id": "signature",
"type": "document_signature",
"order": 9,
"config": {
"documents": ["credit_contract", "pagare"],
"multi_signer": true,
"signers": [
{ "role": "debtor", "source": "applicant" },
{ "role": "co_debtor", "source": "form_field:co_debtor_email" }
],
"strategy": "sequential"
}
},
{ "id": "disbursement", "type": "disbursement", "order": 10 }
]
}Estado de la Solicitud por Paso
Cada solicitud trackea en que paso esta y el resultado de cada uno:
{
"application_id": "uuid",
"current_step": "analyst_review",
"pipeline_status": {
"landing": { "status": "completed", "completed_at": "..." },
"register": { "status": "completed", "completed_at": "...", "user_id": "uuid" },
"consent": { "status": "completed", "completed_at": "...", "consents": ["privacy_v2", "terms_v3"] },
"contact_validation": { "status": "completed", "completed_at": "...", "phone_verified": true, "email_verified": true },
"application_form": { "status": "completed", "completed_at": "..." },
"bureau_check": { "status": "completed", "completed_at": "...", "score": 720, "aml_clear": true },
"analyst_review": { "status": "in_progress", "assigned_to": "analyst-uuid", "assigned_at": "..." },
"identity_validation": { "status": "pending" },
"signature": { "status": "pending" },
"disbursement": { "status": "pending" }
}
}Portal del Solicitante
Despues del registro, el usuario puede loguearse en el portal del tenant para:
- Ver estado de su solicitud (en que paso esta)
- Completar pasos pendientes (si vuelve despues)
- Ver creditos activos (despues del desembolso)
- Ver tabla de amortizacion y proximos pagos
- Descargar documentos firmados
URL: dash.{tenant}.reimaginetech.io (mismo panel admin pero con rol applicant que solo ve sus propios datos)
Integracion con Servicios
| Paso | Servicio invocado | Tipo de integracion |
|---|---|---|
| Registro | Keycloak (Identity) | HTTP sincrono |
| Consent | ImagLend interno (legal_consents table) | Local |
| Contacto | Provider Gateway (SMS/WhatsApp/Email) | HTTP sincrono |
| Bureau/AML | Provider Gateway (bureaus, listas) | HTTP sincrono |
| Identidad | ImagFlow (trigger flujo) | HTTP + evento async |
| Firma | ImagSign (crear solicitud) | HTTP + evento async |
| Desembolso | ImagLend interno + banco | HTTP sincrono |
Reglas del Pipeline
- El orden de pasos es configurable pero hay restricciones logicas:
landingsiempre es primeroregisterdebe ir antes deconsent(necesita usuario)disbursementsiempre es ultimosignaturedebe ir despues deanalyst_review(solo se firma si se aprueba)
- Pasos en fase
publiclos completa el usuario - Pasos en fase
backendlos ejecuta el sistema o un analista - Pasos en fase
post_approvalrequieren que el credito este aprobado - Si un paso falla (ej: identidad rechazada post-aprobacion), el credito se cancela
- El usuario puede abandonar y retomar (estado persistido por paso)