refactor(pricing): refonte v7.0 — 3 Cloud (Basic 189$/Essentiel 349$/Pro 549$) + DictIA Local (5998$ An1) + Pro+ soumission

Remplace l'ancien pricing (DictIA 8 / 16 / Cloud) par la nouvelle structure
canonique v7.0 : 4 forfaits + 1 sentinel quote-only.

Changements clés :
- pricing_card.html : signature étendue (badge, recommended, capacity_audio,
  capacity_storage, gpu, yearly_renewal, cta_label) + format prix server-side
  avec NBSP OQLF (5998 -> 5 998 $)
- _pricing_tiers.html : 4 cards (Cloud Basic 189$, Cloud Essentiel 349$,
  Cloud Pro 549$+485$ RECOMMANDÉ, DictIA Local 5998$ An1) + chip Pro+
  soumission -> /contact?pro-plus=1
- plans.py : refonte complète avec yearly_renewal_env (DictIA Local An 2+ =
  500$/an) + is_quote_only sentinel (Pro+ -> redirect /contact, jamais Stripe)
- routes.py : Pro+ intercepté avant le flow Stripe Checkout
- env.stripe.example : nouveau naming STRIPE_CLOUD_BASIC|ESSENTIEL|PRO_*
  + STRIPE_DICTIA_LOCAL_SETUP/RENEWAL_YEARLY
- tarifs.html : header "Quatre forfaits", matrice comparative 4 colonnes,
  FAQ enrichie (7 questions incluant DictIA Local + onboarding Pro + Pro+)
- fonctionnalites.html : section Architecture refondue (4 cards v7.0)
- landing.html : ROI footnote + cycle "189$" + wave "189$/mois" actualisés
- roi_calculator.js : recalibrage sur Cloud ESSENTIEL 349$ × 12 = 4188$/an
- routes.py marketing : FAQ "DictIA 8 et 16" -> "DictIA LOCAL"
- contact.html : "déploiements DictIA 16" -> "Cloud PRO" + "DictIA LOCAL"

Tests :
- test_marketing_landing_template.py : assertions prix v7.0 (189/349/549/5998),
  4 slugs (cloud-basic, cloud-essentiel, cloud-pro, dictia-local), Pro+ chip,
  capacity chips, RECOMMANDÉ sur Cloud PRO
- test_marketing_secondary_pages.py : 4 cards + Pro+ chip + matrice 4 col +
  FAQ 7 questions
- test_stripe_checkout.py : env vars v7.0, slugs cloud-basic/cloud-pro/
  dictia-local + nouveau test pro-plus -> /contact + tests setup pour Cloud PRO
  et DictIA Local
- test_stripe_webhook.py : plan_slug metadata cloud-basic

Status : 28/28 Stripe checkout + 17/17 webhook + 93/98 marketing pass
(les 5 marketing failures sont pré-existantes, non liées au pricing :
test_landing_has_main_nav et test_footer_links_complete = /blog manquant ;
test_trust_bar_has_eyebrow_factual_phrasing + 2 tests conformite =
casing eyebrow + entité é — vérifié par git stash baseline).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Allison
2026-04-28 21:06:12 -04:00
parent e8c7e5cd43
commit 1c4cafaf69
16 changed files with 648 additions and 301 deletions

View File

