# TRAIL DPS - V1 collaborative - LOT 3 - Train unique de livraison

Date de production : 4 août 2026

## Références figées

- PLACE : dernier code source transmis après le correctif de fin de LOT 2 ; version de sortie `4.2.7-lot3.0.0`.
- SQLite collaboratif : `2.7.0`, sans migration dans ce train.
- Workspace STAGING et RESTORE : `1.1.0-lot3`.
- API : `workspace_api_v1` conservée.
- Snapshot : `sas_sync_v1` conservé.
- Tracking : aucune modification de fin de LOT 2 reçue ; les seules évolutions Tracking de ce train sont les ajouts LOT 3 relatifs à l'attribution SMS et à l'API interne HMAC.
- Applications mobiles : aucune modification, aucun réenrôlement.

## Quatre ZIP du train

1. `TRAIL_DPS_OVH_LOT3_INCREMENTAL_2026-08-04.zip` ;
2. `TRAIL_DPS_WORKSPACE_STAGING_1.1.0_LOT3_INCREMENTAL_2026-08-04.zip` ;
3. `TRAIL_DPS_WORKSPACE_RESTORE_1.1.0_LOT3_INCREMENTAL_2026-08-04.zip` ;
4. `TRAIL_DPS_PLACE_4.2.7_LOT3_INCREMENTAL_2026-08-04.zip`.

Chaque archive est incrémentielle, conserve l'arborescence de sa destination et contient uniquement les fichiers nouveaux ou modifiés, les scripts de déploiement/rollback, la documentation et les manifestes SHA-256.

## Périmètre fonctionnel

1. Organisations clientes, souscriptions et périodes commerciales.
2. Migration historique : une organisation et une souscription par licence, sans fusion automatique.
3. PRO : trois licences techniques `INCLUDED`.
4. Licences `ADDITIONAL` vendables sans augmentation automatique des quotas.
5. STARTER et MONOPOSTE historique : collaboration et partage photo toujours désactivés.
6. Regroupement manuel à la période suivante ; effet immédiat uniquement sur demande explicite et auditée.
7. Désignation du premier `ADMIN_ORGA` depuis l'administration Licence.
8. Gestion complète des membres : liste, invitation, renvoi, annulation, rôle, révocation, réactivation et reset.
9. Rôles : `ADMIN_ORGA`, `RESPONSABLE_DPS`, `RESPONSABLE_SECURITE`, `PREPARATEUR`, `LECTURE_SEULE`, `PC_COURSE`.
10. `ADMIN_POSTE` reste strictement local.
11. Quotas mutualisés au niveau de la souscription et maintenus en mode `OBSERVATION` pendant la recette.
12. Courses distinctes persistantes par période, y compris après suppression.
13. Stockage par souscription incluant la corbeille restaurable.
14. SMS jamais bloqués ; attribution différée si Licence est indisponible.
15. Synthèse/facturation SMS par souscription, détail conservé par licence émettrice, exclusion des lignes non attribuables.
16. Échanges Licence/Workspace/Tracking par APIs internes HMAC avec timestamp et nonce anti-rejeu.
17. Aucun accès SQL métier croisé entre Licence et Tracking.
18. Payload Licence additif et rétrocompatible.
19. Renouvellement groupé conservant clés et activations.

## Limites volontaires

- Aucun expéditeur d'email n'est intégré : les jetons d'invitation et de reset sont affichés une seule fois puis transmis par un canal sûr.
- Les migrations sont additives ; un rollback applicatif ne supprime pas les nouvelles tables/colonnes.
- Les secrets réels restent exclusivement dans les configurations serveur non livrées.
- La mise en production globale reste interdite avant la recette finale et les contrôles de non-régression.

## Ordre obligatoire de déploiement

1. Sauvegarder les codes et les bases `synolui94`, `synoluidpstrack`, `synoluisharing`, `synoluirestor`.
2. Déployer OVH, appliquer les migrations, migrer les licences historiques, contrôler les activations.
3. Déployer Workspace STAGING et appliquer la migration `005`.
4. Synchroniser Licence vers Workspace STAGING.
5. Déployer Workspace RESTORE et appliquer la migration `005`.
6. Réaliser une restauration coordonnée et ses contrôles.
7. Déployer PLACE sur un poste de recette.
8. Recetter organisations, souscriptions, membres, licences et consommations.
9. Conserver les quotas numériques en observation.
10. Recetter LIVE, Tracking, Fil de Course et mobile sans réenrôlement.

## Recette organisation et membres

- créer une organisation PRO et vérifier trois licences `INCLUDED` ;
- ajouter une licence `ADDITIONAL` et vérifier que les quotas restent inchangés ;
- désigner le premier `ADMIN_ORGA` et accepter son invitation dans PLACE ;
- inviter un membre pour chaque rôle ;
- vérifier les droits de lecture, modification, publication et administration ;
- modifier un rôle et renouveler la session ;
- révoquer puis réactiver un membre ;
- créer et utiliser un jeton de reset ;
- vérifier qu'une invitation en attente réserve une place ;
- vérifier l'isolation entre deux organisations ;
- vérifier la protection du dernier `ADMIN_ORGA` ;
- vérifier STARTER sans collaboration ni photo.

## Recette consommations et facturation

- une même course sur deux postes compte une fois ;
- une duplication avec nouvel UUID compte une unité ;
- une suppression ne restitue pas l'unité ;
- les fichiers en corbeille restaurable sont comptés ;
- les SMS de plusieurs licences sont consolidés sur la souscription ;
- le quota SMS n'est appliqué qu'une fois par souscription ;
- le détail CSV conserve la licence technique émettrice ;
- un SMS non attribuable n'est jamais facturé automatiquement ;
- aucun SMS ni LIVE n'est bloqué par une indisponibilité commerciale ;
- les états `COMPLETE`, `PARTIAL`, `STALE` ou `UNAVAILABLE` restent visibles ;
- `quota_status.mode = OBSERVATION` et `blocking_enabled = false`.

## Non-régression

- activation, contrôle et rebind d'une licence historique ;
- mode hors ligne PLACE ;
- publication, récupération, conflits et photos collaboratives ;
- ouverture/fermeture d'un LIVE local ;
- Tracking GPS et SMS existants ;
- Fil de Course web/mobile ;
- aucun changement des deep links, tokens, bindings ou payloads mobiles.

## Rollback

Chaque script crée une sauvegarde des fichiers remplacés et une liste des fichiers ajoutés. Le rollback restaure les anciens fichiers et retire uniquement les nouveaux fichiers du train. Les schémas LOT 3 restent en place car ils sont additifs et rétrocompatibles.
