fix: l'export de donnees detruit les configurations d'import #331
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#331
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
Decouvert au re-ancrage de la spec dans le code, hors de la revue initiale.
src/services/dataExportService.tsne serialise quecategories,suppliers,keywordsettransactions. Niimport_sourcesniimport_config_templatesne sont exportes. A l'import, le service faitDELETE FROM import_sources(:265et:362) puis cree une source factice « Data Import » aveccolumn_mapping = "{}"pour rattacher les transactions.Consequence : exporter puis reimporter ses donnees detruit definitivement toutes les configurations d'import. Apres une restauration de sauvegarde, chaque source doit etre reconfiguree entierement a la main.
C'est une troisieme voie de perte du format, independante du bug racine et de la derive, et la plus radicale des trois. La laisser ouverte viderait le chantier de son sens.
Taches
import_sourcesetimport_config_templatesdans le format d'export SREFDELETEsuivi d'une source facticeCriteres d'acceptation
Depends on #330
Revision /review-spec — 2026-08-13
Corrections a appliquer, issues de la revue 3 experts :
withTransactiondansdataExportService.ts. Le service enchaineDELETE FROM transactions / imported_files / import_sources / keywords / suppliers / categories(:263-268,:360-362) puis desdb.executed'insertion. Cette issue ajoute deux boucles d'insertion sur des tables aUNIQUE(name)et une cle etrangere : la moindre violation abandonne la restauration a mi-course et detruit l'historique financier sans retour arriere.Fix : envelopper purge + restauration des deux fonctions dans
withTransaction, et ajouter un critere d'acceptation — une restauration qui echoue a la ligne N laisse le profil intact.import_config_templatesn'est dans aucune des deux listes de purge : reinserer des modeles restaures dans un profil qui en possede deja echoue surUNIQUE constraint failed: import_config_templates.name. Restaurer dans un profil existant est le chemin normal, pas un cas theorique.Fix : specifier l'ordre (modeles avant sources) et la strategie d'identifiants — purger aussi la table, ou upsert par nom et remapper
import_sources.template_id.amount_modeetsign_conventiona la frontiere d'import, avec message lisible. LeCHECKen base (#323) rattrape le cas, mais une erreur de contrainte SQLite n'est pas un message utilisateur.Fichiers concernes
src/services/dataExportService.ts— serialisation, restauration,withTransactionsrc/services/db.ts— reference du contratwithTransactionsrc/i18n/locales/fr.json+en.json— messages de refus de liste blancheDecisions prises en planification
Emplacement du code partage : le codec
formatToRow/formatFromRowetmapRowvivent danssrc/utils/importFormat.ts— meme dossier queamountParser,dateParseretcsvAutoDetect, qui portent deja la logique pure du domaine. Les types restent danssrc/shared/types/.Aucune correction retroactive des transactions deja importees a l'envers : la voie de reparation est
deleteImportWithTransactionspuis re-import. Ne jamais muter des montants deja ecrits.L'import reste entierement en edition Free — aucun gating a ajouter.
Les specs
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.Le format SREF porte un champ de version explicite. A l'import, son absence signifie « format anterieur » : les tableaux
import_sourcesetimport_config_templatesmanquants sont traites comme vides, et l'import se comporte comme aujourd'hui.Spec source
spec-plan-import-csv-format.md+spec-decisions-import-csv-format.md(racine du repo, committees).