Files
roadwave/docs/domains/_shared/sequences/anonymisation-gps.md
jpgiannetti b52ffb8db9 feat(rgpd): compléter documentation RGPD avec 12 nouvelles sections
Règles RGPD (docs/domains/_shared/rules/rgpd.md):
- Ajouter sections 13.11-13.22 (droits utilisateurs, mineurs, sécurité)
- Droit de rectification, opposition, limitation du traitement
- Gestion des mineurs: 13 ans minimum + consentement parental 13-15 ans
- Protection renforcée: RoadWave Kids pour < 13 ans
- Sécurité: chiffrement multi-niveaux, procédure breach 72h CNIL
- Politique de confidentialité avec versioning
- Sous-traitants, DPIA, délais de réponse

Entités (6 nouvelles):
- PARENTAL_CONSENTS + PARENTAL_CONTROLS (workflow 13-15 ans)
- PRIVACY_POLICY_VERSIONS + USER_POLICY_ACCEPTANCES
- ACCOUNT_DELETIONS (grace period 30j)
- BREACH_INCIDENTS + BREACH_AFFECTED_USERS
- USER_PROFILE_HISTORY (audit trail rectification)
- DATA_RETENTION_LOGS (purge 5 ans)

Diagrammes séquences (5 nouveaux):
- Consentement parental avec validation email
- Anonymisation GPS automatique après 24h
- Notification breach CNIL (procédure 72h)
- Export données asynchrone
- Suppression compte avec grace period

Cycles de vie (3 nouveaux + 1 enrichi):
- parental-consent-lifecycle.md
- breach-incident-lifecycle.md
- account-deletion-lifecycle.md
- user-account-lifecycle.md (ajout états mineurs, frozen)

Features BDD (4 nouvelles, 195 scénarios RGPD):
- minors-protection.feature (9 scénarios)
- data-security.feature (12 scénarios)
- privacy-policy.feature (8 scénarios)
- user-rights.feature (8 scénarios)

Infrastructure:
- Réorganiser docs générées: docs/bdd + output → generated/bdd + generated/pdf
- Mettre à jour mkdocs.yml, Makefile, scripts Python
- Ajouter /generated/ au .gitignore
2026-02-08 17:54:46 +01:00

2.0 KiB

Anonymisation automatique GPS après 24h

sequenceDiagram
    participant User as Utilisateur
    participant App as Application
    participant DB as Base de données (PostGIS)
    participant Cron as Job Cron Quotidien

    Note over User,App: Écoute de contenu avec GPS

    User->>App: Écoute contenu (GPS activé)
    App->>App: Capturer position GPS précise
    App->>DB: INSERT position (lat, lon, anonymized: false)
    Note over DB: Position précise stockée<br/>Utilisée pour recommandations

    Note over DB,Cron: Moins de 24h : position précise conservée

    App->>DB: SELECT positions pour recommandations
    DB->>App: Positions GPS précises (< 24h)
    App->>User: Recommandations hyperlocales

    Note over Cron: 24h+ plus tard

    Cron->>DB: SELECT positions WHERE created_at < NOW() - 24h AND anonymized = false
    DB->>Cron: Liste positions à anonymiser

    loop Pour chaque position
        Cron->>DB: Convertir (lat, lon) → geohash précision 5 (~5km²)
        Cron->>DB: UPDATE position avec geohash
        Cron->>DB: Supprimer coordonnées précises
        Cron->>DB: SET anonymized = true
    end

    Cron->>DB: Log anonymisation (nombre positions traitées)

    Note over DB: Positions anonymisées utilisées pour analytics

    App->>DB: SELECT positions anonymisées (analytics globales)
    DB->>App: Positions geohash uniquement
    App->>App: Générer heatmap trafic (~5km² précision)

    Note over User: Exception : historique personnel

    User->>App: Consulter "Mon historique d'écoute"
    App->>DB: SELECT historique personnel utilisateur
    DB->>App: Positions précises conservées (tant que compte actif)
    App->>User: Trajets détaillés

Légende :

  • < 24h : GPS précis conservé (recommandations hyperlocales)
  • > 24h : Conversion automatique en geohash précision 5 (~5km²)
  • Exception : Historique personnel conservé intact tant que compte actif
  • Analytics : Uniquement positions anonymisées (geohash)