# language: fr @rgpd @consent Fonctionnalité: Gestion du consentement RGPD Contexte: Étant donné que je suis un nouvel utilisateur Et que j'accède à l'application pour la première fois # 13.1 - Gestion du consentement avec Tarteaucitron.js + PostgreSQL Scénario: Affichage du banner de consentement au premier lancement web Étant donné que j'accède à l'application web pour la première fois Quand la page se charge Alors un banner RGPD Tarteaucitron.js s'affiche Et le banner est en français Et le banner propose les options suivantes: | option | description | | Tout accepter | Active tous les consentements | | Tout refuser | Refuse tous les consentements optionnels | | Personnaliser | Ouvre le panneau de personnalisation | Et le banner est customisé aux couleurs de RoadWave Scénario: Granularité des consentements Étant donné que le banner RGPD est affiché Quand je clique sur "Personnaliser" Alors je vois les catégories de consentements suivantes: | catégorie | type | requis | | Fonctionnel | Nécessaire | oui | | Analytique | Optionnel | non | | Marketing | Optionnel | non | Et chaque catégorie a une description claire de son usage Et je peux accepter ou refuser chaque catégorie individuellement Scénario: Consentement géolocalisation précise - obligatoire Étant donné que je suis sur l'application mobile Et que l'onboarding est terminé Quand l'application a besoin d'accéder à ma position précise Alors un écran de demande de consentement s'affiche Et le message explique clairement l'usage: """ RoadWave utilise votre position GPS pour vous proposer du contenu audio géolocalisé pertinent. Vos données sont anonymisées après 24h. """ Et je peux accepter ou refuser Et si je refuse, l'application bascule en mode dégradé (GeoIP uniquement) Scénario: Double consentement GPS - banner app + permission OS Étant donné que je veux activer la géolocalisation précise Quand j'accepte le consentement dans l'application Alors l'application demande également la permission au système d'exploitation Et sur iOS, la popup système s'affiche: "Autoriser RoadWave à accéder à votre position ?" Et sur Android, la popup système s'affiche avec les options "Toujours autoriser / Autoriser seulement pendant l'utilisation / Refuser" Et les deux consentements (app + OS) doivent être acceptés pour activer le GPS précis # Historique des consentements - PostgreSQL backend Scénario: Enregistrement du consentement en base de données Étant donné que j'ai accepté les consentements suivants: | type | accepté | | Fonctionnel | oui | | Analytique | oui | | Marketing | non | | GPS précis | oui | Quand je valide mes choix Alors un enregistrement est créé dans la table `user_consents` Et l'enregistrement contient les champs suivants: | champ | valeur | | user_id | [mon ID utilisateur] | | consent_type | fonctionnel / analytique / gps | | version | 1 | | accepted | true / false | | timestamp | [date et heure exacte] | Et chaque type de consentement a un enregistrement séparé Scénario: Versioning des consentements Étant donné que j'ai accepté le consentement "Analytique" version 1 le 2025-01-01 Et que les CGU sont mises à jour le 2025-06-01 Quand je me connecte après la mise à jour Alors un nouveau consentement version 2 m'est demandé Et mon ancien consentement version 1 reste dans l'historique Et je dois accepter la nouvelle version pour continuer à utiliser les analytics Scénario: Historique complet conservé pour preuve légale Étant donné que j'ai modifié mes consentements plusieurs fois: | date | consent_type | accepted | version | | 2025-01-01 | Analytique | oui | 1 | | 2025-03-15 | Analytique | non | 1 | | 2025-06-01 | Analytique | oui | 2 | Quand un auditeur CNIL consulte mon historique de consentements Alors tous les enregistrements sont conservés Et l'historique prouve que chaque consentement a été donné librement Et les timestamps permettent de prouver la conformité à tout moment # Consentements requis vs optionnels Scénario: Consentement analytique - optionnel Étant donné que je refuse le consentement "Analytique" Quand j'utilise l'application Alors aucun cookie Matomo `_pk_id` n'est déposé Et aucune donnée d'usage n'est envoyée à Matomo Et l'application fonctionne normalement sans analytics Scénario: Consentement notifications push - optionnel Étant donné que je refuse le consentement "Notifications push" Quand un créateur que je suis publie un nouveau contenu Alors je ne reçois pas de notification push Mais je peux voir le nouveau contenu dans l'application Et l'application fonctionne normalement Scénario: Consentement GPS précis - requis pour fonctionnalités géo Étant donné que je refuse le consentement "GPS précis" Quand j'utilise l'application Alors je peux accéder aux contenus nationaux Mais les contenus géolocalisés précis (Ancré, Contextuel) ne sont pas disponibles Et les audio-guides nécessitent l'activation du GPS Et un banner permanent me rappelle que l'activation du GPS améliore l'expérience # Modification des consentements Scénario: Révocation d'un consentement depuis les paramètres Étant donné que j'ai accepté le consentement "Analytique" Et que j'utilise l'application depuis 3 mois Quand j'ouvre "Paramètres > Confidentialité > Gérer mes consentements" Alors je vois la liste de tous mes consentements actuels Et je peux révoquer le consentement "Analytique" Quand je révoque le consentement Alors un nouvel enregistrement est créé avec `accepted = false` Et le cookie Matomo est supprimé immédiatement Et les analytics sont désactivées à partir de ce moment Scénario: Acceptation d'un consentement précédemment refusé Étant donné que j'avais refusé le consentement "GPS précis" Quand j'ouvre "Paramètres > Confidentialité > Gérer mes consentements" Et que je clique sur "Activer la géolocalisation précise" Alors un nouvel enregistrement est créé avec `accepted = true` Et la permission OS est demandée si ce n'est pas déjà fait Et l'application bascule en mode géolocalisation précise Et les contenus géolocalisés deviennent disponibles immédiatement # Preuves légales pour contrôle CNIL Scénario: Export de l'historique des consentements pour audit Étant donné qu'un contrôle CNIL est en cours Quand l'équipe RoadWave exporte l'historique des consentements Alors l'export contient pour chaque utilisateur: | champ | description | | user_id | ID anonymisé | | consent_type | Type de consentement | | version | Version des CGU/consentement | | accepted | Accepté ou refusé | | timestamp | Date et heure exacte | | ip_address | IP (anonymisée) au moment du consentement | | user_agent | Navigateur/app utilisé | Et l'export est au format CSV pour analyse Et les données prouvent la conformité RGPD Scénario: Conformité recommandations CNIL Étant donné que le système de consentement est implémenté Quand un auditeur CNIL vérifie la conformité Alors le système respecte les critères suivants: | critère CNIL | respecté | | Consentement libre | oui | | Consentement spécifique (granulaire) | oui | | Consentement éclairé (information claire) | oui | | Consentement univoque (action positive) | oui | | Révocable à tout moment | oui | | Preuve du consentement conservée | oui | # Opensource et self-hosted Scénario: Tarteaucitron.js self-hosted Étant donné que l'application web utilise Tarteaucitron.js Quand je consulte les sources JavaScript chargées Alors le script Tarteaucitron.js est hébergé sur les serveurs RoadWave Et aucun script tiers (CDN externe) n'est chargé Et le code source de Tarteaucitron.js est vérifiable Et aucune donnée n'est envoyée à un tiers lors de l'affichage du banner Scénario: Coût de la solution - 0€ Étant donné que Tarteaucitron.js est opensource Et que PostgreSQL est utilisé pour le backend Quand on calcule le coût de la solution de consentement Alors le coût est de 0€ Et la solution est entièrement maîtrisée (self-hosted) Et aucune dépendance à un service SaaS tiers