- Ajouter ADR-018 (librairies Go) dans TECHNICAL.md - Transformer Shared en menu dépliable dans mkdocs (cohérence avec autres domaines) - Corriger listes markdown (ajout lignes vides avant listes) - Corriger line breaks dans génération BDD (étapes "Et" sur nouvelles lignes) - Ajouter script fix-markdown-lists.sh pour corrections futures Impacte 86 fichiers de documentation et 164 fichiers BDD générés.
14 KiB
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 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 :
- Signalement reçu → ajout file d'attente asynchrone
- Transcription audio (1-10 minutes selon durée)
- Analyse automatique :
- Score de confiance : 0-100%
- Catégorie détectée
- Timestamps des passages problématiques
- 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" |
| 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€ (APNS / FCM natifs)
- 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 :
- Catégorie violée : référence précise CGU (ex: "Article 3.2 - Haine & violence")
- Raison détaillée : explication en langage clair (non juridique)
- Extrait audio : timestamp exact du passage problématique (ex: "3:42-4:15")
- Transcription : texte problématique surligné en rouge
- Gravité : Strike actuel + conséquences (ex: "Strike 2/4 - Suspension 7 jours")
- 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 :
- Décision : Maintien / Annulation / Réduction de sanction
- Justification : explication de la décision d'appel
- Actions : Strike retiré / Suspension annulée / Contenu rétabli (si applicable)
- 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 :
- Lecture accélérée : 0.75x à 2x (gain productivité)
- Marqueurs temporels : annotation directe sur waveform
- Historique créateur : vue rapide contenus précédents + strikes
- Statistiques : signalements traités/jour, temps moyen, précision
- 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 pour le système complet de badges, récompenses et priorisation des signalements pertinents.
Section suivante : Section 19 - Modération Communautaire