Initial commit

This commit is contained in:
jpgiannetti
2026-01-31 11:45:11 +01:00
commit f99fb3c614
166 changed files with 115155 additions and 0 deletions

View File

@@ -0,0 +1,393 @@
## 14. Modération - Flows opérationnels
### 14.1 Signalement
**Décision** : Formulaire simple avec 7 catégories prédéfinies
#### 14.1.1 Catégories de signalement
Liste déroulante avec 7 options :
| Catégorie | Description |
|-----------|-------------|
| 🚫 **Haine & violence** | Incitation à la haine, discrimination, menaces |
| 🔞 **Contenu sexuel** | Pornographie, contenu explicite |
| ⚖️ **Illégalité** | Terrorisme, apologie de crimes |
| 🎵 **Droits d'auteur** | Musique/contenu protégé non autorisé (voir [Section 18](18-detection-contenu-protege.md) pour règles détaillées) |
| 📧 **Spam** | Publicité non sollicitée, répétition |
| ❌ **Fausse information** | Désinformation sur santé, sécurité routière |
| 🔧 **Autre** | Champ texte obligatoire si sélectionné |
**Justification** :
- Équilibre entre simplicité (pas trop de choix) et précision (aide les modérateurs)
- Coût : 0€ (liste déroulante standard)
---
#### 14.1.2 Commentaire du signaleur
**Décision** : Optionnel avec incitation
- Champ texte libre (0-500 caractères)
- Placeholder : "Décrivez le problème (optionnel mais recommandé)"
- Non bloquant : le signalement peut être envoyé sans commentaire
**Justification** :
- Encourage la qualité des signalements sans créer de friction
- Aide les modérateurs à comprendre le contexte
- Pas de risque d'abandon du processus
---
#### 14.1.3 Confirmation après signalement
**Décision** : Toast in-app avec lien historique
**Affichage** :
- Toast notification : "✓ Signalement envoyé. Nous l'examinerons sous 24-48h."
- Durée affichage : 5 secondes
- Bouton optionnel "Voir mes signalements" (accès historique)
**Historique personnel** :
- Liste des signalements envoyés par l'utilisateur
- Statut : En cours / Traité / Rejeté
- Notification in-app si action prise (contenu retiré, signalement rejeté)
**Justification** :
- Transparence maximale
- Coût : 0€ (aucun email automatique)
- Bonne UX
---
### 14.2 Traitement des signalements
#### 14.2.1 IA pré-filtre (transcription + analyse)
**Décision** : OpenAI Whisper open source + NLP
**Stack technique** :
| Composant | Technologie | Hébergement |
|-----------|-------------|-------------|
| **Transcription** | Whisper large-v3 | Self-hosted (CPU MVP, GPU scale) |
| **Analyse sentiment** | distilbert-base-uncased | Self-hosted |
| **Détection haine** | facebook/roberta-hate-speech | Self-hosted |
| **Mots-clés** | Liste noire FR/EN + regex | PostgreSQL |
**Processus** :
1. Signalement reçu → ajout file d'attente asynchrone
2. Transcription audio (1-10 minutes selon durée)
3. Analyse automatique :
- Score de confiance : 0-100%
- Catégorie détectée
- Timestamps des passages problématiques
4. Priorisation automatique selon score
**Délais** :
- Audio <5 min : 1-3 minutes
- Audio 5-30 min : 3-10 minutes
- Audio >30 min : 10-20 minutes
**Coût** :
- **MVP** : 0€ (CPU standard, processing asynchrone)
- **Scale** : 50-200€/mois (GPU VPS si >1000 signalements/jour)
**Justification** :
- 100% open source, pas de dépendance GAFAM
- Coût maîtrisé (scaling progressif)
- Gain productivité modérateurs ×3-5
---
#### 14.2.2 Délais de traitement (SLA)
**Décision** : SLA progressif selon priorité
| Priorité | Délai cible | Traitement |
|----------|-------------|------------|
| **CRITIQUE** | <2h (24/7) | Violence, suicide, mise en danger → Astreinte modérateur senior |
| **HAUTE** | <24h (jours ouvrés) | Haine, harcèlement, désinformation → Modérateur junior/senior |
| **MOYENNE** | <24h (jours ouvrés) | Spam, contenu inapproprié → Modérateur junior |
| **BASSE** | <72h (jours ouvrés) | Qualité audio, tags incorrects → Modérateur junior |
**Traitement automatique** :
- Score IA >95% + catégorie évidente (ex: spam répété) → Action automatique immédiate
- Notification créateur + possibilité d'appel
**Justification** :
- Réaliste et conforme DSA (Digital Services Act)
- Scalable : priorisation automatique
- Ressources humaines optimisées
---
#### 14.2.3 Priorisation automatique
**Décision** : File d'attente intelligente basée sur score IA
**Calcul de priorité** :
```
Priorité = (Score_IA × 0.7) + (Signalements_cumulés × 0.2) + (Fiabilité_signaleur × 0.1)
```
**Détails** :
- **Score_IA** : 0-100% (confiance analyse automatique)
- **Signalements_cumulés** : nombre de signalements du même contenu (boost priorité)
- **Fiabilité_signaleur** : score utilisateur (historique signalements pertinents)
**Classification résultante** :
- Priorité ≥90 → **CRITIQUE** (traitement immédiat)
- Priorité 70-89 → **HAUTE** (file prioritaire)
- Priorité 40-69 → **MOYENNE** (file normale)
- Priorité <40 → **BASSE** (file différée)
**Justification** :
- Optimise le temps des modérateurs
- Traite les cas graves en priorité
- Coût : 0€ (algorithme simple)
---
### 14.3 Sanctions
#### 14.3.1 Notification au créateur
**Décision** : Multi-canal (email + push + in-app)
**Canaux utilisés** :
| Canal | Timing | Contenu |
|-------|--------|---------|
| **Push notification** | Immédiat | Alerte courte : "Votre contenu a été modéré" |
| **In-app** | Au prochain lancement | Popup détaillée avec bouton "Voir détails" |
| **Email** | Dans l'heure | Notification complète avec lien vers formulaire d'appel |
**Contenu email** :
```
Objet : Modération de votre contenu "[Titre du contenu]"
Bonjour [Pseudo],
Votre contenu "[Titre]" publié le [Date] a été modéré.
Catégorie violée : [Catégorie]
Raison : [Explication détaillée]
Sanction : [Strike X / Suspension X jours / Suppression contenu]
Extrait audio concerné : [Timestamp]
Transcription : "[Passage problématique surligné]"
Vous pouvez contester cette décision sous 7 jours :
[Lien formulaire d'appel]
L'équipe RoadWave
```
**Coût** :
- Email : ~0.001€/notification (Brevo, Resend)
- Push : 0€ (Firebase Cloud Messaging / APNs)
- In-app : 0€
**Justification** :
- Conformité DSA (transparence obligatoire)
- Multi-canal garantit réception
- Coût négligeable
---
#### 14.3.2 Détail de la sanction
**Décision** : Notification complète avec preuves
**Éléments inclus obligatoirement** :
1. **Catégorie violée** : référence précise CGU (ex: "Article 3.2 - Haine & violence")
2. **Raison détaillée** : explication en langage clair (non juridique)
3. **Extrait audio** : timestamp exact du passage problématique (ex: "3:42-4:15")
4. **Transcription** : texte problématique surligné en rouge
5. **Gravité** : Strike actuel + conséquences (ex: "Strike 2/4 - Suspension 7 jours")
6. **Recours** : lien direct vers formulaire d'appel + délai (7 jours)
**Exemple visuel in-app** :
```
┌─────────────────────────────────────┐
│ ⚠️ Contenu modéré │
├─────────────────────────────────────┤
│ Titre : "Mon podcast #42" │
│ Publié le : 15/01/2026 │
│ │
│ Catégorie violée : │
│ 🚫 Haine & violence (Article 3.2) │
│ │
│ Passage problématique : 3:42-4:15 │
│ "[Transcription surlignée]" │
│ │
│ Sanction : Strike 2/4 │
│ Suspension : 7 jours │
│ │
│ [Contester cette décision] │
└─────────────────────────────────────┘
```
**Justification** :
- Transparence maximale (obligation DSA)
- Créateur comprend l'erreur → amélioration future
- Réduit les appels non fondés
---
#### 14.3.3 Processus d'appel
**Décision** : Formulaire in-app structuré
**Accès** :
- Bouton "Contester cette décision" dans notification
- Section "Mes sanctions" dans profil créateur
**Formulaire d'appel** :
| Champ | Type | Obligatoire |
|-------|------|-------------|
| **Sanction contestée** | Pré-rempli (non modifiable) | ✅ |
| **Raison de l'appel** | Texte libre (50-1000 caractères) | ✅ |
| **Arguments** | Zone texte enrichie | ✅ |
| **Preuves** | Upload fichiers (max 5, 10 MB total) | ❌ |
**Après soumission** :
- Génération numéro de ticket unique (ex: `#MOD-2026-00142`)
- Email confirmation : "Votre appel sera traité sous 72h"
- Statut visible dans l'app : "En cours d'examen"
**Délai de soumission** :
- Maximum **7 jours** après notification de sanction
- Après 7 jours : appel automatiquement refusé
**Justification** :
- Professionnel et traçable
- Intégration complète avec système modération
- Coût : 0€ (formulaire custom backend)
---
#### 14.3.4 Délai de réponse pour appel
**Décision** : SLA 72h garanti
**Délais** :
| Type d'appel | Délai | Responsable |
|--------------|-------|-------------|
| **Standard** | 72h max (3 jours ouvrés) | Modérateur senior |
| **Complexe** | 5 jours ouvrés + notification intermédiaire J+3 | Modérateur senior + Admin modération |
| **Critique** | 24h (cas suspension longue/ban) | Admin modération |
**Notification intermédiaire** (si délai >72h) :
- Email J+3 : "Votre appel #MOD-XXX est en cours d'examen approfondi. Réponse sous 2 jours."
**Réponse finale** :
Email détaillé avec :
1. **Décision** : Maintien / Annulation / Réduction de sanction
2. **Justification** : explication de la décision d'appel
3. **Actions** : Strike retiré / Suspension annulée / Contenu rétabli (si applicable)
4. **Définitif** : mention "Cette décision est définitive" (pas de second appel)
**Suivi in-app** :
- Mise à jour statut : "Appel accepté ✓" ou "Appel rejeté ✗"
- Badge notification
**Justification** :
- Équilibre entre rapidité et qualité de traitement
- Conforme pratiques industrie (YouTube, TikTok : 5-7 jours)
- Ressources humaines réalistes
---
### 14.4 Outils modérateurs
**Stack technique complète** :
| Outil | Technologie | Fonction |
|-------|-------------|----------|
| **Dashboard** | React + TanStack Table | Interface modération |
| **File signalements** | PostgreSQL + Redis | Priorisation temps réel |
| **Player audio** | Wavesurfer.js | Lecture avec waveform + annotations |
| **Transcription** | Whisper large-v3 | Conversion audio → texte |
| **Historique créateur** | Vue 360° | Contenus, strikes, appels, métriques |
| **Actions rapides** | Shortcuts clavier | Approuver (A), Rejeter (R), Escalade (E) |
| **Logs audit** | PostgreSQL + export | Traçabilité complète (DSA) |
| **Collaboration** | Système de commentaires | Modérateurs peuvent s'entraider sur cas complexes |
**Fonctionnalités clés** :
1. **Lecture accélérée** : 0.75x à 2x (gain productivité)
2. **Marqueurs temporels** : annotation directe sur waveform
3. **Historique créateur** : vue rapide contenus précédents + strikes
4. **Statistiques** : signalements traités/jour, temps moyen, précision
5. **Fil d'activité** : actions récentes équipe (temps réel)
**Coût infrastructure** :
- MVP : 0-50€/mois (serveur CPU)
- Scale : 50-200€/mois (GPU + Redis Cluster)
---
### 14.5 Modération préventive (rappel)
**Nouveaux créateurs** :
- Validation manuelle des **3 premiers contenus**
- Délai : 24-48h (jours ouvrés)
- Transcription automatique pour aide modérateur
**Score de confiance** :
- Évolution dynamique selon historique
- Créateur fiable (0 strike depuis 6 mois) → validation automatique
- Créateur suspect (strikes récents) → validation manuelle systématique
**Publicités** :
- Validation manuelle obligatoire 24-48h (responsabilité juridique)
- Transcription + analyse métadonnées (ciblage, durée, volume)
**Justification** :
- Prévention > réaction (économie modération)
- Qualité plateforme préservée dès le début
---
## Récapitulatif Section 14
| Point | Décision | Coût |
|-------|----------|------|
| **Catégories signalement** | 7 catégories prédéfinies + champ libre | 0€ |
| **Commentaire signaleur** | Optionnel avec incitation | 0€ |
| **Confirmation** | Toast in-app + historique personnel | 0€ |
| **IA pré-filtre** | Whisper (CPU MVP, GPU scale) + NLP open source | 0-200€/mois |
| **Délais traitement** | SLA progressif : 2h/24h/72h selon priorité | Dépend équipe |
| **Priorisation** | File intelligente basée score IA | 0€ |
| **Notification sanction** | Email + push + in-app (multi-canal) | ~0.001€/notif |
| **Détail sanction** | Complet : raison + extrait + transcription | 0€ |
| **Processus appel** | Formulaire in-app structuré | 0€ |
| **Délai appel** | 72h garanti (standard) | Dépend équipe |
| **Outils modérateurs** | Dashboard React + Whisper + Wavesurfer.js | 0-200€/mois |
**Coût total MVP** : **0-200€/mois** (infrastructure IA optionnelle)
**Conformité** :
- ✅ DSA (Digital Services Act) : transparence, traçabilité, délais
- ✅ RGPD : données modération anonymisées après 3 ans
- ✅ Logs audit : toutes actions tracées (obligation légale plateforme)
**Scalabilité** :
- 0-1000 signalements/mois : équipe 1-2 modérateurs junior + 1 senior
- 1000-10K signalements/mois : équipe 5-10 modérateurs + IA GPU
- 10K+ signalements/mois : équipe dédiée + IA optimisée + modération communautaire
---
**🎯 Modération communautaire** : Voir [Section 19](19-moderation-communautaire.md) pour le système complet de badges, récompenses et priorisation des signalements pertinents.
---
**Section suivante** : [Section 19 - Modération Communautaire](19-moderation-communautaire.md)