montant inclus dans comparable #243

Closed
opened 2026-07-04 19:42:40 +00:00 by maximus · 3 comments
Owner

Contexte

Les rapports comparables ont deux onglets (ReportsComparePage.tsx, pilotés par CompareModeTabs) qui agrègent les montants différemment :

  • Réel vs budget -> budgetService.ts (getActualsByCategoryRange, ~ligne 193) : SUM(amount) signé, sans filtre. Débit -500 + crédit +500 = 0. Le netting est déjà là.
  • Réel vs réel -> reportService.ts (getCompareMonthOverMonth ~469, getCompareYearOverYear ~520) : SUM(ABS(amount)) avec WHERE amount < 0. Ne garde que les sorties, jette les crédits -> une catégorie de type transfert comme « Paiement CC » y est TOUJOURS non-nulle.

« Paiement CC » est une catégorie ordinaire de type transfer (id 71, enfant de « Autres »). Aucun mécanisme de transferts n'existe côté transactions (il n'existe qu'au Bilan : balance_account_transfers).

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

Les catégories de type transfer doivent NETTER à ~0 (débit + crédit s'annulent) au lieu d'afficher la somme des débits.

Contrainte d'implémentation CRITIQUE : ne PAS retirer globalement le filtre WHERE amount < 0 / ABS() du réel-vs-réel — ce filtre définit ce rapport comme un rapport de DÉPENSES. Le supprimer ferait apparaître les revenus et signerait tous les montants, dénaturant le rapport pour toutes les autres catégories. Le netting doit être CIBLÉ sur les catégories de type transfer (SUM signé pour ces catégories uniquement), le reste gardant le comportement dépenses.

Travail à faire

  • Dans reportService.ts (getCompareMonthOverMonth + getCompareYearOverYear), calculer les catégories de type transfer en SUM signé (netté) au lieu de SUM(ABS) filtré, tout en gardant le comportement dépenses pour les autres types.
  • Vérifier le réel-vs-budget (budgetService.ts) : il nette déjà ; confirmer qu'aucune régression n'est introduite. Si un montant non-nul persiste là, c'est un problème de données (jambe non catégorisée / convention de signe incohérente entre relevés), à documenter, pas à « corriger » dans le rapport.
  • Ajouter un test unitaire direct sur le netting des transferts.

Fichiers concernés

  • src/services/reportService.tsgetCompareMonthOverMonth (~444/469), getCompareYearOverYear (~502/520) : netting ciblé par type.
  • src/services/budgetService.tsgetActualsByCategoryRange (~193) : vérification, probablement inchangé.
  • src/shared/types/index.tsCategoryDelta si un champ de type est requis pour distinguer les transferts.

Surface de test

  • reportService.test.ts couvre déjà getCompareMonthOverMonth (~322) et getCompareYearOverYear (~422) mais PAS le netting.
  • Test de régression OBLIGATOIRE (type:bug) : une catégorie de type transfer avec débit -X et crédit +X sur la période -> ~0 dans le compare réel-réel ; une catégorie de dépense normale garde sa somme des sorties.
  • getBudgetVsActualData n'a aucun test unitaire direct (pas de budgetService.test.ts) — angle mort à couvrir si le chemin budget est touché.

Critères d'acceptation

  • Une catégorie de type transfer équilibrée (débit+crédit=0) affiche ~0 dans le réel-vs-réel.
  • Les catégories de dépense conservent exactement leurs montants actuels dans le réel-vs-réel (pas de revenus introduits, pas de montants signés).
  • Le réel-vs-budget reste inchangé pour les catégories non-transfert.
  • Test de régression vert.

Complexité : Medium

Notes autopilot

  • Scope = partie 1 (netting) UNIQUEMENT. L'affichage hiérarchique du réel-réel (commentaire d'origine) est sorti en #247.
  • Dépendance : #247 dépend de cette issue (même chemin de calcul) -> celle-ci d'abord.
  • Aucune question ouverte.
