Files
roadwave/docs/domains/_shared/sequences/export-donnees.md
jpgiannetti fd2b0f70c5 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:49:12 +01:00

2.2 KiB

Export de données (portabilité)

sequenceDiagram
    participant User as Utilisateur
    participant App as Application
    participant DB as Base de données
    participant Queue as File d'attente
    participant Worker as Worker Background
    participant CDN as CDN (fichiers audio)
    participant Storage as Stockage temporaire
    participant Email as Service Email

    User->>App: Demande export données

    App->>DB: Vérifier dernière demande
    alt Dernière demande < 30 jours
        DB->>App: Demande refusée
        App->>User: "Prochain export disponible dans X jours"
    else Demande autorisée
        App->>DB: Créer demande export (statut: pending)
        App->>Queue: Ajouter job export
        App->>User: "Export en cours, email sous 48h"

        Queue->>Worker: Job export disponible

        Note over Worker: Génération asynchrone

        Worker->>DB: Récupérer profil utilisateur
        Worker->>DB: Récupérer historique d'écoute
        Worker->>DB: Récupérer contenus créés (métadonnées)
        Worker->>DB: Récupérer centres d'intérêt
        Worker->>DB: Récupérer historique consentements

        Worker->>CDN: Télécharger fichiers audio utilisateur
        CDN->>Worker: Fichiers audio (.opus)

        Worker->>Worker: Générer export.json (machine-readable)
        Worker->>Worker: Générer index.html (human-readable)
        Worker->>Worker: Générer README.txt
        Worker->>Worker: Créer archive ZIP

        Worker->>Storage: Stocker ZIP (expire 7j)
        Storage->>Worker: URL signée (expire 7j)

        Worker->>DB: Mettre à jour demande (statut: completed)
        Worker->>DB: Enregistrer URL + date expiration

        Worker->>Email: Envoyer email avec lien
        Email->>User: Email + lien téléchargement (valide 7j)

        User->>Storage: Clic lien téléchargement
        Storage->>User: Téléchargement ZIP

        Note over Storage: Après 7 jours

        Storage->>Storage: Suppression automatique ZIP
    end

Légende :

  • Limite : 1 export / 30 jours (anti-abus)
  • Délai génération : 48h maximum (conformité RGPD Article 20)
  • Expiration lien : 7 jours
  • Format : ZIP contenant JSON, HTML, audio, README