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:
@@ -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.
|
||||
Reference in New Issue
Block a user