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,284 @@
# language: fr
@moderation @preventive
Fonctionnalité: Modération préventive
# 14.5 - Modération préventive (rappel)
Contexte:
Étant donné que le système de modération préventive est actif
# Nouveaux créateurs - Validation manuelle des 3 premiers contenus
Scénario: Créateur nouvellement inscrit
Étant donné que je viens de créer un compte créateur
Et que je n'ai jamais publié de contenu
Quand j'examine mon statut de créateur
Alors mon compte est marqué comme "Nouveau créateur"
Et mes 3 premiers contenus devront être validés manuellement
Et je suis informé de ce processus lors de l'onboarding
Scénario: Publication du premier contenu par un nouveau créateur
Étant donné que je suis un nouveau créateur
Et que je n'ai publié aucun contenu auparavant
Quand je publie mon premier contenu
Alors le contenu entre en file d'attente de validation manuelle
Et le statut du contenu est "En attente de validation"
Et le contenu n'est pas diffusé sur la plateforme
Et je reçois une notification:
"""
Votre contenu est en cours de validation.
Les premiers contenus sont vérifiés manuellement pour garantir la qualité de la plateforme.
Délai: 24-48h (jours ouvrés).
"""
Scénario: Validation manuelle par un modérateur
Étant donné que j'ai publié mon premier contenu
Et que le contenu est en attente de validation
Quand un modérateur examine mon contenu
Alors le modérateur utilise la transcription automatique Whisper
Et le modérateur vérifie:
| critère | conforme |
| Respect des règles communauté | oui |
| Pas de contenu inapproprié | oui |
| Qualité audio acceptable | oui |
| Métadonnées cohérentes | oui |
| Tags appropriés | oui |
Et si tout est conforme, le contenu est validé
Scénario: Délai de validation de 24-48h jours ouvrés
Étant donné que j'ai publié mon premier contenu lundi à 10:00
Quand le contenu entre en file de validation
Alors le contenu est validé avant mercredi 10:00 (48h jours ouvrés)
Et dans la plupart des cas, la validation est effectuée sous 24h
Et je reçois une notification dès que le contenu est validé
Scénario: Notification de validation réussie
Étant donné que mon premier contenu a été validé par un modérateur
Quand la validation est approuvée
Alors je reçois une notification:
"""
Votre contenu "Mon premier podcast" a été validé!
Il est maintenant diffusé sur RoadWave.
"""
Et le statut du contenu passe à "Publié"
Et le contenu devient visible pour tous les utilisateurs
Et il entre dans l'algorithme de recommandation
Scénario: Refus de validation si contenu non conforme
Étant donné que mon premier contenu viole les règles de la communauté
Quand le modérateur examine le contenu
Alors le contenu est refusé
Et je reçois une notification détaillée:
"""
Votre contenu "Mon premier podcast" n'a pas été validé.
Raison: Contenu inapproprié détecté
Passage problématique: 3:15-3:45
Transcription: "[passage surligné]"
Que faire?
- Corrigez le problème et republiez
- Consultez les règles de la communauté
- Contactez le support si vous avez des questions
"""
Et le contenu reste en statut "Refusé"
Et je peux modifier et republier
Scénario: Les 3 premiers contenus sont validés manuellement
Étant donné que je suis un nouveau créateur
Quand je publie mes contenus
Alors les contenus suivants nécessitent une validation manuelle:
| contenu | validation manuelle |
| 1er | oui |
| 2ème | oui |
| 3ème | oui |
| 4ème | non (auto) |
Et après 3 contenus validés, mes futurs contenus sont publiés automatiquement
Scénario: Passage en mode automatique après 3 validations
Étant donné que mes 3 premiers contenus ont été validés avec succès
Quand je publie mon 4ème contenu
Alors le contenu est publié automatiquement
Et aucune validation manuelle n'est requise
Et le statut passe directement à "Publié"
Et je reçois une notification:
"""
Votre contenu a été publié automatiquement.
Vos 3 premiers contenus ayant été conformes, vos futurs contenus sont publiés instantanément.
"""
# Score de confiance dynamique
Scénario: Évolution du score de confiance
Étant donné que je suis un créateur établi
Quand le système évalue mon historique
Alors un score de confiance est calculé basé sur:
| critère | poids |
| Nombre de contenus publiés | 20% |
| Strikes reçus | 40% |
| Signalements infondés | 20% |
| Ancienneté du compte | 10% |
| Taux d'engagement positif | 10% |
Et le score évolue dynamiquement
Scénario: Créateur fiable - Publication automatique
Étant donné que je suis un créateur
Et que j'ai 0 strike depuis 6 mois
Et que tous mes contenus précédents ont été conformes
Quand mon score de confiance est calculé
Alors je suis classé comme "Créateur fiable"
Et tous mes nouveaux contenus sont publiés automatiquement
Et aucune validation manuelle n'est nécessaire
Et je bénéficie d'une publication instantanée
Scénario: Créateur suspect - Validation manuelle systématique
Étant donné que je suis un créateur
Et que j'ai reçu 2 strikes récents (< 3 mois)
Quand mon score de confiance est recalculé
Alors je suis classé comme "Créateur suspect"
Et tous mes nouveaux contenus nécessitent une validation manuelle
Et chaque contenu est examiné avant publication
Et je suis notifié de ce changement de statut:
"""
En raison de sanctions récentes, vos contenus nécessitent une validation manuelle.
Respectez les règles de la communauté pour retrouver la publication automatique.
"""
Scénario: Réhabilitation après période sans incident
Étant donné que j'étais un "Créateur suspect"
Et que je publie 10 contenus conformes sur 6 mois
Et que je ne reçois aucun nouveau strike
Quand le système réévalue mon score de confiance
Alors je passe en "Créateur fiable"
Et la publication automatique est rétablie
Et je reçois une notification de réhabilitation:
"""
✓ Félicitations! Vous êtes de nouveau un créateur fiable.
Vos contenus seront publiés automatiquement.
"""
# Publicités - Validation manuelle obligatoire
Scénario: Toute publicité nécessite validation manuelle
Étant donné qu'un annonceur soumet une publicité audio
Quand la publicité est créée
Alors elle entre automatiquement en file de validation manuelle
Et aucune publicité n'est diffusée sans validation préalable
Et cela est obligatoire pour des raisons de responsabilité juridique
Scénario: Validation d'une publicité - Processus complet
Étant donné qu'une publicité est en attente de validation
Quand un modérateur senior examine la publicité
Alors le modérateur vérifie:
| critère | conforme |
| Transcription automatique Whisper | effectuée|
| Contenu conforme aux règles | oui |
| Pas de fausse publicité / arnaque | oui |
| Respect du ciblage géographique | oui |
| Durée conforme (10-60s) | oui |
| Volume audio acceptable (pas trop fort)| oui |
| Métadonnées correctes | oui |
Et si tout est conforme, la publicité est validée
Scénario: Délai de validation d'une publicité - 24-48h
Étant donné qu'un annonceur soumet une publicité lundi à 10:00
Quand la publicité entre en file de validation
Alors la publicité est validée avant mercredi 10:00 (48h jours ouvrés)
Et l'annonceur est notifié dès la validation
Et la campagne publicitaire peut alors démarrer
Scénario: Refus de validation d'une publicité
Étant donné qu'une publicité contient des éléments non conformes
Quand le modérateur examine la publicité
Alors la publicité est refusée
Et l'annonceur reçoit une notification détaillée:
"""
⚠️ Votre publicité n'a pas été validée.
Raison: Contenu trompeur détecté
Passage problématique: 0:15-0:25
Transcription: "[promesse irréaliste surlignée]"
Que faire?
- Modifiez votre publicité
- Soumettez-la à nouveau pour validation
- Consultez les règles publicitaires de RoadWave
"""
Et l'annonceur peut modifier et resoumettre la publicité
Et aucun remboursement n'est effectué pour une publicité refusée
# Prévention > Réaction
Scénario: Économie de modération grâce à la prévention
Étant donné que la modération préventive est active
Quand on analyse l'efficacité du système
Alors 80% des contenus inappropriés sont détectés avant publication
Et cela réduit le nombre de signalements de 70%
Et les ressources de modération sont optimisées
Et la qualité de la plateforme est préservée dès le début
Scénario: Qualité de la plateforme maintenue
Étant donné que tous les nouveaux créateurs sont vérifiés
Quand on analyse la qualité globale des contenus
Alors le taux de contenus inappropriés est <1%
Et les utilisateurs font confiance à la plateforme
Et la réputation de RoadWave est préservée
Et l'expérience utilisateur est optimale
# Transparence envers les créateurs
Scénario: Information claire sur le processus de validation
Étant donné que je suis un nouveau créateur
Quand je consulte la page d'aide "Validation des contenus"
Alors j'apprends que:
"""
Validation des contenus
Nouveaux créateurs:
- Vos 3 premiers contenus sont validés manuellement
- Délai: 24-48h (jours ouvrés)
- Après 3 contenus conformes: publication automatique
Créateurs établis:
- Publication automatique si historique conforme
- Validation manuelle si strikes récents
Publicités:
- Validation manuelle obligatoire pour toutes les publicités
- Délai: 24-48h (jours ouvrés)
"""
Et le processus est clair et transparent
Scénario: Badge "Créateur vérifié" après validation
Étant donné que mes 3 premiers contenus ont été validés avec succès
Quand je consulte mon profil créateur
Alors un badge discret " Créateur vérifié" s'affiche
Et ce badge rassure les auditeurs sur la qualité de mes contenus
Et il améliore ma crédibilité sur la plateforme
# Conformité et justification
Scénario: Justification de la modération préventive
Étant donné que la modération préventive est en place
Quand on évalue les bénéfices
Alors les avantages suivants sont constatés:
| bénéfice |
| Prévention meilleure que réaction |
| Économie de ressources de modération (×3-5) |
| Qualité de la plateforme préservée dès le début |
| Confiance des utilisateurs renforcée |
| Moins de contenus inappropriés signalés |
| Réputation de la plateforme protégée |
Et l'investissement dans la prévention est rentable
Scénario: Coût de la modération préventive
Étant donné que 100 nouveaux créateurs publient 3 contenus chacun
Et que 50 publicités sont soumises par mois
Quand on calcule le coût de modération préventive
Alors le coût en temps modérateur est:
| type | nombre | temps/contenu | total |
| Nouveaux créateurs| 300 | 5 min | 25h |
| Publicités | 50 | 10 min | 8.3h |
Et le coût total est d'environ 33h de modération/mois
Et c'est largement compensé par la réduction des signalements réactifs

