refactor(docs): réorganiser la documentation selon principes DDD

Réorganise la documentation du projet selon les principes du Domain-Driven Design (DDD) pour améliorer la cohésion, la maintenabilité et l'alignement avec l'architecture modulaire du backend.

**Structure cible:**
```
docs/domains/
├── README.md (Context Map)
├── _shared/ (Core Domain)
├── recommendation/ (Supporting Subdomain)
├── content/ (Supporting Subdomain)
├── moderation/ (Supporting Subdomain)
├── advertising/ (Generic Subdomain)
├── premium/ (Generic Subdomain)
└── monetization/ (Generic Subdomain)
```

**Changements effectués:**

Phase 1: Création de l'arborescence des 7 bounded contexts
Phase 2: Déplacement des règles métier (01-19) vers domains/*/rules/
Phase 3: Déplacement des diagrammes d'entités vers domains/*/entities/
Phase 4: Déplacement des diagrammes flux/états/séquences vers domains/*/
Phase 5: Création des README.md pour chaque domaine
Phase 6: Déplacement des features Gherkin vers domains/*/features/
Phase 7: Création du Context Map (domains/README.md)
Phase 8: Mise à jour de mkdocs.yml pour la nouvelle navigation
Phase 9: Correction automatique des liens internes (script fix-markdown-links.sh)
Phase 10: Nettoyage de l'ancienne structure (regles-metier/, diagrammes/, features/)

