[feat] Dashboard / → convergence modele Cartes #279

Closed
opened 2026-07-09 00:37:58 +00:00 by maximus · 0 comments
Owner

Le dashboard / (DashboardPage) converge sur le modele /reports/cartes : KPIs+deltas, top movers, adherence budget, barres classees (au lieu du camembert), tuile valeur nette (Bilan), trend income-aware, filtre compte. Epic #260.

Fichiers concernes

  • src/pages/DashboardPage.tsx
  • src/services/dashboardService.ts (camembert @:61)
  • src/hooks/useDashboard.ts
  • reutiliser composants de src/pages/ReportsCartesPage.tsx (KpiCard, top movers — presentationnels) + reportService.ts (getCartesSnapshot)
  • src/services/balance.service.ts (getSnapshotTotalsByDate @:1767)
  • i18n FR/EN

Depends on

  • Milestone M1 (overnight-2026-07-08-filtres-fondation) merge — getCartesSnapshot/dashboardService plombes par I2.

Criteres d'acceptation

  • KPIs avec deltas MoM/YoY (reutilise KpiCard+top movers de Cartes via getCartesSnapshot)
  • Barres classees des top categories de depense (remplace le camembert expense-only dashboardService.ts:61)
  • Tuile valeur nette = dernier total de getSnapshotTotalsByDate (balance.service.ts:1767, serie {snapshot_date,total}) — PAS HubNetBalanceTile (metrique P&L transactionnelle differente)
  • Empty-state via deriveLandingState/listSnapshots().length (balanceLanding.ts, #244) → masquer la tuile si aucun snapshot, ne PAS bloquer ni afficher « 0 $ » trompeur
  • Libelle « valeur nette » (Bilan) distinct du filtre compte (import-source) ; le filtre compte ne scope PAS la valeur nette
  • Filtre compte (I2) applique aux widgets transactionnels ; trend income-aware
  • build + npm test verts

Review caveats

  • 🟡 (Securite) : empty-state = reutiliser deriveLandingState, ne pas inferer des nulls de getAccountsLatestSnapshot.
  • 🟡 (Securite) : « compte » ambigu (import-source vs balance) — libelles distincts, filtre transactionnel seulement.
  • 🟢 (Tech) : valeur nette = getSnapshotTotalsByDate (deja consomme par useBalanceOverview), pas de reecriture.
  • 🟡 (Archi) : KPI Cartes = mois-ref+mode (getCartesSnapshot) ; le dashboard porte son propre temporel (I4 ne le touche pas).

Decisions prises

  • Dashboard entierement dans I7 (M2) : son filtre compte + son modele temporel vivent ici, pas dans I4.
  • Convergence sur le modele Cartes.

Spec source

spec-plan-rapports-uniformes-suite.md

Le dashboard `/` (`DashboardPage`) converge sur le modele `/reports/cartes` : KPIs+deltas, top movers, adherence budget, barres classees (au lieu du camembert), tuile valeur nette (Bilan), trend income-aware, filtre compte. Epic #260. ## Fichiers concernes - `src/pages/DashboardPage.tsx` - `src/services/dashboardService.ts` (camembert @:61) - `src/hooks/useDashboard.ts` - reutiliser composants de `src/pages/ReportsCartesPage.tsx` (`KpiCard`, top movers — presentationnels) + `reportService.ts` (`getCartesSnapshot`) - `src/services/balance.service.ts` (`getSnapshotTotalsByDate` @:1767) - i18n FR/EN ## Depends on - Milestone M1 (`overnight-2026-07-08-filtres-fondation`) merge — `getCartesSnapshot`/`dashboardService` plombes par I2. ## Criteres d'acceptation - [ ] KPIs avec deltas MoM/YoY (reutilise `KpiCard`+top movers de Cartes via `getCartesSnapshot`) - [ ] **Barres classees** des top categories de depense (remplace le camembert expense-only `dashboardService.ts:61`) - [ ] **Tuile valeur nette** = dernier total de `getSnapshotTotalsByDate` (`balance.service.ts:1767`, serie `{snapshot_date,total}`) — **PAS** `HubNetBalanceTile` (metrique P&L transactionnelle differente) - [ ] Empty-state via `deriveLandingState`/`listSnapshots().length` (`balanceLanding.ts`, #244) → **masquer** la tuile si aucun snapshot, ne PAS bloquer ni afficher « 0 $ » trompeur - [ ] Libelle « valeur nette » (Bilan) **distinct** du filtre compte (import-source) ; le filtre compte ne scope PAS la valeur nette - [ ] Filtre compte (I2) applique aux widgets transactionnels ; trend income-aware - [ ] build + `npm test` verts ## Review caveats - 🟡 (Securite) : empty-state = reutiliser `deriveLandingState`, ne pas inferer des nulls de `getAccountsLatestSnapshot`. - 🟡 (Securite) : « compte » ambigu (import-source vs balance) — libelles distincts, filtre transactionnel seulement. - 🟢 (Tech) : valeur nette = `getSnapshotTotalsByDate` (deja consomme par `useBalanceOverview`), pas de reecriture. - 🟡 (Archi) : KPI Cartes = mois-ref+mode (`getCartesSnapshot`) ; le dashboard porte son propre temporel (I4 ne le touche pas). ## Decisions prises - Dashboard entierement dans I7 (M2) : son filtre compte + son modele temporel vivent ici, pas dans I4. - Convergence sur le modele Cartes. ## Spec source spec-plan-rapports-uniformes-suite.md
maximus added this to the overnight-2026-07-08-rapports-parite milestone 2026-07-09 00:37:58 +00:00
maximus added the
status:ready
type:feature
source:human
labels 2026-07-09 00:37:58 +00:00
maximus added
status:review
and removed
status:ready
labels 2026-07-11 21:14:21 +00:00
maximus added
status:approved
and removed
status:review
labels 2026-07-12 00:45:22 +00:00
maximus added
status:needs-fix
and removed
status:approved
labels 2026-07-12 00:50:40 +00:00
maximus added
status:approved
and removed
status:needs-fix
labels 2026-07-12 01:16:44 +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#279
No description provided.