Bilan #3 — Page /balance + graphique évolution #141

Closed
opened 2026-04-25 16:08:28 +00:00 by maximus · 1 comment
Owner

Refs: spec-decisions-bilan.md + spec-plan-bilan.md (v2)

Depends on #138, #140

Tâches

  • Étendre balance.service.ts avec helper agrégation série temporelle (SUM(value) GROUP BY snapshot_date)
  • Tests vitest agrégateur série temporelle
  • Créer src/hooks/useBalanceOverview.ts (useReducer scoped — evolution + returns slot vide)
  • Route /balance + page BalancePage.tsx
  • Composant BalanceOverviewCard.tsx (valeur totale, Δ%, avertissement bilan pas à jour > 60j)
  • Composant BalanceEvolutionChart.tsx — courbe + aire empilée par catégorie, réutilise SVG patterns de MonthlyTrendsChart.tsx et Sparkline.tsx
  • Composant BalanceAccountsTable.tsx (sans colonnes rendement à ce stade — réservées #142)
  • Sélecteur de période (3M / 6M / 1A / 3A / Tout)
  • Ajouter entrée sidebar Bilan pointant /balance (icône Wallet lucide-react) — déplacée depuis #138 selon plan v2
  • Entrée CHANGELOG

Critères dacceptation

  • La page /balance affiche un graphique dévolution avec mode toggle ligne / aire empilée
  • Le tableau des comptes affiche valeur dernier snapshot + Δ% sur la période sélectionnée
  • Le sélecteur de période recharge les données correctement
  • La sidebar contient une entrée Bilan navigable
Refs: spec-decisions-bilan.md + spec-plan-bilan.md (v2) Depends on #138, #140 ## Tâches - [ ] Étendre balance.service.ts avec helper agrégation série temporelle (SUM(value) GROUP BY snapshot_date) - [ ] Tests vitest agrégateur série temporelle - [ ] Créer src/hooks/useBalanceOverview.ts (useReducer scoped — evolution + returns slot vide) - [ ] Route /balance + page BalancePage.tsx - [ ] Composant BalanceOverviewCard.tsx (valeur totale, Δ%, avertissement bilan pas à jour > 60j) - [ ] Composant BalanceEvolutionChart.tsx — courbe + aire empilée par catégorie, réutilise SVG patterns de MonthlyTrendsChart.tsx et Sparkline.tsx - [ ] Composant BalanceAccountsTable.tsx (sans colonnes rendement à ce stade — réservées #142) - [ ] Sélecteur de période (3M / 6M / 1A / 3A / Tout) - [ ] **Ajouter entrée sidebar Bilan** pointant /balance (icône Wallet lucide-react) — déplacée depuis #138 selon plan v2 - [ ] Entrée CHANGELOG ## Critères dacceptation - La page /balance affiche un graphique dévolution avec mode toggle ligne / aire empilée - Le tableau des comptes affiche valeur dernier snapshot + Δ% sur la période sélectionnée - Le sélecteur de période recharge les données correctement - La sidebar contient une entrée Bilan navigable
maximus added this to the spec-price-fetching milestone 2026-04-25 16:08:28 +00:00
maximus added the
status:ready
type:feature
source:human
labels 2026-04-25 16:08:28 +00:00
Author
Owner

/review-spec — améliorations Frontend

Issues remontées par l'agent Architecture sur la couche front du Bilan.

🟡 Sur-découpage components / services / hooks

1. 11 composants pour 3 routes — trop
Référence : budget/ a 5 composants pour BudgetPage entier, transactions/ a 5. Les composants triviaux : TransactionTransferIcon, PriceFetchButton, PriceFetchConsentModal.
Fix : Inliner les triviaux. TransactionTransferIcon → simple span dans TransactionTable. PriceFetchButton + PriceFetchConsentModal → un seul PriceFetchControl. Cible 6-7 composants.

2. useBalance mega-hook viole le pattern par-page
Les hooks projet sont scoped par page : useTransactions, useBudget, useCompare. Le useBalance proposé agrège categories + accounts + snapshots + currentSnapshot + evolution + returns dans un reducer unique — produira des actions cross-cutting et un fat reducer.
Fix : Splitter en 3 hooks : useBalanceAccounts (AccountsPage), useSnapshotEditor (SnapshotEditPage), useBalanceOverview (BalancePage).

3. 3 services pour 1 domaine sur-découpe
Pattern existant : 1 service par domaine. priceFetcher et returnCalculator sont chacun 1 wrapper de commande Tauri.
Fix : Garder balance.service.ts unique avec sous-sections (CRUD, prices, returns). Splitter seulement si > ~400 lignes comme transactionService.ts.

## /review-spec — améliorations Frontend Issues remontées par l'agent Architecture sur la couche front du Bilan. ### 🟡 Sur-découpage components / services / hooks **1. 11 composants pour 3 routes — trop** Référence : `budget/` a 5 composants pour BudgetPage entier, `transactions/` a 5. Les composants triviaux : `TransactionTransferIcon`, `PriceFetchButton`, `PriceFetchConsentModal`. **Fix :** Inliner les triviaux. `TransactionTransferIcon` → simple span dans `TransactionTable`. `PriceFetchButton` + `PriceFetchConsentModal` → un seul `PriceFetchControl`. Cible 6-7 composants. **2. `useBalance` mega-hook viole le pattern par-page** Les hooks projet sont scoped par page : `useTransactions`, `useBudget`, `useCompare`. Le `useBalance` proposé agrège categories + accounts + snapshots + currentSnapshot + evolution + returns dans un reducer unique — produira des actions cross-cutting et un fat reducer. **Fix :** Splitter en 3 hooks : `useBalanceAccounts` (AccountsPage), `useSnapshotEditor` (SnapshotEditPage), `useBalanceOverview` (BalancePage). **3. 3 services pour 1 domaine sur-découpe** Pattern existant : 1 service par domaine. `priceFetcher` et `returnCalculator` sont chacun 1 wrapper de commande Tauri. **Fix :** Garder `balance.service.ts` unique avec sous-sections (CRUD, prices, returns). Splitter seulement si > ~400 lignes comme `transactionService.ts`.
maximus modified the milestone from spec-price-fetching to overnight-2026-04-26-bilan 2026-04-25 18:18:09 +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#141
No description provided.