Skip to content

Instantly share code, notes, and snippets.

@jluisflo
Created March 10, 2026 22:06
Show Gist options
  • Select an option

  • Save jluisflo/6aef338be208ade313178cfbe44f48dd to your computer and use it in GitHub Desktop.

Select an option

Save jluisflo/6aef338be208ade313178cfbe44f48dd to your computer and use it in GitHub Desktop.
Design Doc: Campos Calculados de Riesgo Crediticio — Research de Data Equifax

Design Doc: Campos Calculados de Riesgo Crediticio — Research de Data Equifax

1. Anatomia del Response de Equifax

El API datos-comerciales/transaction/execute retorna la siguiente estructura:

interconnectResponse.applicants.primaryConsumer
├── personalInformation          # Datos del documento consultado
├── calculates                   # 126 metricas PRE-CALCULADAS por Equifax
├── elSalvador360                # Codigo de estado de la operacion
└── infoCrediticia               # DATA CRUDA detallada
    ├── scoreActual[1]           # Score crediticio actual + mensajes
    ├── bandeuda[145]            # Deudas bancarias (prestamos + TC reportados a bancos)
    ├── tardeuda[28]             # Deudas de tarjetas de credito
    ├── deucomer[85]             # Deudas comerciales (cooperativas, telecom, comercio)
    ├── sicom[2]                 # Registro SICOM
    ├── morinfo[5]               # Informacion de mora
    ├── directoriopersonas[1]    # Directorio de personas
    ├── scoreHistorico[28]       # Historico de scores
    ├── fiadoresbanca[29]        # Fiadores bancarios
    ├── fiadorescomercio[18]     # Fiadores comerciales
    └── consulta[4]              # Consultas realizadas

1.1 Secciones relevantes para los calculos

bandeuda (145 registros, 36 periodos: 202207-202506) Cubre productos bancarios: PRESTAMOS, TARJETA DE CREDITO, CUENTAS POR COBRAR. Campos clave: diasMoraCapital, cuotaReferencia, fechaOtorgamiento, estadoCredito, periodoInformacion, tipoPrestamo.

tardeuda (28 registros, 9 periodos: 202312-202506) Cubre tarjetas de credito especificamente. Campos clave: limiteDolares, pagoMinimo, estadoCredito, saldoMora. NO tiene diasMoraCapital — solo saldoMora (monto) y fechaMora (fecha).

deucomer (85 registros, 36 periodos: 202207-202506) Cubre deuda comercial: cooperativas, telecom (TELEFONICA), retail (ALMACENES SIMAN). Campos clave: montoCuota, saldoMora, estadoCredito, tipoEntidad. NO tiene diasMoraCapital — solo saldoMora y fechaMora.

calculates (126 campos pre-calculados por Equifax) Metricas agregadas que cubren TODOS los productos (banco, tarjetas, telecom, IMF, comercial).


2. Analisis Campo por Campo

2.1 sv_sumlimite — Sumatoria de limites de tarjetas/creditos

Aspecto Detalle
Fuente infoCrediticia.tardeuda[]
Campo limiteDolares
Filtro periodoInformacion = mas reciente, estadoCredito = 'NORMAL'
Operacion SUM

Evidencia con data real (periodo 202506):

Referencia Fuente limiteDolares estadoCredito
450820 CREDIBAC 5,000 NORMAL
0044378739 T.DINERO 4,000 NORMAL
0626894026 T.DINERO 4,000 NORMAL
428291 BANCO CUSCATLAN 3,950 NORMAL
8739004437 T.DINERO 4,000 NORMAL
4437873900 T.DINERO 4,000 NORMAL
7390044378 T.DINERO 4,000 NORMAL
TOTAL 28,950.00

Justificacion:

  • Equifax NO provee este campo pre-calculado. Solo ofrece be_maxlimite_tar = 5,000 (MAX individual, no SUM).
  • Se DEBE calcular desde data cruda tardeuda[].limiteDolares.
  • Se filtran solo tarjetas con estadoCredito = 'NORMAL' (excluyendo 'CANCELADA').
  • Se usa el periodo mas reciente para reflejar la situacion actual.

