# TRAIL DPS 4.2 - LOT 11.17 - Consolidation source OVH licence usage

Date de livraison : 2026-05-28
Périmètre : OVH licence / supervision commerciale LOT 11
Type : consolidation source, sans modification des mots de passe ni des fichiers de configuration sensibles

## Objectif

Réaligner le dossier source OVH avec le code fonctionnel validé en production lors des lots 11.15 / 11.16 :

- chargement PHP robuste sur hébergement Linux sensible à la casse (`SRC` puis fallback `src`) ;
- présence d’un miroir complet `ovh/src` pour éviter toute régression si un ancien bootstrap charge encore le chemin minuscule ;
- persistance réelle des snapshots PLACE dans `license_usage_stats` avec `source = PLACE_LICENSE_CHECK` ;
- conservation du compteur SMS OVH lors des checks PLACE ;
- génération d’un résumé commercial consolidé pour l’administration licence ;
- signature licence contenant `license_usage` compatible avec le correctif PLACE LOT 11.16.

## Fichiers modifiés ou ajoutés

### Modifiés

- `ovh/config/bootstrap.php`
- `ovh/SRC/LicenseService.php`
- `ovh/SRC/LicenseRepository.php`

### Ajoutés / consolidés

- `ovh/src/AdminUi.php`
- `ovh/src/Database.php`
- `ovh/src/Http.php`
- `ovh/src/LicenseCrypto.php`
- `ovh/src/LicenseFingerprint.php`
- `ovh/src/LicenseRepository.php`
- `ovh/src/LicenseService.php`
- `ovh/sql/lot_11_17_verification_consolidation_source_ovh.sql`
- `ovh/docs/LOT_11_17_2026_05_28_CONSOLIDATION_SOURCE_OVH_USAGE_LICENCE.md`

## Détails techniques

### 1. Bootstrap OVH

Le bootstrap charge prioritairement `ovh/SRC`, puis bascule sur `ovh/src` si nécessaire. Les fichiers essentiels sont contrôlés avant `require_once` afin de produire une erreur JSON explicite au lieu d’une erreur fatale PHP non maîtrisée.

### 2. Persistance PLACE_LICENSE_CHECK

Le endpoint `api/license/check.php`, via `LicenseService::check()`, lit désormais les métriques locales envoyées par PLACE et appelle `LicenseRepository::recordUsageSnapshotFromClient()`.

Les métriques attendues sont notamment :

- `rolling_425_course_count` ou `rolling_365_course_count` ;
- `sms_sent_count` ;
- `active_events_count` ;
- `active_runs_count` ;
- `usage_window_days` ;
- `computed_at`.

### 3. Consolidation SMS + PLACE

Le compteur SMS OVH existant est préservé. Un check PLACE avec `sms_sent_count = 0` ne doit pas écraser le compteur SMS déjà comptabilisé côté serveur.

### 4. Schéma license_usage_stats

Le repository crée la table si elle n’existe pas et vérifie aussi les colonnes nécessaires. Cette vérification est non destructive.

## Contrôles après déploiement

1. Ouvrir l’administration licence.
2. Lancer ou redémarrer TRAIL DPS en mode PLACE pour provoquer un check licence.
3. Vérifier dans `license_audit_log` la présence de :

```text
server_code_version = lot-11.17-ovh-source-consolidated
local_usage_received = true
local_usage_persisted = true
```

4. Vérifier dans `license_usage_stats` la présence d’une ligne :

```text
source = PLACE_LICENSE_CHECK
rolling_365_course_count = 20
sms_sent_count >= compteur SMS OVH existant
active_events_count = 2
active_runs_count = 2
```

## Points volontairement non traités

- Paramétrage complet des éditions commerciales Starter / Pro / Business / Enterprise.
- Refonte complète de l’affichage admin de la supervision commerciale.
- Jauges et alertes quotas côté PLACE.
- Exports de refacturation SMS.
- Mode secours / lecture seule, abandonné dans le périmètre actuel.
