Files
roadwave/features/api/rgpd-compliance/cookies-analytics.feature
jpgiannetti 37c62206ad feat(bdd): réorganiser features en catégories api/ui/e2e et créer ADR-024
Résolution des incohérences #10, #11, et #12 de l'analyse d'architecture.

## Phase 1 : Réorganisation Features BDD (Point #10 - RÉSOLU)

- Créer structure features/{api,ui,e2e}
- Déplacer 83 features en 3 catégories via git mv (historique préservé)
  - features/api/ : 53 features (tests API backend)
  - features/ui/ : 22 features (tests UI mobile)
  - features/e2e/ : 8 features (tests end-to-end)

Domaines déplacés :
- API : authentication, recommendation, rgpd-compliance, content-creation,
  moderation, monetisation, premium, radio-live, publicites
- UI : audio-guides, navigation, interest-gauges, mode-offline,
  partage, profil, recherche
- E2E : abonnements, error-handling

## Phase 2 : Mise à jour Documentation

### ADR-007 - Tests BDD
- Ajouter section "Convention de Catégorisation des Features"
- Documenter règles api/ui/e2e avec exemples concrets
- Spécifier step definitions (backend Go, mobile Dart)

### ADR-024 - Stratégie CI/CD Monorepo (NOUVEAU)
- Créer ADR dédié pour stratégie CI/CD avec path filters
- Architecture workflows séparés (backend.yml, mobile.yml, shared.yml)
- Configuration path filters détaillée avec exemples YAML
- Matrice de déclenchement et optimisations (~70% gain temps CI)
- Plan d'implémentation (~2h, reporté jusqu'au développement)

### ADR-016 - Organisation Monorepo
- Simplifier en retirant section CI/CD détaillée
- Ajouter référence vers ADR-024 pour stratégie CI/CD

### INCONSISTENCIES-ANALYSIS.md
- Point #10 (Tests BDD synchronisés) :  RÉSOLU
  - Catégorisation features implémentée
  - ADR-007 mis à jour avec convention complète
- Point #11 (70/30 Split paiements) :  ANNULÉ (faux problème)
  - ADR-009 et Règle 18 parfaitement cohérents
  - Documentation exhaustive existante (formule, SQL, comparaisons)
- Point #12 (Monorepo path filters) : ⏸️ DOCUMENTÉ
  - Architecture CI/CD complète dans ADR-024
  - Implémentation reportée (projet en phase documentation)
- Métriques mises à jour :
  - MODERATE : 6/9 traités (4 résolus + 1 annulé + 1 documenté)
  - ADR à jour : 100% (19/19 avec ADR-024)

## Phase 3 : Validation

- Structure features validée (api/ui/e2e, aucun répertoire restant)
- Historique Git préservé (git mv, renommages détectés)
- 83 features total (API: 53, UI: 22, E2E: 8)

Closes: Point #10 (résolu), Point #11 (annulé), Point #12 (documenté)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 11:31:41 +01:00

228 lines
10 KiB
Gherkin

