fix(reports/cartes): Budget Adherence card filters out all expense categories (signed monthBudget) #112
Labels
No labels
source:analyste
source:defenseur
source:human
source:medic
status:approved
status:blocked
status:in-progress
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#112
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
Sur
/reports/cartes, la carte "Adhésion budgétaire" (Budget Adherence) affiche systématiquement « aucune catégorie avec budget ce mois-ci » même quand l'utilisateur a des budgets définis sur des catégories de dépenses.Cause racine
Dans
src/services/reportService.ts(fonctiongetCartesSnapshot, ~ligne 912) :Dans
src/services/budgetService.tsligne 260,monthBudgetest signé :Le filtre
r.monthBudget > 0est donc toujours faux pour les lignesexpense→ aucune catégorie ne passe, même avec un budget réel > 0.Autres filtres impactés
Math.abs(r.monthActual) <= r.monthBudget— compare|actual|à unbudgetnégatif → toujours faux.overrunAbs = actual - r.monthBudget,overrunPct = overrunAbs / r.monthBudget— calculs bruités par les signes.budgetService.ts(hors scope de ce bug) utilise déjàMath.abs(monthBudget)pour le variation % — c'est la bonne approche à dupliquer.Fix proposé
Dans
reportService.ts, traiter les montants en absolu dans la carte Budget Adherence :Fichiers concernés
src/services/reportService.ts(lignes ~912–942)src/services/reportService.cartes.test.ts— ajouter un test de régression avec une catégorieexpenseayantmonthBudget = -100etmonthActual = -80, qui doit passer le filtre (dans le fix) et compter comme "in target".Critères d'acceptation
categoriesTotal.inTargetcompte correctement les catégories où les dépenses réelles ≤ budget (en absolu).worstOverrunsutilisent des montants absolus pour le calcul d'overrunAbset d'overrunPct.CHANGELOG.md+CHANGELOG.fr.mdsous[Unreleased]>Fixed/Corrigé.npm run buildetnpm test -- --runpassent.Complexité
Simple (un seul fichier + un test), mais important — la carte est cassée en production.