---
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.
