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