Files
roadwave/docs/domains/advertising/features/publicites/metriques-engagement-pub.feature
jpgiannetti 5e5fcf4714 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.
2026-02-07 17:15:02 +01:00

300 lines
12 KiB
Gherkin
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# language: fr
Fonctionnalité: Métriques d'engagement et dashboard publicitaire
En tant que publicitaire
Je veux consulter des métriques détaillées en temps réel
Afin d'optimiser mes campagnes et mesurer leur ROI
Contexte:
Étant donné que l'API RoadWave est disponible
Et qu'un compte publicitaire est connecté
Et qu'une campagne active est en cours
Scénario: Dashboard temps réel avec métriques essentielles
Étant donné que ma campagne a généré 1000 diffusions
Quand je consulte le dashboard
Alors je vois les métriques suivantes mises à jour en temps réel:
| Métrique | Valeur |
| Impressions | 1000 |
| Écoutes complètes (>80%)| 400 |
| Taux d'écoute complète | 40% |
| Taux de skip | 60% |
| Durée moyenne d'écoute | 18s |
| Likes | 25 |
| Abonnements | 5 |
| Coût par écoute | 0.05 |
Scénario: Calcul impressions totales
Étant donné que ma publicité a été diffusée 2500 fois
Quand je consulte le dashboard
Alors le compteur "Impressions" affiche 2500
Et il s'incrémente en temps réel à chaque nouvelle diffusion
Scénario: Calcul écoutes complètes (>80%)
Étant donné que ma publicité de 30s a été:
| Durée écoutée | Nombre |
| 25s (83%) | 300 |
| 20s (67%) | 200 |
| 10s (33%) | 150 |
| 5s (17%) | 50 |
Quand je consulte les écoutes complètes
Alors le compteur affiche 300 (uniquement 80%)
Et le taux d'écoute complète est de 43% (300/700)
Scénario: Calcul taux de skip
Étant donné 1000 diffusions totales
Et 400 écoutes complètes
Quand je consulte le taux de skip
Alors il affiche 60% ((1000-400)/1000)
Et il est calculé comme (total - complètes) / total
Scénario: Durée moyenne d'écoute calculée
Étant donné que ma publicité de 30s a été écoutée:
| Durée | Nombre d'utilisateurs |
| 30s | 400 |
| 20s | 300 |
| 10s | 200 |
| 5s | 100 |
Quand je consulte la durée moyenne
Alors le calcul est: (30×400 + 20×300 + 10×200 + 5×100) / 1000
Et le résultat affiché est 21s
Scénario: Métriques de likes sur publicité
Étant donné que 50 utilisateurs ont liké ma publicité
Quand je consulte le dashboard
Alors le compteur "Likes" affiche 50
Et un taux de like de 5% est calculé (50/1000 impressions)
Et cela indique une forte appréciation du contenu
Scénario: Métriques d'abonnements générés
Étant donné que 10 utilisateurs se sont abonnés après avoir entendu ma pub
Quand je consulte le dashboard
Alors le compteur "Abonnements" affiche 10
Et un taux de conversion de 1% est calculé (10/1000)
Et cela représente un engagement très fort
Scénario: Calcul coût par écoute (CPE)
Étant donné que j'ai dépensé 200
Et obtenu 4000 écoutes complètes
Quand je consulte le coût par écoute
Alors le CPE affiché est 0.05 (200/4000)
Et il correspond au tarif standard RoadWave
Scénario: Répartition géographique avec heatmap
Étant donné que ma campagne cible le département du Var
Et que j'ai 1000 diffusions réparties:
| Zone | Diffusions | Pourcentage |
| Toulon | 400 | 40% |
| Hyères | 250 | 25% |
| Fréjus | 200 | 20% |
| Autres | 150 | 15% |
Quand je consulte la heatmap géographique
Alors une carte Leaflet affiche les zones avec intensité proportionnelle
Et Toulon apparaît en rouge foncé (forte concentration)
Et les autres villes en dégradé orange/jaune
Scénario: Répartition horaire avec graphique
Étant donné que ma campagne cible les plages 7h-9h et 17h-19h
Et que j'ai 1000 diffusions:
| Plage horaire | Diffusions |
| 7h-8h | 300 |
| 8h-9h | 250 |
| 17h-18h | 280 |
| 18h-19h | 170 |
Quand je consulte le graphique horaire
Alors un histogramme Chart.js affiche les 4 barres
Et je peux identifier que 7h-8h est le pic d'écoute
Et optimiser mes futures campagnes sur cette plage
Scénario: Taux de complétion par tranche d'âge
Étant donné que ma campagne est Tout Public
Et que j'ai des écoutes sur différentes tranches:
| Tranche d'âge | Écoutes complètes | Total diffusions | Taux |
| 18-24 ans | 120 | 400 | 30% |
| 25-34 ans | 200 | 400 | 50% |
| 35-44 ans | 80 | 200 | 40% |
Quand je consulte l'analyse par âge
Alors je vois que les 25-34 ans ont le meilleur taux (50%)
Et je peux cibler cette tranche pour mes prochaines campagnes
Scénario: Comparatif de campagnes A/B testing
Étant donné que j'ai 2 campagnes actives:
| Campagne | Budget | Écoutes complètes | Taux | CPE |
| A | 300 | 4000 | 40% | 0.075|
| B | 300 | 6000 | 60% | 0.05 |
Quand je consulte le comparatif
Alors je vois que la campagne B performe mieux
Et le tableau recommande "Campagne B: +50% écoutes, -33% CPE"
Et je peux allouer plus de budget à la campagne B
Scénario: Export données CSV pour analyse externe
Étant donné que je veux analyser mes données dans Excel
Quand je clique sur "Exporter CSV"
Alors je télécharge un fichier avec les colonnes:
| Colonne |
| Date |
| Heure |
| Zone géographique |
| Tranche d'âge |
| Durée écoute |
| Skip (Oui/Non) |
| Like (Oui/Non) |
| Abonnement (Oui/Non) |
Et je peux faire des analyses personnalisées
Scénario: Export graphiques interactifs
Étant donné que je consulte le dashboard
Quand je clique sur un graphique Chart.js
Alors je peux zoomer/filtrer interactivement
Et je peux exporter le graphique en PNG
Et l'image est en haute résolution pour présentations
Scénario: Rapport PDF automatique fin de campagne
Étant donné que ma campagne de 14 jours se termine
Quand la date de fin est atteinte
Alors un rapport PDF est généré automatiquement
Et il contient:
| Section |
| Résumé exécutif |
| Métriques clés |
| Graphiques de performance |
| Heatmap géographique |
| Répartition horaire |
| Analyse tranches d'âge |
| Recommandations optimisation |
Et je reçois un email avec le PDF en pièce jointe
Scénario: Métriques temps réel rafraîchies automatiquement
Étant donné que je consulte le dashboard à 10h00
Quand une nouvelle diffusion se produit à 10h01
Alors les métriques sont rafraîchies automatiquement (polling 30s)
Et je vois les nouveaux chiffres sans recharger la page
Et un badge "Mis à jour il y a 15s" s'affiche
Scénario: Alertes performance personnalisées
Étant donné que je configure une alerte "Taux de skip >70%"
Et que ma campagne atteint 72% de skip
Quand le seuil est dépassé
Alors je reçois un email d'alerte:
"""
Alerte Performance - Taux de skip élevé
Votre campagne a un taux de skip de 72%.
Recommandations:
- Réduire la durée de la publicité
- Améliorer l'accroche des 5 premières secondes
- Vérifier le ciblage (audience pertinente?)
"""
Scénario: Benchmark vs moyennes RoadWave
Étant donné que ma campagne a 45% d'écoutes complètes
Quand je consulte le benchmark
Alors je vois "Votre taux: 45% | Moyenne RoadWave: 40%"
Et un badge "📊 Performance: +12% vs moyenne" s'affiche
Et je sais que ma campagne performe au-dessus de la moyenne
Scénario: Coût total consommé vs budget
Étant donné que j'ai un budget de 300
Et que j'ai consommé 220
Quand je consulte le dashboard
Alors je vois une jauge "Budget consommé: 73%" (220/300)
Et le montant restant "80 restants"
Et une projection "Épuisé dans 3 jours à ce rythme"
Scénario: Répartition coûts par type d'écoute
Étant donné que j'ai dépensé 200 avec:
| Type d'écoute | Nombre | Coût unitaire | Total |
| Écoute complète | 3000 | 0.05 | 150 |
| Skip après 5s | 2000 | 0.02 | 40 |
| Skip immédiat | 500 | 0 | 0 |
Quand je consulte la répartition
Alors un graphique camembert affiche:
| Segment | Pourcentage |
| Écoutes complètes | 75% (150) |
| Skips partiels | 20% (40) |
| Skips immédiats | 5% (0) |
Scénario: Évolution performance dans le temps
Étant donné une campagne de 30 jours
Quand je consulte le graphique d'évolution
Alors je vois une courbe Chart.js avec:
| Axe | Donnée |
| X | Jours (1-30) |
| Y | Taux d'écoute complète (%) |
Et je peux identifier les tendances (amélioration/dégradation)
Et les jours avec pics d'engagement
Scénario: Métriques avancées - Taux de réécoute
Étant donné qu'un utilisateur a entendu ma pub 3 fois
Et qu'il l'a écoutée complètement les 3 fois
Quand je consulte les métriques avancées
Alors le "Taux de réécoute" affiche 100%
Et cela indique que le contenu n'est pas perçu comme spam
Et les utilisateurs tolèrent bien la répétition
Scénario: Recommandations automatiques d'optimisation
Étant donné que ma campagne a un taux de skip de 75%
Et que la durée moyenne d'écoute est de 8s sur 30s
Quand je consulte les recommandations
Alors le système suggère:
"""
🔍 Analyse de votre campagne
Problème identifié: Perte d'attention après 8 secondes
Recommandations:
1. Placer votre message clé dans les 5 premières secondes
2. Réduire la durée totale à 15-20 secondes
3. Ajouter un appel à l'action plus tôt
4. Tester un nouveau créatif avec accroche différente
"""
Scénario: Suivi multi-campagnes avec vue consolidée
Étant donné que j'ai 3 campagnes actives simultanément
Quand je consulte la vue consolidée
Alors je vois un tableau récapitulatif:
| Campagne | Budget | Dépensé | Diffusions | Taux complète | CPE |
| A | 300 | 220 | 4000 | 40% | 0.05 |
| B | 500 | 150 | 3000 | 60% | 0.05 |
| C | 200 | 180 | 3600 | 35% | 0.05 |
Et je peux comparer les performances d'un coup d'œil
Plan du Scénario: Calcul taux d'écoute complète
Étant donné <total> diffusions totales
Et <completes> écoutes complètes (80%)
Quand je calcule le taux
Alors le résultat est <taux>%
Exemples:
| total | completes | taux |
| 1000 | 400 | 40 |
| 2000 | 1200 | 60 |
| 500 | 100 | 20 |
| 1000 | 850 | 85 |
Plan du Scénario: Calcul coût par écoute (CPE)
Étant donné un budget dépensé de <depense>
Et <ecoutes> écoutes complètes
Quand je calcule le CPE
Alors le résultat est <cpe>
Exemples:
| depense | ecoutes | cpe |
| 100 | 2000 | 0.05 |
| 300 | 6000 | 0.05 |
| 50 | 1000 | 0.05 |
| 500 | 10000 | 0.05 |
Plan du Scénario: Classification performance vs benchmark
Étant donné un taux d'écoute complète de <taux>%
Et une moyenne RoadWave de 40%
Quand je compare à la moyenne
Alors la performance est <classification>
Exemples:
| taux | classification |
| 60 | Excellente (+50%) |
| 50 | Bonne (+25%) |
| 40 | Moyenne |
| 30 | Faible (-25%) |
| 20 | Très faible (-50%)|