feat(reports): affichage hiérarchique du réel-vs-réel (sous-totaux + net) #247

Closed
opened 2026-07-04 20:45:14 +00:00 by maximus · 0 comments
Owner

Contexte

Issue sœur de #243 (sortie de son commentaire). Le rapport comparable réel-vs-réel s'affiche À PLAT (ComparePeriodTable.tsx ~65 : « no parent/child structure in compare mode »), alors que le réel-vs-budget est HIÉRARCHIQUE avec sous-totaux (BudgetVsActualTable.tsx : sections par type, indentation par depth, sous-totaux). getCompareMonthOverMonth/YoY renvoient un CategoryDelta[] groupé par category_id seul, et CategoryDelta (types/index.ts ~288) n'a ni is_parent ni depth.

Décision (figée via /analyze 2026-07-04)

Rendre le réel-vs-réel hiérarchique comme le budget, pour voir les sous-totaux dont le montant net, en reproduisant la logique de BudgetVsActualTable.

Travail à faire

  • Faire produire un arbre + sous-totaux par le service compare (à l'image de getBudgetVsActualData : buildSubtotal, buildSubGroup, depth).
  • Enrichir CategoryDelta (ou nouveau type) avec is_parent / depth / parent_id.
  • Rendre ComparePeriodTable.tsx hiérarchique (réutiliser la logique de sections/indentation/reorderRows de BudgetVsActualTable, ou extraire un composant tableau hiérarchique partagé).
  • Afficher le montant net par groupe.

Fichiers concernés

  • src/services/reportService.tsgetCompareMonthOverMonth/YoY : produire l'arbre.
  • src/components/reports/ComparePeriodTable.tsx — rendu hiérarchique.
  • src/components/reports/BudgetVsActualTable.tsx — modèle de référence (envisager extraction d'un composant partagé).
  • src/hooks/useCompare.ts — type de retour porte la structure d'arbre.
  • src/shared/types/index.tsCategoryDelta enrichi.
  • src/i18n/locales/fr.json + en.json — libellés sous-totaux réel-réel.

Surface de test

  • reportService.test.ts couvre getCompareMonthOverMonth/YoY (agrégation à plat) -> étendre pour la structure d'arbre + sous-totaux.
  • useCompare.test.ts teste des helpers purs.

Critères d'acceptation

  • Le réel-vs-réel affiche les catégories en arbre parent/enfant avec sous-totaux, comme le budget.
  • Le montant net par groupe est visible.
  • Pas de régression sur les valeurs par catégorie feuille.
  • Clés i18n FR + EN.

Complexité : Medium

Notes autopilot

  • DÉPEND DE #243 : même chemin de calcul compare dans reportService.ts (getCompareMonthOverMonth/YoY) et même type CategoryDelta -> SÉQUENCER APRÈS #243 pour éviter un conflit de merge. Ne pas lancer en parallèle de #243.
  • Aucune question ouverte.
## Contexte Issue sœur de #243 (sortie de son commentaire). Le rapport comparable réel-vs-réel s'affiche À PLAT (`ComparePeriodTable.tsx` ~65 : « no parent/child structure in compare mode »), alors que le réel-vs-budget est HIÉRARCHIQUE avec sous-totaux (`BudgetVsActualTable.tsx` : sections par type, indentation par `depth`, sous-totaux). `getCompareMonthOverMonth`/YoY renvoient un `CategoryDelta[]` groupé par `category_id` seul, et `CategoryDelta` (`types/index.ts` ~288) n'a ni `is_parent` ni `depth`. ## Décision (figée via /analyze 2026-07-04) Rendre le réel-vs-réel hiérarchique comme le budget, pour voir les sous-totaux dont le montant net, en reproduisant la logique de `BudgetVsActualTable`. ## Travail à faire - [ ] Faire produire un arbre + sous-totaux par le service compare (à l'image de `getBudgetVsActualData` : `buildSubtotal`, `buildSubGroup`, `depth`). - [ ] Enrichir `CategoryDelta` (ou nouveau type) avec `is_parent` / `depth` / `parent_id`. - [ ] Rendre `ComparePeriodTable.tsx` hiérarchique (réutiliser la logique de sections/indentation/`reorderRows` de `BudgetVsActualTable`, ou extraire un composant tableau hiérarchique partagé). - [ ] Afficher le montant net par groupe. ## Fichiers concernés - `src/services/reportService.ts` — `getCompareMonthOverMonth`/YoY : produire l'arbre. - `src/components/reports/ComparePeriodTable.tsx` — rendu hiérarchique. - `src/components/reports/BudgetVsActualTable.tsx` — modèle de référence (envisager extraction d'un composant partagé). - `src/hooks/useCompare.ts` — type de retour porte la structure d'arbre. - `src/shared/types/index.ts` — `CategoryDelta` enrichi. - `src/i18n/locales/fr.json` + `en.json` — libellés sous-totaux réel-réel. ## Surface de test - `reportService.test.ts` couvre `getCompareMonthOverMonth`/YoY (agrégation à plat) -> étendre pour la structure d'arbre + sous-totaux. - `useCompare.test.ts` teste des helpers purs. ## Critères d'acceptation - [ ] Le réel-vs-réel affiche les catégories en arbre parent/enfant avec sous-totaux, comme le budget. - [ ] Le montant net par groupe est visible. - [ ] Pas de régression sur les valeurs par catégorie feuille. - [ ] Clés i18n FR + EN. ## Complexité : Medium ## Notes autopilot - DÉPEND DE #243 : même chemin de calcul compare dans `reportService.ts` (`getCompareMonthOverMonth`/YoY) et même type `CategoryDelta` -> SÉQUENCER APRÈS #243 pour éviter un conflit de merge. Ne pas lancer en parallèle de #243. - Aucune question ouverte.
maximus added this to the overnight-2026-07-05-bilan-rapports-ux milestone 2026-07-04 20:45:14 +00:00
maximus added the
status:ready
type:feature
source:human
labels 2026-07-04 20:45:14 +00:00
maximus added
status:approved
and removed
status:ready
labels 2026-07-05 01:00:50 +00:00
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: maximus/Simpl-Resultat#247
No description provided.