analyse de résultat (revenus + résultat avant/après transferts) + défaut mois précédent #253

Closed
opened 2026-07-05 22:18:22 +00:00 by maximus · 1 comment
Owner

Contexte

Le rapport « réel vs réel » (ReportsComparePage) est aujourd'hui un rapport de DÉPENSES (WHERE amount < 0), prémisse figée dans #243. Feedback utilisateur (commentaire #243, 2026-07-05) : ce rapport est en réalité une analyse de résultat (le nom du produit) — il faut voir les REVENUS pour juger si on est en surplus/déficit (over/under). Le netting des transferts de #243 reste valide (livré v0.11.0, PR #248) ; ce ticket l'étend.

Changement 1 — Réel-réel = analyse de résultat

Structure cible (sections + 2 lignes de résultat) :

REVENUS            (section, SUM signé)
DÉPENSES           (section, ABS des négatifs — inchangé)
── Résultat avant transferts = revenus − dépenses
TRANSFERTS         (section, SUM signé net — #243)
══ Résultat net (total) = avant transferts + transferts nets
  • reportService.ts COMPARE_DELTA_SQL (~668-686) : élargir le WHERE et le CASE pour inclure income en SUM signé (comme transfer). WHERE (t.amount<0 OR type IN ('transfer','income')) ; CASE ... IN ('transfer','income') THEN t.amount ELSE ABS(t.amount). Le reste du service (rowsToDeltas, buildCompareTree) est agnostique au type.
  • Affichage ComparePeriodTable.tsx : la section Revenus existe déjà (labels + i18n en place) → apparaît dès que les données arrivent. Remplacer le grand total actuel (sumLeaves(rows), devenu faux car il mélange revenus + dépenses ABS) par les 2 lignes de résultat, calculées à partir des sous-totaux par type.
  • Inverser la couleur de variation sur les lignes de résultat (plus haut = mieux = vert), l'inverse des dépenses.
  • Chart : laisser en dépenses pour l'instant (revenus mélangés visuellement sinon).

Changement 2 — Mois précédent par défaut (compare)

Le compare ouvre par défaut sur décembre (année civile) à cause d'un effet de synchro dans useCompare.ts (~125-132) qui écrase le mois de référence par le to de useReportsPeriod. defaultReferencePeriod() (mois précédent) est déjà l'initialState mais est écrasé. Corriger pour ouvrir sur le dernier mois complet. Portée : compare uniquement (Cartes/Highlights déjà OK ; Tendances/Répartition gardent la pleine année civile).

Fichiers concernés

  • src/services/reportService.tsCOMPARE_DELTA_SQL (WHERE + CASE income)
  • src/components/reports/ComparePeriodTable.tsx — 2 lignes de résultat + couleur inversée
  • src/hooks/useCompare.ts — défaut mois précédent (effet de synchro)
  • src/i18n/locales/{fr,en}.jsonreports.compare.resultBeforeTransfers, resultNet
  • src/services/reportService.test.ts — tests SQL (sous-chaînes), fixtures income, buildCompareTree
  • CHANGELOG.md / CHANGELOG.fr.md — Changed

Surface de test

  • reportService.test.ts : mettre à jour les tests asservissant les sous-chaînes SQL exactes (~530-552) ; ajouter fixtures income dans cats (~675) ; netting inchangé ; test résultat avant/après transferts.
  • ComparePeriodTable : pas de test existant → couvrir le calcul des 2 lignes de résultat.
  • useCompare : test du défaut mois précédent.

Critères d'acceptation

  • Les catégories de revenu apparaissent dans le réel-réel (paie + autres), en SUM signé.
  • Ligne « Résultat avant transferts » = revenus − dépenses.
  • Ligne « Résultat net » = avant transferts + transferts nets ; = avant transferts si transferts à 0.
  • Couleur des lignes de résultat : surplus/hausse en vert, déficit/baisse en rouge.
  • Les dépenses gardent exactement leurs magnitudes actuelles (ABS).
  • Le compare ouvre par défaut sur le mois précédent complet.
  • Tests verts (netting préservé).

Complexité : Medium

Remplace la prémisse dépenses-only de #243 (netting conservé). Collapse/expand des sous-catégories = suivi séparé.

## Contexte Le rapport « réel vs réel » (`ReportsComparePage`) est aujourd'hui un rapport de DÉPENSES (`WHERE amount < 0`), prémisse figée dans #243. Feedback utilisateur (commentaire #243, 2026-07-05) : ce rapport est en réalité une **analyse de résultat** (le nom du produit) — il faut voir les REVENUS pour juger si on est en surplus/déficit (over/under). Le netting des transferts de #243 reste valide (livré v0.11.0, PR #248) ; ce ticket l'étend. ## Changement 1 — Réel-réel = analyse de résultat Structure cible (sections + 2 lignes de résultat) : ``` REVENUS (section, SUM signé) DÉPENSES (section, ABS des négatifs — inchangé) ── Résultat avant transferts = revenus − dépenses TRANSFERTS (section, SUM signé net — #243) ══ Résultat net (total) = avant transferts + transferts nets ``` - `reportService.ts` `COMPARE_DELTA_SQL` (~668-686) : élargir le WHERE et le CASE pour inclure `income` en SUM signé (comme transfer). `WHERE (t.amount<0 OR type IN ('transfer','income'))` ; CASE `... IN ('transfer','income') THEN t.amount ELSE ABS(t.amount)`. Le reste du service (`rowsToDeltas`, `buildCompareTree`) est agnostique au type. - Affichage `ComparePeriodTable.tsx` : la section Revenus existe déjà (labels + i18n en place) → apparaît dès que les données arrivent. Remplacer le grand total actuel (`sumLeaves(rows)`, devenu faux car il mélange revenus + dépenses ABS) par les 2 lignes de résultat, calculées à partir des sous-totaux par type. - Inverser la couleur de variation sur les lignes de résultat (plus haut = mieux = vert), l'inverse des dépenses. - Chart : laisser en dépenses pour l'instant (revenus mélangés visuellement sinon). ## Changement 2 — Mois précédent par défaut (compare) Le compare ouvre par défaut sur décembre (année civile) à cause d'un effet de synchro dans `useCompare.ts` (~125-132) qui écrase le mois de référence par le `to` de `useReportsPeriod`. `defaultReferencePeriod()` (mois précédent) est déjà l'`initialState` mais est écrasé. Corriger pour ouvrir sur le dernier mois complet. Portée : compare uniquement (Cartes/Highlights déjà OK ; Tendances/Répartition gardent la pleine année civile). ## Fichiers concernés - `src/services/reportService.ts` — `COMPARE_DELTA_SQL` (WHERE + CASE income) - `src/components/reports/ComparePeriodTable.tsx` — 2 lignes de résultat + couleur inversée - `src/hooks/useCompare.ts` — défaut mois précédent (effet de synchro) - `src/i18n/locales/{fr,en}.json` — `reports.compare.resultBeforeTransfers`, `resultNet` - `src/services/reportService.test.ts` — tests SQL (sous-chaînes), fixtures income, `buildCompareTree` - `CHANGELOG.md` / `CHANGELOG.fr.md` — Changed ## Surface de test - `reportService.test.ts` : mettre à jour les tests asservissant les sous-chaînes SQL exactes (~530-552) ; ajouter fixtures `income` dans `cats` (~675) ; netting inchangé ; test résultat avant/après transferts. - `ComparePeriodTable` : pas de test existant → couvrir le calcul des 2 lignes de résultat. - `useCompare` : test du défaut mois précédent. ## Critères d'acceptation - [ ] Les catégories de revenu apparaissent dans le réel-réel (paie + autres), en SUM signé. - [ ] Ligne « Résultat avant transferts » = revenus − dépenses. - [ ] Ligne « Résultat net » = avant transferts + transferts nets ; = avant transferts si transferts à 0. - [ ] Couleur des lignes de résultat : surplus/hausse en vert, déficit/baisse en rouge. - [ ] Les dépenses gardent exactement leurs magnitudes actuelles (ABS). - [ ] Le compare ouvre par défaut sur le mois précédent complet. - [ ] Tests verts (netting préservé). ## Complexité : Medium Remplace la prémisse dépenses-only de #243 (netting conservé). Collapse/expand des sous-catégories = suivi séparé.
maximus added the
status:in-progress
type:feature
source:human
labels 2026-07-05 22:18:22 +00:00
maximus added
status:needs-fix
and removed
status:in-progress
labels 2026-07-05 23:29:33 +00:00
maximus added
status:review
and removed
status:needs-fix
labels 2026-07-05 23:38:08 +00:00
maximus added
status:needs-fix
and removed
status:review
labels 2026-07-06 00:09:40 +00:00
maximus added
status:review
and removed
status:needs-fix
labels 2026-07-06 00:14:50 +00:00
maximus added
status:approved
and removed
status:review
labels 2026-07-06 00:36:30 +00:00
Author
Owner

Livré dans main (merge 1360940, PR #255). Fermée manuellement — le Resolves #253 n'a pas auto-fermé car les commits préexistaient sur la branche feature.

Livré dans `main` (merge 1360940, PR #255). Fermée manuellement — le `Resolves #253` n'a pas auto-fermé car les commits préexistaient sur la branche feature.
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#253
No description provided.