Skip to content

ImagLend — Productos de Credito

Proposito

Los productos de credito son plantillas configurables que definen las condiciones bajo las cuales un tenant otorga creditos. Cada tenant puede tener multiples productos activos simultaneamente, cada uno con sus propias reglas de montos, plazos, tasas y requisitos.

Categorias de Producto

ImagLend soporta las siguientes categorias de producto:

CategoriaDescripcionPlazo tipicoMonto tipico
microcreditoCreditos de bajo monto y corto plazo15-90 dias50,000 - 1,000,000 COP
consumoCreditos personales de libre destinacion90-720 dias1,000,000 - 50,000,000 COP
linea_rotativaLinea de credito reutilizable con cupo aprobadoIndefinidoHasta 20,000,000 COP
libre_inversionCreditos sin restriccion de uso con garantia180-1800 dias5,000,000 - 200,000,000 COP

Configuracion de un Producto

Estructura Completa

Un producto se configura mediante bloques JSON que definen cada aspecto del credito:

json
{
  "code": "microcredito-30d",
  "name": "Microcredito 30 dias",
  "description": "Credito rapido de bajo monto para necesidades inmediatas",
  "category": "microcredito",
  "amount_config": {
    "min": 100000,
    "max": 750000,
    "default": 300000,
    "step": 50000,
    "currency": "COP"
  },
  "term_config": {
    "min_days": 15,
    "max_days": 90,
    "options": [15, 30, 60, 90]
  },
  "rate_config": {
    "type": "fixed",
    "rate": 0.076,
    "reference_rate": null
  },
  "fee_config": {
    "items": [
      { "code": "origination", "label": "Originacion", "type": "percentage", "value": 0.02, "taxable": false },
      { "code": "platform", "label": "Plataforma", "type": "percentage", "value": 0.005, "taxable": false },
      { "code": "insurance", "label": "Seguro", "type": "percentage", "value": 0.01, "taxable": false }
    ],
    "tax_rate": 0.19,
    "tax_applies_to": "interest"
  },
  "requirements": {
    "min_age": 18,
    "max_age": 70,
    "documents": ["cc", "selfie"],
    "validations": ["identity_verification", "bureau_check"]
  },
  "validation_flow_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "signature_required": true,
  "signature_type": "electronic",
  "disbursement_method": "bank_transfer",
  "disbursement_delay_hours": 0,
  "is_active": true,
  "requires_approval": true
}

Bloque amount_config

Define los rangos de monto permitidos para el producto:

json
{
  "min": 100000,
  "max": 750000,
  "default": 300000,
  "step": 50000,
  "currency": "COP"
}
CampoTipoDescripcion
minnumberMonto minimo permitido
maxnumberMonto maximo permitido
defaultnumberMonto por defecto en el simulador
stepnumberIncremento del slider en el simulador
currencystringCodigo ISO 4217 de la moneda

Bloque term_config

Define los plazos disponibles:

json
{
  "min_days": 15,
  "max_days": 360,
  "options": [15, 30, 60, 90, 180, 360]
}

Si options esta presente, el usuario solo puede seleccionar esos plazos. Si esta vacio o ausente, cualquier valor entre min_days y max_days es valido.

Bloque rate_config

Define la tasa de interes:

json
{
  "type": "fixed",
  "rate": 0.076,
  "reference_rate": null
}
CampoTipoDescripcion
typestringfixed o variable
ratenumberTasa efectiva mensual (para fixed) o spread (para variable)
reference_ratestringTasa de referencia para variable: DTF, IBR, SOFR

Para tasas variables, la tasa final es: reference_rate_value + rate (spread).

Bloque fee_config

Define los costos asociados al credito como un array flexible de items. Cada tenant puede agregar o quitar fees segun su modelo de negocio:

