Files
roadwave/features/api/publicites/gestion-budget-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

362 lines
14 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é: Gestion du budget et alertes publicitaires
En tant que publicitaire
Je veux suivre en temps réel mon budget et recevoir des alertes
Afin de maîtriser mes dépenses et optimiser mes campagnes
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 budget temps réel
Étant donné que ma campagne a un budget de 300
Et que j'ai consommé 220
Quand je consulte le dashboard budget
Alors je vois:
| Métrique | Valeur |
| Budget total | 300 |
| Budget consommé | 220 |
| Budget restant | 80 |
| Pourcentage | 73% consommé |
Scénario: Jauge visuelle budget consommé
Étant donné que j'ai consommé 220 sur 300
Quand je consulte le dashboard
Alors une jauge de progression affiche 73%
Et la couleur est orange (seuil 50-80%)
Et un indicateur "80 restants" est affiché clairement
Scénario: Couleur jauge selon seuil
Étant donné un budget de 300
Quand j'ai consommé 150 (50%)
Alors la jauge est verte
Quand j'ai consommé 240 (80%)
Alors la jauge est orange
Quand j'ai consommé 285 (95%)
Alors la jauge est rouge
Et un message "Budget presque épuisé" s'affiche
Scénario: Projection épuisement budget
Étant donné que j'ai consommé 220 en 10 jours
Et qu'il reste 4 jours de campagne
Quand le système calcule la projection
Alors la consommation quotidienne moyenne est 22/jour
Et la projection affiche "Budget épuisé dans 3.6 jours"
Et un avertissement "Campagne s'arrêtera avant la fin prévue" s'affiche
Scénario: Projection avec budget suffisant
Étant donné que j'ai consommé 100 en 10 jours
Et qu'il reste 4 jours de campagne
Et que le budget total est 300
Quand le système calcule la projection
Alors la consommation quotidienne moyenne est 10/jour
Et la projection affiche "Budget suffisant pour toute la campagne"
Et le budget restant estimé à la fin est 160
Scénario: Alerte 80% budget consommé
Étant donné que mon budget est de 300
Quand je consomme 240 (80%)
Alors je reçois immédiatement un email:
"""
Alerte Budget - 80% consommé
Campagne: [Nom]
Budget consommé: 240 / 300
Budget restant: 60
À ce rythme, votre budget sera épuisé dans X jours.
Recommandation: Envisagez une recharge pour maintenir la diffusion.
"""
Et une notification push est envoyée
Et une notification in-app s'affiche
Scénario: Alerte 90% budget consommé
Étant donné que mon budget est de 300
Quand je consomme 270 (90%)
Alors je reçois immédiatement un email:
"""
🚨 Alerte Budget - 90% consommé
Campagne: [Nom]
Budget consommé: 270 / 300
Budget restant: 30
ATTENTION: Votre campagne s'arrêtera sous peu.
Actions possibles:
- Recharger le budget
- Laisser la campagne se terminer
"""
Scénario: Alerte budget épuisé (100%)
Étant donné que mon budget est de 300
Quand je consomme les 300 (100%)
Alors je reçois immédiatement un email:
"""
Campagne terminée - Budget épuisé
Campagne: [Nom]
Budget consommé: 300
Durée effective: 12 jours (sur 14 prévus)
Métriques finales:
- Impressions: 6000
- Écoutes complètes: 4000 (67%)
- Coût par écoute: 0.05
Voir le rapport complet: [Lien]
Créer une nouvelle campagne: [Lien]
"""
Et la campagne est automatiquement mise en pause
Et plus aucune diffusion ne se produit
Scénario: Pause manuelle de campagne
Étant donné que ma campagne est active
Et qu'il reste 150 de budget
Quand je clique sur "Mettre en pause"
Alors le statut passe à "En pause"
Et les diffusions s'arrêtent immédiatement
Et le budget de 150 est conservé
Et je peux réactiver la campagne plus tard
Scénario: Reprise campagne pausée
Étant donné que ma campagne est en pause
Et qu'il reste 150 de budget
Quand je clique sur "Reprendre la campagne"
Alors le statut passe à "Active"
Et les diffusions reprennent immédiatement
Et le budget restant de 150 continue de se consommer
Scénario: Prolongation campagne avec recharge
Étant donné que ma campagne se termine dans 2 jours
Et qu'il reste 20 de budget
Quand je clique sur "Prolonger la campagne"
Et que j'ajoute 200 supplémentaires
Alors le budget total passe à 220
Et la date de fin peut être prolongée de 10 jours
Et un nouveau paiement Mangopay de 200 est traité
Scénario: Recharge automatique activée
Étant donné que j'ai configuré la recharge automatique
Et que le seuil est fixé à 10% (30 sur budget 300)
Et que le montant de recharge est 100
Quand le budget restant passe sous 30
Alors une recharge automatique de 100 est déclenchée
Et ma carte bancaire est débitée via Mangopay
Et le budget total passe à budget_restant + 100
Et je reçois un email de confirmation
Scénario: Échec recharge automatique (carte expirée)
Étant donné que la recharge automatique est activée
Et que ma carte bancaire a expiré
Quand le budget passe sous le seuil de 10%
Alors la recharge automatique échoue
Et je reçois un email urgent:
"""
Échec recharge automatique
Votre carte bancaire a été refusée.
Raison probable: carte expirée ou fonds insuffisants
Action requise: Mettez à jour vos informations de paiement
Campagne en pause si budget épuisé: [Lien]
"""
Et la campagne continue jusqu'à épuisement du budget restant
Scénario: Modification ciblage si budget <50% consommé
Étant donné que j'ai consommé 120 sur 300 (40%)
Quand j'essaie de modifier le ciblage géographique
Alors la modification est autorisée
Et le ciblage est mis à jour immédiatement
Et les nouvelles diffusions utilisent le nouveau ciblage
Scénario: Blocage modification ciblage si budget >50% consommé
Étant donné que j'ai consommé 180 sur 300 (60%)
Quand j'essaie de modifier le ciblage géographique
Alors une erreur s'affiche:
"""
Modification bloquée - Budget >50% consommé
Les modifications de ciblage ne sont autorisées que si moins de 50% du budget est consommé.
Raison: Cohérence des métriques et analytics.
Options:
- Créer une nouvelle campagne avec le nouveau ciblage
- Laisser cette campagne se terminer
"""
Scénario: Modification audio nécessite nouvelle validation
Étant donné que ma campagne est active
Quand je veux modifier le fichier audio
Alors un message s'affiche:
"""
Modification audio = Nouvelle validation
Changer l'audio nécessite une nouvelle validation manuelle (24-48h).
Votre campagne sera mise en pause pendant la validation.
Recommandation: Créer une nouvelle campagne pour tester un nouveau créatif.
"""
Scénario: Modification plages horaires autorisée
Étant donné que ma campagne cible 7h-9h et 17h-19h
Quand je modifie pour cibler 12h-14h aussi
Alors la modification est appliquée immédiatement
Et les diffusions suivantes incluent la nouvelle plage
Et aucune re-validation n'est nécessaire
Scénario: Historique consommation budget jour par jour
Étant donné que ma campagne a duré 10 jours
Quand je consulte l'historique
Alors je vois un graphique avec:
| Jour | Consommation | Cumulé |
| 1 | 22 | 22 |
| 2 | 25 | 47 |
| 3 | 20 | 67 |
| ... | ... | ... |
| 10 | 18 | 220 |
Et je peux identifier les pics de consommation
Scénario: Notification fin de campagne programmée
Étant donné que ma campagne se termine le 14/02
Quand la date de fin est atteinte
Alors je reçois un email:
"""
Campagne terminée - Date de fin atteinte
Campagne: [Nom]
Durée: 14 jours (comme prévu)
Budget consommé: 280 / 300
Budget non utilisé: 20
Métriques finales:
- Impressions: 5600
- Écoutes complètes: 3800 (68%)
- ROI: [Calcul si applicable]
Le budget non utilisé (20) sera remboursé sous 5-7 jours.
"""
Scénario: Remboursement budget non utilisé
Étant donné que ma campagne avait 300 de budget
Et qu'elle s'est terminée avec 280 consommés
Quand la campagne se termine (date ou épuisement)
Alors un remboursement de 20 est initié via Mangopay
Et le délai est de 5-7 jours ouvrés
Et je reçois une notification de confirmation
Scénario: Aucun remboursement si budget entièrement consommé
Étant donné que ma campagne avait 300 de budget
Et qu'elle s'est terminée avec 300 consommés
Quand la campagne se termine
Alors aucun remboursement n'est initié
Et le message final indique "Budget entièrement utilisé"
Scénario: Statistiques comparatives budget vs objectif
Étant donné que j'avais défini un objectif de 5000 impressions
Et que mon budget était 300
Quand je consulte les statistiques finales
Alors je vois:
| Métrique | Objectif | Réalisé | Écart |
| Impressions | 5000 | 6000 | +20% |
| Budget | 300 | 280 | -7% |
| Coût/impression | 0.06 | 0.047 | -22% |
Et une analyse " Objectifs dépassés avec budget optimisé"
Scénario: Export rapport financier détaillé
Étant donné que je veux analyser mes dépenses
Quand je clique sur "Exporter rapport financier"
Alors je télécharge un CSV avec:
| Colonne |
| Date/Heure |
| Type écoute |
| Coût unitaire |
| Zone géographique |
| Utilisateur (anonyme)|
| Durée écoutée |
Et je peux l'importer dans Excel pour analyses
Scénario: Tableau de bord multi-campagnes
Étant donné que j'ai 3 campagnes actives
Quand je consulte la vue d'ensemble
Alors je vois un tableau récapitulatif:
| Campagne | Budget | Consommé | % | Jours restants | Projection |
| A | 300 | 220 | 73| 4j | Suffisant |
| B | 500 | 480 | 96| 10j | Épuisé 2j |
| C | 200 | 50 | 25| 20j | Suffisant |
Et un badge alerte rouge sur la campagne B
Scénario: Alerte consolidée multi-campagnes
Étant donné que j'ai 5 campagnes actives
Et que 2 campagnes ont >80% budget consommé
Quand je reçois les notifications
Alors un email consolidé unique est envoyé:
"""
Alerte Budget - 2 campagnes nécessitent attention
Campagne A: 85% consommé, épuisement dans 2j
Campagne C: 92% consommé, épuisement dans 1j
Actions recommandées: [Liens]
"""
Et je ne reçois pas 2 emails séparés (évite spam)
Scénario: Configuration seuils alertes personnalisés
Étant donné que je configure mes préférences d'alerte
Quand je définis les seuils:
| Seuil | Valeur |
| Alerte 1 | 70% |
| Alerte 2 | 85% |
| Alerte 3 | 95% |
Alors je reçois des alertes à 70%, 85% et 95%
Et non aux seuils par défaut 80%, 90%, 100%
Scénario: Désactivation alertes email
Étant donné que je préfère uniquement les notifications in-app
Quand je désactive les alertes email dans mes préférences
Alors je ne reçois plus d'emails d'alerte budget
Mais les notifications in-app continuent
Et les alertes critiques (échec paiement) sont toujours envoyées par email
Plan du Scénario: Couleur jauge selon pourcentage consommé
Étant donné un budget de 300
Quand j'ai consommé <montant> (<pourcentage>%)
Alors la couleur de la jauge est <couleur>
Exemples:
| montant | pourcentage | couleur |
| 100 | 33 | verte |
| 150 | 50 | verte |
| 180 | 60 | orange |
| 240 | 80 | orange |
| 270 | 90 | rouge |
| 285 | 95 | rouge |
| 300 | 100 | rouge |
Plan du Scénario: Projection épuisement selon consommation
Étant donné un budget de 300
Et une consommation actuelle de <consomme>
Et une durée écoulée de <jours_ecoules> jours
Quand je calcule la consommation quotidienne moyenne
Alors elle est de <conso_jour>/jour
Et le budget sera épuisé dans <jours_restants> jours
Exemples:
| consomme | jours_ecoules | conso_jour | jours_restants |
| 100 | 5 | 20 | 10 |
| 200 | 10 | 20 | 5 |
| 150 | 10 | 15 | 10 |
| 270 | 12 | 22.5 | 1.3 |
Plan du Scénario: Alertes envoyées selon seuils
Étant donné un budget de 500
Quand je consomme <montant> (<pourcentage>%)
Alors je reçois une alerte <niveau>
Exemples:
| montant | pourcentage | niveau |
| 350 | 70 | aucune |
| 400 | 80 | alerte 80% |
| 450 | 90 | alerte 90% |
| 500 | 100 | budget épuisé|