# TRAIL DPS 4.2 - LOT 11.21 - Recalculs usage licence et fenêtre 300 jours

## Objet

Ce lot ajoute les recalculs d'usage licence après les mutations métier PLACE et remplace la fenêtre commerciale courses de 425 jours par 300 jours.

## Modifications PLACE

- `SRC/Services/license_usage_service.py`
  - Fenêtre commerciale `USAGE_WINDOW_DAYS = 300`.
  - Ajout de `rolling_300_course_count` dans le payload transmis à OVH.
  - Conservation des champs historiques `rolling_365_course_count` et `rolling_425_course_count` pour compatibilité avec la colonne SQL existante et les anciens lots.
  - Ajout de recalculs non bloquants `record_license_usage_recalculation()` après mutations métier.
  - Ajout du recalcul manuel `recalculate_license_usage_now()`.

- `SRC/Services/event_service.py`
  - Recalcul après création, modification et duplication d'événement.

- `SRC/Services/course_service.py`
  - Recalcul après création et modification de course.

- `SRC/Services/run_service.py`
  - Recalcul après ouverture et fermeture de run LIVE.

- `SRC/Pages/main_window.py`
  - Ajout du menu `Application > Recalculer usage licence`.
  - Rafraîchissement du bandeau licence après recalcul manuel.

- `SRC/Services/license_api_client.py`
  - Marqueur client `lot-11.21-place-recalc-300d`.
  - Transmission de `usage_window_days = 300`.

- `SRC/Services/license_commercial_status_service.py`
  - Libellés PLACE basculés de 425 jours à 300 jours.

## Modifications OVH

- `ovh/SRC/LicenseService.php`
  - Marqueur serveur `lot-11.21-ovh-recalc-300d`.
  - Signature licence enrichie avec `quota_status.usage_window_days = 300`.
  - Lecture prioritaire de `rolling_300_course_count`, avec fallback legacy.

- `ovh/SRC/LicenseRepository.php`
  - Persistance `PLACE_LICENSE_CHECK` compatible 300 jours.
  - Conservation du compteur SMS OVH existant pour éviter tout écrasement par PLACE.

- `ovh/public/admin/index.php` et `ovh/public/admin/license.php`
  - Libellés quota courses et supervision basculés à 300 jours.

## Contrôles après déploiement

1. Lancer TRAIL DPS PLACE.
2. Ouvrir `Application > Recalculer usage licence`.
3. Vérifier dans la base locale `license_usage_stats` qu'une ligne `LOCAL_PLACE_MANUAL_UI` est créée avec `usage_window_days = 300`.
4. Déclencher un check licence.
5. Vérifier côté OVH dans `license_audit_log` :
   - `client_version = lot-11.21-place-recalc-300d`
   - `server_code_version = lot-11.21-ovh-recalc-300d`
   - `local_usage_received = true`
   - `local_usage_persisted = true`
6. Vérifier côté OVH dans `license_usage_stats` :
   - `source = PLACE_LICENSE_CHECK`
   - `details_json.usage_window_days = 300`

## Remarque de compatibilité

La colonne SQL reste nommée `rolling_365_course_count` pour éviter une migration destructive. Le sens fonctionnel de cette colonne est désormais défini par `details_json.usage_window_days = 300` et par le champ transmis `rolling_300_course_count`.
