montant inclus dans comparable #243
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#243
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?
Contexte
Les rapports comparables ont deux onglets (
ReportsComparePage.tsx, pilotés parCompareModeTabs) qui agrègent les montants différemment :budgetService.ts(getActualsByCategoryRange, ~ligne 193) :SUM(amount)signé, sans filtre. Débit -500 + crédit +500 = 0. Le netting est déjà là.reportService.ts(getCompareMonthOverMonth~469,getCompareYearOverYear~520) :SUM(ABS(amount))avecWHERE 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
transferdoivent 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 typetransfer(SUM signé pour ces catégories uniquement), le reste gardant le comportement dépenses.Travail à faire
reportService.ts(getCompareMonthOverMonth+getCompareYearOverYear), calculer les catégories de typetransferen SUM signé (netté) au lieu deSUM(ABS)filtré, tout en gardant le comportement dépenses pour les autres types.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.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—CategoryDeltasi un champ de type est requis pour distinguer les transferts.Surface de test
reportService.test.tscouvre déjàgetCompareMonthOverMonth(~322) etgetCompareYearOverYear(~422) mais PAS le netting.transferavec 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.getBudgetVsActualDatan'a aucun test unitaire direct (pas debudgetService.test.ts) — angle mort à couvrir si le chemin budget est touché.Critères d'acceptation
transferéquilibrée (débit+crédit=0) affiche ~0 dans le réel-vs-réel.Complexité : Medium
Notes autopilot
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
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
Le scope défini de cette issue — netting des transferts de type
transferdans le réel-vs-réel — est livré en v0.11.0 (PR #248, commita6fa89e).Les demandes de suivi du commentaire du 2026-07-05 sont reprises dans des issues dédiées :
Fermée manuellement (la référence nue
(#243)dans le commit de merge ne déclenche pas l'auto-close).