Files
roadwave/docs/domains/_shared/rules/rgpd.md
jpgiannetti 35aaa105d0 docs: améliorer rendu markdown et navigation mkdocs
- Ajouter ADR-018 (librairies Go) dans TECHNICAL.md
- Transformer Shared en menu dépliable dans mkdocs (cohérence avec autres domaines)
- Corriger listes markdown (ajout lignes vides avant listes)
- Corriger line breaks dans génération BDD (étapes "Et" sur nouvelles lignes)
- Ajouter script fix-markdown-lists.sh pour corrections futures

Impacte 86 fichiers de documentation et 164 fichiers BDD générés.
2026-02-09 20:49:52 +01:00

17 KiB

13. Conformité RGPD

13.1 Gestion du consentement

Décision : Tarteaucitron.js + PostgreSQL backend

Implémentation web :

  • Tarteaucitron.js (opensource, self-hosted)
  • Banner RGPD français, customisable
  • Granularité : fonctionnel / analytique / marketing

Implémentation backend :

  • Table user_consents avec versioning
  • Champs : user_id, consent_type, version, accepted, timestamp
  • Historique complet conservé (preuve légale)

Consentements requis :

  • Géolocalisation précise : obligatoire (banner + permission OS)
  • Analytics : optionnel (Matomo)
  • Notifications push : optionnel (permission OS)

Justification :

  • Opensource, 0€, conformité RGPD garantie
  • Historique backend = preuve légale en cas de contrôle
  • Granularité conforme recommandations CNIL

13.2 Anonymisation des données GPS

Décision : Geohash après 24h

Processus :

  1. Données précises conservées 24h (recommandation personnalisée)
  2. Après 24h : conversion en geohash précision 5 (~5km²)
  3. Coordonnées originales supprimées définitivement
  4. Job quotidien automatique via cron

Exceptions :

  • Historique personnel visible (liste trajets) : conservation intégrale tant que compte actif
  • Analytics globales : uniquement geohash anonyme

Justification :

  • Vraie anonymisation RGPD (CNIL compliant)
  • Permet analytics agrégées (heatmaps trafic)
  • PostGIS natif, 0€

13.3 Export des données (portabilité)

Décision : JSON + HTML + ZIP, génération asynchrone

Format export : Archive ZIP contenant JSON (machine-readable), HTML (human-readable), fichiers audio, README

Données exportées :

  • Profil utilisateur (email, pseudo, date inscription, bio)
  • Historique d'écoute (titres, dates, durées)
  • Contenus créés (audio + métadonnées)
  • Abonnements et likes
  • Centres d'intérêt (jauges)
  • Historique consentements

Processus :

  1. Demande via paramètres compte
  2. Génération asynchrone (worker background)
  3. Email avec lien download (expire 7 jours)
  4. Délai : 48h maximum (conformité RGPD)

Limite :

  • Maximum 1 export/mois (anti-abus)

Justification :

  • Conformité article 20 RGPD (portabilité)
  • Double format (human + machine)
  • Worker asynchrone évite timeout

13.4 Suppression du compte

Décision : Grace period 30j + anonymisation contenus

Processus :

  1. Utilisateur clique "Supprimer mon compte"
  2. Compte désactivé immédiatement (login impossible)
  3. Contenus cachés pendant 30 jours (non diffusés)
  4. Email confirmation + lien annulation (valide 30j)
  5. Après 30j sans annulation : suppression effective

Suppression effective :

  • Compte utilisateur supprimé (données personnelles)
  • Historique d'écoute supprimé
  • GPS historique supprimé
  • Sessions et tokens révoqués
  • ⚠️ Contenus créés anonymisés (créateur = "Utilisateur supprimé")
  • ⚠️ Likes et abonnements supprimés (mais compteurs préservés)

Contenus conservés anonymement :

  • Audio files (CDN)
  • Métadonnées (titre, description, tags, géolocalisation)
  • Statistiques d'écoute

Justification :

  • Grace period évite suppressions impulsives
  • Anonymisation contenus = intérêt légitime communauté
  • Conforme RGPD si créateur = donnée supprimée

13.5 Mode dégradé (sans GPS précis)

Décision : GeoIP par défaut, GPS optionnel

Niveaux de précision :

Niveau Technologie Contenus accessibles Consentement
Pays Aucune géoloc Contenus nationaux uniquement Non requis
Ville GeoIP (IP2Location) Contenus régionaux/ville Non requis
Précis GPS Tous contenus (hyperlocaux inclus) Requis

