Esquemas de Base de Datos - Capitalta

1. Visión General

La plataforma Capitalta utiliza una base de datos relacional (PostgreSQL o MySQL) para almacenar toda la información de usuarios, solicitudes, créditos, pagos y operaciones. Este documento describe los esquemas principales de las tablas.

2. Tabla: users (Usuarios)

Almacena la información de los usuarios registrados en la plataforma.

CampoTipoDescripciónConstraints
idUUIDIdentificador único del usuarioPRIMARY KEY
emailVARCHAR(255)Correo electrónicoUNIQUE, NOT NULL
password_hashVARCHAR(255)Hash de la contraseñaNOT NULL
user_typeENUMTipo de usuario: 'persona_fisica', 'persona_moral'NOT NULL
rfcVARCHAR(13)RFC del usuarioUNIQUE
curpVARCHAR(18)CURP (solo persona física)
razon_socialVARCHAR(255)Razón social (solo persona moral)
nombre_completoVARCHAR(255)Nombre completo (persona física)
telefonoVARCHAR(15)Teléfono de contacto
created_atTIMESTAMPFecha de creaciónDEFAULT NOW()
updated_atTIMESTAMPFecha de última actualización
email_verifiedBOOLEAN¿Email verificado?DEFAULT FALSE
statusENUM'active', 'suspended', 'closed'DEFAULT 'active'

3. Tabla: applications (Solicitudes de Crédito)

Almacena las solicitudes de crédito de los usuarios.

CampoTipoDescripciónConstraints
idUUIDIdentificador único de la solicitudPRIMARY KEY
folioVARCHAR(20)Número de folio (generado automáticamente)UNIQUE, NOT NULL
user_idUUIDID del usuario que solicitaFOREIGN KEY (users.id)
product_typeENUM'credito_constructoras', 'credito_pyme', 'prestamo_persona_fisica'NOT NULL
monto_solicitadoDECIMAL(12,2)Monto solicitadoNOT NULL
plazo_mesesINTPlazo en mesesNOT NULL
destino_creditoTEXTDescripción del destino del crédito
statusENUM'draft', 'submitted', 'in_review', 'approved', 'rejected', 'cancelled'DEFAULT 'draft'
score_iaINTScore generado por la IA (300-850)
nivel_riesgoENUM'A', 'B', 'C', 'D', 'E'
analista_asignado_idUUIDID del analista asignadoFOREIGN KEY (users.id)
fecha_aprobacionTIMESTAMPFecha de aprobación
fecha_rechazoTIMESTAMPFecha de rechazo
motivo_rechazoTEXTMotivo del rechazo
created_atTIMESTAMPFecha de creaciónDEFAULT NOW()
updated_atTIMESTAMPFecha de última actualización

4. Tabla: credits (Créditos Activos)

Almacena los créditos aprobados y desembolsados.

CampoTipoDescripciónConstraints
idUUIDIdentificador único del créditoPRIMARY KEY
application_idUUIDID de la solicitud aprobadaFOREIGN KEY (applications.id)
user_idUUIDID del usuario acreditadoFOREIGN KEY (users.id)
monto_aprobadoDECIMAL(12,2)Monto aprobadoNOT NULL
tasa_interes_anualDECIMAL(5,2)Tasa de interés anual (%)NOT NULL
tasa_moratoria_anualDECIMAL(5,2)Tasa moratoria anual (%)NOT NULL
plazo_mesesINTPlazo en mesesNOT NULL
comision_aperturaDECIMAL(12,2)Comisión por apertura
monto_desembolsadoDECIMAL(12,2)Monto neto desembolsado
fecha_desembolsoDATEFecha de desembolso
fecha_vencimientoDATEFecha de vencimiento final
saldo_capitalDECIMAL(12,2)Saldo de capital pendiente
saldo_interesesDECIMAL(12,2)Saldo de intereses pendientes
dias_moraINTDías de mora actualesDEFAULT 0
statusENUM'active', 'paid', 'defaulted', 'restructured'DEFAULT 'active'
created_atTIMESTAMPFecha de creaciónDEFAULT NOW()
updated_atTIMESTAMPFecha de última actualización

5. Tabla: payments (Pagos)

Almacena los pagos realizados por los clientes.

CampoTipoDescripciónConstraints
idUUIDIdentificador único del pagoPRIMARY KEY
credit_idUUIDID del créditoFOREIGN KEY (credits.id)
monto_pagoDECIMAL(12,2)Monto del pagoNOT NULL
fecha_pagoDATEFecha en que se realizó el pagoNOT NULL
metodo_pagoENUM'transferencia', 'deposito', 'tarjeta'
referenciaVARCHAR(50)Referencia bancaria
aplicado_a_capitalDECIMAL(12,2)Monto aplicado a capital
aplicado_a_interesesDECIMAL(12,2)Monto aplicado a intereses
aplicado_a_moratoriosDECIMAL(12,2)Monto aplicado a intereses moratorios
statusENUM'pending', 'confirmed', 'rejected'DEFAULT 'pending'
created_atTIMESTAMPFecha de creaciónDEFAULT NOW()

6. Tabla: documents (Documentos)

Almacena los documentos cargados por los usuarios.

CampoTipoDescripciónConstraints
idUUIDIdentificador único del documentoPRIMARY KEY
user_idUUIDID del usuarioFOREIGN KEY (users.id)
application_idUUIDID de la solicitud (si aplica)FOREIGN KEY (applications.id)
document_typeENUM'identificacion', 'comprobante_domicilio', 'acta_constitutiva', 'escrituras', 'factura_vehiculo', etc.NOT NULL
file_nameVARCHAR(255)Nombre del archivo
file_pathVARCHAR(500)Ruta del archivo en S3NOT NULL
file_sizeINTTamaño del archivo en bytes
mime_typeVARCHAR(100)Tipo MIME del archivo
statusENUM'uploaded', 'verified', 'rejected'DEFAULT 'uploaded'
uploaded_atTIMESTAMPFecha de cargaDEFAULT NOW()

7. Tabla: guarantees (Garantías)

Almacena la información de las garantías (inmobiliarias o prendarias).

CampoTipoDescripciónConstraints
idUUIDIdentificador único de la garantíaPRIMARY KEY
credit_idUUIDID del créditoFOREIGN KEY (credits.id)
tipo_garantiaENUM'inmobiliaria', 'prendaria'NOT NULL
descripcionTEXTDescripción de la garantía
valor_avaluoDECIMAL(12,2)Valor del avalúo
folio_realVARCHAR(50)Folio real (inmobiliaria)
vinVARCHAR(17)VIN del vehículo (prendaria)
statusENUM'pending', 'registered', 'released'DEFAULT 'pending'
created_atTIMESTAMPFecha de creaciónDEFAULT NOW()

Última actualización: 28 de diciembre de 2025