RF22: Usuario registra deuda
Descripción
Como usuario autenticado, quiero registrar mis deudas (créditos, tarjetas, préstamos) para que Finnova calcule mi patrimonio neto y proponga estrategias para reducirlas.
El saldo de la deuda se cifra a nivel de campo. Las deudas son insumo clave del análisis de IA (estrategias de pago y reducción de deuda).
| Campo | Valor |
|---|---|
| Módulo | Finance Data Collection (FDC) Module |
| Actor | Usuario autenticado |
| Endpoint | POST /finance/debts |
| Precondiciones | Sesión activa |
| Prioridad | Media (MVP) |
| Etapa | MVP |
| Requisitos relacionados | RF21, RF12, RF28 |
Reglas de negocio
- RN-22.1 — Una deuda tiene tipo (catálogo), acreedor, saldo, tasa de interés (opcional) y pago mensual (opcional).
- RN-22.2 —
balancese cifra a nivel de campo (AES-256-GCM, clave por usuario). - RN-22.3 — Las deudas reducen el patrimonio neto y alimentan recomendaciones de reducción de deuda.
- RN-22.4 — El usuario puede editar el saldo, registrar abonos o eliminar la deuda.
Validaciones de entrada
| Campo | Reglas | Mensaje de error |
|---|---|---|
type | Obligatorio. Valor de catálogo (tarjeta, préstamo, hipoteca, otro). | "Selecciona un tipo de deuda válido." |
creditor | Obligatorio. 2–80 caracteres. | "Ingresa un acreedor válido." |
balance | Obligatorio. Numérico ≥ 0. Máx. 2 decimales. | "Ingresa un saldo válido." |
interestRate | Opcional. Numérico 0–100. | "Ingresa una tasa válida (0–100)." |
Validación de tipos y rangos con consultas parametrizadas; no se aceptan inyecciones SQL.
Criterios de aceptación
Escenario 1: Registro de deuda exitoso
Dado que ingreso tipo, acreedor y saldo válidos,
Cuando guardo la deuda,
Entonces el sistema la persiste (saldo cifrado) y responde 201 Created,
Y el patrimonio neto se ajusta y aparece como insumo de recomendaciones.
Escenario 2: Saldo o tasa inválidos
Dado que ingreso un saldo negativo o una tasa fuera de 0–100,
Cuando intento guardar,
Entonces el sistema responde 400 con el mensaje correspondiente.
Escenario 3: Tipo no válido
Dado que envío un tipo fuera del catálogo,
Cuando el backend valida,
Entonces responde 400 con "Selecciona un tipo de deuda válido".
Escenario 4: Entrada maliciosa (seguridad)
Dado que ingreso una inyección SQL en el acreedor, Cuando el backend procesa, Entonces la entrada se rechaza/sanitiza y no se ejecuta.
Criterios no funcionales
- Saldo cifrado en reposo; respuesta < 1 s.
- Comunicación TLS 1.2+.