feat(balance): data layer — vehicle_type + custom_label migrations, starters, service #206
No reviewers
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#206
Loading…
Reference in a new issue
No description provided.
Delete branch "issue-202-data-layer-vehicle-type"
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?
Fixes #202
Foundational data layer for Bilan axe véhicule (Étape 1): the fiscal envelope becomes an account attribute (
balance_accounts.vehicle_type), the category stays a pure asset class.Changes
vehicle_type(nullable, CHECK fiscal enum) onbalance_accounts+custom_labelonbalance_categories; backfill envelope onto ex-tfsa/rrsp accounts (cash → NULL); defensive recovery of any seedi18n_keyoverwritten by free text (bug I).otherasset class (EXISTS + is_seed guards), deactivate the two envelope seeds.other+vehicle_type(prevents NULL FK → broken new-profile init).BalanceVehicleType,custom_label,vehicle_type,category_custom_label.normalizeVehicleType+vehicle_type_invalid; CRUD writes the columns; SELECT/JOINs read them back (no UPDATE wipe);STARTER_ACCOUNTS/proposeStarterAccounts(is_active=1 + vehicle_type)/getStarterCollisionsadjusted.Tests
🤖 Generated with Claude Code
Review — APPROVE ✅
Revue adversariale indépendante (orchestrateur
/sprint). Diff vérifié directement sur la branche, pas seulement le self-report du worker.Vérifications critiques
lib.rssur les versions 1–11 (diff direct). v12/v13 ajoutées après v11 ; constantes de testV12_SQL/V13_SQLau pattern v10/v11.SELECT, backfill défensif bug I (balance.category.%cohérent avec la convention de seed), reclass v13 gardé parEXISTS(other) AND is_seed=1, idempotent.other+vehicle_type, aucun FK NULL. Testconsolidated_schema_inits_cleanly_with_5_categories_and_4_startersassère 0balance_category_idNULL, 4 starters, 5 catégories actives.updateBalanceAccount/updateBalanceCategorylisent-puis-réécrivent ; SELECT/JOIN étendus (vehicle_type,custom_label,category_custom_label).proposeStarterAccountsfiltreis_active=1;getStarterCollisionsdésambiguïse les 3 starters de classeotherpar(categoryKey, name).Qualité des tests (pas des coquilles) :
migration_v9_to_v13_chain_...capture l'empreinte dessnapshot_linesavant/après et assère l'égalité exacte + véhicule conservé + transfert intact. CHECK rejeté couvert (migration + consolidated).cargo test80 ✓,vitest3300 ✓,npm run buildok.Déviations acceptées (justifiées)
listBalanceCategories({includeInactive})défauttrue→ le filtre dropdown est porté par #203 (comportement-neutre pour #202).StarterDef.keygardé comme identifiants UI (cash/tfsa/rrsp/other) ;categoryKeyréduit àcash|other+ champvehicleType.Non bloquant : entre le merge de #202 et celui de #203, la page de gestion (
includeInactive=true) affichera les seeds tfsa/rrsp désactivés — résolu par #203, shippés ensemble.Verdict : APPROVE. PR fidèle à la spec, tests rigoureux, invariants de précision financière préservés.