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
56 lines
2.0 KiB
Markdown
56 lines
2.0 KiB
Markdown
# Anonymisation automatique GPS après 24h
|
|
|
|
```mermaid
|
|
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)
|