json
{
  "items": [
    { "code": "origination", "label": "Originacion", "type": "percentage", "value": 0.02, "taxable": false },
    { "code": "platform", "label": "Plataforma", "type": "percentage", "value": 0.005, "taxable": false },
    { "code": "insurance", "label": "Seguro", "type": "percentage", "value": 0.01, "taxable": false },
    { "code": "study", "label": "Estudio de credito", "type": "fixed", "value": 15000, "taxable": true },
    { "code": "notary", "label": "Gastos notariales", "type": "fixed", "value": 50000, "taxable": false }
  ],
  "tax_rate": 0.19,
  "tax_applies_to": "interest"
}
Campo del itemTipoDescripcion
codestringIdentificador unico del fee (snake_case)
labelstringNombre visible al usuario en el desglose
typestringpercentage (sobre el monto) o fixed (valor absoluto en la moneda del producto)
valuenumberPorcentaje (0.02 = 2%) si type es percentage, o monto fijo si type es fixed
taxablebooleanSi este fee genera impuesto adicional
Campo globalTipoDescripcion
tax_ratenumberTasa impositiva (0.19 = 19%)
tax_applies_tostringSobre que se calcula el impuesto: interest, fees, all

Valores de tax_applies_to:

  • interest — Impuesto solo sobre los intereses generados
  • fees — Impuesto solo sobre los fees marcados como taxable
  • all — Impuesto sobre intereses + fees taxable

Bloque requirements

Define los requisitos del solicitante:

json
{
  "min_age": 18,
  "max_age": 70,
  "documents": ["cc", "selfie", "income_proof"],
  "validations": ["identity_verification", "bureau_check", "phone_verification"]
}

Relacion con ImagFlow

El campo validation_flow_id vincula un producto con un flujo de validacion en ImagFlow. Cuando un usuario solicita un credito de este producto, el sistema invoca automaticamente el flujo configurado para validar la identidad del solicitante.

Si validation_flow_id es null, el producto no requiere validacion externa y la solicitud avanza directamente.

Soporte Multi-Moneda

ImagLend soporta multiples monedas configurables por producto:

MonedaCodigoPaises
Peso colombianoCOPColombia
Dolar estadounidenseUSDEcuador, Panama, global
Sol peruanoPENPeru
Peso mexicanoMXNMexico
Quetzal guatemaltecoGTQGuatemala

La moneda se define en amount_config.currency y aplica a todos los montos del producto. Un tenant puede tener productos en diferentes monedas.

Consideraciones

  • Los calculos financieros se realizan en la moneda del producto
  • No hay conversion automatica entre monedas
  • El formato de visualizacion se adapta segun la moneda (decimales, separadores)
  • Los reportes pueden consolidar en una moneda base configurada por tenant

Ciclo de Vida del Producto

Un producto de credito pasa por los siguientes estados:

EstadoDescripcion
draftProducto en borrador. No visible para usuarios finales
pending_approvalCreacion enviada para aprobacion maker-checker
activeProducto activo. Disponible para nuevas solicitudes
inactiveProducto desactivado. No acepta nuevas solicitudes pero creditos existentes continuan
pending_changeProducto activo con un cambio pendiente de aprobacion

Versionamiento de Productos

Los productos de credito siguen un modelo de versionamiento inmutable similar al de ImagFlow. Cada cambio aprobado crea una nueva version del producto. Las solicitudes de credito referencian la version especifica del producto con la que fueron creadas, garantizando trazabilidad total.

Modelo de Versionamiento

Reglas de Versionamiento

ReglaDescripcion
InmutabilidadUna version publicada nunca se modifica
Version activa unicaSolo una version puede estar activa por producto
Solicitudes no migranSolicitudes creadas con v1 permanecen con v1
Referencia por versioncredit_application.product_version_id referencia la version exacta
Snapshot completoCada version almacena la configuracion completa (amount, term, rate, fees)
AuditoriaCada version registra quien la creo, quien la aprobo y cuando

Estructura de Datos

json
{
  "product_id": "prod-uuid-001",
  "version_number": 3,
  "status": "active",
  "config_snapshot": {
    "amount_config": { "min": 100000, "max": 750000, "currency": "COP" },
    "term_config": { "min_days": 15, "max_days": 90, "options": [15, 30, 60, 90] },
    "rate_config": { "type": "fixed", "rate": 0.082 },
    "fee_config": {
      "items": [
        { "code": "origination", "label": "Originacion", "type": "percentage", "value": 0.02, "taxable": false },
        { "code": "platform", "label": "Plataforma", "type": "percentage", "value": 0.005, "taxable": false }
      ],
      "tax_rate": 0.19,
      "tax_applies_to": "interest"
    },
    "requirements": { "min_age": 18, "max_age": 70 }
  },
  "created_by": "admin-uuid",
  "approved_by": "approver-uuid",
  "created_at": "2026-05-18T10:00:00Z",
  "published_at": "2026-05-18T10:05:00Z",
  "change_request_id": "cr-uuid-001",
  "change_summary": "Tasa ajustada de 0.076 a 0.082"
}

