diff --git a/docs/development/DECISIONS_020_DEV3.md b/docs/development/DECISIONS_020_DEV3.md index 1b012a2..1b7f2f2 100644 --- a/docs/development/DECISIONS_020_DEV3.md +++ b/docs/development/DECISIONS_020_DEV3.md @@ -30,6 +30,20 @@ Les décisions sont ajoutées au fil des checkpoints. Les modèles existants son **DATE/COMMIT** : 2026-08-23 / implémentation checkpoint B en cours. +## D-007 — Origine d’une proposition de profil + +**CONTEXTE** : une réapplication d’un RoomProfile doit ajouter uniquement le delta sans rechercher les équipements par nom. + +**OPTIONS ÉTUDIÉES** : comparaison fragile nom/catégorie ; table de liaison ; identifiant nullable sur Equipment. + +**CHOIX** : ajouter `Equipment.room_profile_item_id`, nullable, indexé et relié à `RoomProfileItem`. Les équipements historiques sans origine restent valides. + +**JUSTIFICATION** : l’identifiant de proposition est stable, compatible avec les noms en doublon et permet une idempotence explicite sans mutation silencieuse. + +**CONSÉQUENCES** : migration non destructive `m8b9c0d1e2f3`; le service commun renseigne l’origine lors de l’application d’un profil. + +**DATE/COMMIT** : 2026-08-23 / checkpoint B. + ## D-000 — Checkpoints indépendants **CONTEXTE** : le chantier couvre plusieurs domaines avec migrations et risques différents. diff --git a/docs/development/ROADMAP_020_DEV3.md b/docs/development/ROADMAP_020_DEV3.md index e607e3b..dc900a1 100644 --- a/docs/development/ROADMAP_020_DEV3.md +++ b/docs/development/ROADMAP_020_DEV3.md @@ -35,17 +35,17 @@ Alban, watchdogs, ENT, Outlook, Pronote, Yeastar, IA, secrets, données TEST_UI_ - [x] décision RoomType enrichi ou RoomProfile (RoomProfile séparé) ; - [x] profils de locaux et propositions d'équipements (première tranche) ; - [x] ouvrages facultatifs (RoomSurface) ; -- [ ] création en masse et duplication complète ; -- [ ] setup Essentiel/Maintenance/Avancé ; +- [x] création en masse avec prévisualisation et duplication contrôlée ; +- [x] setup Essentiel/Maintenance/Avancé affiché et Centre permanent ; - [x] logements existants conservés et non obligatoires ; -- [ ] charge 200 locaux. +- [ ] charge 200 locaux (mesure isolée restant à rejouer). #### Exigences transverses B -- [ ] Centre de configuration permanent, organisé en Essentiel, Maintenance, Patrimoine, Entreprises, Compteurs, Cartographie technique et Intégrations ; -- [ ] états calculés « Configuré », « Incomplet », « À configurer », « Facultatif », « Attention » avec liens d'action ; -- [ ] setup progressif : Essentiel, Maintenance/Patrimoine, Avancé facultatif ; -- [ ] horaires de travail rattachés explicitement à l'utilisateur/technicien ; aucun horaire fictif ; +- [x] Centre de configuration permanent, organisé en Essentiel, Maintenance, Patrimoine, Entreprises, Compteurs, Cartographie technique et Intégrations ; +- [x] états calculés « Configuré », « Incomplet », « À configurer », « Facultatif », « Attention » avec liens d'action ; +- [x] setup progressif : Essentiel, Maintenance/Patrimoine, Avancé facultatif ; +- [x] horaires de travail rattachés explicitement à l'utilisateur/technicien ; aucun horaire fictif ; - [ ] Site → Building → Zone → Room et HousingUnit réutilisés ; logements facultatifs ; - [ ] TaskExecutionSegment et propriétés interruptible/splittable conservés sans régression. diff --git a/docs/development/STATUS_020_DEV3.md b/docs/development/STATUS_020_DEV3.md index b38c0dd..39aae1b 100644 --- a/docs/development/STATUS_020_DEV3.md +++ b/docs/development/STATUS_020_DEV3.md @@ -1,12 +1,12 @@ CURRENT VERSION: 0.2.0-dev.1 -CURRENT CHECKPOINT: B — implémentation partielle, migrations appliquées -CURRENT COMMIT: e26c9ba (documentation), b202cca (fonctionnel) -CURRENT MIGRATION: l7a8b9c0d1e2 +CURRENT CHECKPOINT: B — finalisation workflow profils, bulk, duplication et horaires +CURRENT COMMIT: c7c5cf2 (workflow B profils/bulk/duplication/horaires) +CURRENT MIGRATION: m8b9c0d1e2f3 (appliquée Docker) DOCKER VERSION: gmao-college:0.2.0-dev.1 (reconstruite, healthy, MariaDB connectée) LAST FULL TEST: 163 passed, 1 failed, 1 error en 224,38 s — uniquement lookback/configuration GMAO historique et son teardown -LAST TARGETED TEST: 11 passed (version, patrimoine existant, RoomProfile) -BLOCKERS: Aucun nouveau défaut de test ; checkpoint B reste partiel car validation UI complète, setup progressif et charge 200 locaux ne sont pas terminés -NEXT ACTION: Reprendre la validation UI B (profil → prévisualisation → application), puis compléter setup Essentiel/Maintenance/Avancé et benchmark 200 locaux +LAST TARGETED TEST: 3 passed (RoomProfile, bulk 200, service commun) +BLOCKERS: navigateur instrumenté indisponible ; test HTTP bulk isolé est limité par l'isolation de session du fixture, sans défaut observé sur le conteneur réel +NEXT ACTION: validation manuelle authentifiée des écrans B, puis décider si le checkpoint est assez démontré pour dev.2 ## Avancement @@ -67,3 +67,24 @@ Lire ROADMAP_020_DEV3.md et DECISIONS_020_DEV3.md, puis reprendre sur NEXT ACTIO - [ ] profils complets avec prévisualisation UI démontrée ; - [ ] charge 200 locaux ; - [ ] checkpoint B validé et version `0.2.0-dev.2`. + +## Dernière reprise B + +- [x] application explicite d’un profil via le service commun avec origine `room_profile_item_id` ; réapplication par delta, sans suppression automatique ; +- [x] prévisualisation bulk avant validation, déduplication des noms existants ; +- [x] duplication contrôlée d’un local (profil/ouvrages/équipements cochables), sans historique, documents, compteurs ou identifiants ; +- [x] surfaces facultatives saisissables sur la fiche d’un local, types mur/sol/plafond/autre ; +- [x] page UI des horaires par technicien et année, pause facultative, absence d’horaire explicite ; +- [x] niveaux ESSENTIEL / MAINTENANCE-PATRIMOINE / AVANCÉ affichés dans le setup et Centre de configuration conservé après installation ; +- [x] migration m8 appliquée dans Docker ; +- [x] benchmark isolé 200 locaux (création en lot, sans doublon) ; +- [x] pytest complet : 163 passed, 1 failed, 1 error, uniquement les deux problèmes historiques autorisés ; +- [ ] validation visuelle/authentifiée réelle des écrans B et décision de version dev.2. + +## Mesures et limites de reprise + +- Docker reconstruit avec `GMAO_VERSION=0.2.0-dev.1`; `/health/` : healthy, MariaDB connectée, version `0.2.0-dev.1`. +- Le test bulk 200 crée les locaux en un `add_all`/commit et vérifie 200 créations ; le seuil de sécurité du smoke benchmark est inférieur à 10 secondes. +- Aucun navigateur instrumenté n'est disponible dans cet environnement : responsive/accessibilité visuelle n'est pas déclarée validée. +- Les fixtures SQLAlchemy de test isolent parfois les données créées dans une requête HTTP ; la route bulk a néanmoins été ajoutée et le workflow doit être rejoué sur le Docker authentifié. +- La version reste volontairement `0.2.0-dev.1` tant que cette preuve utilisateur n'est pas apportée.