[#3] Rapport Faits saillants + transformation en hub #71

Closed
opened 2026-04-13 15:03:18 +00:00 by maximus · 0 comments
Owner

Objectif

Implémenter le rapport faits saillants (solde mois courant, solde YTD, top mouvements, top transactions récentes) et transformer /reports en hub avec 4 cartes de navigation vers les sous-rapports.

Spec : spec-refonte-rapports.md
Dépend de #70

Tâches

Service

  • Implémenter reportService.getHighlights(from, to) — SQL strictement paramétré
  • Retourne : { netBalanceCurrent, netBalanceYtd, monthlyBalanceSeries, topMovers: { categoryId, categoryName, categoryColor, deltaAbs, deltaPct }[], topTransactions: Transaction[] }
  • Top movers : ORDER BY ABS(delta) DESC LIMIT N vs mois précédent
  • Top transactions : ORDER BY ABS(amount) DESC LIMIT 10 sur les 30 derniers jours (configurable 30/60/90)

Hook

  • Compléter src/hooks/useHighlights.ts avec reducer + fetch + loading/error

Tuiles du hub (plat dans src/components/reports/, préfixes)

  • HubNetBalanceTile.tsx — grande tuile chiffre + sparkline 12 mois, s'appuie sur Sparkline (créé en #69)
  • HubTopMoversTile.tsx — top 3 movers, bascule $ / %, couleurs de catégorie
  • HubTopTransactionsTile.tsx — liste condensée top 5
  • HubHighlightsPanel.tsx — compose les 3 tuiles, layout responsive
  • HubReportNavCard.tsx — tuile de navigation (icône + titre + description), menant à une sous-page

Refonte /reports en hub

  • Refondre src/pages/ReportsPage.tsx : retirer l'ancienne UI à tabs, afficher PageHeader + sélecteur période global (via useReportsPeriod) + HubHighlightsPanel + grille de 4 HubReportNavCard (Faits saillants, Tendances, Comparables, Analyse par catégorie)

Version détaillée /reports/highlights

  • Remplacer le placeholder de src/pages/ReportsHighlightsPage.tsx par la vue détaillée
  • HighlightsTopMoversTable.tsx — tableau triable (catégorie, précédent, courant, écart $, écart %)
  • HighlightsTopMoversChart.tsx — diverging bar chart horizontal centré sur 0, couleurs + patterns SVG via chartPatterns.tsx
  • HighlightsTopTransactionsList.tsx — liste détaillée 10–30 entrées, selector de fenêtre 30/60/90 jours
  • ViewModeToggle intégré, storage key reports-viewmode-highlights

i18n

  • Clés reports.highlights.* en FR et EN (netBalanceCurrent, netBalanceYtd, topMovers, topTransactions, variationAbs, variationPct, vsLastMonth, windowDays30/60/90, etc.)

Vérifications

  • /reports affiche le hub avec les faits saillants live + 4 cartes
  • /reports/highlights affiche la version détaillée
  • Toggle chart/table fonctionne sur la version détaillée
  • La période sélectionnée dans le hub est reflétée dans /reports/highlights via query string
  • npm run build + cargo check verts

Critères d'acceptation

  • /reports est le hub : panneau faits saillants + 4 cartes de navigation
  • /reports/highlights affiche la version détaillée
  • Les top movers affichent les bonnes variations vs mois précédent
  • Les top transactions sont bien les plus grosses des 30 derniers jours
  • Toggle chart/table persisté en localStorage par section
## Objectif Implémenter le rapport **faits saillants** (solde mois courant, solde YTD, top mouvements, top transactions récentes) **et** transformer `/reports` en **hub** avec 4 cartes de navigation vers les sous-rapports. Spec : `spec-refonte-rapports.md` Dépend de #70 ## Tâches ### Service - [ ] Implémenter `reportService.getHighlights(from, to)` — SQL strictement paramétré - [ ] Retourne : `{ netBalanceCurrent, netBalanceYtd, monthlyBalanceSeries, topMovers: { categoryId, categoryName, categoryColor, deltaAbs, deltaPct }[], topTransactions: Transaction[] }` - [ ] Top movers : `ORDER BY ABS(delta) DESC LIMIT N` vs mois précédent - [ ] Top transactions : `ORDER BY ABS(amount) DESC LIMIT 10` sur les 30 derniers jours (configurable 30/60/90) ### Hook - [ ] Compléter `src/hooks/useHighlights.ts` avec reducer + fetch + loading/error ### Tuiles du hub (plat dans `src/components/reports/`, préfixes) - [ ] `HubNetBalanceTile.tsx` — grande tuile chiffre + sparkline 12 mois, s'appuie sur `Sparkline` (créé en #69) - [ ] `HubTopMoversTile.tsx` — top 3 movers, bascule `$` / `%`, couleurs de catégorie - [ ] `HubTopTransactionsTile.tsx` — liste condensée top 5 - [ ] `HubHighlightsPanel.tsx` — compose les 3 tuiles, layout responsive - [ ] `HubReportNavCard.tsx` — tuile de navigation (icône + titre + description), menant à une sous-page ### Refonte `/reports` en hub - [ ] Refondre `src/pages/ReportsPage.tsx` : retirer l'ancienne UI à tabs, afficher `PageHeader` + sélecteur période global (via `useReportsPeriod`) + `HubHighlightsPanel` + grille de 4 `HubReportNavCard` (Faits saillants, Tendances, Comparables, Analyse par catégorie) ### Version détaillée `/reports/highlights` - [ ] Remplacer le placeholder de `src/pages/ReportsHighlightsPage.tsx` par la vue détaillée - [ ] `HighlightsTopMoversTable.tsx` — tableau triable (catégorie, précédent, courant, écart $, écart %) - [ ] `HighlightsTopMoversChart.tsx` — diverging bar chart horizontal centré sur 0, couleurs + patterns SVG via `chartPatterns.tsx` - [ ] `HighlightsTopTransactionsList.tsx` — liste détaillée 10–30 entrées, selector de fenêtre 30/60/90 jours - [ ] `ViewModeToggle` intégré, storage key `reports-viewmode-highlights` ### i18n - [ ] Clés `reports.highlights.*` en FR et EN (netBalanceCurrent, netBalanceYtd, topMovers, topTransactions, variationAbs, variationPct, vsLastMonth, windowDays30/60/90, etc.) ### Vérifications - [ ] `/reports` affiche le hub avec les faits saillants live + 4 cartes - [ ] `/reports/highlights` affiche la version détaillée - [ ] Toggle chart/table fonctionne sur la version détaillée - [ ] La période sélectionnée dans le hub est reflétée dans `/reports/highlights` via query string - [ ] `npm run build` + `cargo check` verts ## Critères d'acceptation - `/reports` est le hub : panneau faits saillants + 4 cartes de navigation - `/reports/highlights` affiche la version détaillée - Les top movers affichent les bonnes variations vs mois précédent - Les top transactions sont bien les plus grosses des 30 derniers jours - Toggle chart/table persisté en localStorage par section
maximus added this to the spec-refonte-rapports milestone 2026-04-13 15:03:18 +00:00
maximus added the
status:ready
type:feature
source:human
labels 2026-04-13 15:03:18 +00:00
maximus added
status:approved
and removed
status:ready
labels 2026-04-14 18:48:45 +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#71
No description provided.