Skip to main content

Sistema de Gestio de Consentiment

Documentacio tecnica del sistema de consentiment legal de LDP.

Arquitectura

Taules

  • legal_documents: Versions dels documents legals (ToS, Privacy Policy, Cookie Policy)
  • user_consents: Registre de cada acceptacio/retirada amb audit trail complet

Flux de registre

  1. Frontend envia tosAccepted=true, tosVersion, privacyAccepted=true, privacyVersion
  2. Backend valida edat >= 14 (LOPDGDD Art. 7)
  3. Backend valida que els documents existeixen i estan actius
  4. Es crea UserConsent amb timestamp, IP, User-Agent per cada document
  5. Es registra ageVerifiedAt + ageVerificationMethod=SELF_DECLARED

Flux de re-consentiment (login)

  1. ConsentService.hasRequiredConsents(userId) verifica si l'usuari te els consentiments vigents
  2. Si un document ha canviat de versio des de l'ultima acceptacio, retorna false
  3. Frontend mostra ConsentRenewalModal amb els documents pendents
  4. L'usuari ha d'acceptar abans de poder continuar

Flux de retirada (GDPR Art. 7.3)

  1. DELETE /api/users/me/consents/{documentType}
  2. Es crea un registre UserConsent amb consentType=WITHDRAWAL
  3. La retirada es tan facil com l'acceptacio (requisit legal)

Flux d'esborrat (GDPR Art. 17)

  1. POST /api/users/me/data-erasure
  2. DataErasureService anonimitza l'usuari (veure ADR-004 per detalls de cascada)
  3. UserConsent es manté com a prova legal

Endpoints

EndpointMetodeAccesProposit
/api/legal/documents/currentGETPublicDocuments vigents
/api/legal/platform-infoGETPublicInfo LSSI-CE Art. 10
/api/users/me/consentsGETAutenticatEstat consentiments
/api/users/me/consentsPOSTAutenticatAcceptar document
/api/users/me/consents/{type}DELETEAutenticatRetirar consentiment
/api/users/me/data-erasurePOSTAutenticatSol·licitud esborrat

Audit Trail

Cada UserConsent registra:

  • user_id: Usuari
  • legal_document_id: Document i versio acceptats
  • consent_type: ACCEPTANCE o WITHDRAWAL
  • given_at: Timestamp exacte
  • ip_address: IP del client (X-Forwarded-For si proxy)
  • user_agent: Navegador/client
  • metadata: JSONB per informacio addicional futura