Appearance
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) —montantsigné 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 parDimNode.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
Movementvia la connexion « Saisie Rapport » (type=saisie,kind=statistique, consolidationmoyenne). Saisie manuelle. - Segments
seg2/3/4: codes libres surMovement, 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é)
| Bloc | Règle dérivée |
|---|---|
| Axes source | axis === 'compte' && kind !== 'statistique' (groupé/trié par domain) |
| Référentiels | kind === 'statistique' |
| Segments d'analyse | axis ∈ {analytique, segment2, segment3, segment4} (vides masqués) |
| Communes / Temporel | axis ∈ {mois, annee, phase} |
| Communes / Structurel | axis === '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 heuristiquesaxis/kind.
Phase 3 — Segments → attributs d'entité
- Transformer
seg2/3/4(codes libres surMovement) 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…).
