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:
254
features/api/premium/offre-tarification.feature
Normal file
254
features/api/premium/offre-tarification.feature
Normal file
@@ -0,0 +1,254 @@
|
||||
# language: fr
|
||||
Fonctionnalité: Offre et tarification Premium
|
||||
En tant qu'utilisateur
|
||||
Je veux pouvoir souscrire à un abonnement Premium
|
||||
Afin de profiter d'une expérience sans publicité avec des avantages exclusifs
|
||||
|
||||
Contexte:
|
||||
Étant donné que l'API RoadWave est disponible
|
||||
Et que je suis connecté en tant qu'utilisateur
|
||||
|
||||
# ===== FORMULES DISPONIBLES =====
|
||||
|
||||
Scénario: Formule mensuelle à 4.99€/mois
|
||||
Étant donné que je consulte les offres Premium
|
||||
Quand je vois la formule mensuelle
|
||||
Alors le prix affiché est 4.99€/mois
|
||||
Et il n'y a aucune réduction
|
||||
Et le prix effectif par mois est 4.99€
|
||||
|
||||
Scénario: Formule annuelle à 49.99€/an (2 mois offerts)
|
||||
Étant donné que je consulte les offres Premium
|
||||
Quand je vois la formule annuelle
|
||||
Alors le prix affiché est 49.99€/an
|
||||
Et l'économie affichée est "2 mois offerts"
|
||||
Et le prix effectif par mois est 4.16€
|
||||
Et je vois le badge "Meilleure offre"
|
||||
|
||||
Scénario: Calcul économie formule annuelle
|
||||
Étant donné que la formule mensuelle coûte 4.99€/mois
|
||||
Quand je calcule le coût annuel en mensuel
|
||||
Alors 12 mois × 4.99€ = 59.88€/an
|
||||
Et la formule annuelle coûte 49.99€
|
||||
Et l'économie est de 9.89€ (≈ 2 mois gratuits)
|
||||
Et la réduction est de 16.5%
|
||||
|
||||
Scénario: Pas d'essai gratuit disponible
|
||||
Étant donné que je consulte les offres Premium
|
||||
Quand je recherche une option "Essai gratuit"
|
||||
Alors aucune option d'essai gratuit n'est proposée
|
||||
Et je dois payer dès le premier jour pour accéder au Premium
|
||||
|
||||
Scénario: Justification absence essai gratuit - Anti-abus vacances
|
||||
Étant donné que RoadWave ne propose pas d'essai gratuit
|
||||
Quand un utilisateur envisage un road trip de 14 jours
|
||||
Alors il ne peut pas s'abonner pour l'essai gratuit puis annuler
|
||||
Et cela évite les inscriptions opportunistes
|
||||
Et protège les revenus des créateurs
|
||||
|
||||
Scénario: Justification absence essai gratuit - Protection revenus créateurs
|
||||
Étant donné qu'un utilisateur Premium écoute des contenus
|
||||
Quand il génère des écoutes dès le jour 1
|
||||
Alors les créateurs sont rémunérés immédiatement (70% de 4.99€)
|
||||
Et il n'y a pas de "période gratuite" sans rémunération créateurs
|
||||
|
||||
Scénario: Justification absence essai gratuit - Simplicité
|
||||
Étant donné que RoadWave gère les abonnements
|
||||
Quand il n'y a pas d'essai gratuit
|
||||
Alors pas de gestion complexe de période trial
|
||||
Et pas de workflow de conversion trial → payant
|
||||
Et cela réduit la complexité technique
|
||||
|
||||
Scénario: Justification absence essai gratuit - Engagement
|
||||
Étant donné qu'un utilisateur paie dès le début
|
||||
Quand il souscrit à Premium
|
||||
Alors il est plus engagé qu'un utilisateur en essai gratuit
|
||||
Et le taux de churn est généralement plus faible
|
||||
Et la lifetime value (LTV) est plus élevée
|
||||
|
||||
Scénario: Pas de partage familial au MVP
|
||||
Étant donné que je consulte les offres Premium
|
||||
Quand je recherche une option "Famille" ou "Partage"
|
||||
Alors aucune option de partage familial n'est disponible
|
||||
Et seuls les abonnements individuels sont proposés
|
||||
|
||||
Scénario: Justification absence partage familial - Complexité technique
|
||||
Étant donné que le partage familial nécessite:
|
||||
| fonctionnalité | complexité |
|
||||
| Gestion invitations | Moyenne |
|
||||
| Validation liens famille | Moyenne |
|
||||
| Limite devices par membre | Élevée |
|
||||
| Dashboard admin famille | Élevée |
|
||||
Quand RoadWave évalue le ROI
|
||||
Alors le coût dev/support est trop élevé pour le MVP
|
||||
Et la fonctionnalité est reportée post-MVP
|
||||
|
||||
Scénario: Justification absence partage familial - Risque abus
|
||||
Étant donné qu'une offre famille permet 5-6 membres
|
||||
Quand il n'y a pas de vérification stricte de lien familial
|
||||
Alors des "familles" de 6 inconnus pourraient se former
|
||||
Et cela réduirait fortement les revenus (6 personnes pour 1 abonnement)
|
||||
|
||||
Scénario: Justification absence partage familial - Cible individuelle
|
||||
Étant donné que RoadWave cible principalement les conducteurs
|
||||
Quand chaque conducteur utilise l'app individuellement en voiture
|
||||
Alors le besoin de partage familial est limité
|
||||
Et la plupart des utilisateurs sont des individus (pas des familles)
|
||||
|
||||
Scénario: Post-MVP - Offre Famille à 9.99€/mois pour 5 comptes
|
||||
Étant donné que RoadWave envisage une offre Famille post-MVP
|
||||
Quand la fonctionnalité est spécifiée
|
||||
Alors le prix serait 9.99€/mois pour 5 comptes
|
||||
Et cela représente 2€/mois/personne
|
||||
Mais cette offre n'est pas disponible au MVP
|
||||
|
||||
Scénario: Comparaison tarif - Spotify à 10.99€/mois
|
||||
Étant donné que Spotify Premium coûte 10.99€/mois
|
||||
Quand RoadWave fixe son prix à 4.99€/mois
|
||||
Alors RoadWave est 54.5% moins cher que Spotify
|
||||
Et cela positionne RoadWave comme très accessible
|
||||
|
||||
Scénario: Comparaison tarif - YouTube Premium à 11.99€/mois
|
||||
Étant donné que YouTube Premium coûte 11.99€/mois
|
||||
Quand RoadWave fixe son prix à 4.99€/mois
|
||||
Alors RoadWave est 58.4% moins cher que YouTube Premium
|
||||
Et cela est un argument commercial fort
|
||||
|
||||
Scénario: Comparaison tarif - Apple Music à 10.99€/mois
|
||||
Étant donné qu'Apple Music coûte 10.99€/mois
|
||||
Quand RoadWave fixe son prix à 4.99€/mois
|
||||
Alors RoadWave est 54.5% moins cher qu'Apple Music
|
||||
Et cela attire les utilisateurs sensibles au prix
|
||||
|
||||
Scénario: Justification tarif bas - Cible conducteurs quotidiens
|
||||
Étant donné que RoadWave cible les trajets quotidiens domicile-travail
|
||||
Quand le prix est fixé à 4.99€/mois
|
||||
Alors c'est un budget raisonnable pour un conducteur
|
||||
Et équivalent à ~1-2 cafés/mois
|
||||
Et psychologiquement acceptable pour un usage quotidien
|
||||
|
||||
Scénario: Justification formule annuelle - Engagement long terme
|
||||
Étant donné que la formule annuelle offre 2 mois gratuits
|
||||
Quand un utilisateur souscrit pour 1 an
|
||||
Alors il s'engage sur le long terme
|
||||
Et RoadWave sécurise 49.99€ de revenus immédiatement
|
||||
Et le cash flow est amélioré
|
||||
|
||||
Scénario: Justification formule annuelle - Réduction churn
|
||||
Étant donné qu'un utilisateur paie 49.99€ pour l'année
|
||||
Quand il envisage d'arrêter après 3 mois
|
||||
Alors il a déjà payé pour 12 mois
|
||||
Et il continuera probablement à utiliser l'app
|
||||
Et le taux de churn est réduit significativement
|
||||
|
||||
Scénario: Affichage comparatif des deux formules
|
||||
Étant donné que je consulte la page Premium
|
||||
Quand je vois les deux formules côte à côte
|
||||
Alors je vois:
|
||||
```
|
||||
┌─────────────────────────────────┐ ┌─────────────────────────────────┐
|
||||
│ MENSUEL │ │ ANNUEL ⭐ Meilleure offre │
|
||||
│ │ │ │
|
||||
│ 4.99€/mois │ │ 49.99€/an │
|
||||
│ │ │ soit 4.16€/mois │
|
||||
│ Engagement 1 mois │ │ │
|
||||
│ │ │ 💰 2 mois offerts ! │
|
||||
│ │ │ Économie: 9.89€/an │
|
||||
│ │ │ │
|
||||
│ [S'abonner] │ │ [S'abonner] │
|
||||
└─────────────────────────────────┘ └─────────────────────────────────┘
|
||||
```
|
||||
|
||||
Scénario: Mise en avant formule annuelle
|
||||
Étant donné que je consulte la page Premium
|
||||
Quand je vois les deux formules
|
||||
Alors la formule annuelle a un badge "Meilleure offre" ⭐
|
||||
Et elle est visuellement mise en avant (bordure colorée, taille plus grande)
|
||||
Et l'économie de 2 mois est affichée en gros
|
||||
Et cela incite à choisir la formule annuelle
|
||||
|
||||
Scénario: Lien "Pourquoi pas d'essai gratuit ?" en FAQ
|
||||
Étant donné que je consulte la page Premium
|
||||
Quand je clique sur "FAQ"
|
||||
Alors je vois une question "Pourquoi pas d'essai gratuit ?"
|
||||
Et la réponse explique:
|
||||
"""
|
||||
RoadWave ne propose pas d'essai gratuit pour 3 raisons:
|
||||
|
||||
1. Protection des créateurs: Vos écoutes rémunèrent les créateurs dès le premier jour.
|
||||
2. Engagement: Un abonnement payant dès le début garantit une meilleure expérience.
|
||||
3. Anti-abus: Éviter les inscriptions opportunistes (essai avant vacances puis annulation).
|
||||
|
||||
Le prix de 4.99€/mois reste très accessible (moitié prix de Spotify/YouTube Premium).
|
||||
"""
|
||||
|
||||
Scénario: A/B test formule annuelle (post-MVP)
|
||||
Étant donné que RoadWave veut optimiser la conversion annuelle
|
||||
Quand un A/B test est lancé
|
||||
Alors groupe A voit "2 mois offerts" (économie en durée)
|
||||
Et groupe B voit "Économisez 9.89€" (économie en argent)
|
||||
Et les taux de souscription sont mesurés
|
||||
Et le message le plus performant est déployé
|
||||
|
||||
Scénario: Promo temporaire exceptionnelle (Black Friday, etc.)
|
||||
Étant donné que c'est le Black Friday
|
||||
Quand une promo temporaire est activée
|
||||
Alors la formule annuelle peut passer à 39.99€/an (au lieu de 49.99€)
|
||||
Et l'économie affichée est "4 mois offerts !"
|
||||
Et la promo dure 3 jours uniquement
|
||||
Et cela génère un pic de souscriptions
|
||||
|
||||
Scénario: Code promo partenariat influenceur
|
||||
Étant donné qu'un influenceur promeut RoadWave
|
||||
Quand il partage un code promo "INFLUENCEUR20"
|
||||
Alors les utilisateurs obtiennent -20% sur le premier mois (3.99€ au lieu de 4.99€)
|
||||
Et le code est valable 1 mois
|
||||
Et les conversions sont trackées par code promo
|
||||
|
||||
Scénario: Statistiques admin - Répartition formules
|
||||
Étant donné qu'un admin consulte les métriques d'abonnements
|
||||
Quand il accède au dashboard
|
||||
Alors il voit:
|
||||
| métrique | valeur |
|
||||
| Abonnés Premium total | 12,547 |
|
||||
| Abonnés mensuels | 7,234 (58%)|
|
||||
| Abonnés annuels | 5,313 (42%)|
|
||||
| Revenus mensuels récurrents | 58,890€ |
|
||||
Et ces données aident à piloter la stratégie tarifaire
|
||||
|
||||
Scénario: Calcul revenus mensuels récurrents (MRR)
|
||||
Étant donné que RoadWave a:
|
||||
| formule | nombre abonnés | prix |
|
||||
| Mensuel | 7,234 | 4.99€/mois|
|
||||
| Annuel | 5,313 | 49.99€/an |
|
||||
Quand le MRR est calculé
|
||||
Alors MRR mensuel = 7,234 × 4.99€ = 36,098€
|
||||
Et MRR annuel ramené au mois = 5,313 × 49.99€ / 12 = 22,139€
|
||||
Et MRR total = 58,237€/mois
|
||||
|
||||
Scénario: Projection revenus annuels (ARR)
|
||||
Étant donné que le MRR est de 58,237€
|
||||
Quand l'ARR est calculé
|
||||
Alors ARR = 58,237€ × 12 = 698,844€/an
|
||||
Et cela aide à évaluer la valorisation de l'entreprise
|
||||
|
||||
Scénario: Affichage prix TTC (TVA incluse)
|
||||
Étant donné que RoadWave est une plateforme française
|
||||
Quand les prix sont affichés
|
||||
Alors tous les prix sont TTC (TVA 20% incluse)
|
||||
Et le prix 4.99€ inclut déjà la TVA
|
||||
Et cela respecte la réglementation française
|
||||
|
||||
Scénario: Performance page Premium avec cache
|
||||
Étant donné que la page Premium est consultée fréquemment
|
||||
Quand un utilisateur charge la page
|
||||
Alors les prix et avantages sont servis depuis un cache CDN
|
||||
Et le temps de chargement est <200ms
|
||||
Et cela garantit une expérience fluide
|
||||
|
||||
Scénario: Localisation prix selon pays (post-MVP)
|
||||
Étant donné que RoadWave se lance à l'international post-MVP
|
||||
Quand un utilisateur se connecte depuis l'Allemagne
|
||||
Alors les prix peuvent être ajustés (ex: 4.99€ en France, 4.49€ en Pologne)
|
||||
Et cela respecte le pouvoir d'achat local
|
||||
Mais cette fonctionnalité n'est pas au MVP (France uniquement)
|
||||
Reference in New Issue
Block a user