Saltar al contenido principal

RF14: Sistema se conecta a cuentas bancarias

Descripción

Como usuario autenticado, quiero conectar mis cuentas bancarias para que Finnova importe automáticamente mis movimientos y saldos.

La conexión se realiza mediante un agregador bancario (open banking / proveedor tipo Belvo) usando OAuth: el usuario autoriza en el flujo del proveedor y Finnova recibe tokens de acceso. Estos tokens son datos críticos: se guardan en AWS Secrets Manager / solo en memoria, nunca en el código ni en la DB en claro (Cifrado §2 y §5). Finnova nunca recibe ni almacena las credenciales bancarias del usuario.

CampoValor
MóduloFinance Data Collection (FDC) Module
ActorUsuario autenticado
EndpointPOST /finance/bank-connections (inicia) + callback del proveedor
PrecondicionesSesión activa; consentimiento explícito de conexión bancaria
PrioridadAlta (MVP)
EtapaMBI
Requisitos relacionadosRF15, RF12

Reglas de negocio

  • RN-14.1 — Las credenciales bancarias se ingresan solo en el proveedor agregador, nunca en Finnova (reduce superficie de riesgo).
  • RN-14.2 — Los tokens de acceso bancario son secretos críticos: se cifran en reposo (Secrets Manager) y solo se descifran en memoria para sincronizar.
  • RN-14.3 — Se requiere consentimiento explícito del usuario (dato financiero sensible — LFPDPPP).
  • RN-14.4 — Una conexión fallida o revocada se marca y se notifica para reconectar; no rompe el dashboard.
  • RN-14.5 — El usuario puede desconectar una cuenta en cualquier momento; al hacerlo se revoca el token con el proveedor.

Validaciones de entrada

CampoReglasMensaje de error
institutionIdObligatorio. Institución soportada por el proveedor."Selecciona una institución válida."
consentObligatorio. Debe ser true."Debes autorizar la conexión para continuar."
callbackTokenObligatorio en el callback. Verificado contra el proveedor."No se pudo completar la conexión."

Criterios de aceptación

Escenario 1: Conexión bancaria exitosa

Dado que autorizo el acceso en el flujo del proveedor, Cuando el proveedor devuelve el callback con el token, Entonces Finnova guarda el token de forma segura (Secrets Manager / cifrado), Y crea la conexión en estado activo, Y dispara la sincronización inicial de cuentas y movimientos (RF15), Y responde 201 Created.

Escenario 2: Usuario cancela la autorización

Dado que abro el flujo del proveedor y cancelo, Cuando regreso a la app, Entonces no se crea ninguna conexión ni se guarda token, Y se muestra "Conexión cancelada".

Escenario 3: Consentimiento no otorgado

Dado que no autorizo explícitamente la conexión, Cuando intento continuar, Entonces la acción se bloquea con "Debes autorizar la conexión para continuar".

Escenario 4: Token bancario expira o se revoca

Dado que un token de conexión expira o el banco lo revoca, Cuando falla una sincronización, Entonces la conexión se marca como "requiere reconexión", Y se notifica al usuario sin exponer detalles del token.

Escenario 5: Protección del token (seguridad)

Dado que se almacena un token bancario, Cuando se inspeccionan logs o la base de datos, Entonces el token nunca aparece en claro ni en el código fuente.

Criterios no funcionales

  • Finnova nunca recibe usuario/contraseña del banco.
  • Tokens en Secrets Manager con rotación; comunicación TLS 1.2+.
  • La sincronización corre en segundo plano sin bloquear la UI.

Diagrama de secuencia