RF12: Usuario consulta dashboard de datos financieros
Descripción
Como usuario autenticado, quiero ver mi dashboard financiero (saldos, ingresos, gastos, deuda y patrimonio consolidados) para entender de un vistazo el estado de mi dinero.
El dashboard agrega datos de cuentas, movimientos e inversiones del usuario. Los campos financieros se almacenan cifrados a nivel de columna (AES-256-GCM con clave por usuario) y se descifran en memoria al consultarlos, conforme a la Estrategia de Cifrado §4.2. Ningún dato financiero se cachea en disco del dispositivo.
| Campo | Valor |
|---|---|
| Módulo | Finance Data Collection (FDC) Module |
| Actor | Usuario autenticado |
| Endpoint | GET /finance/dashboard |
| Precondiciones | Sesión activa; el usuario tiene datos financieros registrados o conectados |
| Prioridad | Alta (MVP) |
| Etapa | MVP |
| Requisitos relacionados | RF14, RF16–RF23, RF25 |
Reglas de negocio
- RN-12.1 — El dashboard solo muestra datos del usuario autenticado (
user_iddel JWT); nunca de terceros (control de acceso por propiedad del recurso). - RN-12.2 — Los montos se devuelven ya descifrados y agregados por el backend; el cliente no descifra nada.
- RN-12.3 — Si el usuario aún no tiene datos, se muestra un estado vacío con llamada a la acción (conectar cuenta / registrar movimiento).
- RN-12.4 — Los datos financieros viven solo en memoria de la app durante la sesión; al cerrar/expirar se descartan (Cifrado §7).
Validaciones de entrada
| Campo | Reglas | Mensaje de error |
|---|---|---|
Authorization | Header Bearer válido. | "Sesión no válida." (401) |
period (query, opcional) | Valor de un enum (month, quarter, year). | "Periodo no válido." (400) |
Criterios de aceptación
Escenario 1: Consulta exitosa con datos
Dado que tengo cuentas y movimientos registrados,
Cuando abro el dashboard,
Entonces el sistema agrega y descifra mis datos,
Y muestra saldo total, ingresos, gastos, deuda y patrimonio del periodo,
Y responde 200 OK en menos de 2 s.
Escenario 2: Usuario sin datos
Dado que aún no registré ni conecté datos financieros, Cuando abro el dashboard, Entonces se muestra un estado vacío con acciones para empezar (conectar cuenta / registrar movimiento).
Escenario 3: Aislamiento de datos (seguridad)
Dado que un usuario manipula la petición para pedir datos de otro user_id,
Cuando el backend procesa la solicitud,
Entonces ignora cualquier user_id del cliente y usa el del JWT,
Y nunca devuelve datos de otro usuario.
Escenario 4: Sin sesión válida
Dado que el access token es inválido o expiró,
Cuando consulto el dashboard,
Entonces el sistema responde 401 Unauthorized.
Criterios no funcionales
- Respuesta < 2 s con agregaciones; usar la réplica de lectura cuando aplique.
- Datos financieros no se persisten en disco del dispositivo.
- Comunicación sobre TLS 1.2+.