Rapports : revoir les filtres de période (« Cette année », plage par défaut, puce d'aide « sur 12 mois » de Tendances) #479

Open
opened 2026-10-20 00:32:07 +00:00 by maximus · 0 comments
Owner

Contexte

La revue indépendante de la PR #475 (#446, commentaire 25487) relève que la puce d'aide reports.help.tips[2], validée mot pour mot par Max le 2026-10-16, dit « Tendances montre vos revenus et dépenses mois par mois sur 12 mois » (EN « Trends shows your income and expenses month by month over 12 months »), alors que la page Tendances suit le sélecteur de période, et que la puce juste avant invite à changer cette période.

Décision de Max (2026-10-19) : ne pas retoucher la puce seule ; réviser les filtres de période, cette question comprise, ainsi que « Cette année », qui affiche 12 mois plutôt que l'année à ce jour.

Ce que dit le code (main 6e8e157, lu le 2026-10-19)

  • useReportsPeriod (pages Rapports) : sans from/to ni period dans l'URL, la plage par défaut est l'année civile complète, du 1er janvier au 31 décembre (currentYearRange), avec period: "custom". Les mois à venir de l'année en cours en font partie.
  • PeriodSelector propose « Ce mois », « 3 mois », « 6 mois », « Cette année », « 12 mois », « Tout » et « Personnalisé ». « Cette année » (year) passe par computeDateRange("year"), du 1er janvier à aujourd'hui.
  • Le tableau de bord (useDashboard) passe aussi par computeDateRange.
  • Observation de Max (2026-10-19) : « Cette année » affiche 12 mois plutôt que l'année à ce jour. Pas reproduit pour écrire cette issue : /analyze dira sur quelle page et par quel chemin (plage par défaut de l'année civile, ou graphique qui garde douze colonnes).

À trancher

  • Ce que « Cette année » montre : l'année à ce jour, ou l'année civile complète ; et la plage par défaut des Rapports.
  • Le texte de reports.help.tips[2], en FR et en EN (par exemple « sur la période choisie »).
  • La cohérence avec le tableau de bord et avec le mode « Cumul annuel » de la page Cartes.

Critères d'acceptation

  • Le comportement de « Cette année » et la plage par défaut sont décidés par Max et identiques partout où le sélecteur apparaît.
  • La puce d'aide de Tendances décrit ce que montre la page, en FR et en EN.
  • Tests de resolveReportsPeriod et de computeDateRange à jour.

Liens : #446, PR #475 (commentaire 25487), #253 (période par défaut des rapports comparables).

Analyse (/analyze, 2026-10-20, main 45d8493)

Ce que la lecture ajoute

  • Les colonnes de mois viennent des données seules. getMonthlyTrends et getCategoryOverTime (src/services/reportService.ts) font un GROUP BY mois sans remplissage : Tendances n'affiche jamais douze colonnes par construction, ni des mois à venir vides. L'observation « Cette année affiche 12 mois » n'a pas été reproduite par le code. Sur les Rapports, la plage par défaut est l'année civile entière (currentYearRange, 1er janvier au 31 décembre) sous le bouton « Personnalisé » allumé, et « Cette année » (computeDateRange("year")) va du 1er janvier à aujourd'hui, comme sur le tableau de bord (défaut year). Les séries fixes de douze mois sont ailleurs et indépendantes du sélecteur : Faits saillants (getHighlights, douze mois finissant au mois de référence), Cartes (reports.cartes.flowChartTitle, « 12 derniers mois ») et la carte du hub (reports.hub.trendsDescription, « Où vous allez sur 12 mois »).
  • « Tout » est cassé sur les Rapports. Pour period=all, computeDateRange rend une plage vide et resolveReportsPeriod (src/hooks/useReportsPeriod.ts) la remplace par l'année civile ; useTrends, useCategoryZoom et ReportsPage passent from/to tels quels au service. « Tout » montre donc l'année en cours. Le test « treats all as a preset with empty range (service handles the clauses) » de useReportsPeriod.test.ts fige ce comportement en croyant le service maître des clauses. Seul useBalanceOverview traite all à part.
  • Aucun test ne couvre PeriodSelector (src/components/dashboard/PeriodSelector.tsx).

Décisions de Max (2026-10-20, réponses à /analyze)

  1. « Cette année » = l'année à ce jour partout (1er janvier à aujourd'hui), et la plage par défaut des Rapports devient « Cette année » : les Rapports ouvrent avec ce bouton allumé, plus « Personnalisé » sur l'année civile entière. Le tableau de bord ne change pas (déjà year).
  2. Le bouton « Tout » entre dans cette issue : plage vide transmise au service, test corrigé.

