Skip to content

Sauvegardes — Formalisation et audit de périmètre

Spécification technique pour Heriade Rapport. Formalise la fonctionnalité de sauvegarde/restauration déjà implémentée, et audite sa couverture face à l'ensemble des specs produites depuis le début du chantier méta-modèle.

1. État actuel (constaté à l'écran)

Écran « Créer une sauvegarde », accessible depuis le bandeau (niveau Admin, cohérent avec docs/spec-reorganisation-bandeau.md) :

  • Champ Nom, pré-rempli avec une date automatique
  • 4 périmètres cochables indépendamment, tous cochés par défaut :
    • Structure : dimensions, nœuds, attributs, alias, domaines
    • Présentation / config : vues, tableaux de bord, scénarios, styles, écrans d'écarts, rapports, réglages
    • Données CDG : ajustements, justifications d'écart, clôtures
    • Prévision / saisie : campagnes, fiches, employés, drivers
  • Deux actions : Créer la sauvegarde (snapshot conservé dans l'application) et Importer un fichier (restauration depuis un export)

2. Mapping périmètre → entités techniques (formalisation)

PérimètreEntités couvertes (d'après les specs existantes)
StructureDimNode, DimAttribute, axes/domaines (docs/meta-modele-dimensions.md), ElementNonClasse (à confirmer, cf. section 3)
Présentation / configTableauDeBord, BlocRestitution, BlocDecoratif (docs/spec-editeur-tableau-de-bord.md), Vues, PivotViewConfig (docs/spec-vue-pivot.md), Scénarios, Modèles de présentation, écrans d'Écarts
Données CDGAjustements multi-niveaux (ventilation/complément, étapes CSDG/Directeur CDG/DAF), justifications, statuts de clôture
Prévision / saisieCampagnes de projection, Modèles de fiches, référentiels employés (catalogue Salarié, cf. Phase 5 du méta-modèle), drivers de croissance (ventilation YTG)

3. Périmètres manquants identifiés (audit)

En confrontant les 4 périmètres actuels à l'ensemble des specs produites, plusieurs entités ne sont couvertes par aucun des 4 :

3.1 Bibliothèque KPI / Pastilles / Graphiques — absent

KpiDefinition, PastilleDefinition, GraphiqueDefinition (docs/spec-bibliotheque-kpi.md, docs/spec-bibliotheque-widgets-restitution.md) ne sont explicitement rattachés à aucun périmètre. C'est un problème direct pour l'intégrité d'une restauration : un BlocRestitution dans un TDB restauré référencerait un definitionId qui n'existerait plus si la bibliothèque n'est pas sauvegardée avec.

Recommandation : ajouter ces trois entités au périmètre Présentation / config, puisqu'elles sont consommées par les mêmes écrans (TDB) et suivent la même logique de définition réutilisable.

3.2 Permissions et Groupes — absent

User.role, Group, Permission (docs/permissions-model.md) ne sont couverts par aucun périmètre. Contrairement à User.id/email/name qui sont un miroir du SSO (pas à sauvegarder, remis à jour à la connexion), le role (Lecteur/Modeleur/Admin), les Group et leur Permission sont des données propres à Rapport, créées et gérées dans la Console des droits — leur absence de tout périmètre est un risque opérationnel réel : une restauration remettrait potentiellement chaque utilisateur à un état de droits par défaut.

Recommandation : ajouter un 5ᵉ périmètre "Droits et accès", plutôt que de le glisser dans un périmètre existant — les droits ont un cycle de vie et une sensibilité différents (impact sécurité immédiat), ils méritent d'être visibles et cochables séparément plutôt que noyés dans "Structure" ou "Présentation/config".

3.3 Éléments non classés — à confirmer

ElementNonClasse (docs/spec-onboarding-entreprise.md) : à vérifier explicitement s'il est inclus dans le périmètre Structure. Sans lui, une restauration ferait réapparaître comme "nouveaux" des éléments déjà détectés et en attente de traitement par un Admin — perte de traçabilité, pas perte de donnée fatale, mais source de confusion.

4. Comportement de restauration (tranché)

  • Pas de restauration partielle au moment de la restauration : contrairement à la création (où l'on choisit les périmètres à inclure dans la sauvegarde), l'écran de restauration ne permet pas de sélectionner un sous-ensemble des périmètres contenus dans une sauvegarde donnée. Restaurer une sauvegarde l'applique intégralement, pour tous les périmètres qu'elle contient.
    • Nuance à garder en tête : si une sauvegarde a été créée avec seulement certains périmètres cochés (ex. uniquement "Données CDG"), la restaurer n'affecte logiquement que ces périmètres — ce n'est pas une sélection faite au moment de la restauration, mais une conséquence de ce que la sauvegarde contient déjà. Le tri se fait donc exclusivement à la création, jamais à la restauration.
  • Écrasement : un élément existant dans l'état actuel et présent dans la sauvegarde restaurée est remplacé par la version sauvegardée, sans fusion ni conservation de l'état courant. L'écrasement étant irréversible sans une sauvegarde préalable, l'écran de restauration doit impérativement présenter un résumé explicite avant confirmation (ce qui va être remplacé, pas seulement ce qui va être restauré).
  • Liste des sauvegardes existantes : à prévoir (n'existe pas encore) — écran listant les sauvegardes internes créées, avec leur nom, leur date, et les périmètres qu'elles contiennent (puisque ce contenu détermine désormais entièrement ce qui sera restauré), avec possibilité de restaurer directement l'une d'elles sans passer par un export/import de fichier.
  • Rétention : 5 sauvegardes conservées. Au-delà, rotation automatique — la sauvegarde la plus ancienne est purgée à la création d'une 6ᵉ. Point à trancher en implémentation : la rétention s'applique-t-elle globalement (5 sauvegardes tous périmètres confondus) ou par périmètre (5 sauvegardes de Structure + 5 de Données CDG, etc.) ? À défaut de précision, la première option (rétention globale) est plus simple et plus prévisible pour l'utilisateur — recommandée sauf besoin explicite contraire.

5. Articulation avec les ajustements CDG multi-niveaux

Point de vigilance spécifique au périmètre "Données CDG" : les ajustements ventilés (ajustementParentId, cf. discussion sur les ajustements multi-niveaux CSDG/Directeur CDG/DAF) référencent une version de leur ajustement parent. Avec une restauration désormais partielle et en écrasement (section 4), le risque devient concret : restaurer uniquement "Données CDG" à un instant T alors que "Structure" a évolué depuis pourrait recréer des ajustements pointant vers des DimNode ou établissements qui n'existent plus dans l'état courant (non restauré). Le mécanisme de sauvegarde doit garantir qu'un ajustement et son parent sont toujours sauvegardés/restaurés ensemble au sein du périmètre Données CDG, et l'écran de restauration doit avertir explicitement si une incohérence de ce type est détectée entre le périmètre restauré et l'état courant des périmètres non touchés.

6. Phasage suggéré

  1. Étape 1 : écran de liste des sauvegardes existantes (par périmètre, avec date et nom), permettant une restauration directe sans passer par un fichier — n'existe pas encore, prérequis pour rendre la restauration partielle réellement utilisable.
  2. Étape 2 : implémentation de la rotation à 5 sauvegardes (rétention globale recommandée, section 4) et du résumé de confirmation avant restauration (section 7).
  3. Étape 3 : ajouter la bibliothèque KPI/Pastilles/Graphiques au périmètre Présentation/config (section 3.1) — corrige un risque d'intégrité immédiat pour tout TDB utilisant ces objets.
  4. Étape 4 : introduire le périmètre Droits et accès (section 3.2) — nécessaire dès que la notion de Groupe (docs/permissions-model.md) est implémentée en base.
  5. Étape 5 : confirmer l'inclusion des éléments non classés dans Structure (section 3.3) — ajustement mineur une fois docs/spec-onboarding-entreprise.md implémenté.

7. Point de vigilance

Le risque principal de cette fonctionnalité, une fois enrichie, est qu'un périmètre coché par défaut à la création masque à l'utilisateur l'ampleur réelle de ce qu'il sauvegarde ou restaure (surtout une fois "Droits et accès" ajouté — une restauration de droits est plus sensible qu'une restauration de dimensions). Prévoir un résumé explicite avant confirmation d'une restauration ("cette action va modifier : X utilisateurs, Y groupes, Z KPI...") plutôt qu'une simple case à cocher, pour qu'une restauration reste un acte conscient.