# language: fr
@rgpd @cookies @analytics
Fonctionnalité: Cookies et analytics avec Matomo self-hosted
# 13.7 - Matomo self-hosted, zéro cookie tiers (souveraineté données)
Contexte:
Étant donné que je suis un utilisateur de l'application web RoadWave
# Liste des cookies utilisés
Scénario: Cookies strictement nécessaires - pas de consentement requis
Étant donné que j'accède à l'application web
Quand je me connecte
Alors les cookies techniques suivants sont déposés:
| cookie | type | durée | finalité | consentement |
| session | Technique | 30j | Authentification | Non requis |
| refresh_token | Technique | 30j | Session persistante | Non requis |
Et ces cookies sont essentiels au fonctionnement de l'application
Et ils sont exemptés de consentement selon l'article 82 de la loi Informatique et Libertés
Scénario: Cookie analytique Matomo - consentement requis
Étant donné que j'ai accepté le consentement "Analytique"
Quand je navigue sur l'application web
Alors le cookie `_pk_id` est déposé
Et la durée de conservation est de 13 mois
Et ce cookie sert à Matomo pour analytics
Et mon IP est automatiquement anonymisée (2 derniers octets)
Scénario: Refus du consentement analytique - pas de cookie Matomo
Étant donné que j'ai refusé le consentement "Analytique"
Quand je navigue sur l'application web
Alors aucun cookie `_pk_id` n'est déposé
Et aucune donnée d'usage n'est collectée
Et l'application fonctionne normalement sans analytics
# Matomo self-hosted
Scénario: Matomo hébergé sur les serveurs RoadWave
Étant donné que RoadWave utilise Matomo pour les analytics
Quand on analyse l'infrastructure
Alors Matomo est installé sur les serveurs RoadWave (Docker)
Et aucune donnée n'est envoyée à un service tiers
Et toutes les données restent dans l'UE
Et l'accès à Matomo est restreint à l'équipe RoadWave
Scénario: IP anonymisées automatiquement
Étant donné que Matomo collecte des données d'usage
Quand une requête est enregistrée
Alors l'adresse IP est automatiquement anonymisée
Et les 2 derniers octets sont remplacés par des zéros
Et une IP 192.168.1.100 devient 192.168.0.0
Et cette anonymisation est irréversible
Et elle est conforme aux recommandations CNIL
Scénario: Configuration Matomo conforme RGPD
Étant donné que Matomo est configuré pour RoadWave
Quand on vérifie les paramètres
Alors les configurations suivantes sont activées:
| paramètre | valeur |
| Anonymisation IP (2 octets) | activé |
| Respect Do Not Track | activé |
| Suppression auto anciens logs (25 mois)| activé |
| Géolocalisation IP désactivée | activé |
| User ID anonymisé | activé |
Et la configuration est RGPD-compliant
# Trackers interdits
Scénario: Aucun tracker tiers utilisé
Étant donné que j'accède à l'application web
Quand j'inspecte les requêtes réseau avec les DevTools
Alors aucune requête n'est envoyée vers les domaines suivants:
| domaine tiers interdit |
| google-analytics.com |
| facebook.com (Pixel) |
| hotjar.com |
| mixpanel.com |
| segment.io |
| amplitude.com |
Et toutes les requêtes analytics vont uniquement vers matomo.roadwave.fr
Scénario: Conformité zéro cookie tiers
Étant donné que j'analyse les cookies déposés sur roadwave.fr
Quand je consulte la liste des cookies
Alors tous les cookies sont first-party (domaine roadwave.fr)
Et aucun cookie tiers (third-party) n'est présent
Et cette politique respecte les recommandations CNIL 2020
# Alternative: Plausible (si besoin)
Scénario: Alternative Plausible SaaS (EU-hosted)
Étant donné que RoadWave pourrait utiliser Plausible au lieu de Matomo
Quand on compare les deux solutions
Alors Plausible a les caractéristiques suivantes:
| caractéristique | valeur |
| Hébergement | UE (Allemagne) |
| Conformité RGPD | Natif (pas de cookie) |
| Coût | 9/mois (50K pageviews) |
| IP anonymisées | Automatique |
| Consentement requis | Non (selon CNIL 2020) |
Mais Matomo self-hosted reste le choix prioritaire (0, contrôle total)
# Souveraineté des données
Scénario: Aucun transfert de données hors UE
Étant donné que Matomo est self-hosted
Quand on analyse les flux de données
Alors aucune donnée d'analytics n'est transférée hors de l'UE
Et les serveurs sont localisés en France
Et aucun transfert vers les US (pas de Privacy Shield / DPF requis)
Et la souveraineté des données est garantie
# Coût de la solution
Scénario: Matomo self-hosted - coût estimé
Étant donné que Matomo est hébergé sur l'infrastructure RoadWave
Quand on calcule le coût mensuel
Alors le coût est d'environ 5/mois:
| composant | coût |
| Serveur supplémentaire | 0 (mutualisé) |
| Base de données MySQL | 0 (mutualisé) |
| Stockage logs (25 mois) | ~5/mois |
| License Matomo | 0 (opensource) |
Et ce coût est marginal comparé à un SaaS tiers (9-50/mois)
# Respect Do Not Track
Scénario: Respect du signal Do Not Track (DNT)
Étant donné que mon navigateur envoie le header "DNT: 1"
Quand j'accède à l'application web
Alors Matomo détecte le signal DNT
Et aucune donnée d'usage n'est collectée
Et aucun cookie `_pk_id` n'est déposé
Et l'application fonctionne normalement
Et un message discret s'affiche: "Vos préférences de confidentialité sont respectées (DNT activé)"
# Suppression automatique des anciens logs
Scénario: Logs Matomo supprimés après 25 mois
Étant donné que Matomo collecte des données d'usage
Quand les logs atteignent 25 mois d'ancienneté
Alors un job automatique supprime les anciens logs
Et seules les données agrégées (rapports) sont conservées
Et les données brutes (logs) sont supprimées définitivement
Et cette politique respecte le principe de minimisation RGPD
# Métriques collectées par Matomo
Scénario: Données collectées par Matomo
Étant donné que j'ai accepté le consentement "Analytique"
Quand je navigue sur l'application web
Alors Matomo collecte les données suivantes:
| donnée collectée | anonymisée |
| Pages visitées | non |
| Durée de visite | non |
| Navigateur / OS | non |
| Résolution écran | non |
| Provenance (referrer) | non |
| IP (2 derniers octets) | oui |
| User ID (hashé) | oui |
Et aucune donnée personnelle identifiable n'est collectée
Scénario: User ID hashé pour analytics
Étant donné que je suis connecté à l'application
Et que j'ai accepté le consentement "Analytique"
Quand Matomo enregistre mes actions
Alors mon user_id est hashé (SHA-256)
Et le hash est 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
Et il est impossible de retrouver mon user_id original depuis ce hash
Et ce processus garantit l'anonymat
# Conformité CNIL 2020
Scénario: Conformité recommandations CNIL sur les cookies
Étant donné que RoadWave utilise Matomo self-hosted
Quand un auditeur CNIL vérifie la conformité
Alors le système respecte les recommandations CNIL 2020:
| recommandation CNIL | respecté |
| Consentement requis pour cookies analytics | oui |
| IP anonymisées | oui |
| Pas de transfert hors UE | oui |
| Durée conservation limitée (25 mois) | oui |
| Respect Do Not Track | oui |
| Transparence (liste cookies dans CGU) | oui |
# Tarteaucitron.js - gestion du consentement
Scénario: Intégration Tarteaucitron.js pour gérer Matomo
Étant donné que Tarteaucitron.js gère les consentements
Quand je personnalise mes consentements
Alors je vois l'option "Analytique (Matomo)"
Et une description est affichée:
"""
Matomo nous aide à comprendre comment vous utilisez l'application pour l'améliorer.
Vos données restent anonymes et ne sont jamais partagées avec des tiers.
"""
Et je peux activer ou désactiver Matomo indépendamment
Et si je désactive, le cookie `_pk_id` est supprimé immédiatement
# Application mobile - analytics
Scénario: Analytics sur application mobile
Étant donné que j'utilise l'application mobile
Quand j'accepte le consentement "Analytique"
Alors l'app utilise le SDK Matomo Mobile
Et les données sont envoyées à la même instance Matomo self-hosted
Et les mêmes règles d'anonymisation s'appliquent
Et aucun SDK tiers (Google Analytics, Firebase) n'est utilisé
Scénario: Refus analytics sur mobile
Étant donné que j'ai refusé le consentement "Analytique" sur mobile
Quand j'utilise l'application
Alors aucune donnée d'usage n'est collectée
Et le SDK Matomo est désactivé
Et l'application fonctionne normalement sans différence d'UX
# Opensource et auditabilité
Scénario: Matomo opensource et auditable
Étant donné que Matomo est opensource
Quand on consulte le code source
Alors le code est disponible publiquement sur GitHub
Et le code peut être audité par des experts indépendants
Et aucune backdoor ou collecte cachée n'est possible
Et cette transparence renforce la confiance utilisateur