View File

@@ -0,0 +1,327 @@
# language: fr
@moderation @sanctions
Fonctionnalité: Sanctions et notifications de modération
# 14.3 - Sanctions
Contexte:
Étant donné que je suis un créateur de contenu
Et que j'ai publié un contenu
# 14.3.1 - Notification au créateur (multi-canal)
Scénario: Notification multi-canal après sanction
Étant donné que mon contenu a été modéré
Quand la sanction est appliquée
Alors je reçois une notification sur 3 canaux:
| canal | timing | contenu |
| Push | Immédiat | "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 d'appel |
Et chaque canal contient un lien vers les détails complets
Scénario: Notification push immédiate
Étant donné que mon contenu vient d'être modéré
Quand la sanction est appliquée
Alors je reçois une notification push immédiate
Et le message est court: " Votre contenu a été modéré"
Et je peux cliquer pour voir les détails
Et la notification utilise Firebase Cloud Messaging (Android) ou APNs (iOS)
Et le coût est de 0
Scénario: Popup in-app au prochain lancement
Étant donné que mon contenu a été modéré
Quand j'ouvre l'application
Alors une popup détaillée s'affiche automatiquement
Et la popup contient:
| élément | description |
| Titre du contenu | "Mon podcast #42" |
| Icône d'avertissement | |
| Catégorie violée | 🚫 Haine & violence |
| Sanction | Strike 2/4 - Suspension 7 jours |
| Bouton "Voir détails" | Redirige vers page détaillée |
| Bouton "Compris" | Ferme la popup |
Et je ne peux pas fermer la popup sans l'avoir vue
Scénario: Email de notification complet dans l'heure
Étant donné que mon contenu a été modéré à 14:00
Quand la sanction est appliquée
Alors je reçois un email avant 15:00 (dans l'heure)
Et l'objet de l'email est "Modération de votre contenu \"[Titre du contenu]\""
Et l'email contient toutes les informations détaillées
Et le coût est d'environ 0.001 par email (Brevo, Resend)
# 14.3.2 - Détail de la sanction
Scénario: Email de notification complet et structuré
Étant donné que mon contenu "Mon podcast #42" a été modéré
Quand je reçois l'email de notification
Alors l'email contient la structure suivante:
"""
Objet : Modération de votre contenu "Mon podcast #42"
Bonjour @mon_pseudo,
Votre contenu "Mon podcast #42" publié le 15/01/2026 a été modéré.
Catégorie violée : 🚫 Haine & violence (Article 3.2 CGU)
Raison : Propos discriminatoires envers un groupe de personnes
Extrait audio concerné : 3:42-4:15
Transcription : "[passage problématique surligné en rouge]"
Sanction : Strike 2/4
Conséquence : Suspension de votre compte pendant 7 jours
Vous pouvez contester cette décision sous 7 jours :
[Lien formulaire d'appel]
L'équipe RoadWave
"""
Scénario: Page détaillée de la sanction in-app
Étant donné que je clique sur "Voir détails" dans la notification
Quand la page détaillée s'affiche
Alors je vois les 6 éléments obligatoires:
| élément | contenu |
| 1. Catégorie violée | 🚫 Haine & violence (Article 3.2 CGU) |
| 2. Raison détaillée | Explication claire et non juridique |
| 3. Extrait audio | Timestamp exact: 3:42-4:15 |
| 4. Transcription | Texte problématique surligné en rouge |
| 5. Gravité | Strike actuel + conséquences (Strike 2/4, 7j susp) |
| 6. Recours | Lien formulaire d'appel + délai 7j |
Scénario: Affichage du passage problématique avec timestamp
Étant donné que la page détaillée de la sanction est affichée
Quand je consulte l'extrait audio concerné
Alors le timestamp exact est affiché: "3:42-4:15"
Et je peux écouter uniquement cette portion de l'audio
Et un player audio intégré permet l'écoute du passage
Et la transcription correspondante est affichée en dessous
Et les mots/phrases problématiques sont surlignés en rouge
Scénario: Référence précise aux CGU
Étant donné que la sanction fait référence à l'Article 3.2 des CGU
Quand je clique sur "Article 3.2"
Alors je suis redirigé vers la section correspondante des CGU
Et la section "Haine & violence" est mise en évidence
Et je peux lire exactement ce qui est interdit
Et cela m'aide à comprendre mon erreur
Scénario: Gravité de la sanction avec système de strikes
Étant donné que c'est mon 2ème strike
Quand je consulte les détails de la sanction
Alors je vois clairement "Strike 2/4"
Et les conséquences sont explicitées:
"""
Strike 2/4 - Suspension 7 jours
Que se passe-t-il ensuite?
- Strike 3: Suspension 30 jours
- Strike 4: Ban définitif
Comment éviter les strikes?
- Lire et respecter les règles de la communauté
- Réhabilitation: -1 strike tous les 6 mois sans incident
"""
Et je comprends l'escalade des sanctions
# 14.3.3 - Processus d'appel
Scénario: Accès au formulaire d'appel depuis la notification
Étant donné que j'ai reçu une notification de modération
Quand je clique sur "Contester cette décision"
Alors je suis redirigé vers le formulaire d'appel
Et le formulaire est pré-rempli avec les informations de la sanction
Et je peux commencer à rédiger mon appel
Scénario: Accès au formulaire d'appel depuis "Mes sanctions"
Étant donné que j'ai reçu une sanction il y a 2 jours
Quand j'ouvre "Profil créateur > Mes sanctions"
Alors je vois la liste de mes sanctions
Et chaque sanction a un bouton "Faire appel" (si délai <7j)
Et je peux accéder au formulaire d'appel
Scénario: Structure du formulaire d'appel
Étant donné que j'ouvre le formulaire d'appel
Quand le formulaire s'affiche
Alors je vois les champs suivants:
| champ | type | obligatoire | description |
| Sanction contestée | Pré-rempli (readonly) | oui | "Strike 2 - Podcast #42" |
| Raison de l'appel | Texte (50-1000 car) | oui | Explication courte de la contestation |
| Arguments détaillés | Zone texte enrichie | oui | Arguments complets |
| Preuves | Upload fichiers | non | Max 5 fichiers, 10 MB total |
Et tous les champs obligatoires sont marqués d'un astérisque
Scénario: Validation du formulaire d'appel
Étant donné que je remplis le formulaire d'appel
Quand je clique sur "Soumettre l'appel"
Alors le système valide les champs obligatoires
Et si un champ obligatoire est vide, une erreur s'affiche
Et si la raison fait moins de 50 caractères, une erreur s'affiche
Et si tout est valide, l'appel est soumis
Scénario: Confirmation après soumission de l'appel
Étant donné que j'ai soumis un appel valide
Quand l'appel est enregistré
Alors un numéro de ticket unique est généré: "#MOD-2026-00142"
Et un email de confirmation est envoyé:
"""
Votre appel #MOD-2026-00142 a été reçu.
Nous l'examinerons sous 72h maximum.
Vous serez notifié de la décision par email et in-app.
"""
Et le statut de l'appel est "En cours d'examen"
Et je peux suivre le statut dans "Mes sanctions"
Scénario: Délai de soumission de 7 jours maximum
Étant donné que j'ai reçu une sanction le 2026-01-15
Quand j'essaie de faire appel le 2026-01-25 (10 jours plus tard)
Alors le formulaire d'appel est désactivé
Et un message s'affiche:
"""
Le délai de 7 jours pour faire appel est dépassé.
Cette décision est désormais définitive.
"""
Et je ne peux plus contester la sanction
Scénario: Bouton "Faire appel" visible si délai respecté
Étant donné que j'ai reçu une sanction il y a 3 jours
Quand je consulte "Mes sanctions"
Alors le bouton "Faire appel" est actif
Et un compteur indique "4 jours restants pour faire appel"
Et je peux cliquer pour soumettre un appel
# 14.3.4 - Délai de réponse pour appel
Scénario: SLA de 72h garanti pour appel standard
Étant donné que j'ai soumis un appel standard le lundi à 10:00
Quand l'appel est en cours de traitement
Alors un modérateur senior est assigné
Et l'appel doit être traité avant jeudi 10:00 (72h - 3 jours ouvrés)
Et je reçois une réponse dans ce délai
Scénario: Appel complexe avec notification intermédiaire
Étant donné que j'ai soumis un appel complexe
Et que le traitement nécessite plus de 72h
Quand 3 jours se sont écoulés
Alors je reçois un email de notification intermédiaire:
"""
Votre appel #MOD-2026-00142 est en cours d'examen approfondi.
Nous vous répondrons sous 2 jours maximum.
"""
Et l'appel est traité sous 5 jours ouvrés au total
Et un modérateur senior + admin modération examinent le cas
Scénario: Appel CRITIQUE traité en 24h
Étant donné que j'ai reçu une suspension longue ou un ban
Et que je soumets un appel
Quand l'appel est classé en priorité CRITIQUE
Alors l'admin modération traite l'appel sous 24h
Et je reçois une réponse rapide
Et le cas est examiné en priorité absolue
Scénario: Réponse finale détaillée - Appel accepté
Étant donné que mon appel est accepté
Quand je reçois la réponse finale
Alors l'email contient:
| élément | contenu |
| Décision | Annulation de la sanction |
| Justification | Explication de pourquoi l'appel est accepté |
| Actions | Strike retiré, suspension annulée, contenu rétabli |
| Définitif | "Cette décision est définitive" |
Et le strike est retiré de mon compte
Et le contenu est rétabli sur la plateforme
Et je peux continuer normalement
Scénario: Réponse finale détaillée - Appel rejeté
Étant donné que mon appel est rejeté
Quand je reçois la réponse finale
Alors l'email contient:
| élément | contenu |
| Décision | Maintien de la sanction |
| Justification | Explication de pourquoi l'appel est rejeté |
| Actions | Sanction maintenue, strike conservé |
| Définitif | "Cette décision est définitive" |
Et la sanction reste active
Et je ne peux pas faire de second appel
Et je dois respecter la suspension
Scénario: Réponse finale - Réduction de sanction
Étant donné que mon appel est partiellement accepté
Quand je reçois la réponse finale
Alors la décision est "Réduction de sanction"
Et l'email explique:
"""
Après examen de votre appel, nous reconnaissons des circonstances atténuantes.
La sanction est réduite:
- Strike 2 → Strike 1
- Suspension 7 jours → Suspension 3 jours
Cette décision est définitive.
"""
Et le strike est réduit
Et la suspension est raccourcie
Et je suis notifié de la nouvelle date de fin
Scénario: Suivi du statut de l'appel in-app
Étant donné que j'ai soumis un appel
Quand je consulte "Mes sanctions"
Alors je vois le statut actuel de l'appel:
| statut | badge | couleur |
| En cours d'examen | En cours 🔍 | orange |
| Appel accepté | Accepté ✓ | vert |
| Appel rejeté | Rejeté ✗ | rouge |
| Sanction réduite | Partiellement accepté| bleu |
Et une notification badge m'alerte quand le statut change
# Transparence et traçabilité
Scénario: Historique complet des sanctions visible
Étant donné que je suis un créateur
Quand j'ouvre "Profil créateur > Mes sanctions"
Alors je vois la liste complète de mes sanctions passées:
| colonne | description |
| Date | 15/01/2026 |
| Contenu | "Mon podcast #42" |
| Catégorie | 🚫 Haine & violence |
| Sanction | Strike 2 - Suspension 7j |
| Statut | Active / Terminée / Annulée |
| Appel | Aucun / Accepté / Rejeté |
Et les sanctions sont triées par date décroissante
Scénario: Conformité DSA - Transparence obligatoire
Étant donné que le système de sanction est en place
Quand un audit DSA est effectué
Alors chaque sanction contient:
| élément DSA | présent |
| Référence précise à la règle violée | oui |
| Explication claire et compréhensible | oui |
| Preuve (extrait + transcription) | oui |
| Possibilité de recours (appel) | oui |
| Délai de recours clairement indiqué | oui |
| Réponse motivée au recours | oui |
Et le système est conforme au Digital Services Act
# Pas de second appel
Scénario: Décision définitive après premier appel
Étant donné que mon premier appel a été rejeté
Quand j'essaie de faire un second appel
Alors le bouton "Faire appel" est désactivé
Et un message s'affiche: "Cette décision est définitive. Aucun second appel n'est possible."
Et je ne peux plus contester la sanction
Et je dois respecter la décision finale
# Coût des notifications
Scénario: Coût des notifications multi-canal
Étant donné que 100 sanctions sont appliquées en un mois
Quand on calcule le coût des notifications
Alors le coût total est d'environ 0.10:
| canal | coût unitaire | coût pour 100 |
| Email | 0.001 | 0.10 |
| Push | 0 | 0 |
| In-app | 0 | 0 |
Et le coût est négligeable même à grande échelle

View File

@@ -0,0 +1,224 @@
# language: fr
@moderation @reporting
Fonctionnalité: Signalement de contenu inapproprié
# 14.1 - Signalement utilisateur
Contexte:
Étant donné que je suis un utilisateur connecté
Et que je suis en train d'écouter un contenu
# 14.1.1 - Catégories de signalement
Scénario: Affichage du formulaire de signalement
Étant donné que j'écoute un contenu inapproprié
Quand j'ouvre le menu du contenu
Et que je clique sur "Signaler"
Alors un formulaire de signalement s'affiche
Et le formulaire contient une liste déroulante "Catégorie du problème"
Et le formulaire contient un champ texte "Commentaire (optionnel)"
Et le formulaire contient un bouton "Envoyer le signalement"
Scénario: Liste des 7 catégories prédéfinies
Étant donné que le formulaire de signalement est affiché
Quand je clique sur la liste déroulante "Catégorie du problème"
Alors je vois les 7 catégories suivantes:
| icône | 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é |
| 📧 | 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é |
Et chaque catégorie a une description claire
Scénario: Sélection de la catégorie "Haine & violence"
Étant donné que le formulaire de signalement est affiché
Quand je sélectionne la catégorie "🚫 Haine & violence"
Alors la catégorie est sélectionnée
Et la description "Incitation à la haine, discrimination, menaces" s'affiche
Et je peux passer au champ commentaire
Scénario: Catégorie "Autre" nécessite un commentaire obligatoire
Étant donné que le formulaire de signalement est affiché
Quand je sélectionne la catégorie "🔧 Autre"
Alors le champ "Commentaire" devient obligatoire
Et un message s'affiche: "Veuillez décrire le problème (obligatoire)"
Et le placeholder change en "Décrivez le problème rencontré"
Et je ne peux pas envoyer le signalement sans commentaire
# 14.1.2 - Commentaire du signaleur
Scénario: Champ commentaire optionnel avec incitation
Étant donné que le formulaire de signalement est affiché
Et que j'ai sélectionné une catégorie autre que "Autre"
Quand je consulte le champ "Commentaire"
Alors le champ est optionnel (pas d'astérisque rouge)
Et le placeholder indique "Décrivez le problème (optionnel mais recommandé)"
Et la limite de caractères est de 500
Et un compteur affiche "0/500"
Scénario: Envoi de signalement sans commentaire
Étant donné que j'ai sélectionné la catégorie "📧 Spam"
Et que je n'ai pas rempli le champ commentaire
Quand je clique sur "Envoyer le signalement"
Alors le signalement est envoyé avec succès
Et aucune erreur de validation ne s'affiche
Et le commentaire est enregistré comme vide
Scénario: Envoi de signalement avec commentaire
Étant donné que j'ai sélectionné la catégorie "🚫 Haine & violence"
Et que j'ai saisi le commentaire "Le créateur tient des propos discriminatoires à 2:30"
Quand je clique sur "Envoyer le signalement"
Alors le signalement est envoyé avec succès
Et le commentaire est enregistré avec le signalement
Et il sera visible par les modérateurs
Scénario: Limite de 500 caractères pour le commentaire
Étant donné que le formulaire de signalement est affiché
Quand je saisis un commentaire de 501 caractères
Alors le champ limite automatiquement à 500 caractères
Et le compteur affiche "500/500"
Et les caractères supplémentaires ne sont pas acceptés
# 14.1.3 - Confirmation après signalement
Scénario: Toast de confirmation après signalement
Étant donné que j'ai envoyé un signalement
Quand le signalement est enregistré
Alors un toast notification s'affiche
Et le toast contient le message " Signalement envoyé. Nous l'examinerons sous 24-48h."
Et le toast s'affiche pendant 5 secondes
Et le toast contient un bouton "Voir mes signalements"
Et je peux fermer le toast manuellement avec un bouton X
Scénario: Accès à l'historique des signalements via le toast
Étant donné que le toast de confirmation est affiché
Quand je clique sur "Voir mes signalements"
Alors je suis redirigé vers la page "Mes signalements"
Et je vois la liste de tous mes signalements
Et le signalement que je viens d'envoyer apparaît en premier
Scénario: Historique personnel des signalements
Étant donné que j'ai envoyé 3 signalements précédemment
Quand j'ouvre "Profil > Mes signalements"
Alors je vois la liste de mes 3 signalements
Et chaque signalement affiche:
| information | description |
| Titre du contenu | "Podcast #42" |
| Créateur | @pseudo_createur |
| Catégorie | 🚫 Haine & violence |
| Date | 15/01/2026 |
| Statut | En cours / Traité / Rejeté |
| Mon commentaire | Texte que j'ai saisi |
Et les signalements sont triés par date décroissante
Plan du Scénario: Statuts possibles d'un signalement
Étant donné que j'ai envoyé un signalement
Quand le statut du signalement est "<statut>"
Alors le badge affiché est "<badge>"
Et la couleur du badge est "<couleur>"
Exemples:
| statut | badge | couleur |
| En cours | En cours | orange |
| Traité | Traité | vert |
| Rejeté | Rejeté | rouge |
Scénario: Notification in-app si action prise
Étant donné que j'ai signalé un contenu il y a 24h
Quand le modérateur traite mon signalement
Et que le contenu est effectivement retiré
Alors je reçois une notification in-app
Et la notification indique "Votre signalement a été traité. Le contenu a été retiré."
Et le statut de mon signalement passe à "Traité "
Et je peux voir les détails de l'action prise
Scénario: Notification si signalement rejeté
Étant donné que j'ai signalé un contenu
Quand le modérateur rejette mon signalement
Alors je reçois une notification in-app
Et la notification indique "Votre signalement a été examiné. Le contenu ne viole pas les règles de la communauté."
Et le statut de mon signalement passe à "Rejeté "
Et je peux voir la raison du rejet
# Signalements multiples du même contenu
Scénario: Un contenu peut être signalé plusieurs fois
Étant donné qu'un contenu a déjà été signalé par 5 autres utilisateurs
Quand je signale le même contenu
Alors mon signalement est enregistré indépendamment
Et le compteur de signalements du contenu passe à 6
Et mon signalement rejoint la file d'attente de modération
Et les signalements cumulés augmentent la priorité de traitement
Scénario: Limite de signalements par utilisateur
Étant donné que j'ai déjà signalé le même contenu il y a 2 jours
Quand j'essaie de signaler à nouveau le même contenu
Alors un message m'informe "Vous avez déjà signalé ce contenu"
Et le formulaire de signalement n'est pas affiché
Et je peux consulter le statut de mon signalement précédent
# Signalements abusifs
Scénario: Détection de signalements abusifs répétés
Étant donné que j'ai envoyé 10 signalements ce mois-ci
Et que 8 d'entre eux ont été rejetés comme infondés
Quand j'essaie d'envoyer un nouveau signalement
Alors mon compte est marqué comme "signaleur suspect"
Et un avertissement s'affiche:
"""
Attention: vos signalements récents ont été majoritairement rejetés.
Les signalements abusifs peuvent entraîner des sanctions.
"""
Et je peux toujours envoyer le signalement
Mais mes futurs signalements auront une priorité réduite
Scénario: Sanction pour signalements abusifs graves
Étant donné que j'ai envoyé 20 signalements abusifs en 1 mois
Et que tous ont été rejetés comme volontairement faux
Quand le modérateur détecte le pattern abusif
Alors mon compte reçoit un avertissement formel
Et je perds la possibilité de signaler pendant 30 jours
Et je reçois un email m'expliquant la sanction
# Signalement depuis différents points de l'app
Scénario: Signalement depuis le player audio
Étant donné que j'écoute un contenu
Quand j'ouvre le menu "" du player
Alors je vois l'option "Signaler"
Et je peux ouvrir le formulaire de signalement
Scénario: Signalement depuis la page de détails du contenu
Étant donné que je consulte la page de détails d'un contenu
Quand je clique sur le bouton "" en haut à droite
Alors je vois l'option "Signaler"
Et je peux ouvrir le formulaire de signalement
Scénario: Signalement depuis l'historique d'écoute
Étant donné que je consulte mon historique d'écoute
Quand je clique sur "" à côté d'un contenu passé
Alors je vois l'option "Signaler"
Et je peux signaler ce contenu même si je ne l'écoute plus actuellement
# Anonymat du signaleur
Scénario: Identité du signaleur anonyme pour le créateur
Étant donné que j'ai signalé un contenu
Quand le créateur est notifié de la modération
Alors mon identité reste anonyme
Et le créateur ne peut pas savoir qui a signalé
Et seuls les modérateurs ont accès à l'identité du signaleur
# Coût de la solution
Scénario: Coût du système de signalement
Étant donné que le système de signalement est en place
Quand on calcule le coût
Alors le coût est de 0
Et le formulaire est développé en interne
Et aucun service tiers n'est utilisé
Et les notifications in-app sont gratuites

View File

@@ -0,0 +1,268 @@
# language: fr
@moderation @processing
Fonctionnalité: Traitement des signalements par l'IA et les modérateurs
# 14.2 - Traitement des signalements
Contexte:
Étant donné que le système de modération est actif
# 14.2.1 - IA pré-filtre (Whisper + NLP)
Scénario: Signalement ajouté à la file d'attente asynchrone
Étant donné qu'un utilisateur envoie un signalement pour un contenu audio
Quand le signalement est reçu
Alors le signalement est ajouté à la file d'attente asynchrone
Et un worker de traitement est déclenché
Et le traitement se fait en arrière-plan sans bloquer l'utilisateur
Scénario: Transcription automatique avec Whisper large-v3
Étant donné qu'un contenu audio signalé dure 5 minutes
Quand le worker de traitement démarre
Alors le système utilise Whisper large-v3 pour transcrire l'audio
Et la transcription est en self-hosted (pas de service cloud)
Et le texte transcrit est enregistré en base de données
Et le délai de transcription est de 1-3 minutes
Plan du Scénario: Délai de transcription selon durée audio
Étant donné qu'un contenu audio signalé dure <duree> minutes
Quand le système transcrit l'audio
Alors la transcription prend environ <delai>
Exemples:
| duree | delai |
| 2 | 1-3 minutes |
| 10 | 3-10 minutes |
| 45 | 10-20 minutes |
Scénario: Analyse automatique du contenu transcrit
Étant donné que la transcription audio est terminée
Quand le système analyse le texte transcrit
Alors les analyses suivantes sont effectuées:
| analyse | technologie |
| Analyse de sentiment | distilbert-base-uncased |
| Détection de haine | facebook/roberta-hate-speech |
| Mots-clés interdits | Liste noire FR/EN + regex |
Et chaque analyse génère un score de confiance (0-100%)
Scénario: Génération du score de confiance IA
Étant donné que toutes les analyses sont terminées
Quand le système calcule le score final
Alors un score de confiance IA entre 0-100% est généré
Et le score indique la probabilité que le contenu viole les règles
Et la catégorie la plus probable est identifiée
Et les timestamps des passages problématiques sont extraits
Scénario: Détection automatique de contenu clairement inapproprié
Étant donné qu'un contenu contient des insultes graves et répétées
Quand l'IA analyse la transcription
Alors le score de confiance IA est >95%
Et la catégorie détectée est "Haine & violence"
Et les passages problématiques sont identifiés avec timestamps:
| timestamp | texte problématique |
| 02:15 | [insulte discriminatoire] |
| 03:42 | [propos haineux] |
Et le signalement est classé en priorité CRITIQUE
# 14.2.2 - Délais de traitement (SLA)
Plan du Scénario: SLA selon priorité du signalement
Étant donné qu'un signalement a une priorité "<priorite>"
Quand le signalement entre en file d'attente
Alors le délai de traitement cible est "<delai>"
Et le responsable du traitement est "<responsable>"
Exemples:
| priorite | delai | responsable |
| CRITIQUE | <2h (24/7) | Modérateur senior (astreinte) |
| HAUTE | <24h (jours ouvrés) | Modérateur junior/senior |
| MOYENNE | <24h (jours ouvrés) | Modérateur junior |
| BASSE | <72h (jours ouvrés) | Modérateur junior |
Scénario: Traitement automatique pour score IA >95%
Étant donné qu'un signalement a un score IA de 97%
Et que la catégorie détectée est "Spam" (évidente)
Quand le système évalue le signalement
Alors une action automatique immédiate est déclenchée
Et le contenu est retiré automatiquement
Et le créateur est notifié de la modération
Et le créateur peut faire appel de la décision
Et un modérateur senior vérifie l'action a posteriori
Scénario: Signalement CRITIQUE traité en moins de 2h
Étant donné qu'un signalement de priorité CRITIQUE est reçu à 14:00
Et que le contenu concerne une menace de violence
Quand le signalement est assigné à un modérateur senior d'astreinte
Alors le modérateur est alerté immédiatement (push + SMS)
Et le signalement est traité avant 16:00 (2h)
Et une décision est prise et appliquée
Et les autorités peuvent être contactées si nécessaire
Scénario: Astreinte modérateur 24/7 pour signalements CRITIQUES
Étant donné qu'un signalement CRITIQUE est reçu un dimanche à 03:00
Quand le signalement est classé en priorité CRITIQUE
Alors le modérateur senior d'astreinte est alerté
Et le signalement est traité dans les 2h (avant 05:00)
Et le service d'astreinte garantit une disponibilité 24/7
Scénario: Signalement HAUTE priorité traité en moins de 24h
Étant donné qu'un signalement de priorité HAUTE est reçu lundi à 10:00
Et que le contenu concerne du harcèlement
Quand le signalement entre en file d'attente
Alors le signalement est assigné à un modérateur (junior ou senior)
Et le signalement est traité avant mardi 10:00 (24h jours ouvrés)
Et une décision est prise et appliquée
Scénario: Signalement BASSE priorité traité en moins de 72h
Étant donné qu'un signalement de priorité BASSE est reçu lundi à 10:00
Et que le contenu concerne des tags incorrects
Quand le signalement entre en file d'attente
Alors le signalement est traité avant jeudi 10:00 (72h jours ouvrés)
Et un modérateur junior peut traiter ce type de signalement
# 14.2.3 - Priorisation automatique
Scénario: Calcul du score de priorité
Étant donné qu'un signalement a les caractéristiques suivantes:
| caractéristique | valeur |
| Score IA | 85% |
| Signalements cumulés | 3 |
| Fiabilité du signaleur | 75% |
Quand le système calcule la priorité
Alors la formule appliquée est:
"""
Priorité = (Score_IA × 0.7) + (Signalements_cumulés × 0.2) + (Fiabilité_signaleur × 0.1)
"""
Et le score de priorité est: (85 × 0.7) + (3 × 0.2) + (75 × 0.1) = 67.5
Et le signalement est classé en priorité MOYENNE
Plan du Scénario: Classification selon score de priorité
Étant donné qu'un signalement a un score de priorité de <score>
Quand le système classe le signalement
Alors la priorité assignée est "<priorite>"
Et le signalement entre dans la file "<file>"
Exemples:
| score | priorite | file |
| 95 | CRITIQUE | Immédiate |
| 82 | HAUTE | Prioritaire |
| 55 | MOYENNE | Normale |
| 25 | BASSE | Différée |
Scénario: Boost de priorité avec signalements cumulés
Étant donné qu'un contenu a été signalé par 1 utilisateur avec un score IA de 60%
Et que le signalement est classé en priorité MOYENNE (score 42)
Quand 5 autres utilisateurs signalent le même contenu
Alors le nombre de signalements cumulés passe à 6
Et le score de priorité augmente significativement
Et le signalement peut passer en priorité HAUTE
Et le traitement est accéléré
Scénario: Impact de la fiabilité du signaleur
Étant donné qu'un utilisateur de confiance (90% fiabilité) envoie un signalement
Et qu'un utilisateur suspect (20% fiabilité) envoie un signalement similaire
Quand le système calcule les priorités
Alors le signalement de l'utilisateur de confiance a un score plus élevé
Et son signalement est traité en priorité
Et le signalement de l'utilisateur suspect est traité plus tard
Scénario: Évolution du score de fiabilité du signaleur
Étant donné qu'un utilisateur a envoyé 10 signalements
Et que 8 d'entre eux ont été acceptés par les modérateurs
Quand le système calcule son score de fiabilité
Alors le score est de 80% (8 acceptés / 10 total)
Et ses futurs signalements auront plus de poids
Et il peut devenir "utilisateur de confiance"
# File d'attente intelligente
Scénario: Files d'attente séparées par priorité
Étant donné que 50 signalements sont en attente
Quand le système organise la file d'attente
Alors les signalements sont répartis dans les files suivantes:
| file | nombre | priorité |
| Immédiate (24/7) | 5 | CRITIQUE |
| Prioritaire | 15 | HAUTE |
| Normale | 20 | MOYENNE |
| Différée | 10 | BASSE |
Et les modérateurs traitent en priorité la file Immédiate
Scénario: Modérateurs assignés selon compétences
Étant donné qu'un signalement complexe de harcèlement est reçu
Quand le système assigne un modérateur
Alors un modérateur senior est prioritairement assigné
Et les modérateurs juniors peuvent traiter les cas simples (spam, tags)
Et les modérateurs seniors traitent les cas complexes (haine, violence, appels)
# Technologies opensource
Scénario: Stack technique 100% opensource
Étant donné que le système de modération IA est déployé
Quand on analyse les technologies utilisées
Alors toutes les technologies sont opensource:
| composant | technologie | hébergement |
| Transcription | Whisper large-v3 | Self-hosted |
| Analyse sentiment | distilbert-base-uncased | Self-hosted |
| Détection haine | facebook/roberta-hate-speech | Self-hosted |
| Mots-clés interdits | Liste noire FR/EN + regex | PostgreSQL |
Et aucune dépendance à Google, AWS, Azure
# Coût infrastructure
Plan du Scénario: Coût selon phase du projet
Étant donné que RoadWave est en phase "<phase>"
Quand on calcule le coût de l'infrastructure IA
Alors le coût mensuel est "<cout>"
Exemples:
| phase | cout |
| MVP | 0-50 (CPU) |
| Scale | 50-200 (GPU VPS) |
Scénario: Processing asynchrone en MVP avec CPU
Étant donné que RoadWave est en phase MVP
Et que le volume est <1000 signalements/mois
Quand le système traite les signalements
Alors un serveur CPU standard est suffisant
Et le coût est de 0€ (serveur existant)
Et le processing asynchrone absorbe les pics de charge
Et les délais restent acceptables (1-20 minutes)
Scénario: Scaling avec GPU pour gros volumes
Étant donné que RoadWave reçoit >1000 signalements/jour
Quand le système nécessite un scaling
Alors un VPS avec GPU est requis
Et le coût passe à 50-200/mois
Et les délais de transcription sont divisés par 5-10
Et le système peut gérer 10 000+ signalements/mois
# Logs et audit
Scénario: Logs d'audit pour chaque traitement
Étant donné qu'un signalement est traité
Quand une action est prise (rejet, acceptation, sanction)
Alors un log d'audit complet est créé:
| champ | description |
| signalement_id | ID unique du signalement |
| content_id | ID du contenu signalé |
| ia_score | Score de confiance IA |
| ia_category | Catégorie détectée par IA |
| priority | CRITIQUE / HAUTE / MOYENNE / BASSE |
| moderator_id | ID du modérateur assigné |
| action_taken | Retiré / Rejeté / Strike |
| processing_time | Durée du traitement |
| timestamp | Date et heure de la décision |
Et le log est conservé pour conformité DSA
Et les logs sont anonymisés après 3 ans (RGPD)
# Conformité DSA
Scénario: Traçabilité complète pour conformité DSA
Étant donné que le système de modération est actif
Quand un audit DSA est effectué
Alors toutes les actions de modération sont tracées
Et les délais de traitement sont mesurés et respectés
Et les décisions sont justifiées et documentées
Et la transparence vis-à-vis des utilisateurs est garantie
Et le système est conforme au Digital Services Act