2.2 sv_sumcuota — Sumatoria de cuotas comerciales + tarjetas

Aspecto Detalle
Fuente 1 infoCrediticia.tardeuda[] → campo pagoMinimo
Fuente 2 infoCrediticia.deucomer[] → campo montoCuota
Filtro Periodo mas reciente, estadoCredito != 'CANCELADO'/'CANCELADA'
Operacion SUM(tardeuda.pagoMinimo) + SUM(deucomer.montoCuota)

Evidencia — Tarjetas (tardeuda 202506, activas):

Referencia pagoMinimo
450820 18.35
0044378739 1,209.02
0626894026 1,314.44
428291 0.00
8739004437 1,209.02
4437873900 1,209.02
7390044378 1,209.02
Subtotal tarjetas 6,168.87

Validacion cruzada: be_sumcuotaref_tar = 6,168.87 ✅ coincide exactamente.

Evidencia — Comercial (deucomer 202506, no cancelado):

Fuente Tipo Registros montoCuota
CETYA DE R.L. (cooperativa) CREDITO A PLAZOS 8 507.76
ALMACENES SIMAN (retail) LINEA ROTATIVO 4 5.47
TELEFONICA (telecom) LINEA ROTATIVO 7 5.81
Subtotal comercial 19 519.04

sv_sumcuota = 6,168.87 + 519.04 = 6,687.91

Justificacion — ¿Por que NO usar be_sumcuotaref_com (5.47)?

  • Equifax clasifica "comercial" (be_sumcuotaref_com = 5.47) de forma estricta, excluyendo cooperativas y telecom.
  • Equifax separa: be_sumcuotaref_com (5.47) + be_sumcuotaref_imf (444.29) + be_sumcuotaref_tel (5.81).
  • Para evaluar capacidad de pago real, todas las obligaciones mensuales compiten por el mismo ingreso: cooperativas, telecom, retail.
  • Usar deucomer completa (519.04) es la vision mas conservadora y correcta para decision de credito.
  • Excluir cooperativas/telecom seria subestimar las obligaciones del cliente → mayor riesgo de aprobar creditos impagables.

2.3 sv_vector_24m — Vector de morosidad 24 meses

Aspecto Detalle
Fuente infoCrediticia.bandeuda[]
Campo diasMoraCapital
Agrupacion Por periodoInformacion (YYYYMM)
Operacion MAX(diasMoraCapital) por periodo → mapear a escala 0-7
Formato String de 24 valores separados por ;

Escala de mapeo dias → nivel:

Dias mora Nivel Significado
0 0 Al dia
1-30 1 Mora leve
31-60 2 Mora moderada
61-90 3 Mora significativa
91-120 4 Mora severa
121-150 5 Mora grave
151-180 6 Mora muy grave
180+ 7 Default/Castigo

Evidencia — Ultimos 24 periodos de bandeuda:

Periodo Registros Max diasMora Nivel
202307-202502 2-11 0 0
202503 10 7 1
202504 10 36 2
202505 10 64 3
202506 15 95 4

Vector resultante: 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;2;3;4

Justificacion — ¿Por que solo bandeuda?

  • bandeuda es la unica fuente con diasMoraCapital por registro por periodo.
  • tardeuda NO tiene diasMoraCapital (solo saldoMora en monto, no dias).
  • deucomer NO tiene diasMoraCapital (solo saldoMora y fechaMora).
  • bandeuda cubre productos bancarios + tarjetas de credito reportadas a bancos, que son la base del vector.
  • Los 36 periodos disponibles (202207-202506) superan los 24 necesarios.
  • Equifax provee be_maxdiasmora_tot24m pero como un solo valor MAX del periodo (no per-month), insuficiente para el vector.

Edge case — Menos de 24 meses:

  • Si hay < 24 periodos en bandeuda, rellenar las posiciones faltantes con 0 a la izquierda.
  • Esto asume "sin informacion = sin mora", lo cual es conservador para el vector (no penaliza por falta de historial).

