diff --git a/.gitignore b/.gitignore
index e01d29b..2ec9760 100644
--- a/.gitignore
+++ b/.gitignore
@@ -66,4 +66,4 @@ site/
.cache/
# Generated documentation
-/generated/
+docs/generated/
diff --git a/Makefile b/Makefile
index d49d9a6..e45ae39 100644
--- a/Makefile
+++ b/Makefile
@@ -70,7 +70,7 @@ clean:
## docs-clean: Remove generated documentation (BDD docs and PDF)
docs-clean:
@echo "$(YELLOW)Cleaning generated documentation...$(NC)"
- @rm -rf generated/
+ @rm -rf docs/generated/
@docker rmi roadwave-pdf-generator 2>/dev/null || true
@echo "$(GREEN)✓ Documentation cleaned$(NC)"
diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md
new file mode 100644
index 0000000..876fa5d
--- /dev/null
+++ b/docs/CONTRIBUTING.md
@@ -0,0 +1,456 @@
+# Guide de Contribution à la Documentation
+
+Bienvenue ! Ce guide explique comment contribuer à la documentation RoadWave tout en respectant son architecture et ses conventions.
+
+## Principes Fondamentaux
+
+### 1. Source Unique de Vérité (Single Source of Truth)
+
+Chaque information doit exister à **un seul endroit** :
+
+- **Règles métier** → `docs/domains/[domain]/rules/*.md`
+- **Features BDD** → `domains/[domain]/features/**/*.feature` (sources Gherkin)
+- **Documentation BDD** → `docs/generated/bdd/` (générée automatiquement)
+- **Entités** → `docs/domains/[domain]/entities/*.md`
+- **États** → `docs/domains/[domain]/states/*.md`
+- **Séquences** → `docs/domains/[domain]/sequences/*.md`
+
+❌ **Ne jamais** dupliquer une information
+✅ **Toujours** référencer via des liens
+
+### 2. Langue : 100% Français
+
+Tous les fichiers de documentation doivent être en français :
+
+- ✅ Noms de fichiers en français (kebab-case)
+- ✅ Contenu en français
+- ✅ Navigation `mkdocs.yml` en français
+- ⚠️ Exception : code backend en anglais (convention internationale)
+
+### 3. Dossier `generated/` = Read-Only
+
+Le dossier `docs/generated/` contient **exclusivement** des fichiers générés automatiquement.
+
+❌ **Ne JAMAIS** créer de fichiers manuels dans `generated/`
+❌ **Ne JAMAIS** éditer des fichiers dans `generated/`
+✅ Modifier les sources (`.feature`) et regénérer
+
+## Ajouter une Nouvelle Feature BDD
+
+### Étape 1 : Créer le fichier `.feature`
+
+```bash
+# Créer dans le bon domaine
+touch domains/[domain]/features/[category]/ma-feature.feature
+```
+
+**Exemple** : Feature de recherche dans le domaine recommendation
+
+```bash
+touch domains/recommendation/features/recherche/recherche-avancee.feature
+```
+
+### Étape 2 : Écrire la feature en Gherkin
+
+```gherkin
+# language: fr
+Fonctionnalité: Recherche avancée de contenus
+ En tant qu'utilisateur
+ Je veux rechercher des contenus avec des filtres avancés
+ Afin de trouver exactement ce que je cherche
+
+ Contexte:
+ Étant donné que je suis connecté
+ Et que je suis sur la page de recherche
+
+ Scénario: Recherche par catégorie et distance
+ Quand je sélectionne la catégorie "Tourisme"
+ Et je définis un rayon de 10 km
+ Alors je vois uniquement les contenus de type "Tourisme"
+ Et tous les résultats sont à moins de 10 km
+
+ Scénario: Recherche avec filtres multiples
+ # ... autres scénarios
+```
+
+**Conventions Gherkin** :
+- Langue française (`# language: fr`)
+- Mots-clés : `Fonctionnalité`, `Scénario`, `Étant donné`, `Quand`, `Alors`
+- Commentaires pour référencer les règles DDD
+
+### Étape 3 : Regénérer la documentation
+
+```bash
+make bdd-docs
+```
+
+Cette commande :
+1. Parse les fichiers `.feature`
+2. Génère les `.md` dans `generated/bdd/`
+3. Démarre le serveur MkDocs (http://localhost:8000)
+
+### Étape 4 : Ajouter dans `mkdocs.yml`
+
+Si la catégorie n'existe pas encore, l'ajouter :
+
+```yaml
+- '🎯 Recommendation':
+ # ...
+ - Tests BDD:
+ - 'Recherche':
+ - Recherche de contenu: generated/bdd/recommendation/features/recherche/recherche.md
+ - Recherche avancée: generated/bdd/recommendation/features/recherche/recherche-avancee.md # ← NOUVEAU
+```
+
+### Étape 5 : Commit
+
+```bash
+git add domains/recommendation/features/recherche/recherche-avancee.feature
+git add mkdocs.yml
+git commit -m "feat(bdd): ajouter feature recherche avancée
+
+- Ajout recherche par catégorie et distance
+- Ajout filtres multiples
+- Couverture domaine recommendation"
+```
+
+## Ajouter une Règle Métier
+
+### Étape 1 : Identifier le domaine
+
+Déterminer dans quel domaine DDD se situe la règle :
+
+- **Shared** : Authentification, RGPD, erreurs, profil
+- **Recommendation** : Algorithme, jauges d'intérêt, recherche
+- **Content** : Audio-guides, création, streaming
+- **Moderation** : Signalements, validation, sanctions
+- **Advertising** : Publicités, ciblage
+- **Premium** : Abonnements, mode offline
+- **Monetization** : Paiements, revenus créateurs
+
+### Étape 2 : Créer ou éditer le fichier de règles
+
+```bash
+# Éditer fichier existant
+vim domains/[domain]/rules/[theme].md
+
+# Ou créer un nouveau fichier
+touch domains/[domain]/rules/nouveau-theme.md
+```
+
+### Étape 3 : Documenter la règle
+
+```markdown
+# Règles - Nouveau Thème
+
+## Contexte
+
+Description du contexte métier...
+
+## Règles
+
+### Règle 1 : Titre de la règle
+
+**Contexte** : Quand...
+**Règle** : L'utilisateur doit/peut/ne peut pas...
+**Justification** : Parce que...
+
+**Exemple** :
+- Cas nominal : ...
+- Cas d'erreur : ...
+
+### Règle 2 : Autre règle
+
+...
+
+## Liens avec d'autres domaines
+
+- [Entité X](../entities/entite-x.md)
+- [Séquence Y](../sequences/sequence-y.md)
+- [ADR-XXX](../../adr/XXX-decision.md)
+```
+
+### Étape 4 : Créer les features BDD correspondantes
+
+Les règles métier doivent être testables → créer des features BDD.
+
+### Étape 5 : Ajouter dans `mkdocs.yml`
+
+```yaml
+- '🎙️ Content':
+ - Règles:
+ - Création & Publication: domains/content/rules/creation-publication.md
+ - Nouveau Thème: domains/content/rules/nouveau-theme.md # ← NOUVEAU
+```
+
+## Ajouter une Entité
+
+### Créer le fichier
+
+```bash
+touch domains/[domain]/entities/nouvelle-entite.md
+```
+
+### Documenter l'entité
+
+```markdown
+# Entité : NouvelleThing
+
+## Description
+
+Brève description de l'entité...
+
+## Attributs
+
+| Attribut | Type | Description | Contraintes |
+|----------|------|-------------|-------------|
+| `id` | UUID | Identifiant unique | PK, NOT NULL |
+| `name` | String | Nom de la chose | NOT NULL, max 255 |
+| `created_at` | Timestamp | Date de création | NOT NULL |
+
+## Relations
+
+- **BelongsTo** : [User](../../../_shared/entities/users.md)
+- **HasMany** : [Items](./items.md)
+
+## États du Cycle de Vie
+
+Voir [Lifecycle](../states/nouvelle-thing-lifecycle.md)
+
+## Règles Métier
+
+- [Règle de création](../rules/creation.md#nouvelle-thing)
+- [Règle de validation](../rules/validation.md#nouvelle-thing)
+
+## Implémentation Backend
+
+**Module** : `backend/internal/[domain]/`
+**Table** : `nouvelle_things`
+**Repository** : `nouvelle_thing_repository.go`
+
+Requêtes sqlc : `backend/queries/nouvelle_thing.sql`
+```
+
+### Ajouter dans `mkdocs.yml`
+
+```yaml
+- Entités:
+ - Vue d'ensemble: domains/[domain]/entities/vue-ensemble.md
+ - Nouvelle Entité: domains/[domain]/entities/nouvelle-entite.md # ← NOUVEAU
+```
+
+## Ajouter un Diagramme
+
+### Diagrammes de Séquence
+
+```bash
+touch domains/[domain]/sequences/nouveau-processus.md
+```
+
+```markdown
+# Séquence - Nouveau Processus
+
+## Diagramme
+
+\`\`\`mermaid
+sequenceDiagram
+ participant U as Utilisateur
+ participant A as API
+ participant DB as Database
+
+ U->>A: POST /nouvelle-action
+ A->>DB: Vérifier permissions
+ DB-->>A: OK
+ A->>DB: INSERT nouvelle_thing
+ A-->>U: 201 Created
+\`\`\`
+
+## Légende
+
+**Acteurs** :
+- Utilisateur : Client de l'API
+- API : Backend RoadWave
+- Database : PostgreSQL
+
+**Étapes clés** :
+1. Vérification des permissions
+2. Insertion en base
+3. Retour confirmation
+
+## Cas d'Erreur
+
+### Permissions insuffisantes
+...
+
+### Contrainte violée
+...
+```
+
+### Diagrammes d'États
+
+```bash
+touch domains/[domain]/states/nouvelle-thing-lifecycle.md
+```
+
+```markdown
+# États - Lifecycle NouvelleThing
+
+## Diagramme
+
+\`\`\`mermaid
+stateDiagram-v2
+ [*] --> Draft
+ Draft --> Pending: Submit
+ Pending --> Approved: Approve
+ Pending --> Rejected: Reject
+ Approved --> Published: Publish
+ Published --> Archived: Archive
+ Archived --> [*]
+\`\`\`
+
+## États
+
+| État | Description | Transitions Possibles |
+|------|-------------|----------------------|
+| Draft | Création en cours | → Pending |
+| Pending | En attente validation | → Approved, Rejected |
+| Approved | Validé | → Published |
+| Rejected | Refusé | → Draft (correction) |
+| Published | Publié | → Archived |
+| Archived | Archivé | (final) |
+
+## Règles de Transition
+
+### Draft → Pending
+**Conditions** : Tous les champs obligatoires remplis
+**Actions** : Notification modérateurs
+```
+
+## Conventions de Nommage
+
+### Fichiers Markdown
+
+```bash
+# Format : kebab-case-francais.md
+✅ export-donnees.md
+✅ suppression-compte.md
+✅ moderation-communautaire.md
+✅ vue-ensemble.md
+
+❌ data-export.md (anglais)
+❌ entities-overview.md (anglais)
+❌ ExportDonnees.md (PascalCase)
+❌ export_donnees.md (snake_case)
+```
+
+### Fichiers Features
+
+```bash
+# Format : kebab-case-francais.feature
+✅ signalement.feature
+✅ jauge-initiale.feature
+✅ creation-audio-guide.feature
+
+❌ reporting.feature (anglais)
+❌ initial-gauge.feature (anglais)
+```
+
+### Répertoires
+
+```bash
+# Format : kebab-case-anglais (convention internationale)
+✅ features/
+✅ interest-gauges/
+✅ content-creation/
+✅ rgpd-compliance/
+```
+
+## Vérifications Avant Commit
+
+### Checklist
+
+- [ ] Tous les fichiers sont en français (sauf code backend)
+- [ ] Pas de fichiers dans `generated/` (seulement sources modifiées)
+- [ ] Les liens internes fonctionnent
+- [ ] `mkdocs.yml` mis à jour si nécessaire
+- [ ] Features BDD regénérées (`make bdd-docs`)
+- [ ] Message de commit descriptif
+
+### Tester Localement
+
+```bash
+# Vérifier syntaxe YAML
+python3 -c "import yaml; yaml.safe_load(open('mkdocs.yml'))"
+
+# Tester la navigation
+make docs-serve
+# → http://localhost:8000
+```
+
+### Vérifier les Liens
+
+```bash
+# Chercher liens cassés vers anciens noms
+grep -r "entities-overview\.md" docs/
+grep -r "user-account-lifecycle\.md" docs/
+grep -r "data-export\.md" docs/
+
+# Ne devrait rien retourner
+```
+
+## Messages de Commit
+
+### Format
+
+```
+type(scope): description courte
+
+Corps optionnel avec détails...
+
+Refs: #issue-number
+```
+
+### Types
+
+- `feat(bdd)` : Nouvelle feature BDD
+- `docs(rules)` : Nouvelle règle métier
+- `docs(entity)` : Nouvelle entité
+- `fix(link)` : Correction de lien
+- `refactor(nav)` : Réorganisation navigation
+
+### Exemples
+
+```bash
+# Feature BDD
+git commit -m "feat(bdd): ajouter recherche avancée dans recommendation"
+
+# Règle métier
+git commit -m "docs(rules): documenter règles de modération préventive"
+
+# Entité
+git commit -m "docs(entity): ajouter entité Campaign pour advertising"
+
+# Fix
+git commit -m "fix(link): corriger lien vers vue-ensemble.md"
+```
+
+## Ressources
+
+- **Architecture DDD** : [domains/README.md](domains/README.md)
+- **Tests BDD** : [ADR-007](adr/007-tests-bdd.md)
+- **ADRs** : [adr/README.md](adr/README.md)
+
+## Support
+
+Questions ? Consultez :
+1. Cette documentation
+2. Les ADRs existants
+3. Les exemples dans les domaines existants
+4. L'équipe RoadWave
+
+## Auteurs
+
+- Équipe RoadWave
+- Claude Sonnet 4.5 (documentation)
+
+Dernière mise à jour : 2026-02-08
diff --git a/docs/architecture/sequences/cache-geospatial.md b/docs/architecture/sequences/cache-geospatial.md
deleted file mode 100644
index bd0ae2a..0000000
--- a/docs/architecture/sequences/cache-geospatial.md
+++ /dev/null
@@ -1,320 +0,0 @@
-# Diagramme de Séquence : Cache Géospatial Redis
-
-> Architecture du cache Redis Geospatial pour l'optimisation des requêtes de découverte de contenu géolocalisé.
-
-## Vue d'ensemble
-
-Le cache Redis Geospatial permet d'accélérer la recherche de contenus audio à proximité d'une position GPS en évitant des calculs PostGIS coûteux sur PostgreSQL à chaque requête.
-
-**Performance** :
-- Sans cache : ~200-500ms (calcul PostGIS sur 100K points)
-- Avec cache : ~5-10ms (filtrage Redis en mémoire)
-
----
-
-## Flux complet : Cold Start → Warm Cache
-
-```mermaid
-sequenceDiagram
- participant User as 📱 Utilisateur
(Paris)
- participant Backend as 🔧 Backend Go
- participant Redis as 🔴 Redis Geospatial
(Cache)
- participant PostgreSQL as 🗄️ PostgreSQL
+ PostGIS
- participant CDN as 🌐 NGINX Cache (OVH VPS)
-
- Note over User,CDN: 🥶 Cold Start - Cache vide
-
- User->>Backend: GET /contents?lat=48.8566&lon=2.3522&radius=50km
- Backend->>Redis: EXISTS geo:catalog
- Redis-->>Backend: false (cache vide)
-
- Backend->>PostgreSQL: SELECT id, lat, lon, title, geo_level
FROM contents WHERE active=true
- Note over PostgreSQL: Tous les contenus actifs
de la plateforme (métadonnées)
- PostgreSQL-->>Backend: 100K contenus (métadonnées)
-
- Backend->>Redis: GEOADD geo:catalog
lon1 lat1 "content:1"
lon2 lat2 "content:2"
... (100K entrées)
- Note over Redis: Stockage index spatial
en mémoire (~20 MB)
- Redis-->>Backend: OK (100000)
-
- Backend->>Redis: EXPIRE geo:catalog 300
- Note over Redis: TTL 5 minutes
-
- Backend->>Redis: GEORADIUS geo:catalog
2.3522 48.8566 50 km
- Note over Redis: Filtrage spatial instantané
(index geohash)
- Redis-->>Backend: [content:123, content:456, ...]
(~500 IDs dans rayon)
-
- Backend->>PostgreSQL: SELECT * FROM contents
WHERE id IN (123, 456, ...)
AND geo_level = 'gps_precise'
- Note over PostgreSQL: Récupération détails complets
uniquement contenus proches
- PostgreSQL-->>Backend: Détails complets (500 contenus GPS)
-
- Backend->>PostgreSQL: SELECT * FROM contents
WHERE city='Paris' OR dept='75'
OR region='IDF' OR geo_level='national'
- Note over PostgreSQL: Contenus par niveau géographique
- PostgreSQL-->>Backend: Contenus ville/région/national
-
- Backend->>Backend: Scoring & mixage :
- GPS proche : 70%
- Ville : 20%
- Région : 8%
- National : 2%
-
- Backend-->>User: JSON: [{id, title, creator, audioUrl, score}, ...]
(playlist mixée et scorée)
-
- Note over User,CDN: 🎵 Lecture audio (requêtes séparées)
-
- User->>CDN: GET /audio/content-123.m3u8
- CDN-->>User: Playlist HLS
-
- User->>CDN: GET /audio/content-123-segment-001.ts
- CDN-->>User: Segment audio Opus
-
- Note over User,CDN: 🔥 Warm Cache - Utilisateur 2 à Lyon (45km+)
-
- participant User2 as 📱 Utilisateur 2
(Lyon)
-
- User2->>Backend: GET /contents?lat=45.7640&lon=4.8357&radius=50km
- Backend->>Redis: EXISTS geo:catalog
- Redis-->>Backend: true ✅ (cache chaud)
-
- Backend->>Redis: GEORADIUS geo:catalog
4.8357 45.7640 50 km
- Note over Redis: Filtrage instantané
sur cache existant
- Redis-->>Backend: [content:789, content:012, ...]
(~300 IDs différents)
-
- Backend->>PostgreSQL: SELECT * FROM contents
WHERE id IN (789, 012, ...)
AND geo_level = 'gps_precise'
- PostgreSQL-->>Backend: Détails complets
-
- Backend->>PostgreSQL: SELECT * FROM contents
WHERE city='Lyon' OR dept='69'
OR region='Auvergne-RA' OR geo_level='national'
- PostgreSQL-->>Backend: Contenus ville/région/national
-
- Backend->>Backend: Scoring & mixage
-
- Backend-->>User2: JSON: [{id, title, creator, audioUrl, score}, ...]
-```
-
----
-
-## Stratégie de cache
-
-### Cache du catalogue complet (approche choisie)
-
-**Principe** : Au premier cache miss, charger **TOUS** les contenus géolocalisés en une seule fois dans Redis.
-
-**Avantages** :
-- ✅ 1 seul cache miss au démarrage de l'instance
-- ✅ Toutes les requêtes suivantes servies par Redis (n'importe quelle position GPS)
-- ✅ Simple à gérer (1 seule clé Redis : `geo:catalog`)
-- ✅ Pas de duplication de données
-
-**Inconvénients** :
-- ⚠️ Premier utilisateur subit le cold start (~500ms-1s)
-- ⚠️ Nécessite charger toute la base (acceptable : ~20 MB pour 100K contenus)
-
-**Alternatives non retenues** :
-- Cache par zone géographique → cache miss fréquents, complexité gestion chevauchements
-- Cache à la demande → trop de cache miss, pas d'optimisation réelle
-
----
-
-## Détails techniques
-
-### 1. Données stockées dans Redis
-
-**Clé Redis** : `geo:catalog`
-
-**Structure** :
-```
-GEOADD geo:catalog
- 2.3522 48.8566 "content:12345" # lon, lat, member
- 4.8357 45.7640 "content:67890"
- ...
-```
-
-**Taille mémoire** :
-- ~200 bytes par entrée (ID + coordonnées + index geohash)
-- 100K contenus = ~20 MB
-- Négligeable pour Redis (plusieurs GB RAM disponibles)
-
-**TTL** : 5 minutes (300 secondes)
-- Le contenu géolocalisé est quasi-statique (change peu)
-- Rechargement automatique toutes les 5 minutes si cache expiré
-- Permet de propager les nouveaux contenus rapidement
-
-### 2. Niveaux géographiques
-
-Le cache Redis ne contient que les contenus avec **GPS précis** (`geo_level = 'gps_precise'`).
-
-Les autres niveaux géographiques sont gérés par filtrage applicatif :
-
-| Niveau | Stockage | Requête |
-|--------|----------|---------|
-| **GPS précis** | Redis + PostgreSQL | `GEORADIUS` puis `SELECT WHERE id IN (...)` |
-| **Ville** | PostgreSQL uniquement | `SELECT WHERE city = ?` |
-| **Département** | PostgreSQL uniquement | `SELECT WHERE department = ?` |
-| **Région** | PostgreSQL uniquement | `SELECT WHERE region = ?` |
-| **National** | PostgreSQL uniquement | `SELECT WHERE geo_level = 'national'` |
-
-### 3. Commandes Redis utilisées
-
-```bash
-# Vérifier existence du cache
-EXISTS geo:catalog
-# Retour : 0 (n'existe pas) ou 1 (existe)
-
-# Charger le catalogue complet (cold start)
-GEOADD geo:catalog 2.3522 48.8566 "content:1" 4.8357 45.7640 "content:2" ...
-# Retour : nombre d'éléments ajoutés
-
-# Définir TTL 5 minutes
-EXPIRE geo:catalog 300
-
-# Rechercher contenus dans un rayon
-GEORADIUS geo:catalog 2.3522 48.8566 50 km
-# Retour : ["content:123", "content:456", ...]
-
-# Optionnel : obtenir distance et coordonnées
-GEORADIUS geo:catalog 2.3522 48.8566 50 km WITHDIST WITHCOORD
-# Retour : [["content:123", "12.5", ["2.35", "48.85"]], ...]
-```
-
-### 4. Algorithme de scoring
-
-Le backend mixe les résultats selon une pondération :
-
-```
-Score final =
- (Pertinence GPS × 0.70) +
- (Pertinence Ville × 0.20) +
- (Pertinence Région × 0.08) +
- (Pertinence National × 0.02)
-```
-
-**Critères de pertinence** :
-- **GPS** : Plus proche = score élevé (distance inversée)
-- **Ville/Région** : Matching exact = score maximal
-- **National** : Score fixe faible (contenu générique)
-
-**Mixage playlist** :
-1. Trier tous les contenus par score décroissant
-2. Appliquer diversité créateurs (pas 3 contenus du même créateur d'affilée)
-3. Injecter contenus sponsorisés/mis en avant (futurs)
-4. Retourner top 50 pour la session d'écoute
-
----
-
-## Métriques de performance
-
-### Temps de réponse typiques
-
-| Scénario | Latence | Détail |
-|----------|---------|--------|
-| **Cold start** | 500-1000ms | Chargement 100K contenus dans Redis + requête |
-| **Warm cache** | 5-10ms | `GEORADIUS` + `SELECT WHERE id IN (...)` |
-| **TTL expiré** | 500-1000ms | Rechargement automatique |
-
-### Charge serveurs
-
-| Composant | Sans cache | Avec cache |
-|-----------|------------|------------|
-| **PostgreSQL CPU** | 60-80% | 10-20% |
-| **Redis CPU** | N/A | 5-15% |
-| **Throughput** | ~50 req/s | ~500 req/s |
-
----
-
-## Cas limites et optimisations futures
-
-### Cas limite 1 : Contenu très dense (Paris intra-muros)
-
-**Problème** : 10K contenus dans rayon 5km → trop de résultats
-
-**Solution actuelle** :
-- Limiter résultats Redis à 1000 premiers (tri par distance)
-- Scorer et filtrer côté application
-
-**Optimisation future** :
-- Ajuster rayon dynamiquement selon densité
-- Utiliser `GEORADIUS ... COUNT 500` pour limiter côté Redis
-
-### Cas limite 2 : Zones rurales (peu de contenu)
-
-**Problème** : Rayon 50km retourne <10 contenus
-
-**Solution actuelle** :
-- Augmenter poids contenus région/national dans le scoring
-- Suggérer contenus nationaux populaires
-
-**Optimisation future** :
-- Augmenter rayon automatiquement jusqu'à obtenir min 20 contenus
-- `GEORADIUS ... 100 km` si rayon initial insuffisant
-
-### Cas limite 3 : Nombreux créateurs actifs (évolutivité)
-
-**Problème** : Cache 100K → 1M contenus (200 MB Redis)
-
-**Solution actuelle** :
-- 200 MB reste acceptable pour Redis
-
-**Optimisation future** :
-- Sharding géographique : cache Europe, cache USA, etc.
-- Limiter cache aux contenus actifs 90 derniers jours
-
----
-
-## Invalidation du cache
-
-### Stratégies d'invalidation
-
-| Événement | Action cache | Détail |
-|-----------|--------------|--------|
-| **Nouveau contenu publié** | Lazy (TTL) | Visible sous 5 minutes max |
-| **Contenu supprimé/modéré** | Lazy (TTL) | Disparaît sous 5 minutes max |
-| **Mise à jour GPS contenu** | Lazy (TTL) | Nouvelle position sous 5 minutes |
-| **Déploiement backend** | Flush volontaire | `DEL geo:catalog` si schema change |
-
-**Pas d'invalidation immédiate** pour simplifier l'architecture (cohérence éventuelle acceptable).
-
-**Alternative future** :
-- Pub/Sub Redis : notifier toutes les instances backend lors d'un changement
-- `GEOADD geo:catalog 2.35 48.85 "content:new"` pour ajout immédiat
-
----
-
-## Schéma simplifié
-
-```
-┌─────────────────────────────────────────────────────────┐
-│ Utilisateur │
-│ (Position GPS actuelle) │
-└────────────────────────┬────────────────────────────────┘
- │
- │ GET /contents?lat=X&lon=Y&radius=Z
- ▼
-┌─────────────────────────────────────────────────────────┐
-│ Backend Go (Fiber) │
-│ │
-│ 1. Vérifier cache Redis │
-│ ├─ Cache HIT → GEORADIUS rapide │
-│ └─ Cache MISS → Charger catalogue complet │
-│ │
-│ 2. Filtrer contenus GPS proches (Redis) │
-│ 3. Récupérer contenus ville/région/national (PG) │
-│ 4. Scorer et mixer selon pondération │
-│ 5. Retourner playlist │
-└────────────┬───────────────────────────┬────────────────┘
- │ │
- │ GEORADIUS │ SELECT détails
- ▼ ▼
-┌─────────────────────┐ ┌───────────────────────────┐
-│ Redis Geospatial │ │ PostgreSQL + PostGIS │
-│ (Index spatial) │ │ (Données complètes) │
-│ │ │ │
-│ • geo:catalog │ │ • contents (détails) │
-│ • TTL 5 min │ │ • users │
-│ • ~20 MB mémoire │ │ • playlists │
-└─────────────────────┘ └───────────────────────────┘
-```
-
----
-
-## Références
-
-- [ADR-005 : Base de données](../../adr/005-base-de-donnees.md)
-- [Redis Geospatial Commands](https://redis.io/docs/data-types/geospatial/)
-- [PostGIS Documentation](https://postgis.net/documentation/)
-- [Règles métier : Algorithme de recommandation](../../domains/recommendation/rules/algorithme-recommandation.md)
-- [Règles métier : Centres d'intérêt](../../domains/recommendation/rules/centres-interet-jauges.md)
diff --git a/docs/domains/_shared/README.md b/docs/domains/_shared/README.md
index 73f45cd..16f6081 100644
--- a/docs/domains/_shared/README.md
+++ b/docs/domains/_shared/README.md
@@ -19,7 +19,7 @@ Le domaine **Shared** constitue le **Core Domain** de RoadWave. Il contient les
## Modèle de données
-- [Diagramme entités globales](entities/../entities/entities-overview.md) - Entités centrales : USERS, CONTENTS, SUBSCRIPTIONS, LISTENING_HISTORY
+- [Diagramme entités globales](entities/../entities/vue-ensemble.md) - Entités centrales : USERS, CONTENTS, SUBSCRIPTIONS, LISTENING_HISTORY
## Ubiquitous Language
diff --git a/docs/domains/_shared/entities/entities-overview.md b/docs/domains/_shared/entities/vue-ensemble.md
similarity index 100%
rename from docs/domains/_shared/entities/entities-overview.md
rename to docs/domains/_shared/entities/vue-ensemble.md
diff --git a/docs/domains/_shared/sequences/account-deletion.md b/docs/domains/_shared/sequences/account-deletion.md
deleted file mode 100644
index 5f18bfd..0000000
--- a/docs/domains/_shared/sequences/account-deletion.md
+++ /dev/null
@@ -1,48 +0,0 @@
-# Séquence - Suppression de compte
-
-## Diagramme
-
-```mermaid
-sequenceDiagram
- participant U as Utilisateur
- participant API as Backend API
- participant DB as PostgreSQL
- participant E as Email
- participant J as Job Quotidien
-
- U->>API: DELETE /account (demande suppression)
- API->>DB: UPDATE account_status=grace_period
- API->>DB: UPDATE deletion_requested_at=NOW()
- API->>DB: UPDATE sessions.revoked_at=NOW() (toutes)
- API->>DB: UPDATE contents (cachés, non diffusés)
- API->>E: Email avec lien annulation (30j)
- API-->>U: Compte désactivé
-
- alt Utilisateur change d'avis
- U->>API: GET /account/cancel-deletion (lien email)
- API->>DB: UPDATE account_status=active
- API->>DB: UPDATE deletion_requested_at=NULL
- API->>DB: Réactivation contenus
- API->>E: Email confirmation annulation
- API-->>U: Compte réactivé
- else Après 30 jours
- J->>DB: SELECT users WHERE grace_period > 30j
- J->>DB: UPDATE account_status=deleted
- J->>DB: Anonymisation données (email, pseudo...)
- J->>DB: UPDATE contents.creator="Utilisateur supprimé"
- J->>DB: DELETE listening_history, location_history, sessions
- J->>DB: Conservation contenus anonymisés
- J-->>DB: Suppression complète
- end
-```
-
-## Légende
-
-**Grace period** : 30 jours pour annuler
-**Annulation** : Via lien email unique
-**Anonymisation** :
-- Données perso supprimées (email, pseudo, GPS...)
-- Contenus conservés anonymes (intérêt communauté)
-- Irréversible après 30j
-
-**Alternative** : Purge auto inactivité 5 ans (notifications 90j/30j/7j avant)
diff --git a/docs/domains/_shared/sequences/authentication-flow.md b/docs/domains/_shared/sequences/authentification.md
similarity index 92%
rename from docs/domains/_shared/sequences/authentication-flow.md
rename to docs/domains/_shared/sequences/authentification.md
index 34ca193..218f633 100644
--- a/docs/domains/_shared/sequences/authentication-flow.md
+++ b/docs/domains/_shared/sequences/authentification.md
@@ -20,9 +20,9 @@ sequenceDiagram
Z-->>API: Token valide + user_id
API->>DB: SELECT user WHERE id = ?
DB-->>API: Données utilisateur
+ API->>DB: INSERT session (hash tokens, IP, device)
+ DB-->>API: Session créée
API-->>A: Profil utilisateur
-
- A->>DB: INSERT session (hash tokens, IP, device)
A->>U: Connexion réussie
```
diff --git a/docs/domains/_shared/sequences/data-export.md b/docs/domains/_shared/sequences/data-export.md
deleted file mode 100644
index a3216b4..0000000
--- a/docs/domains/_shared/sequences/data-export.md
+++ /dev/null
@@ -1,49 +0,0 @@
-# Séquence - Export de données RGPD
-
-## Diagramme
-
-```mermaid
-sequenceDiagram
- participant U as Utilisateur
- participant API as Backend API
- participant DB as PostgreSQL
- participant W as Worker
- participant S as OVH Storage
- participant E as Email
-
- U->>API: POST /exports (demande)
- API->>DB: Vérification limite (1/mois)
- API->>DB: INSERT export (status=pending)
- API->>W: Job asynchrone
- API-->>U: Export en préparation
-
- W->>DB: Collecte données (profil, écoutes, contenus...)
- W->>W: Génération JSON + HTML
-
- loop Contenus audio
- W->>DB: SELECT audio_url
- W->>W: Copie fichier
- end
-
- W->>W: Création ZIP
- W->>S: Upload fichier
- S-->>W: URL signée (7j)
-
- W->>DB: UPDATE export (status=ready, url, size)
- W->>E: Email avec lien download
- E-->>U: Export prêt (expire 7j)
-
- U->>S: GET /export-signed-url
- S-->>U: Téléchargement ZIP
-
- Note over DB: Job quotidien
- DB->>S: DELETE exports expirés (> 7j)
-```
-
-## Légende
-
-**Conformité RGPD** : Délai max 48h (Article 20)
-**Format** : ZIP (JSON machine-readable + HTML human-readable + audio)
-**Limite** : 1 export/mois
-**Expiration** : 7 jours calendaires
-**Sécurité** : URL signée unique
diff --git a/docs/domains/_shared/sequences/content-moderation.md b/docs/domains/_shared/sequences/moderation-contenu.md
similarity index 100%
rename from docs/domains/_shared/sequences/content-moderation.md
rename to docs/domains/_shared/sequences/moderation-contenu.md
diff --git a/docs/domains/_shared/sequences/token-refresh.md b/docs/domains/_shared/sequences/refresh-token.md
similarity index 100%
rename from docs/domains/_shared/sequences/token-refresh.md
rename to docs/domains/_shared/sequences/refresh-token.md
diff --git a/docs/domains/_shared/sequences/content-report.md b/docs/domains/_shared/sequences/signalement.md
similarity index 100%
rename from docs/domains/_shared/sequences/content-report.md
rename to docs/domains/_shared/sequences/signalement.md
diff --git a/docs/domains/_shared/states/user-account-lifecycle.md b/docs/domains/_shared/states/compte-utilisateur.md
similarity index 100%
rename from docs/domains/_shared/states/user-account-lifecycle.md
rename to docs/domains/_shared/states/compte-utilisateur.md
diff --git a/docs/domains/_shared/states/consentement-parental.md b/docs/domains/_shared/states/consentement-parental.md
new file mode 100644
index 0000000..bb68e2f
--- /dev/null
+++ b/docs/domains/_shared/states/consentement-parental.md
@@ -0,0 +1,32 @@
+# Cycle de vie - Consentement parental
+
+## Diagramme
+
+```mermaid
+stateDiagram-v2
+ [*] --> PendingValidation: Ado saisit email parent
+
+ PendingValidation --> Validated: Parent clique lien (< 7j)
+ PendingValidation --> Expired: Délai 7j écoulé
+
+ Validated --> Revoked: Parent révoque consentement
+ Validated --> AutoRevoked: Ado atteint 16 ans
+
+ Expired --> [*]
+ Revoked --> [*]
+ AutoRevoked --> [*]
+```
+
+## Règles
+
+| État | Valeur | Description |
+|------|--------|-------------|
+| Pending Validation | `pending_validation` | Email envoyé parent, token valide 7j |
+| Validated | `validated` | Parent a validé, restrictions 13-15 ans actives |
+| Expired | `expired` | Token expiré sans validation, compte inactif |
+| Revoked | `revoked` | Parent révoque, compte désactivé immédiatement |
+| Auto-Revoked | `auto_revoked` | Ado atteint 16 ans, restrictions levées automatiquement |
+
+**Délai expiration** : 7 jours
+**Révocation** : Possible à tout moment via dashboard parent
+**Transition automatique** : À 16 ans → compte passe en `active` standard
diff --git a/docs/domains/_shared/states/content-lifecycle.md b/docs/domains/_shared/states/contenu.md
similarity index 100%
rename from docs/domains/_shared/states/content-lifecycle.md
rename to docs/domains/_shared/states/contenu.md
diff --git a/docs/domains/_shared/states/export-lifecycle.md b/docs/domains/_shared/states/export-donnees.md
similarity index 100%
rename from docs/domains/_shared/states/export-lifecycle.md
rename to docs/domains/_shared/states/export-donnees.md
diff --git a/docs/domains/_shared/states/incident-breach.md b/docs/domains/_shared/states/incident-breach.md
new file mode 100644
index 0000000..9164d05
--- /dev/null
+++ b/docs/domains/_shared/states/incident-breach.md
@@ -0,0 +1,44 @@
+# Cycle de vie - Incident de violation de données
+
+## Diagramme
+
+```mermaid
+stateDiagram-v2
+ [*] --> Detected: Alerte monitoring
+
+ Detected --> Contained: Confinement immédiat (H+0)
+
+ Contained --> UnderInvestigation: Évaluation gravité (H+24)
+
+ UnderInvestigation --> Resolved: Risque faible (mesures suffisantes)
+ UnderInvestigation --> CNILNotificationRequired: Risque utilisateurs
+
+ CNILNotificationRequired --> CNILNotified: Notification CNIL (< H+72)
+
+ CNILNotified --> Resolved: Pas de risque élevé utilisateurs
+ CNILNotified --> UsersNotificationRequired: Risque élevé
+
+ UsersNotificationRequired --> UsersNotified: Email + push utilisateurs (< H+72)
+
+ UsersNotified --> Resolved: Post-mortem + correctifs
+
+ Resolved --> [*]
+```
+
+## Règles
+
+| État | Valeur | Délai max |
+|------|--------|-----------|
+| Detected | `detected` | H+0 |
+| Contained | `contained` | H+0 (immédiat) |
+| Under Investigation | `under_investigation` | H+24 |
+| CNIL Notification Required | `cnil_notification_required` | H+48 |
+| CNIL Notified | `cnil_notified` | H+72 (Article 33 RGPD) |
+| Users Notification Required | `users_notification_required` | H+48 |
+| Users Notified | `users_notified` | H+72 (Article 34 RGPD) |
+| Resolved | `resolved` | Post-incident |
+
+**Sévérité** : `low` / `medium` / `high` / `critical`
+**Notification CNIL** : Obligatoire si risque pour droits/libertés utilisateurs
+**Notification utilisateurs** : Obligatoire si risque **élevé**
+**Runbook** : `docs/rgpd/procedure-breach.md`
diff --git a/docs/domains/_shared/states/session-lifecycle.md b/docs/domains/_shared/states/session.md
similarity index 100%
rename from docs/domains/_shared/states/session-lifecycle.md
rename to docs/domains/_shared/states/session.md
diff --git a/docs/domains/_shared/states/report-lifecycle.md b/docs/domains/_shared/states/signalement.md
similarity index 100%
rename from docs/domains/_shared/states/report-lifecycle.md
rename to docs/domains/_shared/states/signalement.md
diff --git a/docs/domains/_shared/states/suppression-compte.md b/docs/domains/_shared/states/suppression-compte.md
new file mode 100644
index 0000000..1e67431
--- /dev/null
+++ b/docs/domains/_shared/states/suppression-compte.md
@@ -0,0 +1,42 @@
+# Cycle de vie - Suppression de compte
+
+## Diagramme
+
+```mermaid
+stateDiagram-v2
+ [*] --> Requested: Utilisateur demande suppression
+
+ Requested --> GracePeriod: Compte désactivé, email envoyé
+
+ GracePeriod --> Cancelled: Clic lien annulation (< 30j)
+ GracePeriod --> PendingDeletion: Délai 30j écoulé
+
+ Cancelled --> [*]
+
+ PendingDeletion --> Deleted: Job cron suppression effective
+
+ Deleted --> [*]
+```
+
+## Règles
+
+| État | Valeur | Description |
+|------|--------|-------------|
+| Requested | `requested` | Demande initiée, validation requise |
+| Grace Period | `grace_period` | 30j annulation possible, compte inaccessible |
+| Cancelled | `cancelled` | Utilisateur a annulé, compte réactivé |
+| Pending Deletion | `pending_deletion` | File job cron (< 24h) |
+| Deleted | `deleted` | Données supprimées, contenus anonymisés |
+
+**Grace period** : 30 jours
+**Pendant grace period** :
+- Compte désactivé (login impossible)
+- Contenus cachés (non diffusés)
+- Sessions/tokens révoqués
+- Email avec token annulation (valide 30j)
+
+**Après 30j** :
+- Données personnelles supprimées
+- Contenus créés anonymisés (créateur = "Utilisateur supprimé")
+- Historique GPS/écoute supprimé
+- Irréversible
diff --git a/docs/domains/advertising/entities/modele-publicites.md b/docs/domains/advertising/entities/modele-publicites.md
index bff0e47..e77711c 100644
--- a/docs/domains/advertising/entities/modele-publicites.md
+++ b/docs/domains/advertising/entities/modele-publicites.md
@@ -1,6 +1,6 @@
# Modèle de données - Publicités
-📖 Voir [Règles métier - Section 16 : Publicités](../rules/publicites.md) | [Entités globales](../../_shared/entities/entities-overview.md)
+📖 Voir [Règles métier - Section 16 : Publicités](../rules/publicites.md) | [Entités globales](../../_shared/entities/vue-ensemble.md)
## Diagramme
diff --git a/docs/domains/content/entities/modele-audio-guides.md b/docs/domains/content/entities/modele-audio-guides.md
index 98a30a4..d67799e 100644
--- a/docs/domains/content/entities/modele-audio-guides.md
+++ b/docs/domains/content/entities/modele-audio-guides.md
@@ -1,6 +1,6 @@
# Modèle de données - Audio-guides
-📖 Voir [Règles métier - Section 06 : Audio-guides multi-séquences](../rules/audio-guides.md) | [Entités globales](../../_shared/entities/entities-overview.md)
+📖 Voir [Règles métier - Section 06 : Audio-guides multi-séquences](../rules/audio-guides.md) | [Entités globales](../../_shared/entities/vue-ensemble.md)
## Diagramme
diff --git a/docs/domains/content/entities/modele-radio-live.md b/docs/domains/content/entities/modele-radio-live.md
index dfa6a30..8843e7a 100644
--- a/docs/domains/content/entities/modele-radio-live.md
+++ b/docs/domains/content/entities/modele-radio-live.md
@@ -1,6 +1,6 @@
# Modèle de données - Radio Live
-📖 Voir [Règles métier - Section 12 : Radio Live](../rules/radio-live.md) | [Entités globales](../../_shared/entities/entities-overview.md)
+📖 Voir [Règles métier - Section 12 : Radio Live](../rules/radio-live.md) | [Entités globales](../../_shared/entities/vue-ensemble.md)
## Diagramme
diff --git a/docs/domains/moderation/entities/modele-moderation.md b/docs/domains/moderation/entities/modele-moderation.md
index 875473e..36470c5 100644
--- a/docs/domains/moderation/entities/modele-moderation.md
+++ b/docs/domains/moderation/entities/modele-moderation.md
@@ -1,6 +1,6 @@
# Modèle de données - Modération
-📖 Voir [Règles métier - Section 14 : Modération Flows](../rules/moderation-flows.md) | [Entités globales](../../_shared/entities/entities-overview.md)
+📖 Voir [Règles métier - Section 14 : Modération Flows](../rules/moderation-flows.md) | [Entités globales](../../_shared/entities/vue-ensemble.md)
## Diagramme
diff --git a/docs/domains/monetization/entities/modele-monetisation.md b/docs/domains/monetization/entities/modele-monetisation.md
index f7c8c68..c6cedb2 100644
--- a/docs/domains/monetization/entities/modele-monetisation.md
+++ b/docs/domains/monetization/entities/modele-monetisation.md
@@ -1,6 +1,6 @@
# Modèle de données - Monétisation créateurs
-📖 Voir [Règles métier - Section 18 : Monétisation](../rules/monetisation-createurs.md) | [Entités globales](../../_shared/entities/entities-overview.md)
+📖 Voir [Règles métier - Section 18 : Monétisation](../rules/monetisation-createurs.md) | [Entités globales](../../_shared/entities/vue-ensemble.md)
## Diagramme
diff --git a/docs/domains/premium/entities/modele-premium.md b/docs/domains/premium/entities/modele-premium.md
index f13a032..0f2668d 100644
--- a/docs/domains/premium/entities/modele-premium.md
+++ b/docs/domains/premium/entities/modele-premium.md
@@ -1,6 +1,6 @@
# Modèle de données - Premium
-📖 Voir [Règles métier - Section 17 : Premium](../rules/premium.md) | [Entités globales](../../_shared/entities/entities-overview.md)
+📖 Voir [Règles métier - Section 17 : Premium](../rules/premium.md) | [Entités globales](../../_shared/entities/vue-ensemble.md)
## Diagramme
diff --git a/docs/domains/recommendation/entities/modele-recommandation.md b/docs/domains/recommendation/entities/modele-recommandation.md
index a2cbf10..6feaeb8 100644
--- a/docs/domains/recommendation/entities/modele-recommandation.md
+++ b/docs/domains/recommendation/entities/modele-recommandation.md
@@ -1,6 +1,6 @@
# Modèle de données - Recommandation
-📖 Voir [Règles métier - Section 03 : Centres d'intérêt](../rules/centres-interet-jauges.md) | [Section 04 : Algorithme](../rules/algorithme-recommandation.md) | [Entités globales](../../_shared/entities/entities-overview.md)
+📖 Voir [Règles métier - Section 03 : Centres d'intérêt](../rules/centres-interet-jauges.md) | [Section 04 : Algorithme](../rules/algorithme-recommandation.md) | [Entités globales](../../_shared/entities/vue-ensemble.md)
## Diagramme
diff --git a/docs/gherkin-moderation-overview.md b/docs/gherkin-moderation-overview.md
deleted file mode 100644
index 744ac3e..0000000
--- a/docs/gherkin-moderation-overview.md
+++ /dev/null
@@ -1,260 +0,0 @@
-# Vue d'ensemble des Features Gherkin - Modération
-
-Ce document récapitule l'organisation complète des features Gherkin pour le système de modération de RoadWave, alignées avec les règles métier définies dans :
-- [14-moderation-flows.md](domains/moderation/rules/moderation-flows.md)
-- [15-moderation-communautaire.md](domains/moderation/rules/moderation-communautaire.md)
-
-## Structure des Features
-
-### 📱 Features UI (Interface Mobile Flutter)
-
-**Localisation** : `features/ui/moderation/`
-
-| Feature | Description | Règles métier couvertes |
-|---------|-------------|------------------------|
-| **signalement-ui.feature** | Interface de signalement mobile (formulaire, toast, découverte badges) | 14.1.1, 14.1.2, 14.1.3, 19.1.3 |
-| **historique-signalements.feature** | Historique personnel des signalements de l'utilisateur | 14.1.3 |
-| **badges-statistiques.feature** | Affichage des badges, statistiques et gamification | 19.1.4, 19.2, 19.3, 19.4 |
-| **sanctions-appel.feature** | Interface de consultation des sanctions et processus d'appel | 14.3.1, 14.3.2, 14.3.3, 14.3.4 |
-
-**Couverture** :
-- ✅ Formulaire de signalement avec 7 catégories
-- ✅ Toast de confirmation et modal de découverte
-- ✅ Historique des signalements avec statuts
-- ✅ Badges Bronze/Argent/Or et progression visuelle
-- ✅ Statistiques personnelles et taux de pertinence
-- ✅ Notifications multi-canal des sanctions
-- ✅ Formulaire d'appel structuré
-- ✅ Dark mode et accessibilité complète
-
-### 🖥️ Features Admin (Dashboard Modérateur Web)
-
-**Localisation** : `features/admin/moderation/`
-
-| Feature | Description | Règles métier couvertes |
-|---------|-------------|------------------------|
-| **dashboard-moderateur.feature** | Dashboard principal de modération avec files d'attente | 14.2.2, 14.2.3, 14.4 |
-| **outils-moderateur.feature** | Outils modérateur (player audio, transcription, historique créateur, actions) | 14.2.1, 14.4 |
-
-**Couverture** :
-- ✅ Files d'attente par priorité (CRITIQUE/HAUTE/MOYENNE/BASSE)
-- ✅ Statistiques temps réel et SLA
-- ✅ Player audio Wavesurfer.js avec waveform
-- ✅ Transcription synchronisée avec surlignage
-- ✅ Analyse IA (Whisper + NLP) avec scores de confiance
-- ✅ Historique créateur 360° (strikes, contenus, patterns)
-- ✅ Actions rapides avec raccourcis clavier
-- ✅ Logs d'audit conformes DSA
-
-### 🔌 Features API (Backend Go)
-
-**Localisation** : `features/api/moderation/`
-
-| Feature | Description | Règles métier couvertes | Statut |
-|---------|-------------|------------------------|--------|
-| **signalement.feature** | API de signalement de contenu | 14.1 | ✅ Existant - Complet |
-| **traitement-signalements.feature** | Traitement IA et priorisation | 14.2 | ✅ Existant - Complet |
-| **sanctions-notifications.feature** | Sanctions et notifications multi-canal | 14.3 | ✅ Existant - Complet |
-| **moderation-preventive.feature** | Validation manuelle premiers contenus | 14.5 | ✅ Existant - Complet |
-| **moderation-communautaire.feature** | Badges, scores de fiabilité, anti-abus | 19 | ✅ Existant - Complet |
-
-**Couverture** :
-- ✅ 7 catégories de signalement + commentaire optionnel
-- ✅ IA pré-filtre (Whisper large-v3 + distilbert + roberta)
-- ✅ SLA progressif : <2h CRITIQUE, <24h HAUTE, <72h BASSE
-- ✅ Priorisation automatique (formule IA + signalements cumulés + fiabilité)
-- ✅ Notifications multi-canal (push + in-app + email)
-- ✅ Processus d'appel avec délai 7 jours et SLA 72h
-- ✅ 3 niveaux de badges (Bronze/Argent/Or)
-- ✅ Score de fiabilité et utilisateurs de confiance
-- ✅ Réduction Premium -50% pour badge Or
-- ✅ Anti-abus : limite 10/24h, audit trimestriel, sanctions
-
-## Mapping Règles Métier → Features
-
-### Section 14.1 - Signalement
-
-| Règle | Feature API | Feature UI |
-|-------|------------|-----------|
-| 14.1.1 Catégories (7) | signalement.feature | signalement-ui.feature |
-| 14.1.2 Commentaire optionnel | signalement.feature | signalement-ui.feature |
-| 14.1.3 Confirmation + historique | signalement.feature | signalement-ui.feature, historique-signalements.feature |
-
-### Section 14.2 - Traitement
-
-| Règle | Feature API | Feature Admin |
-|-------|------------|--------------|
-| 14.2.1 IA pré-filtre (Whisper + NLP) | traitement-signalements.feature | outils-moderateur.feature |
-| 14.2.2 Délais SLA | traitement-signalements.feature | dashboard-moderateur.feature |
-| 14.2.3 Priorisation automatique | traitement-signalements.feature | dashboard-moderateur.feature |
-
-### Section 14.3 - Sanctions
-
-| Règle | Feature API | Feature UI |
-|-------|------------|-----------|
-| 14.3.1 Notification multi-canal | sanctions-notifications.feature | sanctions-appel.feature |
-| 14.3.2 Détail sanction | sanctions-notifications.feature | sanctions-appel.feature |
-| 14.3.3 Processus d'appel | sanctions-notifications.feature | sanctions-appel.feature |
-| 14.3.4 Délai réponse appel (72h) | sanctions-notifications.feature | sanctions-appel.feature |
-
-### Section 14.4 - Outils Modérateurs
-
-| Règle | Feature Admin |
-|-------|--------------|
-| Dashboard modération | dashboard-moderateur.feature |
-| Player audio + waveform | outils-moderateur.feature |
-| Transcription + annotations | outils-moderateur.feature |
-| Historique créateur 360° | outils-moderateur.feature |
-| Actions rapides (A/R/E) | outils-moderateur.feature |
-| Logs audit (DSA) | outils-moderateur.feature |
-
-### Section 14.5 - Modération Préventive
-
-| Règle | Feature API |
-|-------|------------|
-| Validation 3 premiers contenus | moderation-preventive.feature |
-| Score de confiance dynamique | moderation-preventive.feature |
-| Publicités validation manuelle | moderation-preventive.feature |
-
-### Section 19 - Modération Communautaire
-
-| Règle | Feature API | Feature UI |
-|-------|------------|-----------|
-| 19.1 Badges (Bronze/Argent/Or) | moderation-communautaire.feature | badges-statistiques.feature |
-| 19.2 Score de fiabilité | moderation-communautaire.feature | - |
-| 19.3 Utilisateur de confiance | moderation-communautaire.feature | badges-statistiques.feature |
-| 19.4 Réduction Premium Or | moderation-communautaire.feature | badges-statistiques.feature |
-| 19.5 Anti-abus | moderation-communautaire.feature | - |
-
-## Stack Technique Testée
-
-### Backend (Features API)
-- **Framework tests** : Godog (Gherkin pour Go)
-- **Localisation step definitions** : `backend/tests/bdd/moderation/`
-- **Technologies testées** :
- - API Go + Fiber (endpoints REST)
- - PostgreSQL (stockage signalements, sanctions, badges)
- - Redis (cache, files d'attente, priorisation)
- - Whisper large-v3 (transcription audio)
- - distilbert-base-uncased (analyse sentiment)
- - facebook/roberta-hate-speech (détection haine)
- - Email (Brevo/Resend)
- - Push notifications (APNS/FCM)
-
-### Frontend Mobile (Features UI)
-- **Framework tests** : flutter_gherkin + integration_test
-- **Localisation step definitions** : `mobile/tests/bdd/moderation/`
-- **Technologies testées** :
- - Flutter (UI mobile iOS/Android)
- - Widgets personnalisés (formulaires, badges, statistiques)
- - Animations (confettis, level up, toast)
- - Dark mode et accessibilité (lecteur d'écran)
- - Navigation et routing
- - Gestion d'état (Provider/Riverpod)
-
-### Frontend Admin (Features Admin)
-- **Framework tests** : Cucumber.js + Playwright
-- **Localisation step definitions** : `admin-dashboard/tests/e2e/moderation/` (à créer)
-- **Technologies testées** :
- - React + TypeScript
- - TanStack Table (tableau signalements)
- - Wavesurfer.js (player audio + waveform)
- - WebSocket (temps réel)
- - Raccourcis clavier
-
-## Statistiques
-
-### Couverture des Règles Métier
-
-| Section | Scénarios | Règles couvertes | Statut |
-|---------|-----------|------------------|--------|
-| 14.1 Signalement | 25 | 100% | ✅ |
-| 14.2 Traitement | 30 | 100% | ✅ |
-| 14.3 Sanctions | 35 | 100% | ✅ |
-| 14.4 Outils | 40 | 100% | ✅ Nouveau |
-| 14.5 Préventive | 20 | 100% | ✅ |
-| 19 Communautaire | 40 | 100% | ✅ |
-| **Total** | **190** | **100%** | ✅ |
-
-### Répartition Features
-
-| Type | Nombre | Scénarios totaux |
-|------|--------|------------------|
-| Features API (Backend) | 5 | ~90 |
-| Features UI (Mobile) | 4 | ~60 |
-| Features Admin (Dashboard) | 2 | ~40 |
-| **Total** | **11** | **~190** |
-
-## Conformité
-
-### Digital Services Act (DSA)
-- ✅ Transparence : raison détaillée + extrait + transcription
-- ✅ Délais : SLA 2h/24h/72h documentés et testés
-- ✅ Recours : processus d'appel 7 jours + réponse 72h
-- ✅ Traçabilité : logs audit complets avec conservation 3 ans
-
-### RGPD
-- ✅ Anonymat signaleur vis-à-vis du créateur
-- ✅ Anonymisation des logs après 3 ans
-- ✅ Suppression données personnelles à la demande
-- ✅ Consentement notifications
-
-### Accessibilité (WCAG AA)
-- ✅ Contraste couleurs (dark mode testé)
-- ✅ Labels lecteur d'écran
-- ✅ Navigation clavier
-- ✅ Tailles de police adaptatives
-
-## Coûts
-
-| Composant | Technologie | Coût MVP | Coût Scale |
-|-----------|-------------|----------|------------|
-| IA transcription | Whisper (self-hosted) | 0€ (CPU) | 50-200€/mois (GPU) |
-| IA analyse | distilbert + roberta | 0€ | 0€ |
-| Notifications email | Brevo/Resend | ~0.001€/email | ~10-50€/mois |
-| Notifications push | APNS/FCM | 0€ | 0€ |
-| Dashboard admin | React + TanStack | 0€ | 0€ |
-| Badges communautaires | Backend Go | 0€ | 0-200€/mois (réductions Premium) |
-| **Total** | - | **0-50€/mois** | **60-450€/mois** |
-
-**ROI** : Positif dès 2-3 utilisateurs Badge Or actifs (économie modération > coût réductions Premium)
-
-## Prochaines Étapes
-
-1. ✅ ~~Créer features UI modération mobile~~
-2. ✅ ~~Créer features dashboard modérateur~~
-3. ⏳ Implémenter step definitions backend (Godog)
-4. ⏳ Implémenter step definitions mobile (flutter_gherkin)
-5. ⏳ Créer dashboard admin React + implémenter step definitions (Cucumber.js)
-6. ⏳ Intégrer dans CI/CD (make test-bdd)
-
-## Commandes de Test
-
-```bash
-# Tous les tests BDD
-make test-bdd
-
-# Tests modération backend uniquement
-cd backend
-godog run ../features/api/moderation/
-
-# Tests modération mobile uniquement
-cd mobile
-flutter test integration_test/moderation/
-
-# Tests dashboard admin (à venir)
-cd admin-dashboard
-npm run test:e2e
-```
-
-## Documentation Liée
-
-- [Règles métier - Modération Flows](domains/moderation/rules/moderation-flows.md)
-- [Règles métier - Modération Communautaire](domains/moderation/rules/moderation-communautaire.md)
-- [ADR-023 - Architecture Modération](adr/023-architecture-moderation.md)
-- [ADR-013 - Stratégie Tests](adr/013-strategie-tests.md)
-
----
-
-**Dernière mise à jour** : 2026-02-02
-**Statut** : ✅ Features complètes - Implémentation en cours
diff --git a/docs/interfaces/README.md b/docs/interfaces/README.md
deleted file mode 100644
index 7e551db..0000000
--- a/docs/interfaces/README.md
+++ /dev/null
@@ -1,58 +0,0 @@
-# Documentation des Interfaces
-
-Cette section documente les interfaces utilisateur de RoadWave (mobile et web).
-
-## Organisation
-
-### Mobile (Flutter)
-L'application mobile est l'interface principale pour les utilisateurs finaux (conducteurs, piétons, touristes).
-
-- **[Navigation & Architecture](mobile/navigation.md)** : Structure de navigation, routing
-- **Écran d'accueil** : Feed de recommandations géolocalisées
-- **Lecteur audio** : Player HLS, contrôles, playlists
-- **Carte & découverte** : Vue carte, exploration géographique
-- **Profil & réglages** : Jauges d'intérêt, paramètres
-
-### Web (Créateurs)
-L'interface web est destinée aux créateurs de contenu et aux annonceurs.
-
-- **Dashboard** : Vue d'ensemble, statistiques
-- **Upload de contenu** : Import audio, métadonnées, géolocalisation
-- **Statistiques** : Analytics, revenus
-
-## Conventions de documentation
-
-### Captures d'écran
-Placez les images dans `docs/interfaces/assets/` et référencez-les ainsi :
-
-```markdown
-{ width="300" }
-```
-
-### Diagrammes de flux
-Utilisez Mermaid pour les parcours utilisateur :
-
-```mermaid
-graph LR
- A[Ouverture app] --> B{GPS actif?}
- B -->|Oui| C[Chargement recommandations]
- B -->|Non| D[Demande permission]
- D --> C
-```
-
-### Onglets multi-plateformes
-Pour montrer des variations iOS/Android :
-
-=== "iOS"
- Comportement spécifique iOS
-
-=== "Android"
- Comportement spécifique Android
-
-## Principes de design
-
-- **Mobile-first** : L'app mobile est l'expérience principale
-- **Géolocalisation centrale** : L'UI doit toujours contextualiser par rapport à la position
-- **Audio en arrière-plan** : Player persistant, mini-player
-- **Mode sombre** : Support obligatoire (conduite de nuit)
-- **Accessibilité** : WCAG 2.1 AA minimum
diff --git a/docs/interfaces/assets/mobile/.gitkeep b/docs/interfaces/assets/mobile/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/docs/interfaces/assets/web/.gitkeep b/docs/interfaces/assets/web/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/docs/interfaces/mobile/navigation.md b/docs/interfaces/mobile/navigation.md
deleted file mode 100644
index 93561a0..0000000
--- a/docs/interfaces/mobile/navigation.md
+++ /dev/null
@@ -1,208 +0,0 @@
-# Navigation & Architecture Mobile
-
-## Architecture de navigation
-
-L'application mobile utilise une navigation par onglets (Bottom Navigation Bar) avec 4 sections principales.
-
-```mermaid
-graph TD
- A[App Shell] --> B[🏠 Accueil]
- A --> C[🗺️ Carte]
- A --> D[🎵 Bibliothèque]
- A --> E[👤 Profil]
-
- B --> B1[Feed Recommandations]
- B --> B2[Lecteur Audio]
-
- C --> C1[Vue Carte]
- C --> C2[Détail Point]
-
- D --> D1[Mes Playlists]
- D --> D2[Contenus Sauvegardés]
- D --> D3[Historique]
-
- E --> E1[Jauges Intérêt]
- E --> E2[Paramètres]
- E --> E3[Abonnements]
-```
-
-## Bottom Navigation Bar
-
-### Onglet 1 : Accueil 🏠
-Point d'entrée principal après le lancement de l'app.
-
-**Fonctionnalités** :
-- Feed de recommandations basé sur la géolocalisation + intérêts
-- Rafraîchissement pull-to-refresh
-- Lecture directe depuis le feed
-
-**Navigation vers** :
-- Détail d'un contenu (push)
-- Lecteur plein écran (modal)
-- Profil d'un créateur (push)
-
-### Onglet 2 : Carte 🗺️
-Exploration visuelle des contenus par géolocalisation.
-
-**Fonctionnalités** :
-- Carte interactive (MapLibre GL)
-- Markers pour contenus à proximité
-- Clusters pour zones denses
-- Recherche par adresse
-
-**Navigation vers** :
-- Détail d'un point (bottom sheet)
-- Lecteur audio (modal persistant)
-
-### Onglet 3 : Bibliothèque 🎵
-Accès aux contenus sauvegardés, historique, playlists.
-
-**Fonctionnalités** :
-- Playlists personnelles
-- Contenus favoris
-- Historique d'écoute
-- Téléchargements offline
-
-### Onglet 4 : Profil 👤
-Gestion du compte, préférences, jauges d'intérêt.
-
-**Fonctionnalités** :
-- Visualisation/édition jauges d'intérêt
-- Paramètres de l'app
-- Gestion abonnement Premium
-- Déconnexion
-
-## Lecteur Audio (Modal persistant)
-
-Le lecteur est un composant modal qui persiste lors de la navigation entre onglets.
-
-```mermaid
-stateDiagram-v2
- [*] --> Collapsed: Lecture démarre
- Collapsed --> Expanded: Tap sur mini-player
- Expanded --> Collapsed: Swipe down
- Collapsed --> [*]: Stop audio
-
- Expanded --> Queue: Tap "À suivre"
- Queue --> Expanded: Retour
-```
-
-=== "État Collapsed (Mini-player)"
- - Hauteur : 60dp
- - Position : Bottom (au-dessus de la Bottom Nav Bar)
- - Affiche : Titre, artiste, play/pause, skip
- - Interaction : Tap pour expand
-
-=== "État Expanded (Lecteur plein écran)"
- - Plein écran modal
- - Cover art grande taille
- - Contrôles avancés (repeat, shuffle, queue)
- - Scrubber timeline
- - Boutons : like, share, download, add to playlist
-
-## Routing Flutter
-
-### Configuration
-
-Utilisation de **go_router** (voir [ADR-020](../../adr/020-librairies-flutter.md)).
-
-```dart
-// Exemple simplifié
-GoRouter(
- routes: [
- ShellRoute(
- builder: (context, state, child) => AppShell(child: child),
- routes: [
- GoRoute(path: '/home', builder: (context, state) => HomeScreen()),
- GoRoute(path: '/map', builder: (context, state) => MapScreen()),
- GoRoute(path: '/library', builder: (context, state) => LibraryScreen()),
- GoRoute(path: '/profile', builder: (context, state) => ProfileScreen()),
- ],
- ),
- GoRoute(
- path: '/content/:id',
- builder: (context, state) => ContentDetailScreen(
- contentId: state.pathParameters['id']!,
- ),
- ),
- ],
-);
-```
-
-### Deep Links
-
-L'app supporte les deep links pour :
-- `roadwave://content/{id}` : Ouvrir un contenu spécifique
-- `roadwave://map?lat={lat}&lon={lon}` : Ouvrir la carte à une position
-- `roadwave://profile` : Ouvrir le profil
-
-## Gestion d'état
-
-- **Provider** pour l'état global (user, player, location)
-- **BLoC** pour les features complexes (recommendation, map)
-- **Riverpod** pour l'injection de dépendances
-
-Voir [ADR-020](../../adr/020-librairies-flutter.md) pour les détails.
-
-## Permissions système
-
-La navigation gère les demandes de permissions de manière contextuelle :
-
-1. **Géolocalisation** : Demandée au premier lancement, avant d'afficher l'accueil
-2. **Notifications** : Demandée après 3 sessions utilisateur (opt-in soft)
-3. **Stockage** : Demandée lors du premier téléchargement offline
-
-Voir [mobile/permissions-strategy.md](../../mobile/permissions-strategy.md) pour la stratégie complète.
-
-## Transitions et animations
-
-### Transitions entre onglets
-- Aucune animation (changement instantané)
-- Préservation du scroll state sur chaque onglet
-
-### Navigation push/pop
-- iOS : Slide transition (standard Cupertino)
-- Android : Fade + Slide transition (Material Design)
-
-### Mini-player expand/collapse
-- Spring animation (bounce léger)
-- Durée : 300ms
-- Curve : `Curves.easeInOutCubic`
-
-## Gestion du back button (Android)
-
-```mermaid
-graph TD
- A[Back pressed] --> B{Lecteur expanded?}
- B -->|Oui| C[Collapse lecteur]
- B -->|Non| D{Sur onglet Accueil?}
- D -->|Non| E[Retour à Accueil]
- D -->|Oui| F{Audio en cours?}
- F -->|Oui| G[Dialog: Quitter?]
- F -->|Non| H[Quitter app]
- G -->|Confirme| H
- G -->|Annule| I[Rester]
-```
-
-## Accessibilité
-
-- **Screen readers** : Labels sémantiques sur tous les boutons
-- **Navigation clavier** : Support complet (pour tablettes avec clavier)
-- **Contraste** : WCAG 2.1 AA minimum (4.5:1 pour texte)
-- **Taille des touch targets** : 48dp minimum
-
-## Mode sombre
-
-Support obligatoire du mode sombre (conduite de nuit).
-
-=== "Mode Clair"
- - Fond : White / Light Gray (#F5F5F5)
- - Texte : Dark Gray (#212121)
- - Accent : Indigo (#3F51B5)
-
-=== "Mode Sombre"
- - Fond : Dark (#121212)
- - Texte : White (#FFFFFF)
- - Accent : Indigo clair (#7986CB)
-
-Détection automatique via `MediaQuery.platformBrightness` ou choix manuel dans les paramètres.
diff --git a/mkdocs.yml b/mkdocs.yml
index d593547..d6b384a 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -25,7 +25,6 @@ theme:
features:
- navigation.tabs
- navigation.sections
- - navigation.expand
- navigation.top
- navigation.tracking
- search.suggest
@@ -60,40 +59,40 @@ markdown_extensions:
nav:
- Accueil: README.md
- - Architecture Technique: TECHNICAL.md
- - Architecture Decision Records (ADR):
- - 'Vue d''ensemble': adr/README.md
- - 'Core Architecture':
- - 'ADR-001: Langage Backend': adr/001-langage-backend.md
- - 'ADR-010: Architecture Backend': adr/010-architecture-backend.md
- - 'ADR-011: ORM et Accès Données': adr/011-orm-acces-donnees.md
- - 'ADR-012: Frontend Mobile': adr/012-frontend-mobile.md
- - 'ADR-014: Organisation en Monorepo': adr/014-organisation-monorepo.md
- - 'Data & Infrastructure':
- - 'ADR-005: Base de données': adr/005-base-de-donnees.md
- - 'ADR-021: Solution de Cache': adr/021-solution-cache.md
- - 'ADR-015: Hébergement': adr/015-hebergement.md
- - 'ADR-019: Géolocalisation par IP': adr/019-geolocalisation-ip.md
- - 'Streaming & Content':
- - 'ADR-002: Protocole Streaming': adr/002-protocole-streaming.md
- - 'ADR-003: Codec Audio': adr/003-codec-audio.md
- - 'ADR-004: CDN': adr/004-cdn.md
- - 'Security & Auth':
- - 'ADR-006: Chiffrement': adr/006-chiffrement.md
- - 'ADR-008: Authentification': adr/008-authentification.md
- - 'ADR-025: Sécurité & Secrets': adr/025-securite-secrets.md
- - 'Testing & Quality':
- - 'ADR-007: Tests BDD': adr/007-tests-bdd.md
- - 'ADR-013: Stratégie Tests': adr/013-strategie-tests.md
- - 'ADR-022: CI/CD Monorepo': adr/022-strategie-cicd-monorepo.md
- - 'Features & Operations':
- - 'ADR-009: Solution Paiement': adr/009-solution-paiement.md
- - 'ADR-016: Service Emailing': adr/016-service-emailing.md
- - 'ADR-017: Notifications Géolocalisées': adr/017-notifications-geolocalisees.md
- - 'ADR-018: Librairies Go': adr/018-librairies-go.md
- - 'ADR-020: Librairies Flutter': adr/020-librairies-flutter.md
- - 'ADR-023: Architecture Modération': adr/023-architecture-moderation.md
- - 'ADR-024: Monitoring & Observabilité': adr/024-monitoring-observabilite.md
+ - Architecture:
+ - 'Vue d''ensemble': TECHNICAL.md
+ - 'Decision Records (ADR)':
+ - 'Core Architecture':
+ - 'ADR-001: Langage Backend': adr/001-langage-backend.md
+ - 'ADR-010: Architecture Backend': adr/010-architecture-backend.md
+ - 'ADR-011: ORM et Accès Données': adr/011-orm-acces-donnees.md
+ - 'ADR-012: Frontend Mobile': adr/012-frontend-mobile.md
+ - 'ADR-014: Organisation en Monorepo': adr/014-organisation-monorepo.md
+ - 'Data & Infrastructure':
+ - 'ADR-005: Base de données': adr/005-base-de-donnees.md
+ - 'ADR-021: Solution de Cache': adr/021-solution-cache.md
+ - 'ADR-015: Hébergement': adr/015-hebergement.md
+ - 'ADR-019: Géolocalisation par IP': adr/019-geolocalisation-ip.md
+ - 'Streaming & Content':
+ - 'ADR-002: Protocole Streaming': adr/002-protocole-streaming.md
+ - 'ADR-003: Codec Audio': adr/003-codec-audio.md
+ - 'ADR-004: CDN': adr/004-cdn.md
+ - 'Security & Auth':
+ - 'ADR-006: Chiffrement': adr/006-chiffrement.md
+ - 'ADR-008: Authentification': adr/008-authentification.md
+ - 'ADR-025: Sécurité & Secrets': adr/025-securite-secrets.md
+ - 'Testing & Quality':
+ - 'ADR-007: Tests BDD': adr/007-tests-bdd.md
+ - 'ADR-013: Stratégie Tests': adr/013-strategie-tests.md
+ - 'ADR-022: CI/CD Monorepo': adr/022-strategie-cicd-monorepo.md
+ - 'Features & Operations':
+ - 'ADR-009: Solution Paiement': adr/009-solution-paiement.md
+ - 'ADR-016: Service Emailing': adr/016-service-emailing.md
+ - 'ADR-017: Notifications Géolocalisées': adr/017-notifications-geolocalisees.md
+ - 'ADR-018: Librairies Go': adr/018-librairies-go.md
+ - 'ADR-020: Librairies Flutter': adr/020-librairies-flutter.md
+ - 'ADR-023: Architecture Modération': adr/023-architecture-moderation.md
+ - 'ADR-024: Monitoring & Observabilité': adr/024-monitoring-observabilite.md
- Domaines DDD:
- 'Context Map': domains/README.md
- 'Core Domain':
@@ -104,6 +103,32 @@ nav:
- Gestion Erreurs: domains/_shared/rules/gestion-erreurs.md
- 'Annexe Post-MVP': domains/_shared/rules/ANNEXE-POST-MVP.md
- Features BDD:
+ - 'Authentication':
+ - Appareil de confiance et 2FA: generated/bdd/_shared/features/authentication/appareil-confiance-2fa.md
+ - Classification par âge: generated/bdd/_shared/features/authentication/classification-age.md
+ - Connexion: generated/bdd/_shared/features/authentication/connexion.md
+ - Gestion de compte: generated/bdd/_shared/features/authentication/gestion-compte.md
+ - Inscription: generated/bdd/_shared/features/authentication/inscription.md
+ - Limite de tentatives de connexion: generated/bdd/_shared/features/authentication/limite-tentatives-connexion.md
+ - Sessions multi-devices: generated/bdd/_shared/features/authentication/multi-device-sessions.md
+ - Récupération de compte: generated/bdd/_shared/features/authentication/recuperation-compte.md
+ - Récupération de mot de passe avancée: generated/bdd/_shared/features/authentication/recuperation-mot-passe-avancee.md
+ - Sessions et tokens: generated/bdd/_shared/features/authentication/sessions-tokens.md
+ - Authentification à deux facteurs: generated/bdd/_shared/features/authentication/two-factor-authentication.md
+ - Validation mot de passe: generated/bdd/_shared/features/authentication/validation-mot-passe.md
+ - Vérification email: generated/bdd/_shared/features/authentication/verification-email.md
+ - 'Profil':
+ - Badge vérifié: generated/bdd/_shared/features/profil/badge-verifie.md
+ - Profil créateur: generated/bdd/_shared/features/profil/profil-createur.md
+ - Statistiques arrondies: generated/bdd/_shared/features/profil/statistiques-arrondies.md
+ - 'Partage':
+ - Partage de contenu: generated/bdd/_shared/features/partage/partage-contenu.md
+ - Partage de contenu Premium: generated/bdd/_shared/features/partage/partage-contenu-premium.md
+ - 'Error Handling':
+ - Aucun contenu disponible: generated/bdd/_shared/features/error-handling/aucun-contenu-disponible.md
+ - Contenu supprimé pendant écoute: generated/bdd/_shared/features/error-handling/contenu-supprime-pendant-ecoute.md
+ - Géolocalisation désactivée: generated/bdd/_shared/features/error-handling/geolocalisation-desactivee.md
+ - Perte réseau: generated/bdd/_shared/features/error-handling/perte-reseau.md
- 'RGPD & Conformité':
- Consentement: generated/bdd/_shared/features/rgpd-compliance/consentement.md
- Anonymisation GPS: generated/bdd/_shared/features/rgpd-compliance/anonymisation-gps.md
@@ -118,7 +143,7 @@ nav:
- Politique Confidentialité: generated/bdd/_shared/features/rgpd-compliance/privacy-policy.md
- Droits Utilisateurs: generated/bdd/_shared/features/rgpd-compliance/user-rights.md
- Entités:
- - "Vue d'ensemble": domains/_shared/entities/entities-overview.md
+ - "Vue d'ensemble": domains/_shared/entities/vue-ensemble.md
- 'Auth & Sécurité':
- Sessions: domains/_shared/entities/sessions.md
- Devices: domains/_shared/entities/devices.md
@@ -136,23 +161,21 @@ nav:
- Jauges Intérêt: domains/_shared/entities/interest-gauges.md
- Signalements: domains/_shared/entities/reports.md
- 'États (Lifecycles)':
- - Compte Utilisateur: domains/_shared/states/user-account-lifecycle.md
- - Contenu: domains/_shared/states/content-lifecycle.md
- - Session: domains/_shared/states/session-lifecycle.md
- - Signalement: domains/_shared/states/report-lifecycle.md
- - Export Données: domains/_shared/states/export-lifecycle.md
- - Consentement Parental: domains/_shared/states/parental-consent-lifecycle.md
- - Suppression Compte: domains/_shared/states/account-deletion-lifecycle.md
- - Incident Breach: domains/_shared/states/breach-incident-lifecycle.md
+ - Compte Utilisateur: domains/_shared/states/compte-utilisateur.md
+ - Contenu: domains/_shared/states/contenu.md
+ - Session: domains/_shared/states/session.md
+ - Signalement: domains/_shared/states/signalement.md
+ - Export Données: domains/_shared/states/export-donnees.md
+ - Consentement Parental: domains/_shared/states/consentement-parental.md
+ - Suppression Compte: domains/_shared/states/suppression-compte.md
+ - Incident Breach: domains/_shared/states/incident-breach.md
- Séquences:
- - Authentification: domains/_shared/sequences/authentication-flow.md
- - Refresh Token: domains/_shared/sequences/token-refresh.md
- - Modération Contenu: domains/_shared/sequences/content-moderation.md
- - Signalement: domains/_shared/sequences/content-report.md
- - Export Données: domains/_shared/sequences/data-export.md
- - Export Données (RGPD): domains/_shared/sequences/export-donnees.md
- - Suppression Compte: domains/_shared/sequences/account-deletion.md
- - Suppression Compte (RGPD): domains/_shared/sequences/suppression-compte.md
+ - Authentification: domains/_shared/sequences/authentification.md
+ - Refresh Token: domains/_shared/sequences/refresh-token.md
+ - Modération Contenu: domains/_shared/sequences/moderation-contenu.md
+ - Signalement: domains/_shared/sequences/signalement.md
+ - Export Données: domains/_shared/sequences/export-donnees.md
+ - Suppression Compte: domains/_shared/sequences/suppression-compte.md
- Consentement Parental: domains/_shared/sequences/consentement-parental.md
- Anonymisation GPS: domains/_shared/sequences/anonymisation-gps.md
- Notification Breach: domains/_shared/sequences/notification-breach.md
@@ -165,6 +188,28 @@ nav:
- Interactions: domains/recommendation/rules/interactions-navigation.md
- Entités:
- Modèle Recommandation: domains/recommendation/entities/modele-recommandation.md
+ - Tests BDD:
+ - 'Interest Gauges':
+ - API - Pas de dégradation temporelle: generated/bdd/recommendation/features/interest-gauges/degradation-temporelle.md
+ - API - Évolution des jauges d'intérêt: generated/bdd/recommendation/features/interest-gauges/evolution-jauges.md
+ - API - Jauge initiale et cold start: generated/bdd/recommendation/features/interest-gauges/jauge-initiale.md
+ - Neutralisation des pénalités de skip pour abonnés: generated/bdd/recommendation/features/interest-gauges/skip-abonnes-neutralisation.md
+ - 'Recherche':
+ - Filtres avancés de recherche: generated/bdd/recommendation/features/recherche/filtres-avances.md
+ - Page de résultats avec carte interactive: generated/bdd/recommendation/features/recherche/page-resultats-carte.md
+ - Recherche de contenu: generated/bdd/recommendation/features/recherche/recherche.md
+ - 'Recommendation':
+ - Classification de géo-pertinence des contenus: generated/bdd/recommendation/features/recommendation/classification-geo.md
+ - Gestion du contenu politique (MVP simplifié): generated/bdd/recommendation/features/recommendation/contenu-politique.md
+ - Contenus géolocalisés en mode voiture: generated/bdd/recommendation/features/recommendation/declenchement-geo.md
+ - Gestion de l'historique et reproposition: generated/bdd/recommendation/features/recommendation/historique-reproposition.md
+ - Médias traditionnels sur RoadWave: generated/bdd/recommendation/features/recommendation/medias-traditionnels.md
+ - Mode Kids pour utilisateurs 13-15 ans: generated/bdd/recommendation/features/recommendation/mode-kids.md
+ - Paramétrabilité admin et A/B testing: generated/bdd/recommendation/features/recommendation/parametrabilite-admin.md
+ - Paramétrabilité utilisateur et profils: generated/bdd/recommendation/features/recommendation/parametrabilite-utilisateur.md
+ - Formule de scoring et recommandation: generated/bdd/recommendation/features/recommendation/scoring-recommandation.md
+ - 'Search':
+ - Recherche géographique de contenus avec Nominatim: generated/bdd/recommendation/features/search/geolocation-search.md
- '🎙️ Content':
- Vue d'ensemble: domains/content/README.md
- Règles:
@@ -176,6 +221,72 @@ nav:
- Entités:
- Modèle Audio-guides: domains/content/entities/modele-audio-guides.md
- Modèle Radio Live: domains/content/entities/modele-radio-live.md
+ - Tests BDD:
+ - 'Audio Guides':
+ - Affichage avancé distance, direction et ETA: generated/bdd/content/features/audio-guides/affichage-distance-direction-eta.md
+ - Création d'audio-guide multi-séquences: generated/bdd/content/features/audio-guides/creation-audio-guide.md
+ - API - Création et gestion d'audio-guides multi-séquences: generated/bdd/content/features/audio-guides/creation-gestion.md
+ - Wizard complet de création d'audio-guide multi-séquences: generated/bdd/content/features/audio-guides/creation-wizard-complet.md
+ - Déclenchement GPS automatique des audio-guides en mode voiture: generated/bdd/content/features/audio-guides/declenchement-gps-voiture-complet.md
+ - API - Déclenchement GPS et géolocalisation audio-guides: generated/bdd/content/features/audio-guides/declenchement-gps.md
+ - Détection automatique du mode de déplacement: generated/bdd/content/features/audio-guides/detection-mode-deplacement.md
+ - Gestion des points d'intérêt manqués: generated/bdd/content/features/audio-guides/gestion-point-manque.md
+ - Intégration audio-guides avec autres fonctionnalités: generated/bdd/content/features/audio-guides/integration-fonctionnalites.md
+ - API - Métriques et analytics audio-guides: generated/bdd/content/features/audio-guides/metriques-analytics.md
+ - Audio-guide mode piéton (navigation manuelle): generated/bdd/content/features/audio-guides/mode-pieton.md
+ - Audio-guide mode voiture (GPS automatique): generated/bdd/content/features/audio-guides/mode-voiture.md
+ - Modes vélo et transports en commun complets: generated/bdd/content/features/audio-guides/modes-velo-transport-complet.md
+ - Audio-guides modes vélo et transport: generated/bdd/content/features/audio-guides/modes-velo-transport.md
+ - Navigation libre complète en mode piéton: generated/bdd/content/features/audio-guides/navigation-libre-pieton-complet.md
+ - Auto-play publicités en mode piéton uniquement: generated/bdd/content/features/audio-guides/pieton-pub-autoplay.md
+ - Audio-guides Premium et monétisation: generated/bdd/content/features/audio-guides/premium-monetisation.md
+ - Sauvegarde et reprise de progression audio-guide: generated/bdd/content/features/audio-guides/progression-sauvegarde.md
+ - API - Progression et synchronisation audio-guides: generated/bdd/content/features/audio-guides/progression-sync.md
+ - Système de publicités complet: generated/bdd/content/features/audio-guides/publicites-complet.md
+ - API - Publicités dans audio-guides: generated/bdd/content/features/audio-guides/publicites.md
+ - Rayon de déclenchement configurable par le créateur: generated/bdd/content/features/audio-guides/rayon-configurable-createur.md
+ - Reprise de progression complète: generated/bdd/content/features/audio-guides/reprise-progression-complet.md
+ - Sauvegarde et synchronisation de progression: generated/bdd/content/features/audio-guides/sauvegarde-sync-progression.md
+ - Système double clic et sortie audio-guide mode voiture: generated/bdd/content/features/audio-guides/systeme-double-clic-sortie.md
+ - 'Content Creation':
+ - Fair use 30 secondes musique: generated/bdd/content/features/content-creation/fair-use-30s-musique.md
+ - Génération automatique d'image de couverture: generated/bdd/content/features/content-creation/image-couverture-auto.md
+ - Métadonnées et publication de contenu: generated/bdd/content/features/content-creation/metadonnees-publication.md
+ - Modification et suppression de contenu: generated/bdd/content/features/content-creation/modification-suppression.md
+ - Restrictions de modification de contenu publié: generated/bdd/content/features/content-creation/restrictions-modification.md
+ - Suppression et marquage de contenu: generated/bdd/content/features/content-creation/suppression-marquage.md
+ - Upload et encodage de contenu audio: generated/bdd/content/features/content-creation/upload-encodage.md
+ - Validation et détection automatique de musique: generated/bdd/content/features/content-creation/validation-musique-detection.md
+ - Validation des 3 premiers contenus: generated/bdd/content/features/content-creation/validation-premiers-contenus.md
+ - 'Navigation':
+ - Basculement automatique entre modes voiture et piéton: generated/bdd/content/features/navigation/auto-switching-modes.md
+ - Décompte 5 secondes pour transitions séquences: generated/bdd/content/features/navigation/decompte-5s-transition.md
+ - Calcul ETA et notification contenus géolocalisés: generated/bdd/content/features/navigation/eta-calculation.md
+ - API - File d'attente et pré-calcul des contenus: generated/bdd/content/features/navigation/file-attente.md
+ - Historique géolocalisé des contenus écoutés: generated/bdd/content/features/navigation/historique-geo-contenu.md
+ - Mode stationnement et pause automatique: generated/bdd/content/features/navigation/mode-stationnement.md
+ - Notifications minimalistes en mode voiture: generated/bdd/content/features/navigation/notification-minimaliste-voiture.md
+ - API - Notifications géolocalisées et quota anti-spam: generated/bdd/content/features/navigation/notifications-geolocalisees.md
+ - Quota et cooldown pour contenus géolocalisés: generated/bdd/content/features/navigation/quota-cooldown.md
+ - 'Radio Live':
+ - Architecture technique radio live: generated/bdd/content/features/radio-live/architecture-technique-live.md
+ - Arrêt du live: generated/bdd/content/features/radio-live/arret-live.md
+ - Comportement auditeur pendant un live: generated/bdd/content/features/radio-live/comportement-auditeur-live.md
+ - Comportement auditeur pendant un live: generated/bdd/content/features/radio-live/comportement-auditeur.md
+ - Démarrage d'un live: generated/bdd/content/features/radio-live/demarrage-live.md
+ - Enregistrement et publication de replays radio live: generated/bdd/content/features/radio-live/enregistrement-publication-replay.md
+ - Interdictions et modération des lives: generated/bdd/content/features/radio-live/interdictions-moderation-live.md
+ - 'Ui Content Creation':
+ - Éducation aux droits d'auteur: generated/bdd/content/features/ui-content-creation/education-droits-auteur.md
+ - 'Ui Navigation':
+ - Actions complémentaires - Mode piéton: generated/bdd/content/features/ui-navigation/actions-mode-pieton.md
+ - Commande "Précédent": generated/bdd/content/features/ui-navigation/commande-precedent.md
+ - Commandes vocales CarPlay et Android Auto: generated/bdd/content/features/ui-navigation/commandes-vocales.md
+ - Commandes au volant et interactions simplifiées: generated/bdd/content/features/ui-navigation/commandes-volant.md
+ - UI - Contenus géolocalisés en mode voiture: generated/bdd/content/features/ui-navigation/contenus-geolocalises-voiture.md
+ - File d'attente et commande "Suivant": generated/bdd/content/features/ui-navigation/file-attente-suivant.md
+ - Lecture en boucle et enchaînement automatique: generated/bdd/content/features/ui-navigation/lecture-enchainement.md
+ - Mode piéton - Notifications push et basculement automatique: generated/bdd/content/features/ui-navigation/mode-pieton-notifications-push.md
- '🛡️ Moderation':
- Vue d'ensemble: domains/moderation/README.md
- Règles:
@@ -188,6 +299,33 @@ nav:
- 'Flux: Signalement': domains/moderation/flows/moderation-signalement.md
- 'États: Lifecycle': domains/moderation/states/signalement-lifecycle.md
- 'Séquence: Appel': domains/moderation/sequences/processus-appel-moderation.md
+ - Tests BDD:
+ - 'Admin':
+ - Dashboard modération pour modérateurs: generated/bdd/moderation/features/admin/dashboard-moderateur.md
+ - Outils modérateur - Player audio et actions: generated/bdd/moderation/features/admin/outils-moderateur.md
+ - 'API':
+ - Procédure d'appel pour droits d'auteur: generated/bdd/moderation/features/api/appel-droits-auteur.md
+ - Audit trimestriel du système de modération: generated/bdd/moderation/features/api/audit-trimestriel.md
+ - Système de badges de modération: generated/bdd/moderation/features/api/badges-system.md
+ - Détection de patterns suspects par ML: generated/bdd/moderation/features/api/detection-patterns-suspects.md
+ - Limites temporelles anti-abus de modération: generated/bdd/moderation/features/api/limite-temporelle-anti-abus.md
+ - Modération communautaire - Badges et récompenses: generated/bdd/moderation/features/api/moderation-communautaire.md
+ - Modération préventive: generated/bdd/moderation/features/api/moderation-preventive.md
+ - Réduction Premium pour badge Or: generated/bdd/moderation/features/api/reduction-premium-badge-or.md
+ - Sanctions progressives pour abus de signalement: generated/bdd/moderation/features/api/sanctions-abus-progressives.md
+ - Sanctions progressives pour violations droits d'auteur: generated/bdd/moderation/features/api/sanctions-droits-auteur.md
+ - Sanctions et notifications de modération: generated/bdd/moderation/features/api/sanctions-notifications.md
+ - Score de fiabilité et priorisation des signalements: generated/bdd/moderation/features/api/score-fiabilite-priorisation.md
+ - Signalement musique a posteriori: generated/bdd/moderation/features/api/signalement-musique-posteriori.md
+ - Signalement de contenu inapproprié: generated/bdd/moderation/features/api/signalement.md
+ - Traitement des signalements par l'IA et les modérateurs: generated/bdd/moderation/features/api/traitement-signalements.md
+ - Statut utilisateur de confiance: generated/bdd/moderation/features/api/utilisateur-confiance.md
+ - 'Ui':
+ - Badges et statistiques de modération communautaire (Mobile): generated/bdd/moderation/features/ui/badges-statistiques.md
+ - Historique des signalements utilisateur (Mobile): generated/bdd/moderation/features/ui/historique-signalements.md
+ - Modal de découverte des badges: generated/bdd/moderation/features/ui/modal-decouverte-badges.md
+ - Interface sanctions et processus d'appel (Mobile): generated/bdd/moderation/features/ui/sanctions-appel.md
+ - Interface de signalement de contenu (Mobile): generated/bdd/moderation/features/ui/signalement-ui.md
- 'Generic Subdomains':
- '📢 Advertising':
- Vue d'ensemble: domains/advertising/README.md
@@ -195,6 +333,15 @@ nav:
- Publicités: domains/advertising/rules/publicites.md
- Entités:
- Modèle Publicités: domains/advertising/entities/modele-publicites.md
+ - Tests BDD:
+ - 'Publicites':
+ - Création de campagnes publicitaires: generated/bdd/advertising/features/publicites/campagnes-publicitaires.md
+ - Caractéristiques et facturation des publicités: generated/bdd/advertising/features/publicites/caracteristiques-pub.md
+ - Ciblage horaire publicités et gestion fuseaux horaires: generated/bdd/advertising/features/publicites/ciblage-horaire-fuseaux-horaires.md
+ - Gestion du budget et alertes publicitaires: generated/bdd/advertising/features/publicites/gestion-budget-pub.md
+ - Insertion et fréquence des publicités: generated/bdd/advertising/features/publicites/insertion-frequence-pub.md
+ - Métriques d'engagement et dashboard publicitaire: generated/bdd/advertising/features/publicites/metriques-engagement-pub.md
+ - Validation et modération des publicités: generated/bdd/advertising/features/publicites/validation-moderation-pub.md
- '💎 Premium':
- Vue d'ensemble: domains/premium/README.md
- Règles:
@@ -203,12 +350,42 @@ nav:
- Abonnements: domains/premium/rules/abonnements-notifications.md
- Entités:
- Modèle Premium: domains/premium/entities/modele-premium.md
+ - Tests BDD:
+ - 'Abonnements':
+ - Audio-guides multi-séquences pour piétons: generated/bdd/premium/features/abonnements/audio-guides-pieton.md
+ - Impact des abonnements sur l'algorithme: generated/bdd/premium/features/abonnements/impact-algorithme.md
+ - Limites d'abonnements et désabonnement: generated/bdd/premium/features/abonnements/limites-desabonnement.md
+ - Notifications contextuelles selon le mode de déplacement: generated/bdd/premium/features/abonnements/notifications-contextuelles.md
+ - 'Mode Offline':
+ - Gestion des contenus supprimés pendant offline: generated/bdd/premium/features/mode-offline/contenus-supprimes-pendant-offline.md
+ - Synchronisation actions offline: generated/bdd/premium/features/mode-offline/synchronisation-actions.md
+ - Téléchargement de contenus offline: generated/bdd/premium/features/mode-offline/telechargement.md
+ - Validité et renouvellement contenus offline: generated/bdd/premium/features/mode-offline/validite-renouvellement.md
+ - 'Premium':
+ - Avantages Premium: generated/bdd/premium/features/premium/avantages-premium.md
+ - Gestion abonnement Premium: generated/bdd/premium/features/premium/gestion-abonnement.md
+ - Multi-devices Premium - Dernier device prend priorité (KISS): generated/bdd/premium/features/premium/multi-devices-dernier-priorite.md
+ - Multi-devices et détection simultanée: generated/bdd/premium/features/premium/multi-devices-detection.md
+ - Offre et tarification Premium: generated/bdd/premium/features/premium/offre-tarification.md
+ - Détection et gestion des conflits de streaming multi-device Premium: generated/bdd/premium/features/premium/stream-conflict-detection.md
+ - Tarification différenciée multi-canal: generated/bdd/premium/features/premium/tarification-multi-canal.md
+ - Webhooks et retry automatique des paiements: generated/bdd/premium/features/premium/webhooks-retry-paiement.md
- '💰 Monetization':
- Vue d'ensemble: domains/monetization/README.md
- Règles:
- Monétisation Créateurs: domains/monetization/rules/monetisation-createurs.md
- Entités:
- Modèle Monétisation: domains/monetization/entities/modele-monetisation.md
+ - Tests BDD:
+ - 'Monetisation':
+ - Conditions d'activation de la monétisation: generated/bdd/monetization/features/monetisation/conditions-activation.md
+ - Contenus Premium exclusifs: generated/bdd/monetization/features/monetisation/contenus-premium-exclusifs.md
+ - Désactivation et suspension monétisation: generated/bdd/monetization/features/monetisation/desactivation-suspension.md
+ - KYC et inscription à la monétisation: generated/bdd/monetization/features/monetisation/kyc-inscription.md
+ - Obligations fiscales: generated/bdd/monetization/features/monetisation/obligations-fiscales.md
+ - Paiement des créateurs: generated/bdd/monetization/features/monetisation/paiement-createurs.md
+ - Gestion des soldes dormants et créateurs inactifs: generated/bdd/monetization/features/monetisation/soldes-dormants-inactifs.md
+ - Sources de revenus créateurs: generated/bdd/monetization/features/monetisation/sources-revenus.md
- Documentation Légale:
- Introduction: legal/README.md
- "Conditions Générales d'Utilisation": legal/cgu.md
@@ -217,20 +394,8 @@ nav:
- 'Charte Créateur': legal/charte-createur.md
- 'Mentions Légales': legal/mentions-legales.md
- 'Politique de Confidentialité': legal/politique-confidentialite.md
- - Interfaces:
- - Vue d'ensemble: interfaces/README.md
- - Mobile:
- - Navigation & Architecture: interfaces/mobile/navigation.md
- - Mobile:
- - 'Stratégie Permissions': mobile/permissions-strategy.md
- - 'Validation TestFlight': mobile/testflight-validation-plan.md
- Conformité & Compliance:
- 'Soumission aux Stores': compliance/stores-submission.md
- - Tests BDD:
- - "Vue d'ensemble": generated/bdd/index.md
- - Architecture & Techniques:
- - Séquences:
- - 'Cache Géospatial': architecture/sequences/cache-geospatial.md
extra:
social:
diff --git a/scripts/generate-bdd-docs.py b/scripts/generate-bdd-docs.py
index 74c5219..6ed40f0 100644
--- a/scripts/generate-bdd-docs.py
+++ b/scripts/generate-bdd-docs.py
@@ -199,7 +199,8 @@ def format_step(step: Step, indent: str = "") -> str:
if step.table:
result += "\n\n"
- result += format_table_markdown(step.table, indent + " ")
+ # Pas d'indentation pour les tableaux (sinon ils deviennent des blocs de code)
+ result += format_table_markdown(step.table, "")
result += "\n"
return result
@@ -368,7 +369,7 @@ def main():
# Chemins
project_root = Path(__file__).parent.parent
features_dir = project_root / 'docs' / 'domains'
- output_dir = project_root / 'generated' / 'bdd'
+ output_dir = project_root / 'docs' / 'generated' / 'bdd'
# Nettoyer le dossier de sortie
if output_dir.exists():
diff --git a/scripts/generate-pdf-docs.py b/scripts/generate-pdf-docs.py
index be6b642..6a678f0 100644
--- a/scripts/generate-pdf-docs.py
+++ b/scripts/generate-pdf-docs.py
@@ -339,7 +339,7 @@ def main():
project_root = Path(__file__).parent.parent
docs_dir = project_root / 'docs'
mkdocs_path = project_root / 'mkdocs.yml'
- output_dir = project_root / 'generated' / 'pdf'
+ output_dir = project_root / 'docs' / 'generated' / 'pdf'
output_dir.mkdir(parents=True, exist_ok=True)