feat: apercu obligatoire et recapitulatif signe des montants #329

Closed
opened 2026-08-12 20:14:33 +00:00 by maximus · 0 comments
Owner

Refs: spec-decisions-import-csv-format.md + spec-plan-import-csv-format.md (racine du repo).

Contexte

Rien ne rattrape une erreur de format avant l'ecriture en base :

  • L'apercu est un modal optionnel de 20 lignes (src/pages/ImportPage.tsx:196-202) sans aucun total. L'etape file-preview existe pourtant dans ImportWizardStep (types/index.ts:543) sans avoir jamais ete rendue — le modal l'avait supplantee.
  • ImportConfirmation.tsx:57-80 affiche delimiteur, encodage, format de date et lignes ignorees, mais ni le mode de montant, ni la convention de signe, ni le mapping. Le reglage le plus fragile est invisible au dernier point de controle.

Le recapitulatif signe est le controle le plus rentable du chantier : il rattrape visuellement toute erreur de convention, quelle qu'en soit la cause.

Taches

  • Rendre l'etape file-preview dans ImportPage, traversee a chaque import (decision explicite : obligatoire, pas conditionnee a la confiance)
  • Recapitulatif au-dessus du tableau : nombre de sorties et total, nombre d'entrees et total, nombre de lignes en erreur
  • Bouton « Inverser les signes » qui bascule sign_convention et relance le parsing — il agit sur la configuration, jamais sur les donnees seules, pour que la correction soit memorisee
  • ImportConfirmation affiche mode, convention et mapping en plus des quatre reglages actuels
  • Retirer le modal d'apercu devenu redondant
  • Cles i18n FR et EN

Criteres d'acceptation

  • L'apercu est traverse a chaque import et affiche sorties, entrees et totaux
  • « Inverser les signes » modifie la configuration et le resultat est visible immediatement
  • L'ecran de confirmation affiche mode, convention et mapping

Depends on #328


Revision /review-spec — 2026-08-13

Corrections a appliquer, issues de la revue 3 experts :

  • L'etape est un changement de machine a etats, pas un rendu ; le perimetre annonce (FilePreviewTable seul) est trop etroit et modifier ce fichier mute aussi le modal encore vivant. A ajouter :
    • useImportWizard : file-preview n'a aucune transition dans le reducer (SET_STEP ne la vise jamais) ; parseAndCheckDuplicates saute de source-config a duplicate-check (:719, commentaire « skips preview step ») ; checkDuplicates (:685, exporte :1006) est du code mort a recabler.
    • ImportPage : remplacer la paire de boutons Apercu / Verifier-doublons (:126-140) par WizardNavigation.
    • FilePreviewModal (:196-202) : le retirer.
  • « Inverser les signes » est inerte en mode debit/credit : sign_convention n'est applique que dans la branche montant unique (useImportWizard.ts:514). Le bouton doit, dans ce mode, permuter debitAmount et creditAmount dans le mapping puis relancer le parsing — sinon il ne rattrape rien sur un fichier a deux colonnes mappees a l'envers.

Fichiers concernes

  • src/pages/ImportPage.tsx — etape file-preview rendue, paire de boutons remplacee
  • src/hooks/useImportWizard.ts — transition reducer, recablage de checkDuplicates (:685) et parseAndCheckDuplicates (:719)
  • src/components/import/FilePreviewTable.tsx — recapitulatif signe
  • src/components/import/FilePreviewModal.tsxsupprimer
  • src/components/import/ImportConfirmation.tsx — mode, convention, mapping
  • src/components/import/WizardNavigation.tsx
  • src/i18n/locales/fr.json + en.json

Decisions prises en planification

  • Emplacement du code partage : le codec formatToRow/formatFromRow et mapRow vivent dans src/utils/importFormat.ts — meme dossier que amountParser, dateParser et csvAutoDetect, qui portent deja la logique pure du domaine. Les types restent dans src/shared/types/.

  • Aucune correction retroactive des transactions deja importees a l'envers : la voie de reparation est deleteImportWithTransactions puis 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.md et spec-plan-import-csv-format.md sont committees a la racine (force-add, precedent PR #295) : elles sont lisibles depuis un worktree.

  • Le seuil de 90 % ne conditionne rien ici : l'apercu est traverse a chaque import, quel que soit le score (decision de cadrage, contre la recommandation d'un apercu conditionnel).

Spec source

spec-plan-import-csv-format.md + spec-decisions-import-csv-format.md (racine du repo, committees).

Refs: `spec-decisions-import-csv-format.md` + `spec-plan-import-csv-format.md` (racine du repo). ## Contexte Rien ne rattrape une erreur de format avant l'ecriture en base : - L'apercu est un **modal optionnel** de 20 lignes (`src/pages/ImportPage.tsx:196-202`) sans aucun total. L'etape `file-preview` existe pourtant dans `ImportWizardStep` (`types/index.ts:543`) sans avoir jamais ete rendue — le modal l'avait supplantee. - `ImportConfirmation.tsx:57-80` affiche delimiteur, encodage, format de date et lignes ignorees, mais **ni le mode de montant, ni la convention de signe, ni le mapping**. Le reglage le plus fragile est invisible au dernier point de controle. Le recapitulatif signe est le controle le plus rentable du chantier : il rattrape visuellement toute erreur de convention, quelle qu'en soit la cause. ## Taches - [ ] Rendre l'etape `file-preview` dans `ImportPage`, traversee a chaque import (decision explicite : obligatoire, pas conditionnee a la confiance) - [ ] Recapitulatif au-dessus du tableau : nombre de sorties et total, nombre d'entrees et total, nombre de lignes en erreur - [ ] Bouton « Inverser les signes » qui bascule `sign_convention` et relance le parsing — il agit sur la **configuration**, jamais sur les donnees seules, pour que la correction soit memorisee - [ ] `ImportConfirmation` affiche mode, convention et mapping en plus des quatre reglages actuels - [ ] Retirer le modal d'apercu devenu redondant - [ ] Cles i18n FR et EN ## Criteres d'acceptation - [ ] L'apercu est traverse a chaque import et affiche sorties, entrees et totaux - [ ] « Inverser les signes » modifie la configuration et le resultat est visible immediatement - [ ] L'ecran de confirmation affiche mode, convention et mapping Depends on #328 --- ## Revision /review-spec — 2026-08-13 Corrections a appliquer, issues de la revue 3 experts : - **L'etape est un changement de machine a etats, pas un rendu** ; le perimetre annonce (`FilePreviewTable` seul) est trop etroit et modifier ce fichier mute aussi le modal encore vivant. A ajouter : - `useImportWizard` : `file-preview` n'a **aucune transition** dans le reducer (`SET_STEP` ne la vise jamais) ; `parseAndCheckDuplicates` saute de `source-config` a `duplicate-check` (`:719`, commentaire « skips preview step ») ; `checkDuplicates` (`:685`, exporte `:1006`) est du code mort a recabler. - `ImportPage` : remplacer la paire de boutons Apercu / Verifier-doublons (`:126-140`) par `WizardNavigation`. - `FilePreviewModal` (`:196-202`) : le retirer. - **« Inverser les signes » est inerte en mode debit/credit** : `sign_convention` n'est applique que dans la branche montant unique (`useImportWizard.ts:514`). Le bouton doit, dans ce mode, permuter `debitAmount` et `creditAmount` dans le mapping puis relancer le parsing — sinon il ne rattrape rien sur un fichier a deux colonnes mappees a l'envers. --- ## Fichiers concernes - `src/pages/ImportPage.tsx` — etape `file-preview` rendue, paire de boutons remplacee - `src/hooks/useImportWizard.ts` — transition reducer, recablage de `checkDuplicates` (`:685`) et `parseAndCheckDuplicates` (`:719`) - `src/components/import/FilePreviewTable.tsx` — recapitulatif signe - `src/components/import/FilePreviewModal.tsx` — **supprimer** - `src/components/import/ImportConfirmation.tsx` — mode, convention, mapping - `src/components/import/WizardNavigation.tsx` - `src/i18n/locales/fr.json` + `en.json` ## Decisions prises en planification - **Emplacement du code partage** : le codec `formatToRow`/`formatFromRow` et `mapRow` vivent dans `src/utils/importFormat.ts` — meme dossier que `amountParser`, `dateParser` et `csvAutoDetect`, qui portent deja la logique pure du domaine. Les types restent dans `src/shared/types/`. - **Aucune correction retroactive** des transactions deja importees a l'envers : la voie de reparation est `deleteImportWithTransactions` puis 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.md` et `spec-plan-import-csv-format.md` sont **committees a la racine** (force-add, precedent PR #295) : elles sont lisibles depuis un worktree. - **Le seuil de 90 % ne conditionne rien ici** : l'apercu est traverse a chaque import, quel que soit le score (decision de cadrage, contre la recommandation d'un apercu conditionnel). ## Spec source `spec-plan-import-csv-format.md` + `spec-decisions-import-csv-format.md` (racine du repo, committees).
maximus added this to the planned-2026-08-12-import-csv-format milestone 2026-08-12 20:14:33 +00:00
maximus added the
status:ready
type:feature
source:human
labels 2026-08-12 20:14:33 +00:00
maximus added
status:in-progress
and removed
status:ready
labels 2026-08-13 18:17:57 +00:00
maximus added
status:approved
and removed
status:in-progress
labels 2026-08-14 15:41:29 +00:00
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: maximus/Simpl-Resultat#329
No description provided.