Travail à faire

  • resolveReportsPeriod : sans from/to ni period valides, rendre computeDateRange("year") avec period: "year" ; pour all, rendre une plage vide (from/to absents) avec period: "all". currentYearRange disparaît ou ne sert plus qu'aux tests. Le type UseReportsPeriodResult passe from/to en optionnels ; vérifier chaque consommateur (useTrends, useCategoryZoom, ReportsPage, ReportsCategoryPage, ReportsComparePage, FilterPanel, PeriodSelector) : les services acceptent déjà des bornes absentes (clauses conditionnelles), PeriodSelector lit customDateFrom ?? "".
  • URL : une URL sans paramètre reste la plage par défaut ; setPeriod("year") n'a pas besoin d'écrire from/to. Un signet existant avec from/to garde son sens.
  • useReportsPeriod.test.ts : « defaults to current civil year » devient « defaults to the year to date, period year » (avec fixedToday) ; « treats all … » attend une plage vide ; cas d'un signet from/to inchangé. dateRange.test.ts : year déjà à ce jour, vérifier qu'un test le fige.
  • Textes FR/EN : reports.help.tips[2] (proposition : « Tendances montre vos revenus et dépenses mois par mois sur la période choisie » / « Trends shows your income and expenses month by month over the selected period ») et reports.hub.trendsDescription (« Où vous allez, mois par mois » / « Where you're heading, month by month »). Les deux puces avaient été validées mot pour mot par Max le 2026-10-16 : la PR soumet les nouvelles formulations à sa relecture. reports.cartes.flowChartTitle reste juste (série fixe).
  • Docs : docs/guide-utilisateur.md et les clés docs.* des locales, si elles décrivent la plage par défaut des Rapports ou « Tout » (grep -n "année civile\|calendar year\|Personnalisé\|Custom").
  • CHANGELOG : Changed / Modifié (plage par défaut des Rapports, puce d'aide) et Fixed / Corrigé (« Tout »).
  • Hors périmètre, à dire dans la PR : les séries fixes de douze mois de Faits saillants et de Cartes (par conception, #253), le mode « Cumul annuel » de Cartes (déjà l'année à ce jour, ytd).

Fichiers concernés

  • src/hooks/useReportsPeriod.ts, src/hooks/useReportsPeriod.test.ts — défaut et all.
  • src/utils/dateRange.ts, src/utils/dateRange.test.ts — inchangé ou test épinglé.
  • src/hooks/useTrends.ts, src/hooks/useCategoryZoom.ts, src/pages/ReportsPage.tsx, src/pages/ReportsTrendsPage.tsx, src/pages/ReportsCategoryPage.tsx, src/pages/ReportsComparePage.tsx, src/components/reports/FilterPanel.tsx — bornes optionnelles.
  • src/i18n/locales/fr.json, src/i18n/locales/en.json — deux clés.
  • docs/guide-utilisateur.md, CHANGELOG.md, CHANGELOG.fr.md.

Surface de test

  • Existants : useReportsPeriod.test.ts, dateRange.test.ts, FilterPanel.test.tsx, overTimeResults.test.ts.
  • Manquants : rendu de PeriodSelector avec period: "year" par défaut (bouton allumé, renderToStaticMarkup) ; un test de useTrends ou de useCategoryZoom sur le harnais hookHarness qui vérifie que « Tout » appelle le service sans bornes.
  • Régression : oui pour « Tout » (bug).

Critères d'acceptation (précisés)

  • Rapports ouverts sans paramètre : bouton « Cette année » allumé, données du 1er janvier à aujourd'hui ; tableau de bord inchangé.
  • « Tout » sur Tendances, Analyse par catégorie et le hub montre toutes les années.
  • Puce d'aide et carte du hub décrivent ce que montre Tendances, FR et EN, formulations validées par Max.
  • Tests de resolveReportsPeriod à jour ; aucun test ne fige plus l'année civile comme défaut.

Complexité

Moyenne. Niveau de revue : normal. Prochaine étape : /fix-issue 479.

## Contexte La revue indépendante de la PR #475 (#446, commentaire 25487) relève que la puce d'aide `reports.help.tips[2]`, validée mot pour mot par Max le 2026-10-16, dit « Tendances montre vos revenus et dépenses mois par mois sur 12 mois » (EN « Trends shows your income and expenses month by month over 12 months »), alors que la page Tendances suit le sélecteur de période, et que la puce juste avant invite à changer cette période. **Décision de Max (2026-10-19)** : ne pas retoucher la puce seule ; réviser les filtres de période, cette question comprise, ainsi que « Cette année », qui affiche 12 mois plutôt que l'année à ce jour. ## Ce que dit le code (`main` `6e8e157`, lu le 2026-10-19) - `useReportsPeriod` (pages Rapports) : sans `from`/`to` ni `period` dans l'URL, la plage par défaut est l'année civile complète, du 1er janvier au 31 décembre (`currentYearRange`), avec `period: "custom"`. Les mois à venir de l'année en cours en font partie. - `PeriodSelector` propose « Ce mois », « 3 mois », « 6 mois », « Cette année », « 12 mois », « Tout » et « Personnalisé ». « Cette année » (`year`) passe par `computeDateRange("year")`, du 1er janvier à aujourd'hui. - Le tableau de bord (`useDashboard`) passe aussi par `computeDateRange`. - Observation de Max (2026-10-19) : « Cette année » affiche 12 mois plutôt que l'année à ce jour. Pas reproduit pour écrire cette issue : `/analyze` dira sur quelle page et par quel chemin (plage par défaut de l'année civile, ou graphique qui garde douze colonnes). ## À trancher - Ce que « Cette année » montre : l'année à ce jour, ou l'année civile complète ; et la plage par défaut des Rapports. - Le texte de `reports.help.tips[2]`, en FR et en EN (par exemple « sur la période choisie »). - La cohérence avec le tableau de bord et avec le mode « Cumul annuel » de la page Cartes. ## Critères d'acceptation - [ ] Le comportement de « Cette année » et la plage par défaut sont décidés par Max et identiques partout où le sélecteur apparaît. - [ ] La puce d'aide de Tendances décrit ce que montre la page, en FR et en EN. - [ ] Tests de `resolveReportsPeriod` et de `computeDateRange` à jour. Liens : #446, PR #475 (commentaire 25487), #253 (période par défaut des rapports comparables). ## Analyse (`/analyze`, 2026-10-20, `main` `45d8493`) ### Ce que la lecture ajoute - **Les colonnes de mois viennent des données seules.** `getMonthlyTrends` et `getCategoryOverTime` (`src/services/reportService.ts`) font un `GROUP BY` mois sans remplissage : Tendances n'affiche jamais douze colonnes par construction, ni des mois à venir vides. L'observation « Cette année affiche 12 mois » n'a pas été reproduite par le code. Sur les Rapports, la plage par défaut est l'année civile entière (`currentYearRange`, 1er janvier au 31 décembre) sous le bouton **« Personnalisé »** allumé, et « Cette année » (`computeDateRange("year")`) va du 1er janvier à aujourd'hui, comme sur le tableau de bord (défaut `year`). Les séries fixes de douze mois sont ailleurs et indépendantes du sélecteur : Faits saillants (`getHighlights`, douze mois finissant au mois de référence), Cartes (`reports.cartes.flowChartTitle`, « 12 derniers mois ») et la carte du hub (`reports.hub.trendsDescription`, « Où vous allez sur 12 mois »). - **« Tout » est cassé sur les Rapports.** Pour `period=all`, `computeDateRange` rend une plage vide et `resolveReportsPeriod` (`src/hooks/useReportsPeriod.ts`) la remplace par l'année civile ; `useTrends`, `useCategoryZoom` et `ReportsPage` passent `from`/`to` tels quels au service. « Tout » montre donc l'année en cours. Le test « treats `all` as a preset with empty range (service handles the clauses) » de `useReportsPeriod.test.ts` fige ce comportement en croyant le service maître des clauses. Seul `useBalanceOverview` traite `all` à part. - Aucun test ne couvre `PeriodSelector` (`src/components/dashboard/PeriodSelector.tsx`). ### Décisions de Max (2026-10-20, réponses à `/analyze`) 1. **« Cette année » = l'année à ce jour partout** (1er janvier à aujourd'hui), et **la plage par défaut des Rapports devient « Cette année »** : les Rapports ouvrent avec ce bouton allumé, plus « Personnalisé » sur l'année civile entière. Le tableau de bord ne change pas (déjà `year`). 2. **Le bouton « Tout » entre dans cette issue** : plage vide transmise au service, test corrigé. ### Travail à faire - [ ] `resolveReportsPeriod` : sans `from`/`to` ni `period` valides, rendre `computeDateRange("year")` avec `period: "year"` ; pour `all`, rendre une plage vide (`from`/`to` absents) avec `period: "all"`. `currentYearRange` disparaît ou ne sert plus qu'aux tests. Le type `UseReportsPeriodResult` passe `from`/`to` en optionnels ; vérifier chaque consommateur (`useTrends`, `useCategoryZoom`, `ReportsPage`, `ReportsCategoryPage`, `ReportsComparePage`, `FilterPanel`, `PeriodSelector`) : les services acceptent déjà des bornes absentes (clauses conditionnelles), `PeriodSelector` lit `customDateFrom ?? ""`. - [ ] URL : une URL sans paramètre reste la plage par défaut ; `setPeriod("year")` n'a pas besoin d'écrire `from`/`to`. Un signet existant avec `from`/`to` garde son sens. - [ ] `useReportsPeriod.test.ts` : « defaults to current civil year » devient « defaults to the year to date, period year » (avec `fixedToday`) ; « treats `all` … » attend une plage vide ; cas d'un signet `from`/`to` inchangé. `dateRange.test.ts` : `year` déjà à ce jour, vérifier qu'un test le fige. - [ ] Textes FR/EN : `reports.help.tips[2]` (proposition : « Tendances montre vos revenus et dépenses mois par mois sur la période choisie » / « Trends shows your income and expenses month by month over the selected period ») et `reports.hub.trendsDescription` (« Où vous allez, mois par mois » / « Where you're heading, month by month »). Les deux puces avaient été validées mot pour mot par Max le 2026-10-16 : la PR soumet les nouvelles formulations à sa relecture. `reports.cartes.flowChartTitle` reste juste (série fixe). - [ ] Docs : `docs/guide-utilisateur.md` et les clés `docs.*` des locales, si elles décrivent la plage par défaut des Rapports ou « Tout » (`grep -n "année civile\|calendar year\|Personnalisé\|Custom"`). - [ ] CHANGELOG : Changed / Modifié (plage par défaut des Rapports, puce d'aide) et Fixed / Corrigé (« Tout »). - [ ] Hors périmètre, à dire dans la PR : les séries fixes de douze mois de Faits saillants et de Cartes (par conception, #253), le mode « Cumul annuel » de Cartes (déjà l'année à ce jour, `ytd`). ### Fichiers concernés - `src/hooks/useReportsPeriod.ts`, `src/hooks/useReportsPeriod.test.ts` — défaut et `all`. - `src/utils/dateRange.ts`, `src/utils/dateRange.test.ts` — inchangé ou test épinglé. - `src/hooks/useTrends.ts`, `src/hooks/useCategoryZoom.ts`, `src/pages/ReportsPage.tsx`, `src/pages/ReportsTrendsPage.tsx`, `src/pages/ReportsCategoryPage.tsx`, `src/pages/ReportsComparePage.tsx`, `src/components/reports/FilterPanel.tsx` — bornes optionnelles. - `src/i18n/locales/fr.json`, `src/i18n/locales/en.json` — deux clés. - `docs/guide-utilisateur.md`, `CHANGELOG.md`, `CHANGELOG.fr.md`. ### Surface de test - Existants : `useReportsPeriod.test.ts`, `dateRange.test.ts`, `FilterPanel.test.tsx`, `overTimeResults.test.ts`. - Manquants : rendu de `PeriodSelector` avec `period: "year"` par défaut (bouton allumé, `renderToStaticMarkup`) ; un test de `useTrends` ou de `useCategoryZoom` sur le harnais `hookHarness` qui vérifie que « Tout » appelle le service sans bornes. - Régression : oui pour « Tout » (bug). ### Critères d'acceptation (précisés) - [ ] Rapports ouverts sans paramètre : bouton « Cette année » allumé, données du 1er janvier à aujourd'hui ; tableau de bord inchangé. - [ ] « Tout » sur Tendances, Analyse par catégorie et le hub montre toutes les années. - [ ] Puce d'aide et carte du hub décrivent ce que montre Tendances, FR et EN, formulations validées par Max. - [ ] Tests de `resolveReportsPeriod` à jour ; aucun test ne fige plus l'année civile comme défaut. ### Complexité Moyenne. Niveau de revue : normal. Prochaine étape : `/fix-issue 479`.
maximus added the
status:triage
type:feature
source:human
labels 2026-10-20 00:32:07 +00:00
maximus added
status:ready
and removed
status:triage
labels 2026-10-21 01:04:31 +00:00
Sign in to join this conversation.
No milestone
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#479
No description provided.