Skip to content

Feuille de route — application du méta-modèle de dimensions

Ce document décline en phases l'application de meta-modele-dimensions.md au produit « Rapport ». Il est vivant : chaque phase est livrable indépendamment.

État du modèle actuel (constat)

  • Faits : une seule table Movement (schéma en étoile) — montant signé par (source/connectionId, scénario [reel|budget|n1], accountCode, analytiqueCode, establishmentCode, seg2/3/4Code, year, month). Maille mois.
  • Dimensions : arbres DimNode (profondeur illimitée, CRUD + drag-drop). Le lien fait↔dimension se fait par DimNode.code == Movement.[axisField].
  • Attributs : DimAttribute / DimAttributeValue (valeur par nœud, flag agrégeable) — infrastructure prête pour « segments = attributs d'entité ».
  • Référentiels : stockés dans Movement via la connexion « Saisie Rapport » (type=saisie, kind=statistique, consolidation moyenne). Saisie manuelle.
  • Segments seg2/3/4 : codes libres sur Movement, axes plats indépendants (aucun lien avec l'établissement).
  • Libellés d'axes (AXES) : codés en dur ; « Structure » non paramétrable.
  • Entités individuelles (Résident/Salarié) : aucun registre (hors ForecastEmployee, périmètre étroit).

Classification en 4 blocs (dérivée, sans champ dédié)

BlocRègle dérivée
Axes sourceaxis === 'compte' && kind !== 'statistique' (groupé/trié par domain)
Référentielskind === 'statistique'
Segments d'analyseaxis ∈ {analytique, segment2, segment3, segment4} (vides masqués)
Communes / Temporelaxis ∈ {mois, annee, phase}
Communes / Structurelaxis === 'etablissement'

domain (finance/rh/metiers) porte un label = la source affichée en tag.

Phases

Phase 1 — Réorganisation d'affichage en 4 blocs ✅ (livrée)

Bandeau « Modélisation » réorganisé en 4 blocs pilotés par les règles dérivées ci-dessus, sans aucun changement en base :

  • Axes source (tags source Finance/RH/Métiers), Référentiels, Segments d'analyse (axes vides masqués, libellés lisibles via override frontend), Dimensions communes (Temporel + Structurel avec Établissement).
  • Fichiers : apps/web/src-vue/src/App.vue, apps/web/src-vue/src/style.css.
  • Maille mois conservée. Réversible.

Phase 2 — Structure & libellés paramétrables

  • Rendre le libellé de l'axe etablissement (et des segments) paramétrable côté client (Setting ou table de labels), remplaçant l'override frontend de Phase 1. Le client voit « Établissement » / « Chantier » / « Site » selon son métier.
  • Rendre la classification « first-class » : champ Dimension.role (source/referentiel/segment/structure) via migration additive + backfill dérivé + sélecteur dans l'éditeur de dimension. Découple des heuristiques axis/kind.

Phase 3 — Segments → attributs d'entité

  • Transformer seg2/3/4 (codes libres sur Movement) en attributs (DimAttribute) d'une dimension Structure/Entité, conformément au principe « une entité individuelle est le niveau le plus fin de la dimension Structure, les segments en étant les attributs ».
  • Migration des données + adaptation du mapping d'import. Maille mois conservée.

Phase 4 — Bibliothèque de KPI remplissage/rendement

  • Formule générique livrable : Taux = Volume réalisé (fait transactionnel) / Capacité théorique disponible (référentiel).
  • Mapping de champs par le client (patron TO EHPAD : journées facturées / (capacité × jours − jours de fermeture)). Nécessite le bloc Référentiels distinct comme dénominateur.

Phase 5 — Entités individuelles (hors périmètre actuel)

  • Résident / Salarié / Lot comme niveau le plus fin de la dimension Structure, avec attributs propres et suivi.
  • Bloqué tant qu'on reste à la maille mois : suppose un grain fin (transactionnel) et un registre d'entités à forte cardinalité. À rouvrir seulement si le besoin d'analyses individuelles (cohortes, drill-down) émerge.

Principe transverse (anti-pattern à éviter)

L'abstraction (rôles génériques) reste interne au moteur. Le client ne voit jamais « Entité individuelle type 1 » mais son vocabulaire métier (Résident, Salarié, Chantier…).