@@ -1,30 +1,113 @@
{# Single source of truth for the 3 pricing tiers — used by landing.html#tarifs and /tarifs page.
When prices change, edit ONLY this file. #}
{# Single source of truth for the v7.0 pricing — used by landing.html#tarifs and /tarifs page.
When prices change, edit ONLY this file (and src/billing/plans.py for Stripe IDs).
v7.0 — 4 forfaits + 1 soumission :
- Cloud BASIC 189 $/mois (no setup)
- Cloud ESSENTIEL 349 $/mois (no setup)
- Cloud PRO 549 $/mois + 485 $ onboarding (recommended)
- DictIA LOCAL 5 998 $ An 1 puis 500 $/an dès An 2 (no monthly)
- Pro+ soumission personnalisée → /contact?pro-plus=1
Common to all forfaits :
WhisperX Large-v3 (99%+ · 99+ langues), pyannote diarisation, Mistral résumés,
exports SRT/VTT/TXT/JSON/DOCX, Loi 25 conforme, OVH Beauharnois (Cloud) ou local. #}
{% from 'macros/pricing_card.html' import pricing_card %}
<div class="grid md:grid-cols-3 gap-6 max-w-5xl mx-auto items-stretch">
{%- set _baseline_features_cloud = [
'WhisperX Large-v3 · 99&nbsp;%+ précision · 99+ langues',
'Diarisation pyannote (qui parle)',
'Résumés IA + Points d&rsquo;action (Mistral Nemo 12B)',
'Exports SRT, VTT, TXT, JSON, DOCX',
'Hébergement OVH Beauharnois (QC)',
'Conforme Loi&nbsp;25 · Anti-DDoS · Backups quotidiens',
'Aucune limite utilisateurs'
] -%}
<div class="grid md:grid-cols-2 lg:grid-cols-4 gap-6 items-stretch">
{{ pricing_card(
'dictia-8',
'DictIA 8',
'3&nbsp;450&nbsp;$',
'173&nbsp;$',
'PME · Manufacturiers · RH · Services — local, vos données ne quittent jamais votre bureau.',
['GPU 8&nbsp;Go RTX', 'Volume illimité', 'WhisperX FR-CA', 'Diarisation 8 locuteurs', 'Support inclus']
slug='cloud-basic',
name='Cloud BASIC',
badge='Cloud · Souverain QC',
target='Solopreneur · petite équipe · usage occasionnel à régulier.',
monthly=189,
capacity_audio='~165&nbsp;h audio/mois',
capacity_storage='100&nbsp;Go',
gpu='NVIDIA L4 partagé',
features=_baseline_features_cloud,
cta_label='Démarrer en Cloud'
) }}
{{ pricing_card(
'dictia-16',
'DictIA 16',
'5&nbsp;750&nbsp;$',
'201&nbsp;$',
'Cabinets juridiques · CPA · Services financiers — local, Mistral&nbsp;7B sur votre GPU.',
['GPU 16&nbsp;Go RTX', 'Mistral 7B local', 'Q&amp;R sur enregistrement', 'Tout DictIA 8', 'Support prioritaire'],
recommended=True
slug='cloud-essentiel',
name='Cloud ESSENTIEL',
badge='Cloud · Souverain QC',
target='Cabinet en croissance · usage quotidien soutenu.',
monthly=349,
capacity_audio='~330&nbsp;h audio/mois',
capacity_storage='200&nbsp;Go',
gpu='NVIDIA L4 partagé étendu',
features=_baseline_features_cloud,
cta_label='Choisir Essentiel'
) }}
{{ pricing_card(
'dictia-cloud',
'DictIA Cloud',
'0&nbsp;$',
'369&nbsp;$',
'Organismes · Municipalités · Multi-sites — Cloud QC, opérationnel en 48&nbsp;h, aucun matériel requis.',
['Hébergé OVH Beauharnois (Québec)', 'Opérationnel sous 48&nbsp;h', 'Aucun matériel à gérer', 'SLA visé 99,9&nbsp;%', 'Conforme Loi&nbsp;25']
slug='cloud-pro',
name='Cloud PRO',
badge='Cloud · Souverain QC',
recommended=True,
target='Organisation établie · usage intensif multi-postes.',
setup=485,
monthly=549,
capacity_audio='~660&nbsp;h audio/mois',
capacity_storage='500&nbsp;Go',
gpu='NVIDIA L4 dédié priorité',
features=_baseline_features_cloud + [
'GPU dédié priorité (latence garantie)',
'Onboarding assisté inclus'
],
cta_label='Commander Pro'
) }}
{{ pricing_card(
slug='dictia-local',
name='DictIA LOCAL',
badge='Local · 100&nbsp;% hors-ligne',
target='Confidentialité maximale · 100&nbsp;% hors-ligne chez vous.',
setup=5998,
yearly_renewal=500,
capacity_audio='~1&nbsp;100&nbsp;h audio/mois',
capacity_storage='2&nbsp;To SSD',
gpu='RTX 5070&nbsp;Ti 16&nbsp;Go (dédié)',
features=[
'WhisperX Large-v3 · 99&nbsp;%+ précision · 99+ langues',
'Diarisation pyannote (qui parle)',
'Résumés IA + Points d&rsquo;action (Mistral 7B local)',
'Exports SRT, VTT, TXT, JSON, DOCX',
'GPU local dédié · transcription locale',
'Données jamais sortantes (chez vous)',
'500&nbsp;$/an dès An&nbsp;2 (MAJ + support)',
'Aucune limite utilisateurs'
],
cta_label='Configurer DictIA Local'
) }}
</div>
{# Pro+ banner — soumission personnalisée pour grands volumes / SLA renforcé #}
<div class="mt-10 max-w-5xl mx-auto p-6 bg-brand-navy text-white border border-brand-b2/30 rounded backdrop-blur-sm relative overflow-hidden">
<div class="absolute inset-0 pointer-events-none opacity-60" aria-hidden="true"
style="background: radial-gradient(circle at 100% 0%, rgba(192,38,211,0.12) 0%, transparent 55%), radial-gradient(circle at 0% 100%, rgba(6,182,212,0.10) 0%, transparent 55%);"></div>
<div class="relative flex items-center justify-between flex-wrap gap-6">
<div class="flex-1 min-w-[260px]">
<p class="eyebrow grad-text mb-2 text-[11px]">Pro+ · Soumission personnalisée</p>
<h3 class="text-lg font-bold text-white mb-2">Au-delà de Cloud&nbsp;PRO&nbsp;?</h3>
<p class="text-sm text-white/75 leading-relaxed">
&gt;&nbsp;660&nbsp;h audio/mois · &gt;&nbsp;500&nbsp;Go stockage · 7+ utilisateurs intensifs · multi-sites · SLA&nbsp;99,9&nbsp;% · SOC&nbsp;2 Type&nbsp;I/II · PHIPA · PIPEDA Ontario · documentation gouv. (SEAO/MCN).
</p>
</div>
{% from 'macros/button.html' import button %}
{{ button('Demander une soumission', href='/contact?pro-plus=1', variant='primary', size='md') }}
</div>
</div>