RF70: Usuario gestiona sus consentimientos
Descripción
Como usuario autenticado, quiero otorgar, consultar y revocar de forma independiente mis consentimientos (privacidad, análisis con IA, conexión bancaria, marketing) para controlar cómo se tratan mis datos y ejercer mis derechos bajo la LFPDPPP/GDPR.
Hasta ahora el consentimiento se capturaba como un único booleano en el registro (RF01 privacyConsent), pero distintos tratamientos exigen consentimientos separados y específicos: el análisis con IA (RF28, RN-28.1) y la conexión bancaria (RF14, RN-14.3) son finalidades distintas. Este requisito modela los consentimientos como registros versionados, granulares y revocables, conforme a Compliance y Privacidad §6.
| Campo | Valor |
|---|---|
| Módulo | Auth Module (Consent Service) |
| Actor | Usuario autenticado |
| Endpoint | GET /auth/consents · PUT /auth/consents/:type |
| Precondiciones | Sesión activa |
| Prioridad | Alta (MVP — requisito de cumplimiento) |
| Etapa | MVP |
| Requisitos relacionados | RF01, RF14, RF28, Compliance §4 y §6 |
Reglas de negocio
- RN-70.1 — Tipos de consentimiento gestionados:
privacy(aviso de privacidad, obligatorio para usar la app),ai_analysis(análisis financiero con IA),bank_connection(conexión a cuentas bancarias),marketing(comunicaciones promocionales). La lista es extensible. - RN-70.2 — Cada consentimiento se persiste como un registro versionado: tipo, estado (
granted/revoked), versión del texto/aviso aceptado, fecha y origen. No se sobrescribe el histórico (auditable — ver RNF-06). - RN-70.3 — El consentimiento
privacyes obligatorio: sin él no se crea ni se mantiene la cuenta. Los demás son opcionales y su ausencia/revocación solo desactiva la funcionalidad asociada, no bloquea la app. - RN-70.4 — Revocar
ai_analysisdetiene el procesamiento de IA (RF28) en la siguiente ejecución; revocarbank_connectiondispara la desconexión y revocación de tokens del agregador (RF14, RN-14.5). - RN-70.5 — Cualquier cambio de consentimiento se registra en la bitácora de auditoría/privacidad.
- RN-70.6 — Si el aviso de privacidad cambia de versión, el usuario debe re-otorgar
privacyantes de seguir usando funcionalidades que dependan de la nueva versión.
Validaciones de entrada
| Campo | Reglas | Mensaje de error |
|---|---|---|
type | Obligatorio. Uno de los tipos soportados (RN-70.1). | "Tipo de consentimiento no válido." |
granted | Obligatorio. Booleano. | "Indica si otorgas o revocas el consentimiento." |
Authorization | Bearer válido. | "Sesión no válida." (401) |
Criterios de aceptación
Escenario 1: Consultar mis consentimientos
Dado que tengo una sesión activa,
Cuando consulto GET /auth/consents,
Entonces el sistema devuelve el estado vigente de cada tipo de consentimiento con su versión y fecha.
Escenario 2: Otorgar un consentimiento opcional
Dado que no había otorgado ai_analysis,
Cuando lo otorgo,
Entonces el sistema crea un registro granted versionado,
Y a partir de la siguiente ejecución el análisis con IA (RF28) puede procesar mis datos.
Escenario 3: Revocar el consentimiento de IA
Dado que tenía ai_analysis otorgado,
Cuando lo revoco,
Entonces el sistema registra el estado revoked,
Y RF28 deja de procesar mis datos en la siguiente ejecución,
Y las recomendaciones existentes se ocultan o eliminan según la política de retención.
Escenario 4: Revocar la conexión bancaria
Dado que tenía bank_connection otorgado y una cuenta conectada,
Cuando revoco el consentimiento,
Entonces se desconecta la cuenta y se revoca el token con el agregador (RF14),
Y se detiene la sincronización.
Escenario 5: Intentar revocar el consentimiento obligatorio
Dado que intento revocar privacy,
Cuando envío la solicitud,
Entonces el sistema informa que ese consentimiento es obligatorio para usar la app,
Y ofrece, en su lugar, la ruta de eliminación de cuenta (RF06).
Escenario 6: Nueva versión del aviso de privacidad
Dado que el aviso de privacidad se actualizó a una nueva versión,
Cuando abro la app,
Entonces se me solicita revisar y re-otorgar privacy antes de continuar.
Criterios no funcionales
- Historial de consentimientos inmutable y auditable (RNF-06).
- Cambios de consentimiento aplicados de forma consistente con los módulos dependientes (IA, banca).
- Comunicación TLS 1.2+.