feat(reports/cartes): Mensuel/YTD toggle on KPI cards + user guide section (#102) #114
No reviewers
Labels
No labels
source:analyste
source:defenseur
source:human
source:medic
status:approved
status:blocked
status:in-progress
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#114
Loading…
Reference in a new issue
No description provided.
Delete branch "issue-102-cartes-ytd-toggle-docs"
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?
Summary
/reports/cartes, placed next to the reference-month picker. Flips the four KPI cards (income, expenses, net balance, savings rate) between the current-month view (unchanged default) and a Year-to-Date cumulative view.reports.cartes.savingsRateTooltip.{month,ytd}.localStorageunderreports-cartes-period-mode, defaultmonth.docs/guide-utilisateur.mdcovering the four KPI formulas, the Monthly/YTD toggle and its effect on deltas, sparkline, top movers, seasonality, budget adherence, and the savings-rate edge case. In-appdocs.reportstree extended in both FR and EN.flowByMonthmap.Test plan
npm test -- --run— all 133 tests pass (5 new YTD service tests + hook persistence tests)npm run build— tsc + vite build green/reports/cartes, toggle Monthly ↔ YTD; verify the four KPI values, deltas, and savings-rate tooltip update correctly—on all four cardsCloses #102
Revue — APPROVE ✅
Verdict
Implementation propre qui respecte l'intégralité du scope revu post-sprint. Toutes les ACs sont adressées.
Points validés
getCartesSnapshotacceptemode: CartesKpiPeriodMode = "month"(backward-compat). Calcule les 8 agrégats monthly + 8 YTD en parallèle et sélectionne viaisYtd. Pas de SQL supplémentaire — la fonctionsumYtd()itère sur leflowByMonthdéjà fetché.nullquandytdIncome === 0, propagé proprement viabuildKpi(current: number | null, ...).referenceAmountrebinded surmonthRefExpenses(jamaisrefExpensesqui peut être YTD). La carte reste mensuelle quel que soit le toggle — conforme au "hors scope" de l'issue.CartesPeriodModeToggle.tsx(60 lignes, templateTrendsChartTypeToggle). Placé à côté deCompareReferenceMonthPicker.localStoragesousreports-cartes-period-mode,readCartesPeriodMode()fallback sur"month". Écriture viauseEffectsur changement de state.savingsRateTooltip.{month,ytd}. Résolu au niveau page en suffixant la clé.KpiCardinchangé (proptooltip?: stringexistant supporte une string dynamique).computes YTD KPIs correctly,null when YTD income is zero,null when refMonth = January,YoY Jan→refMonth prev year), 2 tests hook (localStorage round-trippour month et ytd), 1 test backward-compat (mode par défaut).guide-utilisateur.mdavec formules + toggle + règles Saisonnalité + Top Movers + Budget Adherence. In-appdocs.reports.*enrichi plutôt que créer une nouvelle section Cartes (décision pragmatique du worker, documentée dans ses notes).periodMode.{month,ytd,aria}etsavingsRateTooltip.{month,ytd}en FR et EN.Added/Ajouté.Vérifications locales
npm test -- --run: 133/133 verts (+11 nouveaux)npm run build: vert (5.57s)Décisions notables du worker
savingsRateTooltip.monthvssavingsRateTooltipMonth) — bon choix, scale mieux si on ajoute d'autres modes.cartesdans le composantDocsPage(qui a unSECTIONShardcodé avec 10 entrées). À la place, enrichit la sectionreportsexistante. La doc standalone vit dansguide-utilisateur.md. Évite une refonte deDocsPage+ sections i18n lourdes.modeen paramètre optionnel surgetCartesSnapshot— aucun caller existant ne casse.Rien ne bloque le merge. Milestone
spec-refonte-rapportsest désormais à 14/14 done après merge.