Initial commit
This commit is contained in:
186
features/rgpd-compliance/consentement.feature
Normal file
186
features/rgpd-compliance/consentement.feature
Normal file
@@ -0,0 +1,186 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user