diff --git a/docs/coordination/decisions/2026-06-02_dom_d14-plateforme-licence-architecture.md b/docs/coordination/decisions/2026-06-02_dom_d14-plateforme-licence-architecture.md new file mode 100644 index 0000000..eebbd91 --- /dev/null +++ b/docs/coordination/decisions/2026-06-02_dom_d14-plateforme-licence-architecture.md @@ -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.