2.4 mob — Months on Books

Aspecto Detalle
Fuente infoCrediticia.bandeuda[]
Campo fechaOtorgamiento
Filtro estadoCredito = 'VIGENTE', periodo mas reciente
Operacion MIN(fechaOtorgamiento) → diff en meses vs fecha de corte

Evidencia — Registros activos (bandeuda 202506, VIGENTE):

fechaOtorgamiento tipoPrestamo codigoFuente
2015-10-15 DECRECIENTE NO ROT. BANCO DAVIVIENDA SA
2021-06-26 CREDITO DECRECIENTE BANCO AGRICOLA
2024-10-24 TARJETA DE CREDITO BANCO CUSCATLAN
2024-10-26 TARJETA DE CREDITO BANCO DAVIVIENDA SA
2024-10-28 CREDITO DECRECIENTE BANCO DAVIVIENDA SA
2024-11-22 TARJETA DE CREDITO BANCO CUSCATLAN
2025-05-13 TARJETA DE CREDITO BANCO AGRICOLA

Calculo: Fecha corte = Junio 2025 (del periodoInformacion 202506)

  • Oldest: 2015-10-15
  • MOB = (2025-06) - (2015-10) = 116 meses

Justificacion:

  • Se usa la fechaOtorgamiento mas antigua de registros VIGENTES (no cancelados).
  • La fecha de corte se deriva del periodoInformacion mas reciente en la respuesta.
  • Equifax NO provee MOB pre-calculado en la seccion calculates.

2.5 nivel_mora — Nivel de morosidad actual

Aspecto Detalle
Fuente calculates.be_maxdiasmora_actual
Operacion Mapear a escala 0-7 (misma que vector_24m)

Evidencia — Comparativa de fuentes:

Fuente Max dias mora Cobertura
bandeuda.diasMoraCapital (202506) 95 Solo banco
be_maxdiasmora_ban12m 95 Solo banco 12m
be_maxdiasmora_tar12m 103 Solo tarjetas 12m
be_maxdiasmora_com12m 108 Solo comercial 12m
be_maxdiasmora_tel12m 110 Solo telecom 12m
be_maxdiasmora_imf12m 97 Solo IMF 12m
be_maxdiasmora_actual 110 TODOS los productos

Calculo: be_maxdiasmora_actual = 110 → nivel 4 (91-120 dias)

Justificacion — ¿Por que be_maxdiasmora_actual y no bandeuda cruda?

  • Si usaramos solo bandeuda: max = 95 → nivel 4. Mismo nivel en este caso, pero valor inexacto.
  • El valor real es 110 (de telecom), que bandeuda NO captura.
  • tardeuda y deucomer NO tienen campo diasMoraCapital — solo montos de mora (saldoMora) y fecha (fechaMora), sin dias de atraso directo.
  • Para una fintech evaluando riesgo: la mora en telecom es indicador lider de estres financiero. Ignorarla seria subestimar el riesgo.
  • Usar be_maxdiasmora_actual es la unica forma de cubrir TODOS los productos sin recalcular desde datos incompletos.

3. Resumen de Decisiones: Data Cruda vs Pre-calculada

Campo Fuente Tipo Razon
sv_sumlimite tardeuda.limiteDolares CRUDA No existe SUM pre-calculado
sv_sumcuota tardeuda.pagoMinimo + deucomer.montoCuota CRUDA Definicion mas amplia que Equifax
sv_vector_24m bandeuda.diasMoraCapital por periodo CRUDA Necesita granularidad mensual
mob bandeuda.fechaOtorgamiento CRUDA No existe pre-calculado
nivel_mora calculates.be_maxdiasmora_actual PRE-CALCULADA Cubre todos los productos

Principio de diseno: Usar data cruda cuando necesitamos un calculo que Equifax no provee o cuando nuestra definicion difiere. Usar pre-calculada cuando Equifax ya tiene la metrica exacta que necesitamos con mejor cobertura.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment