ajout fonctions importer csv pour details en actions #245
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#245
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
En snapshot d'un compte détaillé, on ajoute les titres un par un (
SnapshotLineRow.tsxvariante detailed +SecurityPicker). Feature : importer un CSV à la place.Découverte clé : c'est PUREMENT FRONT. Le chemin de sauvegarde (
balance.service.tssaveSnapshotAtomic->findOrCreateSecurity+ insert holdings, transactionnel, migration v14 existante) gère déjà tout. Un import = fichier ->HoldingDraft[]-> reducer -> save existant. AUCUNE migration SQL.Décision (figée via /analyze 2026-07-04)
Détection FLEXIBLE du prix : détecter et proposer les colonnes ; si une colonne prix existe, la mapper ; sinon laisser
unit_pricevide et permettre le fetch ensuite (PriceFetchControl). Mapping cible : symbole -> security, quantité, prix ->unit_price(optionnel), coût ->book_cost(optionnel).Travail à faire
SnapshotLineRow.tsx(~155, à côté de « Ajouter un titre »).pick_import_file(filtre CSV) ->detect_encoding->read_file_content->preprocessQuotedCSV->Papa.parse.autoDetectHoldingColumns(leautoDetectConfigexistant est couplé aux transactions) en réutilisant les helpers decsvAutoDetect.ts(detectDelimiter,detectHeader,detectNumericColumns) +parseFrenchAmount.ColumnMappingEditor.tsx, avec détection flexible du prix.IMPORT_HOLDINGSdansuseSnapshotEditor.ts(à côté deADD_HOLDING~317).UNIQUE(snapshot_line_id, security_id)).Fichiers concernés
src/components/balance/SnapshotLineRow.tsx— bouton + branchement.src/hooks/useSnapshotEditor.ts— actionIMPORT_HOLDINGS, mapping ligne CSV ->HoldingDraft.src/utils/csvAutoDetect.ts— réutilisation helpers + nouveauautoDetectHoldingColumns.src/utils/amountParser.ts(parseFrenchAmount) — réutilisé.src/components/import/ColumnMappingEditor.tsx— idiome de mapping (référence).fs_commands.rs(detect_encoding,read_file_content) +export_import_commands.rs(pick_import_file) — réutilisés tels quels.src/i18n/locales/fr.json+en.json— clésbalance.snapshot.detailed.importCsv.*.Surface de test
balance.service.test.ts+useSnapshotEditor.test.tscouvrent le save/reducer existant.csvAutoDetectn'est pas testé unitairement ->autoDetectHoldingColumnsdoit apporter ses tests (détection colonnes, prix présent/absent, fusion doublons, nombres FR).IMPORT_HOLDINGS(drafts injectés ->buildDetailedLines).Critères d'acceptation
unit_pricereste vide et le fetch reste possible.Complexité : Medium
Notes autopilot
fr.json/en.json(conflit i18n possible en parallèle).price_source/price_fetched_atsont effacés ; import sans prix -> validationsnapshot_priced_unit_price_requiredau save sauf fetch ensuite (comportement voulu).