Skip to content

Documenter le mapping colonnes DB ↔ labels API SUIT dans le wiki #3308

@Viczei

Description

@Viczei

Contexte métier

La base de données EGAPRO contient des dizaines de colonnes dont les noms techniques (ex: remunerationsMoyennesParTrancheAgeFemmes0) ne correspondent pas aux libellés utilisés dans l'export JSON SUIT (ex: Rem_globale_annuelle_moyenne_F) ni aux champs d'origine GIP-MDS (indicateurs A–F pré-calculés à partir de la DSN).

Aujourd'hui, les équipes DARES, le support et les nouveaux développeurs doivent reconstituer mentalement cette correspondance en lisant plusieurs fichiers TypeScript, ce qui ralentit toute intervention (debug, support, onboarding, évolutions fonctionnelles).

L'objectif est de documenter de manière traçable et publiée la correspondance colonne DB → label API SUIT → origine GIP-MDS, directement à la source (schema.ts), et de l'exposer sur le wiki via le workflow existant db-schema.yaml.

User stories

  • En tant que développeur egapro, je veux voir directement dans schema.ts le label SUIT correspondant à chaque colonne, afin de comprendre immédiatement ce que représente la donnée.
  • En tant que agent support / DARES, je veux consulter une page wiki à jour qui donne la correspondance DB ↔ SUIT ↔ GIP-MDS, afin de répondre aux demandes sans lire le code.
  • En tant que nouveau développeur onboardé, je veux savoir d'un coup d'œil si une donnée provient du GIP-MDS ou a été saisie par l'entreprise, afin de ne pas me tromper sur son mode de calcul.

Contexte technique

Fichiers clés pour l'architect :

  • Schéma DB à annoter : packages/app/src/server/db/schema.ts
  • Mapping JSON SUIT : packages/app/src/modules/export/shared/apiLabels.ts (constantes INDICATOR_A_LABELSINDICATOR_F_LABELS)
  • Assemblage du payload JSON SUIT : fonction assembleDeclaration() dans packages/app/src/app/api/v1/export/declarations/route.ts
  • Workflow de publication wiki : .github/workflows/db-schema.yaml (outil db-schema-toolkit)
  • Page wiki cible : https://github.com/SocialGouv/egapro/wiki/Schema-Egapro-V2

Rappel métier : les indicateurs A–F sont pré-calculés par le GIP-MDS à partir des DSN. L'indicateur G est calculé par l'entreprise elle-même (pas d'origine GIP-MDS).

Décisions cadrées (Q&A PO)

# Question Décision
Q1 Périmètre tables Toutes les tables de schema.ts, pas seulement celles exposées via SUIT
Q2 Portée colonnes Uniquement les colonnes qui ont un label SUIT JSON ; les autres restent sans commentaire
Q3 Format commentaire Préfixe TS inline // SUIT: <label> ; si la donnée provient du GIP-MDS (indicateurs A–F pré-calculés), ajouter l'origine GIP au commentaire. Format suggéré : // GIP-MDS | SUIT: <label>format final à formaliser par l'architect
Q4 Mapping XLSX ? Non. On ignore DECLARATION_COLUMNS / INDICATOR_G_COLUMNS (libellés XLSX) — seuls les libellés JSON SUIT (apiLabels.ts + assembleDeclaration()) sont documentés
Q5 Garde-fou CI Aucun. Documentation one-shot, pas de test automatisé pour détecter les colonnes manquantes à l'avenir
Q6 Critère de Done Validation visuelle par l'utilisateur sur https://github.com/SocialGouv/egapro/wiki/Schema-Egapro-V2. Si db-schema-toolkit ne rend pas correctement les commentaires, l'architect découpera en ticket(s) de remédiation (switch d'outil / post-processing) — pas de scope créé upfront pour ça

Scénarios de test

S1 — Traçabilité côté code

  • Étant donné un développeur qui lit packages/app/src/server/db/schema.ts
  • Quand il se positionne sur une colonne qui a un label SUIT (ex: remunerationsMoyennesParTrancheAgeFemmes0)
  • Alors il voit en commentaire TS le label SUIT correspondant (ex: // SUIT: Rem_globale_annuelle_moyenne_F ou // GIP-MDS | SUIT: ...)

S2 — Publication wiki

  • Étant donné que schema.ts a été annoté et mergé sur master
  • Quand le workflow db-schema.yaml s'exécute
  • Alors la page https://github.com/SocialGouv/egapro/wiki/Schema-Egapro-V2 est mise à jour et affiche visuellement les commentaires SUIT/GIP-MDS à côté de chaque colonne documentée

S3 — Origine GIP-MDS visible

  • Étant donné une colonne qui contient une donnée pré-calculée par le GIP-MDS (indicateurs A–F)
  • Quand un utilisateur consulte le wiki ou lit schema.ts
  • Alors le commentaire indique explicitement l'origine GIP-MDS (ex: GIP-MDS | SUIT: ...), permettant de distinguer ces données de celles saisies par l'entreprise (indicateur G, méta-données)

S4 — Couverture exhaustive

  • Étant donné l'ensemble des libellés définis dans apiLabels.ts et utilisés par assembleDeclaration()
  • Quand l'architect / dev passe en revue le mapping
  • Alors chaque libellé JSON SUIT présent dans le payload d'export a une colonne DB commentée correspondante (aucun label SUIT orphelin, aucune colonne SUIT non commentée)

Hors scope

  • Pas de validation automatisée (pas de test CI qui détecte les colonnes SUIT manquantes à l'avenir)
  • Pas de documentation des libellés XLSX (DECLARATION_COLUMNS, INDICATOR_G_COLUMNS) — seuls les libellés JSON SUIT sont couverts
  • Pas de refactor de apiLabels.ts ni de assembleDeclaration() — on documente ce qui existe
  • Pas d'étape designer (feature backend + docs uniquement)
  • Pas de création d'un nouvel outil de rendu wiki upfront — on utilise db-schema-toolkit existant ; un éventuel switch d'outil sera un ticket séparé si la validation utilisateur échoue

Critères d'acceptation de haut niveau

L'architect découpera ces critères en tickets exécutables.

  • Chaque colonne de packages/app/src/server/db/schema.ts ayant un label SUIT JSON porte un commentaire TS au format // SUIT: <label> (ou // GIP-MDS | SUIT: <label> si la donnée provient du GIP-MDS — format final à arrêter par l'architect)
  • Toutes les tables de schema.ts sont passées en revue (pas seulement celles exposées via SUIT)
  • Chaque libellé défini dans INDICATOR_A_LABELSINDICATOR_F_LABELS de apiLabels.ts est associé à exactement une colonne DB commentée
  • Le workflow .github/workflows/db-schema.yaml a été déclenché avec succès après le merge sur master
  • La page https://github.com/SocialGouv/egapro/wiki/Schema-Egapro-V2 affiche visuellement les commentaires — validation visuelle par l'utilisateur

Note pipeline

Pas d'étape designer (feature purement backend + documentation, aucun rendu UI dans l'app). Après validation de cet epic par l'utilisateur, l'architect prend le relais pour découper en tickets exécutables par code-dev.

Metadata

Metadata

Assignees

Labels

Projects

Status

To Do

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions