docs(decision): D-14 architecture plateforme licence app.aivanov.fr

Acte la décision Dom sur l'architecture du système licence post-MVP :

## Choix clé : plateforme client centralisée (pas de licence locale isolée)

- Hébergement : infra OVH existante Dom (HDS, ISO 27001, ultra-HA)
- Domaine : app.aivanov.fr (extensible à d'autres apps Dom)
- Stack : FastAPI + PostgreSQL + HTMX/Jinja2 + fastapi-users + Brevo
- Côté programme : RSA-PSS 2048 signé, vérif locale + phone home 30j

## Modèle métier

- 1 licence = 1 poste (modèle Microsoft Office classique)
- Abonnement annuel
- Grace period expiration : 15 jours
- Mode hors-ligne max : 30 jours
- Révocation : effective au prochain check
- Paiement intégré : Phase 3 (post-août)

## Pourquoi self-hosted (vs Keygen.sh SaaS)

- Souveraineté : données en France (HDS obligatoire pour santé)
- Économie long terme (50 clients ROI < 1 an)
- Évite dépendance à un tiers américain
- Customisation totale (futures intégrations Pro Santé Connect)
- Dom dispose déjà de l'infra OVH HDS/ISO 27001

## Roadmap

- Phase 0 (bêta Réunion) : pas de licence, livraison directe
- Phase 1.1 (juin-juillet) : module license.py côté programme (~12h)
- Phase 1.2 (juin-juillet) : plateforme MVP (~50h)
- Phase 2 (août) : self-service complet (~40h)
- Phase 3 (post-août) : paiement intégré (~60h)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-02 18:36:23 +02:00
parent 91c51514de
commit 1e7941108f

View File

@@ -0,0 +1,90 @@
---
from: dom
to: all
date: 2026-06-02T17:30:00+02:00
topic: d14-plateforme-licence-architecture
status: closed
priority: high
references:
- decision: 2026-06-02_dom_mvp-pivots-strategiques.md (D-14)
---
# D-14 — Architecture plateforme licence client
## Vision
Plutôt qu'un système de licence locale (clé à émettre + envoyer à chaque
client), construire une **plateforme client centralisée** sur le sous-
domaine `app.aivanov.fr` qui permet :
- Au client : se connecter, activer ses postes, télécharger l'application
- À Dom : gérer abonnements, voir le parc, envoyer les renouvellements
Évite la gestion manuelle de 2000 clés et le besoin de partage OwnCloud.
## Architecture validée
### Côté plateforme (serveur)
| Composant | Choix |
|---|---|
| Hébergement | **Infra OVH existante** (HDS, ISO 27001, ultra-HA) |
| Backend | **FastAPI** (Python, cohérent stack) |
| DB | **PostgreSQL** |
| Front-end | **HTMX + Jinja2** (server-side, déploiement simple) |
| Auth | **fastapi-users** (email/password) |
| Email transactionnel | **Brevo** (gratuit < 300/jour) |
| Domaine | **app.aivanov.fr** |
| HTTPS | Reverse proxy (Caddy ou nginx) Let's Encrypt |
| CI/CD | GitHub Actions + déploiement SSH |
### Côté programme (client EXE)
| Composant | Détail |
|---|---|
| Module licence | Nouveau `license.py` côté programme |
| Algorithme | RSA-PSS 2048 + SHA256 (clé publique embarquée, privée côté serveur) |
| Format licence | JSON signé : `{machine_id, client_id, expires_at, version, signature}` |
| Stockage local | `license.dat` chiffré DPAPI Windows / chiffré simple Linux/Mac |
| Phone home | Vérification serveur toutes les 30 jours max |
## Décisions de modèle métier
| Sujet | Décision |
|---|---|
| **Modèle licence** | 1 licence = 1 poste (1 machine_id), modèle Microsoft Office classique |
| **Abonnement** | Annuel |
| **Grace period expiration** | 15 jours après date d'expiration → mode dégradé (peut anonymiser, bannière "Licence expirée") |
| **Mode hors-ligne max** | 30 jours sans connexion à la plateforme → puis demande de phone home |
| **Révocation** | Effective au prochain check (pas instantané, évite besoin de connexion permanente) |
| **Paiement intégré** | Phase 3 (post-août) — d'abord facturation manuelle |
## Roadmap
| Phase | Quand | Effort | Détail |
|---|---|---|---|
| **Phase 0** Bêta Réunion | Cette semaine | 0h licence | Pas de licence (1 utilisateur connu) |
| **Phase 1.1** Licence côté programme | Juin-juillet | ~12h | Module `license.py` (RSA verify + cache local) |
| **Phase 1.2** Plateforme MVP | Juin-juillet | ~50h | Login + page « Mes licences » + activation + DL |
| **Phase 2** Self-service complet | Août | ~40h | Auto-onboarding, notifications expiration, audit logs |
| **Phase 3** Paiement intégré | Post-août | ~60h | Stripe ou Mollie, renewal automatique, factures auto |
## Cible commerciale
- **6-12 mois** : 50 clients (hôpitaux, cabinets)
- **Tarif estimé** : ~250-500€/an par poste
- **Coûts plateforme** : intégrés dans l'infra OVH existante (marginal)
## Avantages stratégiques
1. **Souveraineté** : données client en France, HDS, ISO 27001
2. **Économie** : pas de SaaS tiers (Keygen.sh évité)
3. **Customisation** : ajout fonctionnalités spécifiques santé (intégration Pro Santé Connect plus tard)
4. **Distribution** : remplace OwnCloud, plus pro
5. **Évolutivité** : la plateforme peut servir aussi pour d'autres apps (`medical_ai_scribe`, `t2a_v2`, etc.) sous le même `app.aivanov.fr`
## Note pour Phase 0 (bêta Réunion)
Le programme livré au bêta-testeur Province Bêta **ne contient pas** de
système de licence. Le bêta est un cas spécial (1 utilisateur connu,
phase de validation). L'intégration licence vient en Phase 1.1.