**Configuration des tests:**
- Makefile: godog run docs/domains/*/features/
- scripts/generate-bdd-docs.py: features_dir → docs/domains

**Avantages:**
 Cohésion forte: toute la doc d'un domaine au même endroit
 Couplage faible: domaines indépendants, dépendances explicites
 Navigabilité améliorée: README par domaine = entrée claire
 Alignement code/docs: miroir de backend/internal/
 Onboarding facilité: exploration domaine par domaine
 Tests BDD intégrés: features au plus près des règles métier

Voir docs/REFACTOR-DDD.md pour le plan complet.
This commit is contained in:
jpgiannetti
2026-02-07 17:15:02 +01:00
parent 78422bb2c0
commit 5e5fcf4714
227 changed files with 1413 additions and 1967 deletions

View File

@@ -0,0 +1,42 @@
# language: fr
@api @moderation @copyright @appeal @mvp
Fonctionnalité: Procédure d'appel pour droits d'auteur
En tant que créateur sanctionné
Je veux faire appel d'une décision
Afin de contester une sanction injuste
Scénario: Dépôt d'un appel
Étant donné un créateur "alice@roadwave.fr" sanctionné
Quand il fait appel dans les 15 jours
Alors un dossier d'appel est créé
Et il doit fournir des preuves (fair use, licence, etc.)
Et un événement "COPYRIGHT_APPEAL_FILED" est enregistré
Scénario: Examen de l'appel par comité
Étant donné un appel déposé
Quand le comité l'examine (3 modérateurs)
Alors une décision est prise dans les 7 jours
Et le créateur est notifié du résultat
Et un événement "COPYRIGHT_APPEAL_REVIEWED" est enregistré
Scénario: Appel accepté - Annulation de la sanction
Étant donné un appel validé
Alors la sanction est annulée
Et le contenu est rétabli
Et le compteur d'infractions n'est pas incrémenté
Et un événement "COPYRIGHT_APPEAL_ACCEPTED" est enregistré
Scénario: Appel rejeté - Maintien de la sanction
Étant donné un appel rejeté
Alors la sanction est maintenue
Et le créateur ne peut plus faire appel pour ce cas
Et un événement "COPYRIGHT_APPEAL_REJECTED" est enregistré
Scénario: Délai de prescription des infractions
Étant donné une infraction datant de > 2 ans
Et aucune nouvelle infraction depuis
Alors l'infraction est retirée de l'historique
Et ne compte plus dans le système de sanctions progressives
Et un événement "COPYRIGHT_INFRACTION_EXPIRED" est enregistré

View File

@@ -0,0 +1,76 @@
# language: fr
@api @moderation @audit @governance @mvp
Fonctionnalité: Audit trimestriel du système de modération
En tant que responsable de la plateforme
Je veux un audit trimestriel de la modération
Afin d'assurer transparence et amélioration continue
Scénario: Génération automatique du rapport d'audit
Étant donné la fin d'un trimestre (31 mars 2026)
Quand le système génère le rapport
Alors il contient:
| Section | Détails |
| Statistiques globales | Signalements, taux de traitement|
| Performance modérateurs | Temps moyen, précision |
| Contenus bloqués | Par catégorie |
| Appels et contestations | Taux d'acceptation |
| Améliorations proposées | Recommandations |
Et un PDF est généré et archivé
Et un événement "QUARTERLY_AUDIT_GENERATED" est enregistré
Scénario: Publication transparente des métriques
Étant donné le rapport d'audit trimestriel
Quand il est publié
Alors une page publique affiche:
| Métrique | Q1 2026 | Q4 2025 |
| Signalements traités | 15,234 | 12,876 |
| Temps moyen de traitement | 8h | 12h |
| Taux de précision automatique | 85% | 82% |
| Appels acceptés | 18% | 22% |
| Comptes bannis | 234 | 198 |
Et un événement "AUDIT_PUBLICLY_PUBLISHED" est enregistré
Scénario: Analyse des tendances sur 4 trimestres
Étant donné 4 rapports trimestriels
Alors un graphique d'évolution est affiché:
| Métrique | Tendance |
| Signalements totaux | +12% par tri |
| Temps de traitement | -25% |
| Taux de faux positifs | -5% |
Et des insights sont générés automatiquement
Et un événement "AUDIT_TRENDS_ANALYZED" est enregistré
Scénario: Recommandations d'amélioration
Étant donné le rapport d'audit
Quand le système analyse les données
Alors des recommandations sont proposées:
| Recommandation | Priorité |
| Recruter 2 modérateurs supplémentaires| Haute |
| Améliorer modèle ML de détection | Moyenne |
| Revoir processus d'appel | Basse |
Et un plan d'action trimestriel est établi
Et un événement "AUDIT_RECOMMENDATIONS_GENERATED" est enregistré
Scénario: Audit externe annuel
Étant donné la fin de l'année (31 décembre)
Quand un audit externe est commandé
Alors un cabinet indépendant analyse:
| Aspect | Conformité |
| Respect RGPD | Oui |
| Transparence des décisions | Oui |
| Impartialité de la modération | Oui |
| Temps de réponse | Acceptable |
Et un certificat de conformité est délivré
Et un événement "EXTERNAL_AUDIT_COMPLETED" est enregistré
Scénario: Métriques d'impact des audits
Étant donné 4 audits trimestriels effectués
Alors l'impact est mesuré:
| Métrique | Amélioration |
| Temps de traitement | -30% |
| Satisfaction utilisateurs | +15% |
| Taux de faux positifs | -40% |
| Coûts de modération | -10% |
Et les métriques sont exportées vers le monitoring

View File

@@ -0,0 +1,76 @@
# language: fr
@api @moderation @gamification @mvp
Fonctionnalité: Système de badges de modération
En tant qu'utilisateur modérateur
Je veux gagner des badges pour ma contribution
Afin d'être reconnu et motivé à modérer
Scénario: Badge Bronze - 10 signalements validés
Étant donné un utilisateur "alice@roadwave.fr" qui a 10 signalements validés
Quand le 10ème signalement est confirmé
Alors le badge "Modérateur Bronze" est débloqué
Et affiché sur son profil
Et +50 points de réputation
Et un événement "BADGE_BRONZE_MODERATOR_UNLOCKED" est enregistré
Scénario: Badge Argent - 50 signalements validés
Étant donné un utilisateur avec 50 signalements validés
Alors le badge "Modérateur Argent" est débloqué
Et il obtient des privilèges supplémentaires
Et +200 points de réputation
Et un événement "BADGE_SILVER_MODERATOR_UNLOCKED" est enregistré
Scénario: Badge Or - 200 signalements validés
Étant donné un utilisateur avec 200 signalements validés
Alors le badge "Modérateur Or" est débloqué
Et il devient "Utilisateur de confiance"
Et ses signalements sont traités en priorité
Et +500 points de réputation
Et un événement "BADGE_GOLD_MODERATOR_UNLOCKED" est enregistré
Scénario: Badge Diamant - 1000 signalements + 95% de précision
Étant donné un utilisateur avec 1000 signalements validés
Et un taux de précision > 95%
Alors le badge "Modérateur Diamant" est débloqué
Et il peut devenir modérateur officiel
Et +2000 points de réputation
Et un événement "BADGE_DIAMOND_MODERATOR_UNLOCKED" est enregistré
Scénario: Perte de badge si précision < 70%
Étant donné un utilisateur avec badge Silver
Quand son taux de précision tombe < 70%
Alors le badge est révoqué temporairement
Et il doit retrouver 80% de précision pour le récupérer
Et un événement "BADGE_REVOKED_LOW_ACCURACY" est enregistré
Scénario: Badges spéciaux pour expertise
Étant donné un utilisateur spécialisé
Alors il peut obtenir des badges thématiques:
| Badge | Condition |
| Expert droits d'auteur | 100 signalements copyright validés|
| Expert contenu offensant | 100 signalements haine validés |
| Expert spam | 100 signalements spam validés |
Et un événement "EXPERT_BADGE_UNLOCKED" est enregistré
Scénario: Classement des meilleurs modérateurs
Étant donné tous les utilisateurs modérateurs
Alors un leaderboard est affiché:
| Rang | Utilisateur | Signalements | Précision | Badge |
| 1 | alice | 1,234 | 98% | Diamant |
| 2 | bob | 876 | 96% | Or |
| 3 | charlie | 543 | 94% | Or |
Et le top 10 reçoit des récompenses mensuelles
Et un événement "MODERATOR_LEADERBOARD_VIEWED" est enregistré
Scénario: Récompenses mensuelles pour top modérateurs
Étant donné le top 10 du mois
Quand le mois se termine
Alors chacun reçoit:
| Rang | Récompense |
| 1-3 | 6 mois Premium gratuit |
| 4-6 | 3 mois Premium gratuit |
| 7-10 | 1 mois Premium gratuit |
Et un badge "Top modérateur du mois"
Et un événement "MONTHLY_MODERATOR_REWARDS_DISTRIBUTED" est enregistré

View File

@@ -0,0 +1,84 @@
# language: fr
@api @moderation @ml @security @mvp
Fonctionnalité: Détection de patterns suspects par ML
En tant que système de sécurité
Je veux détecter automatiquement les comportements suspects
Afin de prévenir les abus et fraudes
Scénario: Détection de signalements coordonnés
Étant donné 5 utilisateurs qui signalent le même contenu en 10 minutes
Et leurs comptes ont été créés la même semaine
Quand le système analyse le pattern
Alors une alerte "Brigade de signalement" est déclenchée
Et les signalements sont mis en quarantaine
Et un modérateur vérifie manuellement
Et un événement "COORDINATED_REPORTING_DETECTED" est enregistré
Scénario: Détection de compte bot de signalement
Étant donné un compte avec pattern suspect:
| Indicateur | Valeur |
| Signalements par jour | 50 |
| Intervalle régulier | Exactement 120s |
| Diversité de contenus | Faible |
| Interaction humaine | Aucune |
Quand le système ML analyse
Alors le compte est identifié comme "Probable bot"
Et suspendu automatiquement
Et un événement "BOT_ACCOUNT_DETECTED" est enregistré
Scénario: Détection de vendetta personnelle
Étant donné un utilisateur A qui signale systématiquement l'utilisateur B
Et 15 signalements en 1 semaine, tous rejetés
Quand le système détecte le pattern
Alors une alerte "Harcèlement par signalements" est déclenchée
Et l'utilisateur A est bloqué de signaler B
Et un événement "VENDETTA_PATTERN_DETECTED" est enregistré
Scénario: Détection d'usage d'IA pour contenu offensant déguisé
Étant donné un contenu avec texte subtil généré par IA
Quand l'analyse NLP détecte des marqueurs d'IA toxique
Alors le contenu est mis en quarantaine
Et un modérateur expert vérifie
Et un événement "AI_GENERATED_TOXIC_DETECTED" est enregistré
Scénario: Analyse des métadonnées EXIF suspectes
Étant donné une image uploadée avec métadonnées:
| Métadonnée | Valeur suspect |
| GPS Location | Corée du Nord |
| Device Model | Connu pour bots |
| Timestamp | Futur (2027) |
Quand le système analyse
Alors l'image est marquée "Métadonnées suspectes"
Et un événement "SUSPICIOUS_METADATA_DETECTED" est enregistré
Scénario: Score de risque ML combiné
Étant donné un contenu analysé par ML
Alors un score de risque global est calculé:
| Facteur | Poids | Score |
| Contenu textuel | 30% | 0.8 |
| Métadonnées image | 20% | 0.3 |
| Comportement utilisateur | 30% | 0.9 |
| Patterns de signalement | 20% | 0.1 |
| **Score global** | 100% | **0.65** |
Et si score > 0.7, mise en quarantaine automatique
Et un événement "ML_RISK_SCORE_CALCULATED" est enregistré
Scénario: Apprentissage continu du modèle ML
Étant donné 10 000 contenus modérés manuellement
Quand les décisions humaines sont collectées
Alors le modèle ML est réentraîné mensuellement
Et la précision s'améliore de 2-3% par itération
Et un événement "ML_MODEL_RETRAINED" est enregistré
Scénario: Métriques de performance de la détection ML
Étant donné que 50 000 contenus ont été analysés
Alors les indicateurs suivants sont disponibles:
| Métrique | Valeur |
| Précision de détection | 87% |
| Rappel (contenus détectés) | 82% |
| Faux positifs | 8% |
| Temps moyen d'analyse | 250ms |
| Économie de temps modérateurs | 60% |
Et les métriques sont exportées vers le monitoring

View File

@@ -0,0 +1,51 @@
# language: fr
@api @moderation @anti-abuse @mvp
Fonctionnalité: Limites temporelles anti-abus de modération
En tant que plateforme
Je veux limiter les signalements abusifs
Afin de prévenir le spam et les abus du système
Scénario: Limitation à 20 signalements par jour
Étant donné un utilisateur "alice@roadwave.fr" qui a fait 20 signalements aujourd'hui
Quand il tente un 21ème signalement
Alors le signalement est bloqué
Et un message s'affiche: "Limite quotidienne atteinte (20 signalements). Réessayez demain."
Et un événement "REPORT_DAILY_LIMIT_REACHED" est enregistré
Scénario: Limite augmentée pour utilisateurs de confiance
Étant donné un utilisateur de confiance
Alors sa limite quotidienne est de 50 signalements
Et un événement "TRUSTED_USER_HIGHER_LIMIT" est enregistré
Scénario: Cooldown de 5 minutes entre signalements
Étant donné un utilisateur qui vient de faire un signalement
Quand il tente un nouveau signalement 2 minutes après
Alors le signalement est bloqué
Et un message affiche: "Attendez 3 minutes avant le prochain signalement"
Et un événement "REPORT_COOLDOWN_ACTIVE" est enregistré
Scénario: Détection de signalements en masse suspects
Étant donné un utilisateur qui fait 10 signalements en 10 minutes
Quand le système détecte le pattern
Alors une alerte modérateur est déclenchée
Et l'utilisateur passe en review manuelle
Et un événement "MASS_REPORTING_DETECTED" est enregistré
Scénario: Blocage temporaire pour abus répétés
Étant donné un utilisateur avec 10 signalements rejetés en 24h
Quand le 10ème est rejeté
Alors l'utilisateur est bloqué de la modération pour 7 jours
Et un message explique: "Trop de signalements invalides. Blocage temporaire."
Et un événement "REPORTING_SUSPENDED_ABUSE" est enregistré
Scénario: Métriques de détection d'abus
Étant donné que 1000 utilisateurs ont tenté d'abuser
Alors les indicateurs suivants sont disponibles:
| Métrique | Valeur |
| Tentatives de spam détectées | 1,234 |
| Utilisateurs bloqués | 156 |
| Faux positifs | 2% |
| Taux de récidive après blocage | 15% |
Et les métriques sont exportées vers le monitoring

View File

@@ -0,0 +1,397 @@
# language: fr
@moderation @community
Fonctionnalité: Modération communautaire - Badges et récompenses
En tant que plateforme
Je veux gamifier les signalements pertinents
Afin d'améliorer la qualité des signalements et réduire la charge modérateurs
# 19. Modération Communautaire - Badges et Récompenses
Contexte:
Étant donné que le système de modération communautaire est actif
# 19.1 - Système de badges
Scénario: Trois niveaux de badges disponibles
Étant donné que je consulte le système de badges
Quand je vois les badges disponibles
Alors 3 niveaux de badges existent:
| badge | nom | critères | avantages |
| 🥉 | Contributeur Bronze | 5 validés + 70% pertinence | Signalements prioritaires (+10 points) |
| 🥈 | Contributeur Argent | 20 validés + 80% pertinence | +20 points + Badge visible profil |
| 🥇 | Contributeur Or | 50 validés + 90% pertinence | +30 points + Badge + Réduction Premium |
Et les badges valorisent la qualité plutôt que la quantité
Scénario: Règles d'éligibilité aux badges
Étant donné que je veux obtenir un badge
Quand je consulte les règles d'éligibilité
Alors les critères suivants s'appliquent:
| règle | valeur |
| Minimum signalements envoyés pour éligibilité | 10 |
| Signalements "En cours" comptent dans le calcul | non |
| Signalements rejetés font baisser le taux | oui |
| Période de calcul (glissante) | 6 mois |
Et seuls les 6 derniers mois sont pris en compte
Scénario: Calcul du taux de pertinence
Étant donné que j'ai envoyé 20 signalements
Et que 16 ont été validés par les modérateurs
Et que 4 ont été rejetés
Quand le système calcule mon taux de pertinence
Alors la formule appliquée est "Signalements validés / Total signalements × 100"
Et mon taux est de 80% (16 / 20 × 100)
Et ce taux détermine mon éligibilité aux badges
Scénario: Obtention du badge Bronze
Étant donné que j'ai 10 signalements envoyés
Et que 7 signalements ont été validés
Et que mon taux de pertinence est de 70%
Quand le système évalue mon éligibilité
Alors j'obtiens le badge 🥉 Contributeur Bronze
Et je reçois une notification:
"""
🎉 Félicitations ! Vous êtes désormais Contributeur Bronze.
Merci de rendre RoadWave meilleur !
"""
Et mes futurs signalements gagnent +10 points de priorité
Scénario: Obtention du badge Argent
Étant donné que j'ai déjà le badge Bronze
Et que j'ai 25 signalements envoyés
Et que 20 signalements ont été validés
Et que mon taux de pertinence est de 80%
Et que 30 jours se sont écoulés depuis l'obtention du badge Bronze
Quand le système évalue mon éligibilité
Alors j'obtiens le badge 🥈 Contributeur Argent
Et je reçois une notification:
"""
🎉 Impressionnant ! Badge Contributeur Argent obtenu.
Votre engagement fait la différence !
"""
Et le badge est visible sur mon profil public
Et mes futurs signalements gagnent +20 points de priorité
Scénario: Obtention du badge Or
Étant donné que j'ai déjà le badge Argent
Et que j'ai 60 signalements envoyés
Et que 54 signalements ont été validés
Et que mon taux de pertinence est de 90%
Et que 60 jours se sont écoulés depuis l'obtention du badge Argent
Quand le système évalue mon éligibilité
Alors j'obtiens le badge 🥇 Contributeur Or
Et je reçois une notification:
"""
🎉 Exceptionnel ! Vous êtes Contributeur Or.
La communauté vous remercie pour votre aide précieuse !
"""
Et je bénéficie d'une réduction Premium -50% pendant 3 mois
Et mes futurs signalements gagnent +30 points de priorité
Scénario: Délai minimum entre niveaux de badges
Étant donné que j'ai obtenu le badge Bronze il y a 15 jours
Et que je remplis les critères pour le badge Argent
Quand le système évalue mon éligibilité
Alors je ne peux pas encore obtenir le badge Argent
Et je dois attendre 15 jours supplémentaires (30 jours minimum)
Et cela évite la montée en badge trop rapide (anti-farming)
# 19.1.3 - Découverte du système
Scénario: Modal d'information au premier signalement
Étant donné que je viens d'envoyer mon tout premier signalement
Et que le toast de confirmation standard s'est affiché
Quand exactement 2 secondes se sont écoulées
Alors une modal d'information s'affiche automatiquement
Et la modal explique le système de badges et récompenses
Et la modal contient le titre "🎯 Bravo ! Vous contribuez à une communauté plus saine"
Et la modal contient le message suivant:
"""
En signalant ce contenu, vous participez activement à améliorer
l'expérience de tous les utilisateurs RoadWave.
Vos contributions de qualité sont valorisées et récompensées :
🥉 Bronze : 5 signalements validés
Signalements prioritaires (+10 points)
🥈 Argent : 20 signalements validés
Badge visible + priorité accrue (+20 points)
🥇 Or : 50 signalements validés
Réduction Premium -50% pendant 3 mois
💡 Votre taux de pertinence compte !
Formule : Signalements validés ÷ Total × 100
Continuez à nous aider, chaque signalement pertinent compte ! 🙏
"""
Et la modal contient un bouton "En savoir plus" qui redirige vers la page dédiée badges
Et la modal contient un bouton "J'ai compris" qui ferme la modal
Et la modal ne se réaffiche jamais (flag "badge_modal_seen" en base de données)
Et le délai de 2 secondes permet de laisser l'utilisateur lire le toast de confirmation d'abord
# 19.1.4 - Affichage badges et statistiques
Scénario: Statistiques personnelles visibles
Étant donné que j'ai un badge Bronze
Quand je consulte "Profil > Mes signalements"
Alors je vois mes statistiques de modération:
"""
📊 Vos statistiques de modération
Signalements envoyés : 27
Validés : 23
Rejetés : 4
Taux de pertinence : 85%
Badge actuel : 🥉 Contributeur Bronze
Prochain palier : 🥈 Contributeur Argent (17 signalements validés restants)
"""
Et je vois ma progression vers le prochain badge
Scénario: Toast après validation de signalement
Étant donné que j'ai un badge Bronze (3/5 signalements validés)
Et que j'envoie un nouveau signalement
Quand le modérateur valide mon signalement
Alors je reçois un toast:
"""
Bravo ! Votre signalement a aidé la communauté.
Progression : 4/5 pour badge Bronze 🥉
"""
Et je vois ma progression vers le badge suivant
Scénario: Toast après rejet de signalement
Étant donné que j'ai un taux de pertinence de 65%
Et que j'envoie un nouveau signalement
Quand le modérateur rejette mon signalement
Alors je reçois un toast:
"""
Signalement non retenu.
Taux de pertinence : 60%.
Continuez vos efforts !
"""
Et je vois l'impact sur mon taux de pertinence
# 19.2 - Score de fiabilité
Scénario: Calcul du score de fiabilité
Étant donné que j'ai 15 signalements validés
Et que j'ai 3 signalements rejetés
Et que j'ai le badge Or actif
Quand le système calcule mon score de fiabilité
Alors la formule appliquée est:
"""
Score fiabilité = min(100, (Validés × 10 - Rejetés × 5 + Bonus_Or × 20))
"""
Et mon score est: min(100, (15 × 10 - 3 × 5 + 1 × 20)) = 100 (plafonné)
Et ce score est utilisé dans l'algorithme de priorisation
Scénario: Utilisation du score dans la priorisation
Étant donné que j'ai un score de fiabilité de 85/100
Et qu'un autre utilisateur a un score de 30/100
Quand nous signalons des contenus similaires
Alors mon signalement a un meilleur score de priorité
Et mon signalement est traité en premier
Et la formule de priorité inclut:
"""
Priorité = (Score_IA × 0.7) + (Signalements_cumulés × 0.2) + (Fiabilité_signaleur × 0.1)
"""
Et la fiabilité est normalisée : 85/100 = 0.85
# 19.3 - Statut "Utilisateur de confiance"
Scénario: Obtention automatique du statut de confiance
Étant donné que j'obtiens le badge Argent
Quand mon statut est mis à jour
Alors je deviens automatiquement "Utilisateur de confiance"
Et mes signalements sont traités en priorité (même score IA)
Et je reçois des notifications sous 12h (au lieu de 24-48h)
Et le badge "Utilisateur de confiance" s'affiche sur mon profil
Scénario: Révocation du statut de confiance
Étant donné que je suis "Utilisateur de confiance"
Et que je perds mon badge Argent après audit trimestriel
Quand mon statut est réévalué
Alors le statut "Utilisateur de confiance" est révoqué
Et je reviens au statut normal
Et aucune sanction supplémentaire n'est appliquée
# 19.4 - Réduction Premium pour badge Or
Scénario: Notification de réduction Premium au badge Or
Étant donné que j'obtiens le badge Contributeur Or
Quand la notification est envoyée
Alors je reçois un email + push + in-app:
"""
🎉 Exceptionnel ! Vous avez obtenu le badge Contributeur Or
Vous faites partie des meilleurs contributeurs de RoadWave.
Grâce à votre engagement et votre vigilance, vous aidez
des milliers d'utilisateurs à profiter d'une expérience audio de qualité.
La communauté vous remercie ! 🙏
En reconnaissance de votre aide précieuse, vous bénéficiez de :
3 mois d'abonnement Premium à -50%
2.49/mois au lieu de 4.99
[Profiter de l'offre]
Cette offre est valable pendant 30 jours.
"""
Et l'offre est valable pendant 30 jours
Scénario: Activation de la réduction Premium Or
Étant donné que j'ai obtenu le badge Or
Et que j'ai reçu l'offre Premium -50%
Quand je clique sur "Profiter de l'offre" dans les 30 jours
Alors je souscris à Premium à 2.49/mois
Et la réduction est valable pour 3 mois
Et après 3 mois, le renouvellement passe à 4.99/mois
Et l'offre n'est pas cumulable avec l'offre annuelle
Scénario: Expiration de l'offre Premium après 30 jours
Étant donné que j'ai obtenu le badge Or il y a 31 jours
Et que je n'ai pas activé l'offre Premium -50%
Quand j'essaie d'activer l'offre
Alors l'offre a expiré
Et je vois le message "Votre offre Premium -50% a expiré"
Et mon badge Or est conservé (seule l'offre expire)
Et je ne peux plus bénéficier de la réduction
Scénario: Rappels avant expiration de l'offre
Étant donné que j'ai obtenu le badge Or
Et que je n'ai pas encore activé l'offre Premium
Quand il reste 7 jours avant l'expiration
Alors je reçois un email + push:
"""
Il vous reste 7 jours pour profiter de votre réduction Premium -50%
"""
Et quand il reste 1 jour, je reçois un dernier rappel:
"""
Dernière chance ! Votre réduction Premium -50% expire demain
"""
Scénario: Perte du badge Or pendant l'abonnement Premium
Étant donné que j'ai le badge Or et l'abonnement Premium -50% actif
Et que je perds le badge Or après un audit trimestriel
Quand mon abonnement arrive à échéance
Alors l'abonnement en cours reste actif jusqu'à sa fin normale
Mais le renouvellement se fait à prix normal 4.99/mois
Et je ne peux pas réobtenir l'offre -50% même si je récupère le badge Or
# 19.5 - Anti-abus
Scénario: Limite de 10 signalements par 24h
Étant donné que j'ai déjà envoyé 10 signalements aujourd'hui
Quand j'essaie d'envoyer un 11ème signalement
Alors le signalement est automatiquement rejeté
Et je vois le message:
"""
Limite quotidienne atteinte (10 signalements/24h).
Réessayez demain.
"""
Et une alerte modérateur automatique est déclenchée
Scénario: Détection de signalement massif suspect
Étant donné que j'ai envoyé 35 signalements cette semaine
Quand l'audit automatique hebdomadaire s'exécute
Alors mon compte est détecté comme suspect (>30/semaine)
Et une enquête manuelle modérateur est déclenchée
Et le modérateur peut révoquer mon badge si abus confirmé
Scénario: Patterns suspects détectés
Étant donné que le système analyse mes patterns de signalement
Quand des comportements suspects sont identifiés:
| pattern | seuil |
| Signalement massif | >30/semaine |
| Taux de pertinence très faible | <50% |
| Tous signalements rejetés sur 7 jours | 100% rejet |
| Signalements ciblant toujours même créateur | Harcèlement |
Alors une enquête manuelle est déclenchée
Et le modérateur examine les signalements en détail
Scénario: Audit trimestriel automatique des badges
Étant donné que le système effectue l'audit trimestriel
Quand mon badge est audité
Alors le système recalcule mon taux de pertinence sur 6 mois glissants
Et vérifie les critères:
| badge | taux minimum |
| Bronze | 70% |
| Argent | 80% |
| Or | 90% |
Et si mon taux est insuffisant, mon badge est révoqué
Scénario: Email de prévention 7 jours avant audit
Étant donné que l'audit trimestriel arrive dans 7 jours
Et que mon taux de pertinence est de 78%
Et que j'ai un badge Argent (minimum 80% requis)
Quand le système envoie les notifications préventives
Alors je reçois un email:
"""
Votre badge Contributeur Argent sera audité dans 7 jours.
Taux de pertinence actuel : 78%
Minimum requis : 80%
Continuez à signaler du contenu pertinent pour conserver votre badge !
"""
Et je suis informé à l'avance pour améliorer mes signalements
Scénario: Résultat d'audit - Badge conservé
Étant donné que l'audit trimestriel vient d'être effectué
Et que mon taux de pertinence est de 85%
Et que j'ai un badge Argent (minimum 80% requis)
Quand je reçois le résultat
Alors je reçois un email: "Badge conservé ✓"
Et mon badge reste actif pour 3 mois supplémentaires
Scénario: Résultat d'audit - Badge révoqué
Étant donné que l'audit trimestriel vient d'être effectué
Et que mon taux de pertinence est de 75%
Et que j'ai un badge Argent (minimum 80% requis)
Quand je reçois le résultat
Alors je reçois un email: "Badge révoqué ✗"
Et mon badge Argent est révoqué immédiatement
Mais je peux réobtenir un badge ultérieurement (pas de ban)
Scénario: Sanctions pour abus détecté - Mineur
Étant donné que j'ai envoyé >10 signalements/jour pendant 1 jour
Quand l'abus mineur est détecté
Alors je reçois un avertissement
Et ma limite est réduite à 5 signalements/jour pendant 7 jours
Et je reçois une notification explicative
Scénario: Sanctions pour abus détecté - Modéré
Étant donné que j'ai envoyé >30 signalements/semaine
Et que mon taux de pertinence est <50%
Quand l'abus modéré est confirmé
Alors tous mes badges sont révoqués
Et je suis interdit de signalement pendant 30 jours
Et je reçois une notification de sanction
Scénario: Sanctions pour abus détecté - Grave
Étant donné que j'ai participé à un farming coordonné de signalements
Quand l'abus grave est confirmé par modérateur
Alors je reçois un ban permanent de la fonctionnalité signalement
Et tous mes badges sont révoqués définitivement
Et il n'y a pas de recours possible pour farming confirmé
# ROI et justification
Scénario: ROI positif de la modération communautaire
Étant donné que 10 utilisateurs Or sont actifs
Quand on calcule le ROI
Alors chaque utilisateur Or économise 5-10h de modération/mois
Et cela représente 75-150 économisés par utilisateur (taux 15/h)
Et le total est de 750-1500 économisés/mois
Et le coût des réductions Premium est maximum 200/mois (50 utilisateurs Or)
Et le ROI est positif dès 2-3 utilisateurs Or actifs
Scénario: Coût total du système
Étant donné que le système de modération communautaire est en place
Quand on calcule le coût total
Alors en phase MVP, le coût est de 0
Et en phase Post-MVP avec réductions Premium, le coût est de 0-200/mois
Et le système est entièrement automatique (0 développement continu)
Et le ROI est largement positif

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,56 @@
# language: fr
@api @moderation @premium @rewards @mvp
Fonctionnalité: Réduction Premium pour badge Or
En tant qu'utilisateur avec badge Or
Je veux obtenir une réduction sur l'abonnement Premium
Afin d'être récompensé de ma contribution
Scénario: Réduction automatique à l'obtention du badge Or
Étant donné un utilisateur "alice@roadwave.fr" qui débloque le badge Or
Quand il consulte la page Premium
Alors une réduction de 20% est automatiquement appliquée
Et le prix passe de 4.99/mois à 3.99/mois
Et un événement "PREMIUM_DISCOUNT_GOLD_APPLIED" est enregistré
Scénario: Cumul avec autres réductions
Étant donné un utilisateur avec badge Or ET statut Trusted
Alors les réductions se cumulent:
| Réduction | Montant |
| Badge Or | -20% |
| Utilisateur confiance| -10% |
| Total | -30% |
Et le prix final: 4.99 - 30% = 3.49/mois
Et un événement "PREMIUM_DISCOUNTS_STACKED" est enregistré
Scénario: Badge Diamant - Premium gratuit à vie
Étant donné un utilisateur avec badge Diamant
Alors l'abonnement Premium est gratuit à vie
Et aucun paiement n'est requis
Et un badge spécial "Premium Lifetime" s'affiche
Et un événement "PREMIUM_LIFETIME_GRANTED" est enregistré
Scénario: Perte de la réduction si perte du badge
Étant donné un utilisateur avec badge Or et réduction active
Quand le badge Or est révoqué (précision < 70%)
Alors la réduction est supprimée au prochain renouvellement
Et l'utilisateur est notifié 7 jours à l'avance
Et un événement "PREMIUM_DISCOUNT_REVOKED" est enregistré
Scénario: Code promo automatique pour badge Or
Étant donné un utilisateur "bob@roadwave.fr" avec badge Or
Quand il s'abonne à Premium
Alors un code promo "GOLD20" est automatiquement appliqué
Et visible dans la facture
Et un événement "PREMIUM_PROMO_CODE_APPLIED" est enregistré
Scénario: Statistiques d'impact des réductions
Étant donné que 200 utilisateurs ont badge Or
Alors les métriques montrent:
| Métrique | Valeur |
| Utilisateurs avec réduction | 200 |
| Taux de conversion Premium (Or) | 45% |
| Taux de conversion Premium (standard)| 12% |
| Revenus générés malgré réduction | +35% |
Et les métriques sont exportées vers le monitoring

View File

@@ -0,0 +1,42 @@
# language: fr
@api @moderation @sanctions @mvp
Fonctionnalité: Sanctions progressives pour abus de signalement
En tant que plateforme
Je veux sanctionner les abus de signalement progressivement
Afin de dissuader le spam et les faux signalements
Scénario: Premier abus - Avertissement
Étant donné un utilisateur avec 3 faux signalements en 24h
Quand le 3ème est confirmé comme faux
Alors un avertissement est envoyé
Et un message explique les règles
Et un événement "ABUSE_WARNING_ISSUED" est enregistré
Scénario: Deuxième abus - Limitation temporaire
Étant donné un utilisateur avec 2ème série de faux signalements
Alors il est limité à 5 signalements par jour pendant 7 jours
Et un événement "ABUSE_LIMITED_REPORTING" est enregistré
Scénario: Troisième abus - Suspension 30 jours
Étant donné un utilisateur avec 3ème série d'abus
Alors il perd le droit de signaler pendant 30 jours
Et tous ses badges modération sont révoqués
Et un événement "ABUSE_SUSPENDED_30D" est enregistré
Scénario: Quatrième abus - Bannissement définitif
Étant donné un utilisateur avec 4ème série d'abus
Alors il est définitivement banni de la modération
Et ne peut jamais récupérer ce droit
Et un événement "ABUSE_PERMANENT_BAN" est enregistré
Scénario: Métriques de sanctions
Étant donné que 500 sanctions ont été appliquées
Alors les indicateurs suivants sont disponibles:
| Sanction | Nombre | % |
| Avertissements | 320 | 64% |
| Limitations | 120 | 24% |
| Suspensions 30j | 50 | 10% |
| Bannissements | 10 | 2% |
Et les métriques sont exportées vers le monitoring

View File

@@ -0,0 +1,43 @@
# language: fr
@api @moderation @copyright @sanctions @mvp
Fonctionnalité: Sanctions progressives pour violations droits d'auteur
En tant que plateforme
Je veux appliquer des sanctions progressives
Afin de dissuader les violations répétées
Scénario: Première infraction - Avertissement
Étant donné un créateur "alice@roadwave.fr" première infraction
Quand la violation est confirmée
Alors un avertissement formel est envoyé
Et le contenu est retiré
Et aucune sanction sur le compte
Et un événement "COPYRIGHT_WARNING_ISSUED" est enregistré
Scénario: Deuxième infraction - Suspension 7 jours
Étant donné un créateur avec 2ème infraction
Alors le compte est suspendu 7 jours
Et tous les contenus sont masqués temporairement
Et un événement "COPYRIGHT_SUSPENSION_7D" est enregistré
Scénario: Troisième infraction - Suspension 30 jours
Étant donné un créateur avec 3ème infraction
Alors le compte est suspendu 30 jours
Et perte de tous les badges
Et un événement "COPYRIGHT_SUSPENSION_30D" est enregistré
Scénario: Quatrième infraction - Bannissement définitif
Étant donné un créateur avec 4ème infraction
Alors le compte est définitivement banni
Et tous les contenus sont supprimés
Et l'email/IP sont blacklistés
Et un événement "COPYRIGHT_PERMANENT_BAN" est enregistré
Scénario: Réhabilitation après bonne conduite
Étant donné un créateur suspendu depuis 6 mois
Et aucune nouvelle infraction
Quand il demande une réhabilitation
Alors son historique peut être effacé
Et il repart avec un compteur à zéro
Et un événement "COPYRIGHT_REHABILITATION_GRANTED" est enregistré

View File

@@ -0,0 +1,352 @@
# 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 dans l'heure suivant la sanction
Alors l'email contient la structure exacte 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é.
📋 DÉTAILS DE LA SANCTION
Catégorie violée : 🚫 Haine & violence (Article 3.2 CGU)
Raison détaillée : Propos discriminatoires envers un groupe de personnes
🔊 PASSAGE PROBLÉMATIQUE
Timestamp : 3:42-4:15 (33 secondes)
Transcription : "[passage problématique surligné en rouge]"
SANCTION APPLIQUÉE
Strike actuel : 2/4
Conséquence : Suspension de votre compte pendant 7 jours
Date de fin : 22/01/2026
Que se passe-t-il ensuite ?
Strike 3 : Suspension 30 jours
Strike 4 : Ban définitif
📝 RECOURS
Vous pouvez contester cette décision sous 7 jours :
[Lien formulaire d'appel]
Cordialement,
L'équipe RoadWave
"""
Et l'email est envoyé via le service Brevo ou Resend
Et le coût d'envoi est d'environ 0.001 par email
Et l'email contient un lien direct vers le formulaire d'appel pré-rempli
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,82 @@
# language: fr
@api @moderation @scoring @mvp
Fonctionnalité: Score de fiabilité et priorisation des signalements
En tant que système de modération
Je veux prioriser les signalements selon la fiabilité du rapporteur
Afin d'optimiser le traitement par les modérateurs
Scénario: Calcul du score de fiabilité
Étant donné un utilisateur "alice@roadwave.fr" avec historique:
| Signalements totaux | Validés | Rejetés | Taux de précision |
| 50 | 48 | 2 | 96% |
Alors son score de fiabilité est: 96/100
Et un événement "RELIABILITY_SCORE_CALCULATED" est enregistré
Scénario: Priorisation haute pour utilisateurs fiables
Étant donné un utilisateur avec score 95+
Quand il fait un signalement
Alors le signalement est marqué "Priorité haute"
Et traité en < 2 heures
Et un événement "HIGH_PRIORITY_REPORT_QUEUED" est enregistré
Scénario: Priorisation normale pour nouveaux utilisateurs
Étant donné un nouvel utilisateur sans historique
Quand il fait un signalement
Alors le signalement est marqué "Priorité normale"
Et traité en < 24 heures
Et un événement "NORMAL_PRIORITY_REPORT_QUEUED" est enregistré
Scénario: Priorisation basse pour utilisateurs peu fiables
Étant donné un utilisateur avec score < 60
Quand il fait un signalement
Alors le signalement est marqué "Priorité basse"
Et traité en < 72 heures
Et nécessite une vérification renforcée
Et un événement "LOW_PRIORITY_REPORT_QUEUED" est enregistré
Scénario: Augmentation du score après signalements validés
Étant donné un utilisateur avec score 70
Quand 10 signalements consécutifs sont validés
Alors le score passe à 85
Et il monte de catégorie (basse normale)
Et un événement "RELIABILITY_SCORE_INCREASED" est enregistré
Scénario: Diminution du score après faux signalements
Étant donné un utilisateur avec score 90
Quand 5 signalements consécutifs sont rejetés
Alors le score passe à 75
Et il redescend de catégorie (haute normale)
Et un avertissement est envoyé
Et un événement "RELIABILITY_SCORE_DECREASED" est enregistré
Scénario: Réinitialisation du score après inactivité
Étant donné un utilisateur inactif pendant 6 mois
Quand il refait un signalement
Alors son score est réinitialisé à 50 (neutre)
Et il doit reconstruire sa réputation
Et un événement "RELIABILITY_SCORE_RESET" est enregistré
Scénario: Affichage du score dans le profil
Étant donné un utilisateur "bob@roadwave.fr"
Quand il consulte son profil
Alors il voit:
| Métrique | Valeur |
| Score de fiabilité | 87/100 |
| Signalements validés | 145 |
| Taux de précision | 87% |
| Catégorie | Haute |
Et un graphique d'évolution du score
Et un événement "RELIABILITY_SCORE_VIEWED" est enregistré
Scénario: Métriques de performance de la priorisation
Étant donné que 10 000 signalements ont été traités
Alors les indicateurs suivants sont disponibles:
| Métrique | Valeur |
| Temps moyen de traitement (haute) | 1.5h |
| Temps moyen de traitement (normale) | 18h |
| Temps moyen de traitement (basse) | 48h |
| Taux de validation (haute) | 92% |
| Taux de validation (basse) | 65% |
Et les métriques sont exportées vers le monitoring

View File

@@ -0,0 +1,53 @@
# language: fr
@api @moderation @copyright @mvp
Fonctionnalité: Signalement musique a posteriori
En tant qu'ayant-droit ou utilisateur
Je veux signaler une utilisation musicale non conforme
Afin de faire respecter les droits d'auteur
Scénario: Signalement par un ayant-droit
Étant donné un ayant-droit "Universal Music"
Quand il signale un contenu avec sa musique
Alors un formulaire DMCA est pré-rempli
Et le contenu est immédiatement suspendu (safe harbor)
Et le créateur est notifié
Et un événement "COPYRIGHT_CLAIM_FILED" est enregistré
Scénario: Vérification du signalement par modérateur
Étant donné un signalement reçu
Quand un modérateur l'examine
Alors il écoute le contenu
Et vérifie si fair use (< 30s)
Et prend une décision dans les 48h
Et un événement "COPYRIGHT_CLAIM_REVIEWED" est enregistré
Scénario: Contre-signalement du créateur
Étant donné un créateur "alice@roadwave.fr" dont le contenu est suspendu
Quand il fait un counter-claim avec preuve
Alors le dossier est transmis à l'ayant-droit
Et celui-ci a 14 jours pour répondre
Et un événement "COPYRIGHT_COUNTER_CLAIM_FILED" est enregistré
Scénario: Rétablissement du contenu si fair use validé
Étant donné un contenu suspendu
Quand le modérateur confirme le fair use
Alors le contenu est rétabli
Et le signalement est rejeté
Et le créateur est notifié
Et un événement "COPYRIGHT_CLAIM_REJECTED" est enregistré
Scénario: Sanctions pour abus de signalement
Étant donné un ayant-droit qui abuse des signalements
Quand 3 signalements consécutifs sont rejetés
Alors son compte est suspendu temporairement
Et un événement "COPYRIGHT_CLAIMANT_SUSPENDED" est enregistré
Scénario: Historique des signalements pour un créateur
Étant donné un créateur "bob@roadwave.fr"
Alors il voit ses signalements:
| Date | Ayant-droit | Statut | Issue |
| 2026-02-01 | Sony Music | Résolu | Fair use OK|
| 2026-01-10 | Warner | Confirmé | Contenu retiré|
Et un événement "COPYRIGHT_HISTORY_VIEWED" est enregistré

View File

@@ -0,0 +1,225 @@
# 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é (voir Section 18) |
| 📧 | 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
Et la catégorie "Droits d'auteur" renvoie vers les règles détaillées de détection automatique
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,270 @@
# 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 précis:
| timestamp | durée | texte problématique | score confiance |
| 02:15 | 12s | [insulte discriminatoire] | 97% |
| 03:42 | 18s | [propos haineux] | 95% |
Et chaque passage problématique a un timestamp de début et de fin
Et le signalement est classé en priorité CRITIQUE
Et les timestamps sont utilisés pour générer les marqueurs audio dans le dashboard modérateur
# 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

View File

@@ -0,0 +1,63 @@
# language: fr
@api @moderation @trust @mvp
Fonctionnalité: Statut utilisateur de confiance
En tant qu'utilisateur méritant
Je veux obtenir le statut "Utilisateur de confiance"
Afin de bénéficier de privilèges et reconnaissance
Scénario: Critères d'obtention du statut
Étant donné un utilisateur "alice@roadwave.fr" qui remplit:
| Critère | Requis | Actuel |
| Compte actif depuis | 6 mois | 8 mois |
| Signalements validés | 100 | 150 |
| Taux de précision | 90% | 94% |
| Badge modération | Or | Or |
| Aucune sanction | Oui | Oui |
Quand les critères sont remplis
Alors le statut "Utilisateur de confiance" est accordé
Et un événement "TRUSTED_USER_STATUS_GRANTED" est enregistré
Scénario: Privilèges de l'utilisateur de confiance
Étant donné un utilisateur de confiance
Alors il bénéficie de:
| Privilège | Détail |
| Signalements traités en priorité | < 1h au lieu de 24h |
| Modération de commentaires | Peut masquer spam/haine |
| Badge profil "Trusted" | Visible publiquement |
| Réduction Premium -20% | Sur abonnement annuel |
| Accès beta features | Nouvelles fonctionnalités |
Et un événement "TRUSTED_USER_PRIVILEGES_DISPLAYED" est enregistré
Scénario: Badge "Trusted" visible sur le profil
Étant donné un utilisateur de confiance
Quand son profil est consulté
Alors un badge bleu " Utilisateur de confiance" s'affiche
Et une tooltip explique le statut
Et un événement "TRUSTED_BADGE_DISPLAYED" est enregistré
Scénario: Révocation du statut pour inactivité
Étant donné un utilisateur de confiance inactif 6 mois
Quand le système vérifie les statuts
Alors le statut est révoqué automatiquement
Et l'utilisateur est notifié
Et peut le retrouver en redevenant actif
Et un événement "TRUSTED_STATUS_REVOKED_INACTIVITY" est enregistré
Scénario: Révocation du statut pour baisse de précision
Étant donné un utilisateur de confiance
Quand son taux de précision passe < 85%
Alors le statut est révoqué temporairement
Et il doit retrouver 90% pour le récupérer
Et un événement "TRUSTED_STATUS_REVOKED_LOW_ACCURACY" est enregistré
Scénario: Statistiques des utilisateurs de confiance
Étant donné que 500 utilisateurs ont le statut
Alors les indicateurs suivants sont disponibles:
| Métrique | Valeur |
| Nombre d'utilisateurs de confiance| 500 |
| % de la base utilisateurs | 0.5% |
| Temps moyen pour obtenir statut | 8 mois |
| Taux de rétention du statut | 92% |
Et les métriques sont exportées vers le monitoring