Reclasser une transaction répartie laisse sa ligne de compensation dans l’ancienne catégorie #454
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#454
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?
Constat
Relevé par la revue de la PR #452 (commentaire 24129), hors de son diff, et confirmé à la lecture du code sur
main065f580:updateTransactionCategory(src/services/transactionService.ts:301-315) ne met à jour que la ligne parente (UPDATE transactions SET category_id = $1 … WHERE id = $3) ;saveSplitAdjustment(l. 447-461) crée la ligne de compensation avecparent.category_id, c'est-à-dire la catégorie du parent au moment où la répartition est enregistrée, et le montant-offsetTotal.Reclasser ensuite le parent laisse donc la compensation dans l'ancienne catégorie.
Reproduction
Rejouée par le relecteur en SQLite sur
consolidated_schema.sql:SplitAdjustmentModal(l. 49-52) ne reconnaît la compensation que par « même catégorie que le parent, signe opposé » : elle s'affiche comme une entrée ordinaire (A, 50).Pourquoi ça compte davantage depuis #369
En Base, on répare en rouvrant la répartition, en retirant cette entrée puis en enregistrant. Depuis #369 (PR #452), la fenêtre de répartition est verrouillée en Gratuite, alors que le reclassement reste libre. Un utilisateur Gratuit qui reclasse une transaction déjà répartie (répartie avant cette release, ou avec une clé retirée depuis) crée l'écart sans pouvoir le réparer. Le cas est rare, mais l'écart est silencieux.
Pistes, à trancher à l'analyse
updateTransactionCategoryquand le parent est réparti, dans une même transaction (withTransaction).SplitAdjustmentModal.Critères d'acceptation proposés