Rapports → Tendances (par catégorie) : analyse de résultat (sections + sous-totaux + résultat net par mois) #256
Labels
No labels
autopilot:pending-human
source:analyste
source:defenseur
source:human
source:medic
status:approved
status:blocked
status:in-progress
status:needs-clarification
status:needs-fix
status:ready
status:review
status:triage
type:bug
type:feature
type:infra
type:refactor
type:schema
type:security
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: maximus/Simpl-Resultat#256
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Contexte
Suite à #253 (réel-vs-réel = analyse de résultat), appliquer la même présentation au tableau de tendance par catégorie : Rapports → Tendances → sous-vue « Par catégorie », vue Table =
CategoryOverTimeTable, alimenté pargetCategoryOverTime. Demande utilisateur 2026-07-05.Adaptation (série temporelle)
Ce tableau a N mois en colonnes (pas 2 périodes), donc pas de bloc 2-lignes fixe. Équivalent fidèle :
Différences avec le compare :
amount<0) mais mélangés/non étiquetés → le gain = les sectionner + total correct.Travail
reportService.tsgetCategoryOverTime: projeterCOALESCE(c.type,'expense') AS category_typedans les 2 SELECT (top-N + pivot) et remonter une maptypes: Record<category, type>surCategoryOverTimeData(additif, rétro-compatible, calqué surcolors/categoryIds).shared/types: ajoutertypesàCategoryOverTimeData.CategoryOverTimeTable.tsx: grouper en sections triées parCOMPARE_TYPE_ORDER, sous-totaux par mois + colonne Total, ligne Résultat net (+ avant transferts si transferts) par mois, colorée par signe. Réutiliser les clés i18nreports.compare.resultBeforeTransfers/resultNet/totalIncome/totalExpenses/totalTransfers(ou dupliquer sousreports.overTime.*).Blast radius
getCategoryOverTimealimente aussi le widget Dashboard (useDashboard) etCategoryOverTimeChart. La maptypesest additive (sûre) ; tout le sectionnement reste dans la table → Dashboard + graphe intacts. Ne pas trier/filtrer côté service.Fichiers
src/services/reportService.ts—getCategoryOverTime(projeter type + map)src/shared/types/index.ts—CategoryOverTimeData.typessrc/components/reports/CategoryOverTimeTable.tsx— sections + sous-totaux + résultat net par moissrc/services/reportService.test.ts— testsgetCategoryOverTime(shape avectypes, assertions strictes ~l.86/115/137)Complexité : Medium
Livré dans
main(merge4497676, PR #257). Fermée manuellement — même raison que #253.