# language: fr Fonctionnalité: Gestion abonnement Premium En tant qu'utilisateur Je veux gérer facilement mon abonnement Premium Afin de souscrire, renouveler ou annuler en toute transparence Contexte: Étant donné que je suis connecté à l'application RoadWave # ===== SOUSCRIPTION ===== Scénario: Souscription via Web (desktop/mobile) avec Mangopay Étant donné que je consulte la page Premium sur le site web Quand je clique sur "S'abonner - Mensuel 4.99€" Alors je suis redirigé vers le formulaire de paiement Mangopay Et je saisis mes informations de carte bancaire Et le paiement de 4.99€ est prélevé immédiatement Et la commission Mangopay est de 1.8% + 0.18€ = 0.27€ Et RoadWave reçoit 4.72€ net Scénario: Calcul commission Mangopay Étant donné qu'un utilisateur paie 4.99€ via Mangopay Quand la commission est calculée Alors la commission est : 4.99€ × 1.8% + 0.18€ = 0.09€ + 0.18€ = 0.27€ Et RoadWave reçoit : 4.99€ - 0.27€ = 4.72€ Et la commission représente 5.4% du prix Scénario: Souscription via iOS App avec Apple IAP Étant donné que j'utilise l'app iOS Quand je clique sur "S'abonner - Mensuel 5.99€" Alors je suis redirigé vers l'interface Apple In-App Purchase Et le prix affiché est 5.99€ (majoré de 20%) Et le paiement est effectué via mon compte Apple Et Apple prend 30% de commission = 1.80€ Et RoadWave reçoit 4.19€ net Scénario: Souscription via Android App avec Google Play Billing Étant donné que j'utilise l'app Android Quand je clique sur "S'abonner - Mensuel 5.99€" Alors je suis redirigé vers l'interface Google Play Billing Et le prix affiché est 5.99€ (majoré de 20%) Et le paiement est effectué via mon compte Google Et Google prend 30% de commission = 1.80€ Et RoadWave reçoit 4.19€ net Scénario: Majoration 20% sur mobile pour compenser commission 30% Étant donné que Apple/Google prennent 30% de commission Quand RoadWave fixe le prix mobile Alors le prix web est 4.99€ (commission Mangopay 5.4%) Et le prix mobile est 5.99€ (commission Apple/Google 30%) Et la majoration est de 1€ (+20%) Et cela compense partiellement la commission excessive Scénario: Email incitation souscription web moins chère Étant donné que je consulte Premium depuis l'app mobile Quand je vois le prix 5.99€ Alors je vois aussi un message: """ 💡 Astuce : Abonnez-vous sur roadwave.com pour seulement 4.99€/mois Économisez 12€/an en évitant les frais Apple/Google ! """ Et un lien vers le site web est fourni Scénario: Calcul économie souscription web vs mobile Étant donné que le prix web est 4.99€/mois Et que le prix mobile est 5.99€/mois Quand je calcule l'économie annuelle Alors web : 4.99€ × 12 = 59.88€/an Et mobile : 5.99€ × 12 = 71.88€/an Et économie : 12€/an (soit 20% d'économie) Scénario: Activation immédiate après paiement réussi Étant donné que je viens de payer mon abonnement Premium Quand le paiement est confirmé Alors mon statut passe immédiatement à "Premium" Et je peux accéder aux avantages Premium dès maintenant Et je reçois un email de confirmation Scénario: Email confirmation souscription Étant donné que j'ai souscrit à Premium Quand la souscription est confirmée Alors je reçois un email: """ 🎉 Bienvenue Premium ! Votre abonnement Premium est actif. Formule: Mensuel 4.99€/mois Prochain renouvellement: 15 juillet 2025 Vos avantages: • 0 publicité • Contenus exclusifs • Qualité audio 64 kbps • Téléchargements illimités • Historique illimité Profitez pleinement de RoadWave ! Gérer mon abonnement: [Lien] """ # ===== RENOUVELLEMENT AUTOMATIQUE ===== Scénario: Email rappel 7 jours avant renouvellement Étant donné que mon abonnement mensuel se renouvelle le 15 juillet Quand le 8 juillet arrive (7 jours avant) Alors je reçois un email de rappel: """ 📅 Votre abonnement Premium se renouvelle dans 7 jours Formule: Mensuel 4.99€/mois Date de renouvellement: 15 juillet 2025 Montant: 4.99€ Votre carte bancaire sera débitée automatiquement. Vous souhaitez annuler ? [Gérer mon abonnement] """ Scénario: Renouvellement automatique réussi Étant donné que mon abonnement mensuel arrive à échéance le 15 juillet Quand le 15 juillet arrive Alors Mangopay/Apple/Google prélève automatiquement 4.99€ (ou 5.99€) Et mon abonnement est renouvelé pour 1 mois supplémentaire Et je reçois un email de confirmation Scénario: Email confirmation renouvellement Étant donné que mon abonnement vient d'être renouvelé Quand le paiement est confirmé Alors je reçois un email: """ ✅ Abonnement Premium renouvelé Votre abonnement a été renouvelé avec succès. Montant débité: 4.99€ Prochaine échéance: 15 août 2025 Merci de continuer à soutenir RoadWave et ses créateurs ! Gérer mon abonnement: [Lien] """ Scénario: Échec paiement renouvellement - Tentative 1 Étant donné que mon abonnement doit se renouveler le 15 juillet Mais que ma carte bancaire est expirée ou sans fonds Quand le prélèvement échoue Alors je reçois un email: """ ⚠️ Échec renouvellement abonnement Premium Le paiement de votre abonnement a échoué. Raison: Carte bancaire expirée Nous allons réessayer automatiquement dans 3 jours. Veuillez mettre à jour vos informations de paiement: [Lien] Votre accès Premium reste actif jusqu'au 22 juillet (7 jours). """ Scénario: Retry automatique paiement après 3 jours Étant donné que le paiement a échoué le 15 juillet Quand le 18 juillet arrive (J+3) Alors Mangopay/Apple/Google tente automatiquement un nouveau prélèvement Et si le paiement réussit, l'abonnement est renouvelé normalement Et si le paiement échoue encore, un 2ème retry est programmé Scénario: Retry automatique paiement après 7 jours Étant donné que 2 tentatives ont échoué (15 juillet et 18 juillet) Quand le 22 juillet arrive (J+7) Alors une 3ème et dernière tentative est effectuée Et si le paiement réussit, l'abonnement est sauvé Et si le paiement échoue, l'abonnement est annulé automatiquement Scénario: Annulation automatique après 3 échecs paiement Étant donné que les 3 tentatives de renouvellement ont échoué (J+0, J+3, J+7) Quand la 3ème tentative échoue Alors mon abonnement Premium est annulé automatiquement Et mon statut repasse à "Gratuit" Et je perds accès aux avantages Premium Et je reçois un email d'annulation Scénario: Email annulation automatique pour impayé Étant donné que mon abonnement a été annulé pour échec paiement Quand l'annulation devient effective Alors je reçois un email: """ ❌ Abonnement Premium annulé Votre abonnement a été annulé suite à 3 échecs de paiement. Vous repassez en mode gratuit et perdez l'accès à: • Contenus Premium exclusifs • Qualité audio supérieure • Téléchargements illimités Pour réactiver Premium, mettez à jour vos informations de paiement: [Lien] """ # ===== ANNULATION ===== Scénario: Annulation self-service dans Settings Étant donné que je veux annuler mon abonnement Quand j'accède à "Paramètres > Abonnement" Alors je vois un bouton "Annuler l'abonnement" Et je peux annuler en 2 clics sans contacter le support Scénario: Confirmation avant annulation Étant donné que je clique sur "Annuler l'abonnement" Quand une popup de confirmation apparaît Alors je vois: """ 😢 Vous allez annuler votre abonnement Premium Vous perdrez l'accès à: • 0 publicité • Contenus Premium exclusifs • Qualité audio supérieure • Téléchargements illimités Accès maintenu jusqu'au: 15 juillet 2025 (fin période payée) Pas de remboursement prorata. [Confirmer l'annulation] [Rester Premium] ``` Scénario: Accès Premium maintenu jusqu'à fin période payée Étant donné que j'ai annulé mon abonnement le 1er juillet Et que mon abonnement mensuel était valable jusqu'au 15 juillet Quand l'annulation est confirmée Alors je garde l'accès Premium jusqu'au 15 juillet Et à partir du 16 juillet, je repasse en gratuit Et je ne suis pas remboursé pour les 14 jours restants Scénario: Justification pas de remboursement prorata Étant donné que l'industrie (Spotify, Netflix, YouTube) ne rembourse pas prorata Quand RoadWave applique la même règle Alors c'est le standard accepté par les utilisateurs Et cela simplifie la gestion comptable Et évite les abus (souscription puis annulation immédiate pour remboursement) Scénario: Email confirmation annulation Étant donné que j'ai annulé mon abonnement Quand l'annulation est enregistrée Alors je reçois un email: """ ✅ Annulation confirmée Votre abonnement Premium a été annulé. Accès Premium maintenu jusqu'au: 15 juillet 2025 Après cette date, vous repasserez en mode gratuit. Pas de remboursement pour la période restante (standard industrie). Vous pouvez vous réabonner à tout moment ! Nous espérons vous revoir bientôt. Réabonner: [Lien] """ Scénario: Pas de renouvellement après annulation Étant donné que j'ai annulé mon abonnement le 1er juillet Quand le 15 juillet arrive (date de renouvellement prévue) Alors aucun prélèvement n'est effectué Et mon statut passe automatiquement à "Gratuit" Et je ne reçois pas d'email de renouvellement # ===== RÉABONNEMENT ===== Scénario: Réabonnement possible immédiatement Étant donné que j'ai annulé mon abonnement il y a 5 jours Quand j'accède à la page Premium Alors je peux me réabonner immédiatement Et le processus de paiement est le même que la première fois Scénario: Pas de nouvelle période d'essai au réabonnement Étant donné que j'ai annulé mon abonnement il y a 3 mois Quand je me réabonne Alors je paie immédiatement 4.99€ (pas d'essai gratuit) Car RoadWave ne propose jamais d'essai gratuit (ni première fois ni réabonnement) Scénario: Offre win-back pour utilisateurs ayant annulé Étant donné que j'ai annulé mon abonnement il y a 1 mois Quand je reçois un email de win-back Alors je vois une offre spéciale: """ 🎁 On vous a manqué ? Revenez en Premium avec une offre exclusive: -30% sur les 3 premiers mois (3.49€/mois au lieu de 4.99€) Offre valable jusqu'au 31 juillet. [Réactiver Premium] ``` # ===== ARCHITECTURE DONNÉES ===== Scénario: Table subscriptions en base PostgreSQL Étant donné qu'un utilisateur souscrit à Premium Quand les données sont enregistrées Alors la table subscriptions contient: ```sql CREATE TABLE subscriptions ( id UUID PRIMARY KEY, user_id UUID NOT NULL REFERENCES users(id) UNIQUE, mangopay_recurring_payin_id VARCHAR(255), -- Null si IAP mangopay_user_id VARCHAR(255), -- Null si IAP apple_transaction_id VARCHAR(255), -- Null si Mangopay google_purchase_token VARCHAR(255), -- Null si Mangopay status VARCHAR(50) NOT NULL, -- 'active', 'cancelled', 'expired', 'past_due' plan VARCHAR(50) NOT NULL, -- 'monthly', 'yearly' current_period_start TIMESTAMP NOT NULL, current_period_end TIMESTAMP NOT NULL, cancelled_at TIMESTAMP, created_at TIMESTAMP NOT NULL DEFAULT NOW() ); ``` Scénario: Statuts possibles dans subscription.status Étant donné qu'un abonnement peut avoir différents statuts Quand le statut est stocké en base Alors les valeurs possibles sont: | statut | description | | active | Abonnement actif et payé | | cancelled | Annulé par utilisateur (accès jusqu'à fin période) | | expired | Période terminée, pas renouvelé | | past_due | Échec paiement, en retry automatique | Scénario: Cache Redis pour vérification Premium temps réel Étant donné qu'un utilisateur lance un contenu Quand l'app vérifie s'il est Premium Alors une clé Redis est consultée: ``` Key: premium:{user_id} Value: true/false TTL: 1 heure ``` Et si la clé n'existe pas, elle est recalculée depuis PostgreSQL Et cela garantit des performances <10ms Scénario: Refresh cache Redis via webhooks Étant donné qu'un paiement est confirmé par Mangopay/Apple/Google Quand un webhook est reçu par RoadWave Alors le cache Redis premium:{user_id} est mis à jour immédiatement Et l'utilisateur voit son statut Premium activé sans délai Scénario: Webhooks Mangopay - PAYIN_NORMAL_SUCCEEDED Étant donné qu'un paiement Mangopay réussit Quand Mangopay envoie le webhook PAYIN_NORMAL_SUCCEEDED Alors RoadWave met à jour subscriptions.status = 'active' Et met à jour current_period_end = NOW() + 1 mois Et refresh le cache Redis premium:{user_id} = true Scénario: Webhooks Mangopay - PAYIN_NORMAL_FAILED Étant donné qu'un paiement Mangopay échoue Quand Mangopay envoie le webhook PAYIN_NORMAL_FAILED Alors RoadWave met à jour subscriptions.status = 'past_due' Et programme un retry automatique dans 3 jours Et envoie un email à l'utilisateur Scénario: Webhooks Apple - App Store Server Notifications Étant donné qu'un paiement Apple IAP change de statut Quand Apple envoie une notification serveur Alors RoadWave parse la notification (JSON) Et met à jour la subscription en conséquence Et refresh le cache Redis Scénario: Webhooks Google - Real-time Developer Notifications Étant donné qu'un paiement Google Play change de statut Quand Google envoie une notification temps réel Alors RoadWave parse la notification (JSON) Et met à jour la subscription en conséquence Et refresh le cache Redis # ===== STATISTIQUES ET MONITORING ===== Scénario: Dashboard admin - Métriques abonnements Étant donné qu'un admin consulte les métriques Premium Quand il accède au dashboard Alors il voit: | métrique | valeur | | Abonnés actifs | 12,547 | | Nouveaux abonnements ce mois | 1,234 | | Annulations ce mois | 287 (2.3%) | | Churn rate mensuel | 2.3% | | MRR (Revenus mensuels récurrents) | 58,890€ | | Taux conversion gratuit → Premium | 8.5% | Scénario: Calcul churn rate mensuel Étant donné que 287 utilisateurs ont annulé ce mois Et qu'il y avait 12,547 abonnés au début du mois Quand le churn rate est calculé Alors churn = 287 / 12,547 = 2.3% Et un churn <5% est considéré comme excellent Et RoadWave surveille cette métrique de près Scénario: Alerte si churn rate >5% Étant donné que le churn rate mensuel dépasse 5% Quand le système détecte cette anomalie Alors une alerte est envoyée à l'équipe: """ ⚠️ Churn rate anormal: 6.2% Nombre annulations ce mois: 778 Causes principales: - Prix jugé trop élevé: 42% - Utilisation faible: 28% - Concurrent moins cher: 18% - Autre: 12% Action recommandée: Enquête satisfaction + offres win-back """ Scénario: Enquête satisfaction à l'annulation Étant donné que je viens d'annuler mon abonnement Quand l'annulation est confirmée Alors je vois un questionnaire rapide: """ Pourquoi annulez-vous Premium ? ☐ Prix trop élevé ☐ Je n'utilise pas assez RoadWave ☐ Pas assez de contenus exclusifs ☐ Problèmes techniques ☐ J'ai trouvé une alternative moins chère ☐ Autre: [Texte libre] [Envoyer] [Ignorer] ``` Et les réponses aident à améliorer l'offre Premium Scénario: Répartition canaux souscription Étant donné qu'un admin analyse les canaux de souscription Quand il consulte les statistiques Alors il voit: | canal | abonnés | % total | revenus/mois | | Web (Mangopay) | 8,234 | 65.6% | 41,088€ | | iOS (Apple) | 2,845 | 22.7% | 17,042€ | | Android (Google)| 1,468 | 11.7% | 8,793€ | Et cela aide à orienter les efforts marketing (inciter web = moins de commission) Scénario: Performance vérification Premium <10ms Étant donné que 100 000 utilisateurs consultent des contenus simultanément Quand chaque requête vérifie le statut Premium via Redis Alors le temps de réponse moyen est <10ms Et Redis gère facilement 100 000 requêtes/seconde Et l'expérience utilisateur est fluide Scénario: Backup données abonnements Étant donné que les données d'abonnements sont critiques Quand un backup est effectué Alors PostgreSQL est répliqué en temps réel sur un replica Et un snapshot quotidien est stocké sur S3 Et en cas de crash, les données peuvent être restaurées <5 minutes