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:
299
features/api/publicites/metriques-engagement-pub.feature
Normal file
299
features/api/publicites/metriques-engagement-pub.feature
Normal file
@@ -0,0 +1,299 @@
|
||||
# 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%)|
|
||||
Reference in New Issue
Block a user