Implémentation :

  • Démarrage app : GeoIP automatique (IP → ville)
  • Banner in-app : "Activez la géolocalisation pour découvrir du contenu près de chez vous"
  • Upgrade volontaire vers GPS

API GeoIP :

  • IP2Location Lite (gratuit, self-hosted, voir ADR-019)
  • Update DB mensuelle automatique
  • Précision ~80% au niveau ville

Justification :

  • RGPD : pas de consentement requis pour GeoIP (pas de donnée personnelle)
  • UX dégradée acceptable (contenus disponibles)
  • Progressive disclosure (upgrade optionnel)

13.6 Durée de conservation des données

Décision : 5 ans inactivité → purge automatique

Règles :

Type de compte Seuil inactivité Action
Auditeur uniquement 5 ans sans connexion Suppression automatique
Créateur avec contenus actifs Jamais (tant qu'écoutes) Conservation indéfinie
Créateur inactif 5 ans sans connexion + 2 ans sans écoute Suppression automatique

Notifications avant suppression :

  • Email + push : 90 jours avant
  • Email + push : 30 jours avant
  • Email + push : 7 jours avant
  • Toute connexion = reset compteur inactivité

Contenu conservé :

  • Contenus créés par comptes supprimés (anonymisés) : conservation indéfinie

Justification :

  • Conformité principe minimisation RGPD
  • 5 ans = équilibre raisonnable (standard industrie)
  • Exception créateurs actifs = intérêt légitime plateforme

13.7 Cookies et trackers web

Décision : Matomo self-hosted, zéro cookie tiers

Cookies utilisés :

Cookie Type Durée Finalité Consentement
session Technique 30j Authentification Non requis
refresh_token Technique 30j Session persistante Non requis
_pk_id Analytique 13 mois Matomo (IP anonyme) Requis

Analytics : Matomo self-hosted :

  • Hébergé sur nos serveurs (Docker)
  • IP anonymisées automatiquement (2 derniers octets)
  • Pas de cookie si consentement refusé
  • Alternative : Plausible (SaaS EU, 9€/mois)

Trackers interdits :

  • Google Analytics
  • Facebook Pixel
  • Hotjar, Mixpanel, etc.

Justification :

  • Souveraineté données (pas de transfert US)
  • Conformité RGPD max (CNIL compatible)
  • Matomo = opensource, 0€ infra

13.8 Registre des traitements

Décision : Document Markdown versionné Git (MVP)

Emplacement :

  • docs/rgpd/registre-traitements.md
  • Versionné Git (historique modifications)

Contenu obligatoire par traitement :

  • Nom et finalité du traitement
  • Catégories de données collectées
  • Base légale (consentement / contrat / intérêt légitime)
  • Durée de conservation
  • Destinataires (sous-traitants, CDN, etc.)
  • Transferts hors UE (aucun prévu)

Responsable :

  • DPO / Fondateur
  • Review trimestrielle obligatoire
  • Update immédiate si nouveau traitement

Migration future :

  • Si > 100K utilisateurs : interface admin PostgreSQL

Justification :

  • Obligation RGPD Article 30
  • Markdown = simple, versionné, auditable
  • 0€

13.9 Notification violations de données (breach)

Décision : Monitoring + alertes + runbook

Détection automatique :

Événement Outil Alerte
Erreurs backend critiques Sentry Discord/Slack immédiat
Pic requêtes anormal Grafana Email équipe
Accès non autorisé DB PostgreSQL logs SMS fondateur
Authentification suspecte Zitadel alerts Email équipe

Procédure breach :

  • Runbook : docs/rgpd/procedure-breach.md
  • Checklist 72h CNIL :
    1. H+0 : Détection et confinement
    2. H+24 : Évaluation gravité (données concernées, utilisateurs impactés)
    3. H+48 : Notification CNIL si risque pour utilisateurs
    4. H+72 : Notification utilisateurs si risque élevé

Contact CNIL :

  • Email pré-rédigé (template)
  • Formulaire en ligne (account CNIL créé)

Justification :

  • Obligation RGPD Article 33 (notification 72h)
  • Monitoring proactif évite découverte tardive
  • Sentry gratuit < 5K events/mois

13.10 DPO (Délégué à la Protection des Données)

Décision : Fondateur = DPO temporaire (MVP)

Raison légale :

  • Non obligatoire si :
    • < 250 employés
    • Pas de traitement à grande échelle de données sensibles
    • RoadWave : données localisation = sensible MAIS échelle MVP

Formation :

  • CNIL : formation gratuite en ligne (4h)
  • Certification CNIL "Atelier RGPD" (gratuit)

Contact :

  • Email : dpo@roadwave.fr
  • Publié dans CGU et mentions légales
  • Délai réponse : 1 mois (RGPD)

Migration future :

  • Si > 100K utilisateurs : DPO externe mutualisé (~200€/mois)
  • Ou recrutement DPO interne si > 10 employés

Justification :

  • Conforme RGPD (non obligatoire en phase MVP)
  • 0€, contrôle total
  • Bonne pratique : avoir un contact identifié

13.11 Droit de rectification

Décision : Interface self-service + validation immédiate

Données rectifiables :

  • Email (avec re-vérification)
  • Pseudo (unique, disponibilité vérifiée)
  • Bio / description
  • Centres d'intérêt (jauges)
  • Photo de profil

Processus :

  • Changements immédiats (sauf email)
  • Email : lien vérification → validation sous 24h
  • Historique modifications conservé (audit trail)

Limitations :

  • Pseudo : max 1 changement/30j (anti-squat)

Justification : Conformité Article 16 RGPD, self-service 0€


13.12 Droit d'opposition

Décision : Opt-out granulaire, effet immédiat

Traitement Toggle Effet
Marketing email Paramètres Stop emails promo
Notifications push Paramètres Stop push marketing
Analytics Banner RGPD Exclusion Matomo
Recommandations personnalisées "Mode anonyme" Reco génériques uniquement

Mode anonyme :

  • Désactive algorithme (jauges ignorées)
  • Recommandations = top contenus zone géo uniquement
  • Historique non utilisé

Justification : Conformité Article 21 RGPD


13.13 Droit à la limitation du traitement

Décision : "Geler mon compte" temporaire

Effets :

  • Compte gelé, contenus cachés, profil invisible
  • Connexion lecture seule OK
  • Réactivation à tout moment

Justification : Conformité Article 18 RGPD


13.14 Politique de confidentialité

Décision : Page web + popup in-app + versioning Git

Emplacement :

  • Web : roadwave.fr/confidentialite
  • App : page dédiée paramètres
  • Popup première connexion (scroll requis)

Contenu : Identité responsable, finalités, base légale, destinataires, durées, droits, transferts UE

Versioning : Git + DB privacy_policy_versions, popup si changement majeur

Justification : Conformité Articles 13-14 RGPD


13.15 Minimisation des données

Décision : Collecte strictement nécessaire

Donnée Finalité Optionnel
Email Authentification
Pseudo Identité publique
GPS précis Reco hyperlocales (GeoIP fallback)
Jauges intérêt Reco thématiques
Date naissance Vérifier âge minimum (année seule)

Non collecté : nom/prénom réels, adresse postale (sauf créateurs payés), téléphone (sauf 2FA optionnel)

Justification : Conformité Article 5.1.c RGPD


13.16 Sécurité des données

Décision : Chiffrement multi-niveaux

Couche Implémentation
Transport TLS 1.3 (ADR-006)
DB PostgreSQL encryption at rest AES-256
Tokens JWT RS256 + rotation 90j
CDN Signed URLs expirables
Backups AES-256 + offsite

Mesures orga : Whitelist IP, Vault secrets, logs anonymisés, 2FA admins, pentest annuel

Justification : Conformité Article 32 RGPD


13.17 Transferts hors UE

Décision : Hébergement 100% France/UE

Service Localisation Transfert UE
Hébergement OVH France
Database OVH France
CDN Bunny.net EU
Matomo Self-hosted France

Si CDN global futur : Clauses Contractuelles Types (CCE) 2021

Justification : Conformité Articles 44-50 RGPD, souveraineté données


13.18 Profilage et décisions automatisées

Décision : Transparence + droit opposition

Traitement Impact Intervention humaine Opposition
Recommandations Faible (mode anonyme)
Modération auto Élevé (review 24h) (appeal)

Transparence : Page "Comment fonctionne l'algo ?", explications simplifiées

Justification : Conformité Article 22 RGPD


13.19 Gestion des mineurs

Décision : 13 ans minimum + consentement parental 13-15 ans + RoadWave Kids

App principale (RoadWave)

Âge minimum : 13 ans (alignement YouTube/TikTok)

Processus inscription :

  1. Saisie date naissance (JJ/MM/AAAA)
  2. Si < 13 ans : blocage + message redirection RoadWave Kids
  3. Si 13-15 ans : workflow consentement parental
  4. Si ≥ 16 ans : inscription directe

Workflow consentement parental (13-15 ans) :

  1. Ado saisit email parent
  2. Email automatique parent avec lien validation (expire 7j)
  3. Parent clique lien → page dédiée avec résumé données collectées, paramètres contrôle parental, checkbox consentement
  4. Validation parent → compte ado activé avec restrictions

Restrictions 13-15 ans :

  • Écoute contenus autorisés
  • Création contenus (modération renforcée)
  • ⚠️ GPS précis : consentement parental explicite requis
  • ⚠️ Messagerie privée : désactivée par défaut
  • ⚠️ Contenus sensibles : filtrés (pas de contenu +16)
  • ⚠️ Profil public limité (pas d'affichage ville précise)

Contrôles parentaux :

  • Dashboard parent : roadwave.fr/parent/[child_id]
  • Visualisation historique écoute
  • Activation/désactivation GPS précis
  • Activation/désactivation messagerie
  • Révocation consentement à tout moment
  • Notification hebdomadaire activité

Vérification légère identité parent :

  • Email parent ≠ email ado (vérification domaine)
  • Lien expiration 7 jours
  • Pas de vérification identité forte (MVP)

RoadWave Kids (< 13 ans)

App dédiée : Version séparée avec contrôles renforcés

Caractéristiques :

  • Pas de GPS précis (GeoIP ville uniquement)
  • Pas de création contenu
  • Pas de profil public
  • Pas de messagerie
  • Contenus présélectionnés (whitelist éditoriale)
  • Mode lecture seule
  • Contrôle parental obligatoire

Contenus autorisés :

  • Contes audio enfants
  • Guides touristiques famille
  • Podcasts éducatifs labellisés
  • Histoires locales patrimoine

Workflow inscription :

  1. Création compte parent (RoadWave standard)
  2. Ajout profil enfant dans dashboard parent
  3. App Kids : login via QR code parent
  4. Pas de compte autonome enfant

Modération :

  • 100% contenus présélectionnés par équipe éditoriale
  • Aucun UGC accessible
  • Whitelist créateurs vérifiés uniquement

Justification :

  • Conformité Article 8 RGPD (13-16 ans selon pays)
  • 13 ans France = seuil légal avec consentement parental
  • App Kids = protection renforcée < 13 ans
  • Alignement marché (YouTube 13+, YouTube Kids)

Roadmap :

  • MVP : App principale 16+ uniquement (simplicité)
  • Phase 2 : Workflow 13-15 ans + consentement parental
  • Phase 3 : RoadWave Kids (app séparée)

13.20 Sous-traitants et DPA

Décision : DPA systématique, audit annuel

Service Traitement Localisation DPA Certifications
OVH Hébergement France ISO 27001, HDS
Bunny.net CDN UE ISO 27001
Brevo Emailing France RGPD certified
Mangopay Paiements Luxembourg PCI-DSS, ACPR

Obligations DPA : Traitement selon instructions, confidentialité, sécurité, assistance droits, suppression fin contrat

Gestion : docs/rgpd/sous-traitants.md, review annuelle

Justification : Conformité Article 28 RGPD


13.21 Analyse d'impact (DPIA)

Décision : DPIA obligatoire (GPS + profilage grande échelle)

Raisons :

  • Traitement grande échelle données GPS sensibles
  • Profilage automatisé recommandations
  • Surveillance zones publiques

Contenu : Description traitement, finalités, nécessité, risques (tracking, profilage, fuite), mesures atténuation (anonymisation 24h, consentement, chiffrement, mode dégradé)

Fichier : docs/rgpd/dpia-geolocalisation.md, review annuelle

Justification : Conformité Article 35 RGPD (critères CNIL remplis)


13.22 Délai de réponse aux demandes

Décision : 1 mois max, automatisation maximale

Canaux : Email dpo@roadwave.fr, formulaire in-app, courrier postal

Droit Délai cible Automatisation
Accès (export) 48h Worker
Rectification Immédiat Self-service
Suppression Immédiat Self-service
Opposition Immédiat Toggles
Limitation Immédiat Gel compte
Portabilité 48h Export
Contestation décision 24h ⚠️ Manuel

Vérification identité : Si email vérifié = aucune vérif supplémentaire

Justification : Conformité Article 12 RGPD