bilan - acceuil #244

Closed
opened 2026-07-04 19:45:05 +00:00 by maximus · 0 comments
Owner

Contexte

La landing du Bilan (BalancePage.tsx) a un guard empty-state (~ligne 208) qui fusionne deux états : accountsCount === 0 || !hasAnySnapshot. Conséquence : avoir des comptes mais aucun snapshot => toujours considéré « vide » => bloqué sur BalanceOnboardingCard, dont le seul lien cliquable pousse vers « créer un snapshot ».

La page de gestion des comptes existe et est complète (AccountsPage.tsx, /balance/accounts : CRUD, kind simple/detailed, vehicle_type) mais elle est ORPHELINE de navigation : absente de la sidebar (constants/index.ts NAV_ITEMS), aucun lien depuis la landing peuplée ni depuis l'onboarding dès qu'un compte existe.

Décision (figée via /analyze 2026-07-04)

Remplacer la landing par une grille de TUILES calquée sur la page Rapports, en réutilisant HubReportNavCard (composant générique, 0 dépendance Rapports). Découpler le guard : « 0 compte » != « comptes sans snapshot ». La gestion des comptes doit être accessible en permanence depuis la landing.

Travail à faire

  • Découpler le guard dans BalancePage.tsx : distinguer « aucun compte » (proposer StarterAccountsModal / créer compte) de « comptes sans snapshot » (proposer gérer comptes OU saisir snapshot, sans forcer).
  • Ajouter une grille de tuiles HubReportNavCard sur /balance : « Gérer les comptes » (/balance/accounts), « Nouveau snapshot » (/balance/snapshot), et les entrées pertinentes.
  • Conserver BalanceOverviewCard (valeur nette + delta) dans l'état peuplé.
  • Conserver StarterAccountsModal au premier passage (0 compte).

Fichiers concernés

  • src/pages/BalancePage.tsx — guard (~208) + rendu landing.
  • src/components/balance/BalanceOnboardingCard.tsx — remplacé/allégé par les tuiles.
  • src/components/reports/HubReportNavCard.tsx — réutilisé tel quel.
  • src/pages/ReportsPage.tsx — modèle de grille (grid-cols responsive, navCards).
  • src/shared/constants/index.ts — NAV (optionnel : exposer /balance/accounts).
  • src/i18n/locales/fr.json + en.json — clés balance.hub.* calquées sur reports.hub.*.

Surface de test

  • BalanceOnboardingCard.test.tsx teste deriveOnboardingSteps (helper pur) -> à adapter/retirer si l'onboarding est remplacé.
  • Pas de testing-library dans le projet -> tester la logique du guard découplé en helper pur (ex. deriveLandingState).
  • useBalanceOverview.test.ts couvre le hook de la landing.

Critères d'acceptation

  • Avec des comptes mais aucun snapshot, l'utilisateur voit des tuiles et peut aller gérer les comptes (n'est plus forcé vers le snapshot).
  • La page de gestion des comptes est atteignable depuis la landing dans tous les états peuplés.
  • La grille de tuiles suit le pattern visuel de la page Rapports.
  • Clés i18n présentes en FR et EN.

Complexité : Medium

Notes autopilot

  • Indépendant côté logique ; touche fr.json/en.json (conflit i18n possible en parallèle).
  • Micro-choix (libellés de tuiles, ordre) = tier LOW, décider par défaut.
  • Aucune question ouverte.
## Contexte La landing du Bilan (`BalancePage.tsx`) a un guard empty-state (~ligne 208) qui fusionne deux états : `accountsCount === 0 || !hasAnySnapshot`. Conséquence : avoir des comptes mais aucun snapshot => toujours considéré « vide » => bloqué sur `BalanceOnboardingCard`, dont le seul lien cliquable pousse vers « créer un snapshot ». La page de gestion des comptes existe et est complète (`AccountsPage.tsx`, `/balance/accounts` : CRUD, `kind` simple/detailed, `vehicle_type`) mais elle est ORPHELINE de navigation : absente de la sidebar (`constants/index.ts` NAV_ITEMS), aucun lien depuis la landing peuplée ni depuis l'onboarding dès qu'un compte existe. ## Décision (figée via /analyze 2026-07-04) Remplacer la landing par une grille de TUILES calquée sur la page Rapports, en réutilisant `HubReportNavCard` (composant générique, 0 dépendance Rapports). Découpler le guard : « 0 compte » != « comptes sans snapshot ». La gestion des comptes doit être accessible en permanence depuis la landing. ## Travail à faire - [ ] Découpler le guard dans `BalancePage.tsx` : distinguer « aucun compte » (proposer StarterAccountsModal / créer compte) de « comptes sans snapshot » (proposer gérer comptes OU saisir snapshot, sans forcer). - [ ] Ajouter une grille de tuiles `HubReportNavCard` sur `/balance` : « Gérer les comptes » (`/balance/accounts`), « Nouveau snapshot » (`/balance/snapshot`), et les entrées pertinentes. - [ ] Conserver `BalanceOverviewCard` (valeur nette + delta) dans l'état peuplé. - [ ] Conserver `StarterAccountsModal` au premier passage (0 compte). ## Fichiers concernés - `src/pages/BalancePage.tsx` — guard (~208) + rendu landing. - `src/components/balance/BalanceOnboardingCard.tsx` — remplacé/allégé par les tuiles. - `src/components/reports/HubReportNavCard.tsx` — réutilisé tel quel. - `src/pages/ReportsPage.tsx` — modèle de grille (grid-cols responsive, navCards). - `src/shared/constants/index.ts` — NAV (optionnel : exposer `/balance/accounts`). - `src/i18n/locales/fr.json` + `en.json` — clés `balance.hub.*` calquées sur `reports.hub.*`. ## Surface de test - `BalanceOnboardingCard.test.tsx` teste `deriveOnboardingSteps` (helper pur) -> à adapter/retirer si l'onboarding est remplacé. - Pas de testing-library dans le projet -> tester la logique du guard découplé en helper pur (ex. `deriveLandingState`). - `useBalanceOverview.test.ts` couvre le hook de la landing. ## Critères d'acceptation - [ ] Avec des comptes mais aucun snapshot, l'utilisateur voit des tuiles et peut aller gérer les comptes (n'est plus forcé vers le snapshot). - [ ] La page de gestion des comptes est atteignable depuis la landing dans tous les états peuplés. - [ ] La grille de tuiles suit le pattern visuel de la page Rapports. - [ ] Clés i18n présentes en FR et EN. ## Complexité : Medium ## Notes autopilot - Indépendant côté logique ; touche `fr.json`/`en.json` (conflit i18n possible en parallèle). - Micro-choix (libellés de tuiles, ordre) = tier LOW, décider par défaut. - Aucune question ouverte.
maximus added this to the overnight-2026-07-05-bilan-rapports-ux milestone 2026-07-04 20:45:13 +00:00
maximus added the
status:ready
type:feature
source:human
labels 2026-07-04 20:45:13 +00:00
maximus added
status:approved
and removed
status:ready
labels 2026-07-05 01:05:36 +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#244
No description provided.