# TRAIL DPS 4.2.9 - Hotfix OVH - consommation Licence selon le profil Workspace actif

Date : 19 août 2026

## Objet

Corriger le rafraîchissement automatique des consommations Licence déclenché par PLACE après publication Workspace dans un contexte multi-organisations.

Le calcul manuel depuis l'administration Licence (`Actualiser consommations`) était correct. En revanche, lors du `check` automatique envoyé par PLACE, `LicenseService` recalculait `subscription_usage` à partir de la souscription historiquement liée à la licence technique du poste, alors que PLACE transmet déjà `organization_uuid` et `subscription_uuid` du profil Workspace actuellement ouvert.

Conséquence observée : l'événement et sa course étaient bien publiés et comptabilisés dans Workspace, mais le snapshot de la souscription active (ex. STARTER DEMO) n'était créé/rafraîchi qu'après action manuelle dans l'administration Licence.

## Correction

### `SRC/LicenseService.php`

- version serveur portée à `lot-3.2.8-active-workspace-usage-scope` ;
- lecture des champs additifs `organization_uuid` et `subscription_uuid` déjà envoyés par PLACE ;
- validation puis résolution du contexte commercial correspondant au profil Workspace actif ;
- `SubscriptionUsageService::latestOrCompute()` cible désormais cette souscription lorsque le contexte Workspace est valide ;
- conservation de l'identité technique réelle du poste (`technical_license`, clé, fingerprint, installation) ;
- alignement des champs commerciaux historiques (`edition_code`, quotas, features et dates de souscription) sur le profil actif afin que les clients existants ne présentent pas l'ancienne souscription technique ;
- ajout de métadonnées de diagnostic `commercial_scope_source` et `workspace_scope_error` ;
- en cas de contexte demandé invalide ou indisponible, la licence technique reste non bloquante et le serveur revient au contexte historique. PLACE conserve alors son garde-fou de contexte obsolète et n'affiche pas de consommation d'une autre organisation.

### `SRC/SubscriptionService.php`

Ajout de `contextByWorkspaceScope()` avec contrôles :

- UUID canoniques ;
- souscription existante ;
- correspondance stricte organisation / souscription ;
- organisation ACTIVE ;
- souscription ACTIVE ;
- `workspace_access_enabled=true` ;
- période commerciale ACTIVE disponible.

Ce contrôle change le contexte commercial présenté/calculé, mais ne remplace jamais l'authentification de la licence technique : la clé, le fingerprint machine et l'installation restent vérifiés avant toute résolution Workspace.

### `public/admin/organizations.php`

Le libellé ambigu `Synchroniser Workspace` devient :

`Synchroniser configuration vers Workspace`

Cette action pousse uniquement la projection commerciale Licence vers Workspace. `Actualiser consommations` reste l'action manuelle Workspace/Tracking -> Licence.

Le retour d'action distingue également une synchronisation réalisée d'une synchronisation restée en attente.

## Base de données

Aucune migration MySQL n'est nécessaire.

Aucune modification SQLite / PLACE n'est nécessaire.

Aucune modification Workspace n'est nécessaire pour ce hotfix.

## Déploiement

Décompresser le ZIP à la racine correspondant au parent du dossier `ovh/`, en conservant l'arborescence.

Fichiers applicatifs remplacés :

- `ovh/SRC/LicenseService.php`
- `ovh/SRC/SubscriptionService.php`
- `ovh/public/admin/organizations.php`

Le fichier de test `ovh/tests/lot3_contracts.php` est également livré pour traçabilité et validation.

Aucun script SQL ou script de normalisation n'est à exécuter pour ce lot.

## Recette recommandée

1. Ouvrir PLACE sur une organisation STARTER dont le Workspace est actif.
2. Créer ou modifier une course puis publier les changements vers Workspace.
3. Laisser PLACE effectuer son contrôle Licence forcé après publication.
4. Ouvrir l'administration Licence OVH sans cliquer sur `Actualiser consommations`.
5. Vérifier que la souscription de l'organisation active possède déjà son snapshot et affiche le nouveau total des courses / SMS.
6. Contrôler que le bandeau PLACE affiche bien l'édition et les quotas de l'organisation Workspace active.
7. Changer d'organisation et vérifier qu'aucune consommation de l'organisation précédente n'est affichée pendant le changement de contexte.

## Validation réalisée avant livraison

- `php -l` : 119 fichiers PHP contrôlés, aucune erreur de syntaxe ;
- `tests/lot3_contracts.php` : 84 / 84 ;
- `tests/live_sms_report_contracts_20260809.php` : 3 / 3.

## Compatibilité / rollback

Le changement est additif sur le contrat HTTP : les clients anciens qui n'envoient pas de contexte Workspace continuent à utiliser le contexte de leur licence technique.

Rollback applicatif : restaurer les trois fichiers applicatifs précédents. Aucune migration de base n'étant réalisée, aucun rollback SQL n'est requis.
