Initial commit
This commit is contained in:
393
docs/regles-metier/14-moderation-flows.md
Normal file
393
docs/regles-metier/14-moderation-flows.md
Normal 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)
|
||||
Reference in New Issue
Block a user