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.
| Campo | Tipo | Descripción | Constraints |
|---|---|---|---|
id | UUID | Identificador único del usuario | PRIMARY KEY |
email | VARCHAR(255) | Correo electrónico | UNIQUE, NOT NULL |
password_hash | VARCHAR(255) | Hash de la contraseña | NOT NULL |
user_type | ENUM | Tipo de usuario: 'persona_fisica', 'persona_moral' | NOT NULL |
rfc | VARCHAR(13) | RFC del usuario | UNIQUE |
curp | VARCHAR(18) | CURP (solo persona física) | |
razon_social | VARCHAR(255) | Razón social (solo persona moral) | |
nombre_completo | VARCHAR(255) | Nombre completo (persona física) | |
telefono | VARCHAR(15) | Teléfono de contacto | |
created_at | TIMESTAMP | Fecha de creación | DEFAULT NOW() |
updated_at | TIMESTAMP | Fecha de última actualización | |
email_verified | BOOLEAN | ¿Email verificado? | DEFAULT FALSE |
status | ENUM | 'active', 'suspended', 'closed' | DEFAULT 'active' |
3. Tabla: applications (Solicitudes de Crédito)
Almacena las solicitudes de crédito de los usuarios.
| Campo | Tipo | Descripción | Constraints |
|---|---|---|---|
id | UUID | Identificador único de la solicitud | PRIMARY KEY |
folio | VARCHAR(20) | Número de folio (generado automáticamente) | UNIQUE, NOT NULL |
user_id | UUID | ID del usuario que solicita | FOREIGN KEY (users.id) |
product_type | ENUM | 'credito_constructoras', 'credito_pyme', 'prestamo_persona_fisica' | NOT NULL |
monto_solicitado | DECIMAL(12,2) | Monto solicitado | NOT NULL |
plazo_meses | INT | Plazo en meses | NOT NULL |
destino_credito | TEXT | Descripción del destino del crédito | |
status | ENUM | 'draft', 'submitted', 'in_review', 'approved', 'rejected', 'cancelled' | DEFAULT 'draft' |
score_ia | INT | Score generado por la IA (300-850) | |
nivel_riesgo | ENUM | 'A', 'B', 'C', 'D', 'E' | |
analista_asignado_id | UUID | ID del analista asignado | FOREIGN KEY (users.id) |
fecha_aprobacion | TIMESTAMP | Fecha de aprobación | |
fecha_rechazo | TIMESTAMP | Fecha de rechazo | |
motivo_rechazo | TEXT | Motivo del rechazo | |
created_at | TIMESTAMP | Fecha de creación | DEFAULT NOW() |
updated_at | TIMESTAMP | Fecha de última actualización |
4. Tabla: credits (Créditos Activos)
Almacena los créditos aprobados y desembolsados.
| Campo | Tipo | Descripción | Constraints |
|---|---|---|---|
id | UUID | Identificador único del crédito | PRIMARY KEY |
application_id | UUID | ID de la solicitud aprobada | FOREIGN KEY (applications.id) |
user_id | UUID | ID del usuario acreditado | FOREIGN KEY (users.id) |
monto_aprobado | DECIMAL(12,2) | Monto aprobado | NOT NULL |
tasa_interes_anual | DECIMAL(5,2) | Tasa de interés anual (%) | NOT NULL |
tasa_moratoria_anual | DECIMAL(5,2) | Tasa moratoria anual (%) | NOT NULL |
plazo_meses | INT | Plazo en meses | NOT NULL |
comision_apertura | DECIMAL(12,2) | Comisión por apertura | |
monto_desembolsado | DECIMAL(12,2) | Monto neto desembolsado | |
fecha_desembolso | DATE | Fecha de desembolso | |
fecha_vencimiento | DATE | Fecha de vencimiento final | |
saldo_capital | DECIMAL(12,2) | Saldo de capital pendiente | |
saldo_intereses | DECIMAL(12,2) | Saldo de intereses pendientes | |
dias_mora | INT | Días de mora actuales | DEFAULT 0 |
status | ENUM | 'active', 'paid', 'defaulted', 'restructured' | DEFAULT 'active' |
created_at | TIMESTAMP | Fecha de creación | DEFAULT NOW() |
updated_at | TIMESTAMP | Fecha de última actualización |
5. Tabla: payments (Pagos)
Almacena los pagos realizados por los clientes.
| Campo | Tipo | Descripción | Constraints |
|---|---|---|---|
id | UUID | Identificador único del pago | PRIMARY KEY |
credit_id | UUID | ID del crédito | FOREIGN KEY (credits.id) |
monto_pago | DECIMAL(12,2) | Monto del pago | NOT NULL |
fecha_pago | DATE | Fecha en que se realizó el pago | NOT NULL |
metodo_pago | ENUM | 'transferencia', 'deposito', 'tarjeta' | |
referencia | VARCHAR(50) | Referencia bancaria | |
aplicado_a_capital | DECIMAL(12,2) | Monto aplicado a capital | |
aplicado_a_intereses | DECIMAL(12,2) | Monto aplicado a intereses | |
aplicado_a_moratorios | DECIMAL(12,2) | Monto aplicado a intereses moratorios | |
status | ENUM | 'pending', 'confirmed', 'rejected' | DEFAULT 'pending' |
created_at | TIMESTAMP | Fecha de creación | DEFAULT NOW() |
6. Tabla: documents (Documentos)
Almacena los documentos cargados por los usuarios.
| Campo | Tipo | Descripción | Constraints |
|---|---|---|---|
id | UUID | Identificador único del documento | PRIMARY KEY |
user_id | UUID | ID del usuario | FOREIGN KEY (users.id) |
application_id | UUID | ID de la solicitud (si aplica) | FOREIGN KEY (applications.id) |
document_type | ENUM | 'identificacion', 'comprobante_domicilio', 'acta_constitutiva', 'escrituras', 'factura_vehiculo', etc. | NOT NULL |
file_name | VARCHAR(255) | Nombre del archivo | |
file_path | VARCHAR(500) | Ruta del archivo en S3 | NOT NULL |
file_size | INT | Tamaño del archivo en bytes | |
mime_type | VARCHAR(100) | Tipo MIME del archivo | |
status | ENUM | 'uploaded', 'verified', 'rejected' | DEFAULT 'uploaded' |
uploaded_at | TIMESTAMP | Fecha de carga | DEFAULT NOW() |
7. Tabla: guarantees (Garantías)
Almacena la información de las garantías (inmobiliarias o prendarias).
| Campo | Tipo | Descripción | Constraints |
|---|---|---|---|
id | UUID | Identificador único de la garantía | PRIMARY KEY |
credit_id | UUID | ID del crédito | FOREIGN KEY (credits.id) |
tipo_garantia | ENUM | 'inmobiliaria', 'prendaria' | NOT NULL |
descripcion | TEXT | Descripción de la garantía | |
valor_avaluo | DECIMAL(12,2) | Valor del avalúo | |
folio_real | VARCHAR(50) | Folio real (inmobiliaria) | |
vin | VARCHAR(17) | VIN del vehículo (prendaria) | |
status | ENUM | 'pending', 'registered', 'released' | DEFAULT 'pending' |
created_at | TIMESTAMP | Fecha de creación | DEFAULT NOW() |
Última actualización: 28 de diciembre de 2025