# PLANS_TARIFAIRES.md — Expria / Coach TCF Canada > **Document de référence — Version 1.1** > Toute modification des plans tarifaires doit être reflétée dans ce fichier en premier. > Tout le code, tout prompt à Claude, tout débat sur une feature part d'ici. --- ## 1. Vue d'ensemble | Feature | Découverte (Free) | Standard | Premium | |---|---|---|---| | Mode entraînement | ✅ | ✅ | ✅ | | Simulations | 5 à vie | Illimitées | Illimitées | | EE — Tâches 1, 2, 3 | ✅ | ✅ | ✅ | | EO — Tâche 1 et 3 | ✅ | ✅ | ✅ | | EO — Tâche 2 live | ❌ | ❌ | ✅ | | Rapport basique (score + NCLC) | ✅ | ✅ | ✅ | | Rapport détaillé (critères + erreurs) | 🔒 flouté | ✅ | ✅ | | Tips (idées, modèle, exercices/production) | 🔒 tronqués | ✅ | ✅ | | Historique + dashboard | ❌ | ✅ | ✅ | | Mode examen | ❌ | ❌ | ✅ | | Analyse patterns (5 dernières prod.) | ❌ | ❌ | ✅ | | Exercices long terme | ❌ | ❌ | ✅ | | Indice de préparation | ❌ | ❌ | ✅ | --- ## 2. Détail par plan --- ### 🟢 PLAN DÉCOUVERTE — Gratuit **Rôle :** Acquisition / frustration contrôlée. Laisser l'utilisateur goûter le produit et voir que la correction existe, sans lui permettre de construire un entraînement sérieux sur le plan gratuit. #### Accès - Mode entraînement uniquement - **5 simulations à vie** (toutes tâches confondues, compteur global, ne se remet jamais à zéro) #### Expression Écrite - Tâches 1, 2, 3 disponibles ✅ #### Expression Orale - Tâche 1 et Tâche 3 disponibles ✅ - Tâche 2 (interaction live) ❌ — cadenas + mention "Exclusivité Premium" #### Correction - Score global /20 ✅ - Niveau NCLC estimé ✅ - Feedback court (2-3 lignes) ✅ - Détail par critère → **flouté** + "Disponible en Standard" 🔒 - Explication des erreurs → **floutée** 🔒 #### Tips (entraînement) - Suggestions d'idées/arguments → 1 phrase visible + "Voir plus en Standard" 🔒 - Production modèle → 1 phrase visible + "Voir plus en Standard" 🔒 - Exercices personnalisés → titre visible + "Disponible en Standard" 🔒 #### Données utilisateur - Pas d'historique ❌ - Pas de dashboard ❌ - Aperçu flouté du dashboard complet avec mention "Disponible en Standard" #### Mode examen - Non disponible ❌ #### Logique backend ```typescript free: { simulations_lifetime: 5, oral_t2_live: false, detailed_report: false, // visible mais flouté côté frontend tips: false, // visible mais tronqué côté frontend dashboard: false, exam_mode: false, pattern_analysis: false, preparation_index: false, } ``` --- ### 🔵 PLAN STANDARD — 19,90€ / 4 semaines **Rôle :** Progression sérieuse. Débloquer l'entraînement complet avec correction détaillée et suivi des productions. #### Accès - Mode entraînement illimité ✅ - Simulations illimitées ✅ #### Expression Écrite - Tâches 1, 2, 3 disponibles ✅ #### Expression Orale - Tâche 1 et Tâche 3 disponibles ✅ - Tâche 2 (interaction live) ❌ — cadenas + mention "Exclusivité Premium" #### Correction - Score global /20 ✅ - Niveau NCLC estimé ✅ - Détail par critère ✅ - Explication des erreurs détectées ✅ #### Tips (entraînement) - Suggestions d'idées/arguments ✅ (activables via toggle avant la simulation) - Production modèle basée sur la copie ✅ - Exercices personnalisés liés à CETTE production ✅ - Mode focus disponible (masquer les tips pour simuler les conditions réelles) ✅ #### Données utilisateur - Historique complet des productions ✅ - Dashboard (consultation des copies et rapports passés) ✅ - Indice de préparation ✅ (activé après 5 productions) #### Mode examen - Non disponible ❌ — cadenas + mention "Exclusivité Premium" #### Analyse avancée - Analyse des patterns multi-productions ❌ - Exercices long terme ❌ #### Logique backend ```typescript standard: { simulations_lifetime: null, // illimité oral_t2_live: false, detailed_report: true, tips: true, dashboard: true, exam_mode: false, pattern_analysis: false, preparation_index: false, } ``` --- ### 🟣 PLAN PREMIUM — 39,90€ / 4 semaines **Rôle :** Réussite — viser NCLC 9+. Tout Standard, plus les outils de simulation réelle et d'intelligence long terme. #### Accès - Tout le plan Standard ✅ - Mode examen ✅ - EO Tâche 2 live ✅ - Analyse avancée multi-productions ✅ #### 🔥 Mode Examen (feature majeure) **Expression Écrite :** - 3 tâches affichées simultanément - Timer 60 minutes — inarrêtable ⛔ - Zone de saisie figée (readOnly) à T=0 ⛔ - Envoi automatique déclenché à T=0 ✅ **Expression Orale :** - 3 tâches enchaînées - Timer global 12 minutes — inarrêtable ⛔ - Enregistrement stoppé et envoi automatique à T=0 ✅ Productions enregistrées dans le dashboard avec tag **"Mode Examen"**. #### 🔥 EO Tâche 2 — Simulation live (différenciateur clé) - Interaction dynamique en temps réel avec l'examinateur IA - Le candidat répond en audio - L'IA adapte ses relances selon les réponses du candidat - Rapport complet généré à la fin du dialogue - Productions enregistrées avec tag **"T2 Live"** > ❗ Exclusivité Premium — aucun concurrent ne propose cette feature. #### 🔥 Analyse des patterns (intelligence long terme) - Analyse automatique des 5 dernières productions - Détection des erreurs récurrentes classées par type : - Structurelles (organisation, cohérence) - Lexicales (répétitions, registre, richesse) - Morphosyntaxiques (accords, conjugaison, syntaxe) - Distinction : erreur ponctuelle vs pattern répété (3+ occurrences sur 5 productions) - Exercices long terme générés sur la base des patterns détectés - **Distinction clé :** ces exercices sont différents des exercices du rapport individuel (qui sont spécifiques à une seule production) #### 🔥 Indice de préparation - Score dynamique 0 → 100 - Basé sur : moyenne des scores récents + régularité des sessions + courbe de progression - Messages interprétatifs : - < 40 : "Continuez à vous entraîner régulièrement" - 40–70 : "Bonne progression — visez NCLC 7-8" - \> 70 : "Vous êtes en bonne voie pour NCLC 9+" #### Logique backend ```typescript premium: { simulations_lifetime: null, oral_t2_live: true, detailed_report: true, tips: true, dashboard: true, exam_mode: true, pattern_analysis: true, preparation_index: true, } ``` --- ## 3. Source de vérité unique (lib/access.ts) ```typescript export const PLANS = { free: { simulations_lifetime: 5, oral_t2_live: false, detailed_report: false, tips: false, dashboard: false, exam_mode: false, pattern_analysis: false, preparation_index: false, }, standard: { simulations_lifetime: null, oral_t2_live: false, detailed_report: true, tips: true, dashboard: true, exam_mode: false, pattern_analysis: false, preparation_index: false, }, premium: { simulations_lifetime: null, oral_t2_live: true, detailed_report: true, tips: true, dashboard: true, exam_mode: true, pattern_analysis: true, preparation_index: true, }, } ``` > Tout le code lit depuis cet objet. Aucune condition de plan n'est écrite en dur ailleurs dans le code. --- ## 4. Règles transversales ### Upgrades possibles - Découverte → Standard - Découverte → Premium (accès direct, sans passer par Standard) - Standard → Premium Dans tous les cas : immédiat après confirmation du webhook Stripe, sans délai, sans reconnexion requise. ### Upgrade en cours d'abonnement — Prorata automatique (Stripe) Quand un utilisateur Standard souhaite passer en Premium avant la fin de sa période, il ne paie **pas le plein tarif Premium**. Stripe calcule automatiquement le prorata : - Les jours restants du plan Standard sont **crédités** - Les jours restants sont **refacturés au tarif Premium** - L'utilisateur paie uniquement la **différence de valeur pour le temps restant** **Exemple :** Un utilisateur a payé 19,90€ pour 4 semaines. Il upgrade après 2 semaines. Stripe crédite ~10€ (2 semaines non consommées de Standard) et facture ~20€ (2 semaines au tarif Premium). → Il paie ~10€, pas 39,90€. **Ce que cela implique côté implémentation :** - Utiliser `subscription.update()` dans l'API Stripe avec `proration_behavior: 'always_invoice'` - Stripe génère automatiquement une facture de prorata et débite le montant exact - Le webhook `invoice.paid` confirme le paiement → mettre à jour le plan à `"premium"` dans Supabase **Ce que l'utilisateur voit dans l'interface :** Avant de confirmer l'upgrade, afficher le montant exact calculé par Stripe : > "Vous paierez [montant calculé]€ aujourd'hui pour accéder au plan Premium jusqu'au [date de fin]." > [Confirmer] [Annuler] Pas de surprise, pas de frustration. ### Downgrades / Résiliations - Premium → Standard - Premium → Découverte (résiliation sans remplacement) - Standard → Découverte (résiliation sans remplacement) ### Conservation des données Les productions sont toujours conservées en base, quel que soit le changement de plan. Seul l'accès aux features change. L'utilisateur ne perd jamais ses données. ### Compteur de simulations Free - Global (EE + EO confondus) - Ne se remet jamais à zéro - Une simulation = un envoi pour correction - Si l'utilisateur a consommé 3/5 simulations avant de s'abonner, puis résilie, il lui reste 2 simulations gratuites ### Expiration d'abonnement - Déclenchée par le webhook Stripe : `customer.subscription.deleted` - Rôle remis à `"free"` dans Supabase - Productions conservées, accès features coupé immédiatement - Message affiché à la prochaine connexion : "Votre abonnement a expiré. Vos productions sont conservées. Renouvelez pour retrouver l'accès complet." ### Stripe — Produits à créer (mode Test d'abord) | Plan | Produit Stripe | Prix | |---|---|---| | Standard | "Expria Standard" | 19,90€ / 4 semaines | | Premium | "Expria Premium" | 39,90€ / 4 semaines | Webhooks à écouter : - `checkout.session.completed` → mettre à jour le plan dans Supabase (nouveau abonnement) - `invoice.paid` → mettre à jour le plan dans Supabase (upgrade avec prorata) - `customer.subscription.deleted` → remettre le plan à "free"