feat(bdd): réorganiser features en catégories api/ui/e2e et créer ADR-024
Résolution des incohérences #10, #11, et #12 de l'analyse d'architecture. ## Phase 1 : Réorganisation Features BDD (Point #10 - RÉSOLU) - Créer structure features/{api,ui,e2e} - Déplacer 83 features en 3 catégories via git mv (historique préservé) - features/api/ : 53 features (tests API backend) - features/ui/ : 22 features (tests UI mobile) - features/e2e/ : 8 features (tests end-to-end) Domaines déplacés : - API : authentication, recommendation, rgpd-compliance, content-creation, moderation, monetisation, premium, radio-live, publicites - UI : audio-guides, navigation, interest-gauges, mode-offline, partage, profil, recherche - E2E : abonnements, error-handling ## Phase 2 : Mise à jour Documentation ### ADR-007 - Tests BDD - Ajouter section "Convention de Catégorisation des Features" - Documenter règles api/ui/e2e avec exemples concrets - Spécifier step definitions (backend Go, mobile Dart) ### ADR-024 - Stratégie CI/CD Monorepo (NOUVEAU) - Créer ADR dédié pour stratégie CI/CD avec path filters - Architecture workflows séparés (backend.yml, mobile.yml, shared.yml) - Configuration path filters détaillée avec exemples YAML - Matrice de déclenchement et optimisations (~70% gain temps CI) - Plan d'implémentation (~2h, reporté jusqu'au développement) ### ADR-016 - Organisation Monorepo - Simplifier en retirant section CI/CD détaillée - Ajouter référence vers ADR-024 pour stratégie CI/CD ### INCONSISTENCIES-ANALYSIS.md - Point #10 (Tests BDD synchronisés) : ✅ RÉSOLU - Catégorisation features implémentée - ADR-007 mis à jour avec convention complète - Point #11 (70/30 Split paiements) : ✅ ANNULÉ (faux problème) - ADR-009 et Règle 18 parfaitement cohérents - Documentation exhaustive existante (formule, SQL, comparaisons) - Point #12 (Monorepo path filters) : ⏸️ DOCUMENTÉ - Architecture CI/CD complète dans ADR-024 - Implémentation reportée (projet en phase documentation) - Métriques mises à jour : - MODERATE : 6/9 traités (4 résolus + 1 annulé + 1 documenté) - ADR à jour : 100% (19/19 avec ADR-024) ## Phase 3 : Validation - Structure features validée (api/ui/e2e, aucun répertoire restant) - Historique Git préservé (git mv, renommages détectés) - 83 features total (API: 53, UI: 22, E2E: 8) Closes: Point #10 (résolu), Point #11 (annulé), Point #12 (documenté) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
261
features/api/publicites/validation-moderation-pub.feature
Normal file
261
features/api/publicites/validation-moderation-pub.feature
Normal file
@@ -0,0 +1,261 @@
|
||||
# language: fr
|
||||
Fonctionnalité: Validation et modération des publicités
|
||||
En tant que modérateur RoadWave
|
||||
Je veux valider manuellement toutes les publicités avant diffusion
|
||||
Afin de garantir la qualité et la légalité des contenus publicitaires
|
||||
|
||||
Contexte:
|
||||
Étant donné que l'API RoadWave est disponible
|
||||
Et qu'un modérateur RoadWave est connecté
|
||||
|
||||
Scénario: Validation manuelle obligatoire avant diffusion
|
||||
Étant donné qu'un publicitaire a créé une campagne
|
||||
Et que le paiement de 300€ a été effectué
|
||||
Quand la campagne est soumise
|
||||
Alors elle passe en statut "En attente de validation"
|
||||
Et elle est ajoutée à la file d'attente des modérateurs
|
||||
Et la diffusion ne démarre PAS avant validation manuelle
|
||||
Et le publicitaire reçoit un email "Votre campagne est en cours de validation (24-48h)"
|
||||
|
||||
Scénario: Délai de validation 24-48h ouvrées
|
||||
Étant donné qu'une campagne est soumise le lundi 10h
|
||||
Quand le modérateur la valide le mardi 15h
|
||||
Alors le délai est de 29h (dans les 48h ouvrées)
|
||||
Et le publicitaire reçoit une notification "Votre campagne est approuvée"
|
||||
|
||||
Scénario: Validation dépassant 48h avec notification
|
||||
Étant donné qu'une campagne est soumise le lundi 10h
|
||||
Quand 48h ouvrées se sont écoulées
|
||||
Et que la campagne n'est toujours pas validée
|
||||
Alors le publicitaire reçoit un email automatique:
|
||||
"""
|
||||
Validation en cours - Délai prolongé
|
||||
|
||||
Votre campagne nécessite une analyse approfondie.
|
||||
Nous vous contacterons sous 24h supplémentaires.
|
||||
"""
|
||||
Et un modérateur senior est assigné automatiquement
|
||||
|
||||
Scénario: Acceptation de campagne publicitaire
|
||||
Étant donné qu'une campagne est en attente de validation
|
||||
Et que l'audio respecte toutes les règles
|
||||
Quand le modérateur clique sur "Approuver"
|
||||
Alors le statut passe à "Approuvée"
|
||||
Et la campagne démarre à la date programmée
|
||||
Et le publicitaire reçoit un email de confirmation
|
||||
Et le budget commence à être consommé dès le début
|
||||
|
||||
Scénario: Refus de campagne avec motif détaillé
|
||||
Étant donné qu'une campagne contient du contenu alcool
|
||||
Quand le modérateur clique sur "Refuser"
|
||||
Et qu'il sélectionne le motif "Contenu interdit: Alcool"
|
||||
Et qu'il ajoute le commentaire "La publicité pour l'alcool est interdite en France"
|
||||
Alors le statut passe à "Refusée"
|
||||
Et le publicitaire reçoit un email détaillé avec:
|
||||
| Champ | Valeur |
|
||||
| Motif | Contenu interdit: Alcool |
|
||||
| Commentaire | La publicité pour l'alcool est interdite en France |
|
||||
| Action requise | Modifier votre contenu et soumettre à nouveau |
|
||||
Et un remboursement automatique de 300€ est déclenché
|
||||
|
||||
Scénario: Remboursement automatique après refus
|
||||
Étant donné qu'une campagne à 500€ est refusée
|
||||
Quand le statut passe à "Refusée"
|
||||
Alors un remboursement Mangopay de 500€ est initié automatiquement
|
||||
Et le délai de remboursement est de 5-7 jours ouvrés
|
||||
Et le publicitaire reçoit un email "Remboursement en cours"
|
||||
|
||||
Scénario: Contenus interdits - Alcool
|
||||
Étant donné qu'une publicité mentionne "Whisky premium 40°"
|
||||
Quand le modérateur écoute l'audio
|
||||
Alors il doit refuser la campagne
|
||||
Et sélectionner le motif "Contenu interdit: Alcool"
|
||||
Car la publicité pour l'alcool est interdite en France
|
||||
|
||||
Scénario: Contenus interdits - Tabac
|
||||
Étant donné qu'une publicité mentionne "Cigarettes électroniques"
|
||||
Quand le modérateur écoute l'audio
|
||||
Alors il doit refuser la campagne
|
||||
Et sélectionner le motif "Contenu interdit: Tabac/Vape"
|
||||
Car la publicité pour le tabac et dérivés est interdite
|
||||
|
||||
Scénario: Contenus interdits - Jeux d'argent
|
||||
Étant donné qu'une publicité mentionne "Gagnez 10 000€ - Paris sportifs"
|
||||
Quand le modérateur écoute l'audio
|
||||
Alors il doit refuser la campagne
|
||||
Et sélectionner le motif "Contenu interdit: Jeux d'argent"
|
||||
Car la publicité pour les jeux d'argent est soumise à régulation stricte
|
||||
|
||||
Scénario: Contenus interdits - Politique pendant campagne électorale
|
||||
Étant donné qu'une publicité politique est soumise
|
||||
Et que nous sommes en période de campagne électorale officielle
|
||||
Quand le modérateur écoute l'audio
|
||||
Alors il doit refuser la campagne
|
||||
Et sélectionner le motif "Contenu interdit: Publicité politique (période électorale)"
|
||||
|
||||
Scénario: Contenus interdits - Contenu sexuel
|
||||
Étant donné qu'une publicité contient des propos sexuellement explicites
|
||||
Quand le modérateur écoute l'audio
|
||||
Alors il doit refuser la campagne
|
||||
Et sélectionner le motif "Contenu interdit: Contenu sexuel"
|
||||
|
||||
Scénario: Contenus interdits - Violence
|
||||
Étant donné qu'une publicité contient des descriptions violentes
|
||||
Quand le modérateur écoute l'audio
|
||||
Alors il doit refuser la campagne
|
||||
Et sélectionner le motif "Contenu interdit: Violence"
|
||||
|
||||
Scénario: Contenu légal autorisé - Commerce local
|
||||
Étant donné qu'une publicité pour un restaurant local dit "Découvrez notre menu du jour"
|
||||
Quand le modérateur écoute l'audio
|
||||
Alors il doit approuver la campagne
|
||||
Car le contenu est légal et conforme
|
||||
|
||||
Scénario: Contenu légal autorisé - Service professionnel
|
||||
Étant donné qu'une publicité pour un garage dit "Révision complète à partir de 99€"
|
||||
Quand le modérateur écoute l'audio
|
||||
Alors il doit approuver la campagne
|
||||
Car le contenu est légal et informatif
|
||||
|
||||
Scénario: Critères de validation - Qualité audio
|
||||
Étant donné qu'une publicité a une qualité audio très basse (bruits, saturation)
|
||||
Quand le modérateur écoute l'audio
|
||||
Alors il peut refuser avec le motif "Qualité audio insuffisante"
|
||||
Et recommander "Veuillez soumettre un fichier audio de meilleure qualité"
|
||||
|
||||
Scénario: Critères de validation - Classification d'âge correcte
|
||||
Étant donné qu'une publicité contient du langage familier
|
||||
Et qu'elle est classée "Tout public"
|
||||
Quand le modérateur écoute l'audio
|
||||
Alors il peut refuser avec le motif "Classification d'âge incorrecte"
|
||||
Et recommander "Reclasser en 13+ minimum"
|
||||
|
||||
Scénario: Critères de validation - Respect réglementation française
|
||||
Étant donné qu'une publicité fait des promesses mensongères "Perdez 10kg en 1 semaine"
|
||||
Quand le modérateur écoute l'audio
|
||||
Alors il doit refuser avec le motif "Non-conformité réglementaire: Publicité mensongère"
|
||||
Car cela viole la réglementation sur la publicité trompeuse
|
||||
|
||||
Scénario: File d'attente modération priorisée
|
||||
Étant donné que 10 campagnes sont en attente de validation
|
||||
Et que la campagne A a été soumise il y a 40h
|
||||
Et que la campagne B a été soumise il y a 2h
|
||||
Quand le modérateur consulte sa file
|
||||
Alors la campagne A apparaît en premier (priorité temporelle)
|
||||
Et un badge "Urgente - >40h" est affiché
|
||||
|
||||
Scénario: Dashboard modération - Vue d'ensemble
|
||||
Étant donné que je suis modérateur
|
||||
Quand j'accède au dashboard modération publicités
|
||||
Alors je vois:
|
||||
| Métrique | Exemple valeur |
|
||||
| Campagnes en attente | 5 |
|
||||
| Délai moyen de validation | 28h |
|
||||
| Campagnes validées aujourd'hui | 12 |
|
||||
| Campagnes refusées aujourd'hui | 3 |
|
||||
| Taux d'acceptation | 80% |
|
||||
|
||||
Scénario: Transcription automatique pour aide modération
|
||||
Étant donné qu'une publicité audio est soumise
|
||||
Quand le système traite l'audio
|
||||
Alors une transcription automatique est générée via Whisper
|
||||
Et elle est affichée au modérateur pour faciliter la revue
|
||||
Et elle permet une recherche par mots-clés (alcool, tabac, etc.)
|
||||
|
||||
Scénario: Détection automatique mots-clés interdits
|
||||
Étant donné qu'une publicité audio est soumise
|
||||
Quand la transcription contient "whisky" ou "vodka"
|
||||
Alors un flag automatique "⚠️ Alcool détecté" est ajouté
|
||||
Et la campagne est priorisée pour validation manuelle rapide
|
||||
Et le modérateur est alerté du contenu potentiellement interdit
|
||||
|
||||
Scénario: Historique modération publicitaire
|
||||
Étant donné qu'un publicitaire a eu 2 campagnes refusées
|
||||
Quand il soumet une 3ème campagne
|
||||
Alors le modérateur voit l'historique:
|
||||
| Date | Statut | Motif |
|
||||
| 2026-01-15 | Refusée | Contenu interdit: Alcool |
|
||||
| 2026-01-20 | Refusée | Qualité audio faible |
|
||||
Et il peut en tenir compte dans sa décision
|
||||
|
||||
Scénario: Appel possible après refus
|
||||
Étant donné que ma campagne a été refusée pour "Classification incorrecte"
|
||||
Quand je conteste la décision via le formulaire d'appel
|
||||
Alors un modérateur senior revoit la campagne
|
||||
Et il peut approuver si la classification est en fait correcte
|
||||
Et le délai de réponse est de 48-72h
|
||||
|
||||
Scénario: Notification temps réel pour modérateurs
|
||||
Étant donné que je suis modérateur connecté
|
||||
Quand une nouvelle campagne est soumise
|
||||
Alors je reçois une notification in-app
|
||||
Et le compteur "Campagnes en attente" s'incrémente en temps réel
|
||||
Et je peux cliquer pour consulter immédiatement
|
||||
|
||||
Scénario: Statistiques conformité par catégorie
|
||||
Étant donné que je suis admin modération
|
||||
Quand je consulte les statistiques mensuelles
|
||||
Alors je vois les motifs de refus:
|
||||
| Motif | Nombre | Pourcentage |
|
||||
| Alcool | 15 | 30% |
|
||||
| Qualité audio | 12 | 24% |
|
||||
| Classification erronée | 10 | 20% |
|
||||
| Publicité mensongère | 8 | 16% |
|
||||
| Autres | 5 | 10% |
|
||||
|
||||
Scénario: Export rapport modération
|
||||
Étant donné que je suis modérateur senior
|
||||
Quand j'exporte le rapport mensuel
|
||||
Alors je reçois un fichier CSV avec:
|
||||
| Colonne |
|
||||
| Campagne ID |
|
||||
| Publicitaire |
|
||||
| Date soumission |
|
||||
| Date décision |
|
||||
| Statut |
|
||||
| Motif (si refus) |
|
||||
| Modérateur |
|
||||
Et je peux l'analyser dans Excel
|
||||
|
||||
Scénario: Validation partielle avec demande modification
|
||||
Étant donné qu'une campagne a un contenu acceptable
|
||||
Mais que la classification d'âge est incorrecte
|
||||
Quand le modérateur clique sur "Demander modification"
|
||||
Alors le publicitaire reçoit un email:
|
||||
"""
|
||||
Modification requise
|
||||
|
||||
Votre campagne nécessite un ajustement:
|
||||
- Reclasser de "Tout public" à "13+"
|
||||
|
||||
Veuillez modifier et soumettre à nouveau.
|
||||
Budget conservé, pas de remboursement.
|
||||
"""
|
||||
Et le statut devient "Modification requise"
|
||||
Et le publicitaire peut modifier sans repayer
|
||||
|
||||
Plan du Scénario: Contenus interdits automatiquement détectés
|
||||
Étant donné qu'une publicité contient le mot <mot_cle>
|
||||
Quand la transcription automatique est analysée
|
||||
Alors un flag <flag> est ajouté
|
||||
Et le motif de refus suggéré est <motif>
|
||||
|
||||
Exemples:
|
||||
| mot_cle | flag | motif |
|
||||
| whisky | ⚠️ Alcool | Contenu interdit: Alcool |
|
||||
| vodka | ⚠️ Alcool | Contenu interdit: Alcool |
|
||||
| cigarette | ⚠️ Tabac | Contenu interdit: Tabac |
|
||||
| casino | ⚠️ Jeux argent | Contenu interdit: Jeux |
|
||||
| paris sportifs | ⚠️ Jeux argent | Contenu interdit: Jeux |
|
||||
|
||||
Plan du Scénario: Délais de validation selon soumission
|
||||
Étant donné qu'une campagne est soumise <jour> à <heure>
|
||||
Quand elle est validée <delai> heures plus tard
|
||||
Alors le statut est <conformite>
|
||||
|
||||
Exemples:
|
||||
| jour | heure | delai | conformite |
|
||||
| Lundi | 10h | 24 | Dans les délais (24h) |
|
||||
| Lundi | 10h | 48 | Dans les délais (48h) |
|
||||
| Lundi | 10h | 50 | Hors délais (>48h) |
|
||||
| Vendredi| 16h | 72 | Dans les délais (we) |
|
||||
Reference in New Issue
Block a user