docs(development): journaliser le checkpoint A

This commit is contained in:
root 2026-08-23 15:57:32 +00:00
parent c4bfef10b8
commit 29d336e4e3
3 changed files with 176 additions and 0 deletions

View file

@ -0,0 +1,57 @@
# Décisions architecturales 0.2.0-dev.3
Les décisions sont ajoutées au fil des checkpoints. Les modèles existants sont privilégiés avant toute nouvelle table.
## D-000 — Checkpoints indépendants
**CONTEXTE** : le chantier couvre plusieurs domaines avec migrations et risques différents.
**OPTIONS ÉTUDIÉES** : un gros développement continu ; checkpoints commitables.
**CHOIX** : checkpoints A à E, chacun documenté, testé et versionné.
**JUSTIFICATION** : reprise fiable, absence de régression masquée, dépôt source de vérité.
**CONSÉQUENCES** : aucun checkpoint suivant ne démarre avant validation du précédent.
**DATE/COMMIT** : 2026-08-23 / initialisation.
## D-001 — Service de création Equipment
**CONTEXTE** : les routes fiche avancée et wizard construisaient des objets différents et le wizard retrouvait ensuite des équipements par nom.
**OPTIONS ÉTUDIÉES** : conserver les routes indépendantes ; centraliser la construction dans un service.
**CHOIX** : `core.services.equipment_creation.create_equipment`, lot et catégorie facultatifs, retour de l'instance persistée.
**JUSTIFICATION** : évite les collisions de noms et garantit la même gestion de quantité, parent, localisation et génération préventive.
**CONSÉQUENCES** : les anciens parcours sont progressivement migrés ; les relations techniques restent hors `parent_id`.
**DATE/COMMIT** : 2026-08-23 / checkpoint A en cours.
## D-003 — Catégorie et lot facultatifs
**CONTEXTE** : un inventaire peut être saisi avant que le référentiel de maintenance soit complet.
**OPTIONS ÉTUDIÉES** : bloquer toute création sans lot ; accepter un équipement incomplet et le compléter plus tard.
**CHOIX** : la création reste valide sans lot (et sans catégorie dans les parcours wizard) ; un lot fourni est validé et peut déclencher la génération préventive.
**JUSTIFICATION** : respecter le principe de configuration progressive sans fabriquer de maintenance implicite.
**CONSÉQUENCES** : l'interface doit pouvoir signaler ultérieurement « Lot non renseigné » ; les relations techniques restent indépendantes.
**DATE/COMMIT** : 2026-08-23 / checkpoint A.
## D-002 — Durée d'intervention inconnue
**CONTEXTE** : `Intervention.effective_estimated_duration` retournait silencieusement 60 minutes.
**CHOIX** : retourner 0 si aucune estimation ou moyenne historique n'existe ; DayPlanner affiche alors une tâche sans durée à renseigner.
**JUSTIFICATION** : ne pas présenter une estimation arbitraire comme une contrainte métier.
**CONSÉQUENCES** : les statistiques historiques restent inchangées ; les workflows doivent renseigner les interventions planifiables.
**DATE/COMMIT** : 2026-08-23 / checkpoint A en cours.

View file

