Onboarding : états vides des pages Transactions et Budget #353
Labels
No labels
autopilot:pending-human
source:analyste
source:defenseur
source:human
source:medic
status:approved
status:blocked
status:in-progress
status:needs-clarification
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#353
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Vague
planned-2026-10-03-onboarding-phase1(séance/plan-rundu 2026-10-03, spec +/review-specdu 2026-09-25, verdict APPROUVÉ après intégration). Les fichiersspec-decisions-onboarding-phase1.md/spec-plan-onboarding-phase1.mdsont ignorés par git : ce corps est auto-suffisant, ne pas chercher le spec. Analyse d'origine :docs/analyse-onboarding-2026-09.md.Règles de la vague : pile linéaire (chaque PR part de la précédente) ; ne pas toucher
CHANGELOG.md/CHANGELOG.fr.mdavant #357 qui les centralise ; FR + EN pour toute clé i18n (.claude/rules/i18n.md) ; aucune migration DB ; aucune chaîne en dur dans les composants.Objectif
Transactions et Budget à base vide disent « importez d'abord » avec un bouton vers Import, sans toucher à leurs états « sans résultat » actuels.
Tâches
src/hooks/useTransactions.ts: exportertransactionsReducer+initialTransactionsState(reducer privé aujourd'hui en:80) ; étattotalInDb: number | null, chargé une fois au montage avec les catégories et les sources viagetTransactionCount();TransactionsPage.tsxrendEmptyState(« Aucune transaction pour l'instant. Importez d'abord vos relevés bancaires. », bouton « Importer des transactions » →/import) quandtotalInDb === 0et!isLoading, à la place de la barre de filtres, de la table et de la pagination ; sinon inchangésrc/hooks/useBudget.ts: exporterbudgetReducer+ état initial (privé en:47) ; étattotalInDb;BudgetPage.tsxrendEmptyState(« Le budget se construit sur vos transactions. Importez d'abord vos relevés bancaires. », même bouton) à la place deFilterPanel+BudgetTablequandtotalInDb === 0, en gardant le titre,PageHelpetTemplateActions;RequireFeature feature="budget"dansApp.tsx:123-125inchangétransactions.empty.*,budget.empty.*Pourquoi un compteur global : le filtre par défaut de Transactions est « depuis le 1er janvier » (
useTransactions.ts:54-61), doncrows.length === 0ne distingue pas « base vide » de « rien cette année ».Fichiers concernés
src/hooks/useTransactions.ts+src/hooks/useTransactions.test.ts(nouveau)src/hooks/useBudget.ts+src/hooks/useBudget.test.ts(existant, à étendre)src/pages/TransactionsPage.tsx,src/pages/BudgetPage.tsxsrc/i18n/locales/fr.json,src/i18n/locales/en.jsonDepends on
Critères d'acceptation
totalInDbne modifie nifilters, nisort, nipage;totalInDb0 puis N > 0 → la table est rendue/importTransactionTableaffiche toujours « Aucune transaction trouvée » ;BudgetTableaffiche toujours « Aucune catégorie trouvée » quandrowsest videnpm test,npm run buildvertsReview caveats
Décisions prises en planification
is_manually_categorized = 1) et non « règle créée » ni « transactions catégorisées » : le seed IPC met 180 mots-clés dans tout profil neuf et le wizard catégorise pendant l'import (useImportWizard.ts:1016).planned-2026-09-24-paiementss'exécute avant celle-ci (fichiers partagés :fr.json,en.json, CHANGELOG,architecture.md,guide-utilisateur.md) ; partir d'unmainqui contient déjà ses clés.Spec source
spec-plan-onboarding-phase1.md (local, ignoré par git)
Onboarding: empty states on Transactions and Budget pagesto Onboarding : états vides des pages Transactions et Budget