gmao/docs/ui-audit/PREVENTIVE_CATALOG_AUDIT.md
root 0f6770611f
Some checks are pending
CI - Tests et Syntax / lint-and-test (push) Waiting to run
feat(preventive): embed historical lot task catalogue
2026-08-23 12:08:05 +00:00

3.1 KiB

Audit du catalogue préventif historique

Date : 2026-08-23
Source de référence : /opt/gmao/dump_sql_base_remplie.sql (lecture seule)

Tables analysées

Table Lignes dans le dump Utilité
equipment_categories 36 catégories patrimoniales
lots 92 lots, catégorie par category_id, présence
lot_tasks 330 référentiel historique des actions par lot_id
preventive_tasks 0 ancienne table, structure présente mais aucune donnée
scheduled_tasks 516 échéances historiques, pas le catalogue initial

Le modèle actuel utilise LotTask, et non preventive_tasks, pour les règles préventives. Le dump contient 36 catégories et 92 lots, déjà représentés dans setup_catalog.py; il manquait les 330 lignes de lot_tasks.

Durée et périodicité

  • 330 tâches ont été extraites sans modification des valeurs historiques ;
  • 5 tâches ont une duree_minutes renseignée ; 325 ont une durée inconnue ;
  • 327 ont une périodicité textuelle ; 3 ont une périodicité vide ;
  • les valeurs jours_entre_interventions, type, contrat, gestionnaire, déclenchement et politiques ont été conservées lorsqu'elles existent.

La valeur de 60 minutes de LotTask.effective_duration() n'est pas présente dans le dump : c'est un fallback du code actuel, pas une donnée historique. Elle reste temporairement compatible avec les anciennes données, mais une tâche sans durée doit être signalée avant une validation métier définitive.

Catalogue embarqué

app_new/core/preventive_catalog.py contient une extraction compressée et figée des 330 tâches. Le dump n'est jamais ouvert par l'application. Le module expose LOT_TASKS, utilisé par le setup wizard et les tests.

Le wizard crée les catégories, les lots sélectionnés et leurs tâches. La clé fonctionnelle de tâche est (lot, tache) ; une ligne déjà existante n'est pas écrasée, afin de préserver une personnalisation locale. Les éléments manquants sont ajoutés. La seconde exécution est donc idempotente.

Relation équipement

Equipment.lot_id -> Lot.id, avec héritage par parent.effective_lot_id. Les tâches sont donc visibles via le lot effectif et peuvent générer des ScheduledTask pour les équipements actifs. Un équipement rebuté ou supprimé ne doit pas produire de nouvelle échéance.

Première échéance

Le mécanisme actuel generate_due_tasks() calcule la première échéance à partir de la date de génération et de jours_entre_interventions/périodicité. Le dump ne fournit pas une date de première échéance catalogue. Une règle métier explicite (date d'association, prochaine échéance saisie ou campagne) reste à valider avant une automatisation plus ambitieuse.

Écarts et limites

  • le catalogue est maintenant complet pour les tables historiques validées ;
  • les tâches sans durée restent à renseigner pour une planification fiable ;
  • la validation bout en bout par interface (installation, association d'un équipement, génération, Ma journée) reste à exécuter avec un compte UI ;
  • preventive_tasks est documentée mais vide et n'est pas importée.