fix: persister et restaurer le format d'import (bug racine) #324
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#324
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?
Refs:
spec-decisions-import-csv-format.md+spec-plan-import-csv-format.md(racine du repo).Contexte
Le bug central du chantier. A la restauration d'une source configuree,
src/hooks/useImportWizard.ts:311-325:La convention est perdue a chaque rechargement et le mode est re-devine depuis la forme du mapping.
useImportWizard.ts:514applique alors la negation a contresens : toutes les depenses deviennent des revenus, sans erreur affichee. La doc Desjardins confirme que le cas est courant — le signe des montants differe selon le type de compte, et un meme utilisateur a un compte-cheques et une carte de credit dans deux conventions opposees.Second defaut, symetrique :
ColumnMappingEditor.tsx:82-94ne nettoie pas le mapping au changement de mode (seuls les<select>le font). Basculer de mode sans re-selectionner de colonne perd ou inverse le mode au rechargement.Troisieme defaut : la config est ecrite en base des l'etape doublons (
useImportWizard.ts:588-606), donc un import annule persiste quand meme une configuration potentiellement fausse.Taches
ImportFormatpartage regroupant les huit champs de format ;ImportSourceetImportConfigTemplatele composent tous les deuxsrc/services/importSourceService.ts: les quatre nouvelles colonnes en creation, mise a jour et lectureuseImportWizard.selectSource: lire les vraies valeurs ; supprimer la valeur en dur (:323) et la re-inference du mode (:321)ColumnMappingEditor.onAmountModeChangenettoie les colonnes du mode abandonne — le mode devient la source de verite du mappingcheckDuplicatesInternalversexecuteImporttemplate_id), persiste et restaure ;selectedTemplateIdn'est plus remis anullaveuglement (:300)Criteres d'acceptation
Depends on #323
Revision /review-spec — 2026-08-13
Corrections a appliquer, issues de la revue 3 experts :
ImportFormatcompose est structurellement impossible — verifie danssrc/shared/types/index.ts:ImportSource.has_header: boolean(:12) etcolumn_mapping: string(:10),ImportConfigTemplate.has_header: number(:164),SourceConfig.hasHeader: booleancamelCase aveccolumnMapping: ColumnMappingobjet (:225), etAutoDetectResultne porte que 7 des 8 champs.ImportFormatRow— forme persistee, snake_case, mapping en JSON,has_headernormalise.ImportFormat— forme de domaine, camelCase, mapping parse.formatToRow/formatFromRow— seul point de conversion, avec un test de completude : un champ ajoute au format sans passer par le codec fait echouer le test.Fichiers concernes
src/shared/types/index.ts—ImportFormatRow+ImportFormatsrc/utils/importFormat.ts— creer : codecformatToRow/formatFromRowsrc/services/importSourceService.ts— persistance des 4 colonnessrc/services/importConfigTemplateService.ts— alignement sur le codecsrc/hooks/useImportWizard.ts— restauration reelle (:311-325), point d'ecriture deplace versexecuteImportsrc/components/import/ColumnMappingEditor.tsx— le mode nettoie le mapping opposeDecisions prises en planification
formatToRow/formatFromRowetmapRowvivent danssrc/utils/importFormat.ts— meme dossier queamountParser,dateParseretcsvAutoDetect, qui portent deja la logique pure du domaine. Les types restent danssrc/shared/types/.deleteImportWithTransactionspuis re-import. Ne jamais muter des montants deja ecrits.spec-decisions-import-csv-format.mdetspec-plan-import-csv-format.mdsont committees a la racine (force-add, precedent PR #295) : elles sont lisibles depuis un worktree.Spec source
spec-plan-import-csv-format.md+spec-decisions-import-csv-format.md(racine du repo, committees).