Flujo de Cambio con Versionamiento

Impacto en Solicitudes

  • Al crear una solicitud, se registra product_version_id (no solo product_id)
  • La solicitud "congela" las condiciones del momento de creacion
  • Si el producto cambia despues, la solicitud no se ve afectada
  • El credito resultante hereda las condiciones de la version de la solicitud
  • En el desglose del credito siempre se puede ver con que version se creo
json
{
  "credit_application": {
    "id": "app-uuid-001",
    "product_id": "prod-uuid-001",
    "product_version_id": "pv-uuid-002",
    "product_version_number": 2,
    "product_config_at_creation": {
      "rate": 0.076,
      "fee_config": { "..." }
    }
  }
}

Flujo de Creacion

Flujo de Modificacion

Reglas del Maker-Checker

ReglaDescripcion
El solicitante no puede aprobar su propio cambiorequested_by != reviewed_by
Solo un cambio pendiente por entidadNo se permite crear otro si ya hay uno pending
Expiracion automaticaCambios no revisados expiran en 72 horas
Auditoria completaSe registra payload_before y payload_after
NotificacionSe notifica a los aprobadores cuando hay cambios pendientes

Ejemplos de Configuracion por Categoria

Microcredito

json
{
  "code": "micro-express-30d",
  "name": "Microcredito Express 30 dias",
  "category": "microcredito",
  "amount_config": {
    "min": 50000,
    "max": 500000,
    "default": 200000,
    "step": 25000,
    "currency": "COP"
  },
  "term_config": {
    "min_days": 15,
    "max_days": 30,
    "options": [15, 30]
  },
  "rate_config": {
    "type": "fixed",
    "rate": 0.076
  },
  "fee_config": {
    "origination": 0.03,
    "platform": 0.005,
    "insurance": 0.0,
    "tax": 0.19
  },
  "requirements": {
    "min_age": 18,
    "max_age": 65,
    "documents": ["cc", "selfie"],
    "validations": ["identity_verification"]
  },
  "validation_flow_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "signature_required": true,
  "signature_type": "electronic",
  "disbursement_method": "wallet",
  "disbursement_delay_hours": 0,
  "is_active": true,
  "requires_approval": true
}

Credito de Consumo

json
{
  "code": "consumo-personal-360d",
  "name": "Credito Personal hasta 360 dias",
  "category": "consumo",
  "amount_config": {
    "min": 1000000,
    "max": 20000000,
    "default": 5000000,
    "step": 500000,
    "currency": "COP"
  },
  "term_config": {
    "min_days": 90,
    "max_days": 360,
    "options": [90, 180, 270, 360]
  },
  "rate_config": {
    "type": "fixed",
    "rate": 0.018
  },
  "fee_config": {
    "origination": 0.015,
    "platform": 0.005,
    "insurance": 0.008,
    "tax": 0.19
  },
  "requirements": {
    "min_age": 21,
    "max_age": 70,
    "documents": ["cc", "selfie", "income_proof", "bank_statements"],
    "validations": ["identity_verification", "bureau_check", "phone_verification"]
  },
  "validation_flow_id": "b2c3d4e5-f6a7-8901-bcde-f23456789012",
  "signature_required": true,
  "signature_type": "digital",
  "disbursement_method": "bank_transfer",
  "disbursement_delay_hours": 24,
  "is_active": true,
  "requires_approval": true
}

Linea Rotativa