## Contexte Les rapports comparables ont deux onglets (`ReportsComparePage.tsx`, pilotés par `CompareModeTabs`) qui agrègent les montants différemment : - **Réel vs budget** -> `budgetService.ts` (`getActualsByCategoryRange`, ~ligne 193) : `SUM(amount)` signé, sans filtre. Débit -500 + crédit +500 = 0. Le netting est déjà là. - **Réel vs réel** -> `reportService.ts` (`getCompareMonthOverMonth` ~469, `getCompareYearOverYear` ~520) : `SUM(ABS(amount))` avec `WHERE amount < 0`. Ne garde que les sorties, jette les crédits -> une catégorie de type transfert comme « Paiement CC » y est TOUJOURS non-nulle. « Paiement CC » est une catégorie ordinaire de type `transfer` (id 71, enfant de « Autres »). Aucun mécanisme de transferts n'existe côté transactions (il n'existe qu'au Bilan : `balance_account_transfers`). ## Décision (figée via /analyze 2026-07-04) Les catégories de type `transfer` doivent NETTER à ~0 (débit + crédit s'annulent) au lieu d'afficher la somme des débits. **Contrainte d'implémentation CRITIQUE** : ne PAS retirer globalement le filtre `WHERE amount < 0` / `ABS()` du réel-vs-réel — ce filtre définit ce rapport comme un rapport de DÉPENSES. Le supprimer ferait apparaître les revenus et signerait tous les montants, dénaturant le rapport pour toutes les autres catégories. Le netting doit être CIBLÉ sur les catégories de type `transfer` (SUM signé pour ces catégories uniquement), le reste gardant le comportement dépenses. ## Travail à faire - [ ] Dans `reportService.ts` (`getCompareMonthOverMonth` + `getCompareYearOverYear`), calculer les catégories de type `transfer` en SUM signé (netté) au lieu de `SUM(ABS)` filtré, tout en gardant le comportement dépenses pour les autres types. - [ ] Vérifier le réel-vs-budget (`budgetService.ts`) : il nette déjà ; confirmer qu'aucune régression n'est introduite. Si un montant non-nul persiste là, c'est un problème de données (jambe non catégorisée / convention de signe incohérente entre relevés), à documenter, pas à « corriger » dans le rapport. - [ ] Ajouter un test unitaire direct sur le netting des transferts. ## Fichiers concernés - `src/services/reportService.ts` — `getCompareMonthOverMonth` (~444/469), `getCompareYearOverYear` (~502/520) : netting ciblé par type. - `src/services/budgetService.ts` — `getActualsByCategoryRange` (~193) : vérification, probablement inchangé. - `src/shared/types/index.ts` — `CategoryDelta` si un champ de type est requis pour distinguer les transferts. ## Surface de test - `reportService.test.ts` couvre déjà `getCompareMonthOverMonth` (~322) et `getCompareYearOverYear` (~422) mais PAS le netting. - Test de régression OBLIGATOIRE (type:bug) : une catégorie de type `transfer` avec débit -X et crédit +X sur la période -> ~0 dans le compare réel-réel ; une catégorie de dépense normale garde sa somme des sorties. - `getBudgetVsActualData` n'a aucun test unitaire direct (pas de `budgetService.test.ts`) — angle mort à couvrir si le chemin budget est touché. ## Critères d'acceptation - [ ] Une catégorie de type `transfer` équilibrée (débit+crédit=0) affiche ~0 dans le réel-vs-réel. - [ ] Les catégories de dépense conservent exactement leurs montants actuels dans le réel-vs-réel (pas de revenus introduits, pas de montants signés). - [ ] Le réel-vs-budget reste inchangé pour les catégories non-transfert. - [ ] Test de régression vert. ## Complexité : Medium ## Notes autopilot - Scope = partie 1 (netting) UNIQUEMENT. L'affichage hiérarchique du réel-réel (commentaire d'origine) est sorti en #247. - Dépendance : #247 dépend de cette issue (même chemin de calcul) -> celle-ci d'abord. - Aucune question ouverte.
maximus added the
type:bug
source:human
labels 2026-07-04 19:42:40 +00:00
Author
Owner

aussi, dans le réel-réel il faudrait afficher sous forme hierarchique comme pour le budget afin de voir les sous-totaux, dont le montant net

aussi, dans le réel-réel il faudrait afficher sous forme hierarchique comme pour le budget afin de voir les sous-totaux, dont le montant net
maximus added this to the overnight-2026-07-05-bilan-rapports-ux milestone 2026-07-04 20:45:12 +00:00
maximus added the
status:ready
label 2026-07-04 20:45:13 +00:00
maximus added
status:approved
and removed
status:ready
labels 2026-07-05 00:53:00 +00:00
Author
Owner

dans le reel-reel, je ne vois pas les revenus de paie, seulement autres revenus.

aussi dans ces 2 rapports, j'aimerais pouvoir collapse/explode les sous-categories

dans le reel-reel, je ne vois pas les revenus de paie, seulement autres revenus. aussi dans ces 2 rapports, j'aimerais pouvoir collapse/explode les sous-categories
maximus reopened this issue 2026-07-05 21:56:21 +00:00
Author
Owner

Le scope défini de cette issue — netting des transferts de type transfer dans le réel-vs-réel — est livré en v0.11.0 (PR #248, commit a6fa89e).

Les demandes de suivi du commentaire du 2026-07-05 sont reprises dans des issues dédiées :

  • #253 — réel-vs-réel = analyse de résultat (revenus visibles + résultat avant/après transferts) + défaut mois précédent. Reprend et remplace la prémisse « rapport de dépenses » figée ici : le rapport doit montrer les revenus pour juger le résultat (over/under).
  • #254 — collapse/expand des sous-catégories dans les 2 rapports.

Fermée manuellement (la référence nue (#243) dans le commit de merge ne déclenche pas l'auto-close).

Le scope défini de cette issue — netting des transferts de type `transfer` dans le réel-vs-réel — est livré en **v0.11.0** (PR #248, commit a6fa89e). Les demandes de suivi du commentaire du 2026-07-05 sont reprises dans des issues dédiées : - **#253** — réel-vs-réel = analyse de résultat (revenus visibles + résultat avant/après transferts) + défaut mois précédent. Reprend et remplace la prémisse « rapport de dépenses » figée ici : le rapport doit montrer les revenus pour juger le résultat (over/under). - **#254** — collapse/expand des sous-catégories dans les 2 rapports. Fermée manuellement (la référence nue `(#243)` dans le commit de merge ne déclenche pas l'auto-close).
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#243
No description provided.