Files
roadwave/features/api/publicites/validation-moderation-pub.feature
jpgiannetti 37c62206ad 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>
2026-02-01 11:31:41 +01:00

262 lines
12 KiB
Gherkin
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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) |