@ -0,0 +1,81 @@
# Roadmap 0.2.0-dev.3
## Objectif
Faire évoluer la GMAO par checkpoints indépendants, reprenables et testables, depuis la consolidation de la création d'équipements jusqu'aux compteurs, au graphe technique et à la page « À documenter ».
## État initial
- Version : 0.1.0-dev.12
- Migration : j5e6f7a8b9c0
- Docker local : gmao-college:0.1.0-dev.12
- Pytest baseline : 159 passed, 1 failed, 1 error (lookback GMAO historique)
- Benchmark 100 équipements : 214 requêtes après optimisation, génération 3,22 s.
## Protections
Alban, watchdogs, ENT, Outlook, Pronote, Yeastar, IA, secrets, données TEST_UI_* et Ancien menu 76/76 doivent rester inchangés sauf nécessité démontrée.
## Checkpoints
### A — Fondations équipements → 0.2.0-dev.1
- [x] service métier unique de création Equipment ;
- [x] lot facultatif et équipement incomplet accepté ;
- [x] création quantitative/individuelle/groupe/parent homogène ;
- [x] suppression des recherches par nom dans les nouveaux workflows ;
- [x] audit du fallback Intervention 60 minutes ;
- [x] validation des parcours et génération préventive ;
- [x] tests ciblés et pytest complet sans nouvelle régression ;
- [ ] version 0.2.0-dev.1 commitée séparément.
### B — Patrimoine, profils, setup → après A
- [ ] décision RoomType enrichi ou RoomProfile ;
- [ ] profils de locaux et propositions d'équipements ;
- [ ] ouvrages facultatifs ;
- [ ] création en masse et duplication ;
- [ ] setup Essentiel/Maintenance/Avancé ;
- [ ] logements intégrés avec HousingUnit ;
- [ ] charge 200 locaux.
### C — Compteurs, consommations, contrats → 0.2.0-dev.2
- [ ] Meter/MeterReading réutilisés ;
- [ ] périmètre générique et calendrier scolaire ;
- [ ] relevés dans Ma journée ;
- [ ] consommation normalisée et alertes ;
- [ ] quotas globaux photocopieurs ;
- [ ] tests ciblés, complets, migration et version.
### D — Graphe technique générique
- [ ] décision et migration non destructive ;
- [ ] relations techniques génériques ;
- [ ] cascades électricité/eau/gaz/CVC/SSI/informatique ;
- [ ] points de coupure progressifs.
### E — Exploitation / complétude → 0.2.0-dev.3
- [ ] page Patrimoine → À documenter ;
- [ ] navigation des relations ;
- [ ] intégration Centre documentaire ;
- [ ] compteur en retard et anomalies visibles ;
- [ ] benchmark final ;
- [ ] version 0.2.0-dev.3 uniquement si tous les critères sont démontrés.
## Migrations prévues
Uniquement Alembic, non destructives, testées sur installation existante et neuve. Chaque checkpoint décide ses tables après audit des modèles existants.
## Risques / dépendances
- workflows historiques multiples pour Equipment ;
- données de test locales non équivalentes à une validation UI ;
- absence éventuelle de compte fonctionnel de validation ;
- coût N+1 des périmètres et des graphes ;
- règles contractuelles de quotas et calendrier.
## Définition de DONE
Un checkpoint est DONE quand son code, sa migration éventuelle, ses tests ciblés, le pytest complet, sa documentation, son statut et ses commits sont cohérents et poussés sur origin/main et audit/main.

View file

@ -0,0 +1,38 @@
CURRENT VERSION: 0.1.0-dev.12
CURRENT CHECKPOINT: A — validation technique terminée, version à taguer
CURRENT COMMIT: 2fa13d4 (fonctionnel non encore commité)
CURRENT MIGRATION: j5e6f7a8b9c0
DOCKER VERSION: gmao-college:0.1.0-dev.12 (healthy)
LAST FULL TEST: 161 passed, 1 failed, 1 error en 198,60 s — uniquement lookback/configuration GMAO historique et son teardown
LAST TARGETED TEST: 28 passed (service Equipment, maintenance engine, scope, DayPlanner)
BLOCKERS: Aucun nouveau défaut ; les deux erreurs historiques restent autorisées
NEXT ACTION: Commiter le code du checkpoint A, puis versionner 0.2.0-dev.1 et reconstruire Docker
## Avancement
- [x] mémoire de chantier créée ;
- [x] baseline Git/Docker/version vérifié ;
- [x] service commun introduit pour les routes fiche et wizard ;
- [x] lot facultatif accepté par les routes wizard ;
- [x] suppression de la recherche par nom dans le wizard ;
- [x] fallback Intervention 60 minutes supprimé ;
- [x] tests ciblés A (28 passants) ;
- [x] audit A1-A7 ;
- [ ] checkpoint A commit/version ;
- [ ] checkpoint B ;
- [ ] checkpoint C ;
- [ ] checkpoint D ;
- [ ] checkpoint E.
## Reprise
Lire ROADMAP_020_DEV3.md et DECISIONS_020_DEV3.md, puis reprendre sur NEXT ACTION. Ne pas commencer B avant clôture documentée de A.
## Détail checkpoint A
- Le service `core.services.equipment_creation.create_equipment` est utilisé par la fiche Equipment et les deux parcours wizard.
- Catégorie et lot sont facultatifs dans les créations wizard ; une catégorie/lot explicitement invalide reste rejeté.
- Les instances créées sont conservées en mémoire ; aucune recherche post-création par nom n'est effectuée.
- Le fallback silencieux de 60 minutes des interventions est remplacé par une durée inconnue (`0`) quand aucune estimation n'est disponible.
- Les nouveaux tests unitaires couvrent l'équipement sans lot et les noms dupliqués.
- Le test historique `test_gmao_config_caps_lookback_at_one_year` échoue encore (plafond 9000 au lieu de 8760) et son teardown échoue sur `gmao_context.user_id` NULL ; aucune nouvelle régression observée.