json
{
  "code": "linea-rotativa-cupo",
  "name": "Linea de Credito Rotativa",
  "category": "linea_rotativa",
  "amount_config": {
    "min": 500000,
    "max": 20000000,
    "default": 3000000,
    "step": 500000,
    "currency": "COP"
  },
  "term_config": {
    "min_days": 30,
    "max_days": 360,
    "options": [30, 60, 90, 180, 360]
  },
  "rate_config": {
    "type": "variable",
    "rate": 0.005,
    "reference_rate": "DTF"
  },
  "fee_config": {
    "origination": 0.0,
    "platform": 0.008,
    "insurance": 0.005,
    "tax": 0.19
  },
  "requirements": {
    "min_age": 25,
    "max_age": 65,
    "documents": ["cc", "selfie", "income_proof", "bank_statements", "tax_return"],
    "validations": ["identity_verification", "bureau_check", "income_verification"]
  },
  "validation_flow_id": "c3d4e5f6-a7b8-9012-cdef-345678901234",
  "signature_required": true,
  "signature_type": "digital",
  "disbursement_method": "bank_transfer",
  "disbursement_delay_hours": 48,
  "is_active": true,
  "requires_approval": true
}

Libre Inversion

json
{
  "code": "libre-inversion-premium",
  "name": "Credito Libre Inversion Premium",
  "category": "libre_inversion",
  "amount_config": {
    "min": 5000000,
    "max": 200000000,
    "default": 20000000,
    "step": 5000000,
    "currency": "COP"
  },
  "term_config": {
    "min_days": 180,
    "max_days": 1800,
    "options": [180, 360, 720, 1080, 1440, 1800]
  },
  "rate_config": {
    "type": "variable",
    "rate": 0.003,
    "reference_rate": "IBR"
  },
  "fee_config": {
    "origination": 0.01,
    "platform": 0.003,
    "insurance": 0.012,
    "tax": 0.19
  },
  "requirements": {
    "min_age": 25,
    "max_age": 70,
    "documents": ["cc", "selfie", "income_proof", "bank_statements", "tax_return", "property_cert"],
    "validations": ["identity_verification", "bureau_check", "income_verification", "asset_verification"]
  },
  "validation_flow_id": "d4e5f6a7-b8c9-0123-defa-456789012345",
  "signature_required": true,
  "signature_type": "digital",
  "disbursement_method": "bank_transfer",
  "disbursement_delay_hours": 72,
  "is_active": true,
  "requires_approval": true
}

Producto en USD (Ejemplo Multi-Moneda)

json
{
  "code": "personal-loan-usd",
  "name": "Personal Loan USD",
  "category": "consumo",
  "amount_config": {
    "min": 500,
    "max": 10000,
    "default": 2000,
    "step": 100,
    "currency": "USD"
  },
  "term_config": {
    "min_days": 30,
    "max_days": 360,
    "options": [30, 90, 180, 360]
  },
  "rate_config": {
    "type": "fixed",
    "rate": 0.045
  },
  "fee_config": {
    "origination": 0.02,
    "platform": 0.005,
    "insurance": 0.005,
    "tax": 0.0
  },
  "requirements": {
    "min_age": 18,
    "max_age": 65,
    "documents": ["passport", "selfie"],
    "validations": ["identity_verification"]
  },
  "validation_flow_id": "e5f6a7b8-c9d0-1234-efab-567890123456",
  "signature_required": true,
  "signature_type": "electronic",
  "disbursement_method": "bank_transfer",
  "disbursement_delay_hours": 24,
  "is_active": true,
  "requires_approval": true
}

Validaciones de Producto

Al crear o modificar un producto, el sistema valida:

ReglaValidacion
Codigo unicocode debe ser unico dentro del tenant
Rango de montosmin debe ser menor que max
Default en rangodefault debe estar entre min y max
Step validostep debe dividir exactamente el rango
Tasa positivarate debe ser mayor a 0 y menor a 1
Plazo coherentemin_days menor que max_days
Options en rangoCada valor en options debe estar entre min_days y max_days
Flow existenteSi validation_flow_id no es null, debe existir en ImagFlow
Fees no negativosTodos los fees deben ser >= 0
Categoria validaDebe ser una de las categorias soportadas

Notas Tecnicas

  • Los productos se almacenan en la tabla credit_products con RLS por tenant_id
  • El campo row_version se usa para concurrencia optimista (ETags)
  • Los cambios en productos activos generan eventos lending.product.updated
  • La configuracion del simulador publico se deriva del producto activo
  • Un producto inactivo no aparece en el simulador pero sus creditos existentes siguen operando

Reimagine Tech LLC — Documentacion Interna