Import : dossier parent, un sous-dossier par compte, signes à l'aperçu, guillemets dans les cartes #422

Closed
opened 2026-10-12 20:37:16 +00:00 by maximus · 2 comments
Owner

La page Import n'explique pas qu'il faut choisir le dossier parent (un sous-dossier par compte), les cartes parlent d'un sous-dossier « par banque », et rien ne dit qu'une dépense doit apparaître en négatif à l'aperçu. Retours de Max sur la v0.17.1 ; textes validés par Max le 2026-10-12. Les autres retours de cette issue ont leur propre issue dans le jalon : #424 (Budget), #430 (cartes Transactions et Budget), #431 (aide périmée), #425 et #432 (étapes de visite).

Planifié le 2026-10-12 (/plan-run, jalon planned-2026-10-12-retours-onboarding-v0171), après /analyze et une revue /review-spec (sécurité, architecture, technique) dont les constats sont intégrés ci-dessous. Corps autosuffisant : la spec (spec-plan-retours-onboarding-v0171.md) est locale et ignorée par git. L'ancien corps est archivé en commentaire.

Préalable : ce jalon s'exécute après le merge de planned-2026-10-10-fiabilite-tests (#408, #409, #395, #389). Les numéros de ligne cités sont lus sur main à 8b5b3b1 et ont pu bouger : se fier aux noms de fonctions, aux clés et aux textes cités.

Contexte

  • Chaque sous-dossier direct et non caché du dossier choisi devient une source ; seuls les .csv et .txt posés directement dans un sous-dossier sont lus ; les fichiers posés à la racine et les niveaux plus profonds sont ignorés (scan_import_folder, src-tauri/src/commands/fs_commands.rs:25-110).
  • Une source garde un seul format (ADR 0019) : la carte de crédit et le compte chèques d'une même banque font deux sources.
  • L'aperçu affiche déjà « N sortie(s) » en rouge, « N entrée(s) » en vert et « Inverser les signes » (src/components/import/FilePreviewTable.tsx:63-122), mais aucun texte ne dit qu'une dépense doit être une sortie.

Travail à faire

  • Nouveau composant src/components/import/ImportFolderStructure.tsx : encadré « Structure attendue », liste imbriquée <ul> (icônes lucide Folder et FileText, aria-hidden), textes import.empty.structure.*. Rendu dans ImportEmptyState (src/components/import/ImportEmptyState.tsx), dans ses deux variantes (« aucun dossier », « aucune source »).
  • WIZARD_ROWS (src/utils/onboardingPath.ts:266-271) porte plusieurs libellés par ligne : la ligne file-preview reçoit flip: "import.preview.flipSigns" en plus de button: "import.wizard.checkDuplicates" ; importCardModel (:334-339) passe tous les libellés de la ligne.
  • Textes ci-dessous (cartes, état vide, aide, guide intégré), puis le guide Markdown.

Textes (FR | EN)

Clé FR EN
onboarding.card.import.noFolder Choisissez avec le bouton « {{button}} » le dossier parent de vos relevés. Simpl'Résultat y lit un sous-dossier par compte : un pour la carte de crédit, un pour le compte chèques, et ainsi de suite. With the “{{button}}” button, choose the parent folder of your statements. Simpl'Résultat reads one sub-folder per account in it: one for the credit card, one for the chequing account, and so on.
onboarding.card.import.noSources Dans le dossier « {{folder}} », créez un sous-dossier par compte et déposez-y ses relevés CSV, puis cliquez « {{refresh}} ». Pour essayer d'abord, « {{sample}} » dépose deux comptes fictifs. In the “{{folder}}” folder, create one sub-folder per account and drop its CSV statements in it, then click “{{refresh}}”. To try first, “{{sample}}” adds two fictitious accounts.
onboarding.card.import.sourceList Cliquez sur la carte d'un compte. Simpl'Résultat reconnaît le format de ses relevés et vous montre ce qu'il a compris. Click an account's card. Simpl'Résultat recognises the format of its statements and shows you what it understood.
onboarding.card.import.filePreview Vérifiez que les dates et les montants sont bien lus : une dépense doit compter parmi les sorties, en négatif. Sinon, cliquez « {{flip}} ». Puis cliquez « {{button}} ». Check that dates and amounts are read correctly: an expense must count among the outflows, as a negative amount. If not, click “{{flip}}”. Then click “{{button}}”.
onboarding.card.import.duplicateCheck Choisissez quoi faire des transactions déjà importées, puis cliquez « {{button}} ». Choose what to do with transactions already imported, then click “{{button}}”.
onboarding.card.import.confirm Cliquez « {{button}} » : la source est enregistrée et vos transactions arrivent. Click “{{button}}”: the source is saved and your transactions come in.
import.empty.noSources.description Créez un sous-dossier par compte dans {{folderName}} et déposez-y ses fichiers CSV Create one subfolder per account in {{folderName}} and drop its CSV files there
import.empty.structure.title Structure attendue Expected structure
import.empty.structure.parent Dossier parent : choisissez celui-ci Parent folder: choose this one
import.empty.structure.account1 Carte de crédit : une source Credit card: one source
import.empty.structure.file1 releve-2026-08.csv statement-2026-08.csv
import.empty.structure.file2 releve-2026-09.csv statement-2026-09.csv
import.empty.structure.account2 Compte chèques : une autre source Chequing account: another source
import.empty.structure.rootNote Les fichiers posés directement dans le dossier parent sont ignorés. Files placed directly in the parent folder are ignored.
import.help.tips[0] Choisissez le dossier parent de vos relevés, puis créez-y un sous-dossier par compte avec ses fichiers CSV ; les fichiers posés à la racine sont ignorés Choose the parent folder of your statements, then create one subfolder per account in it with its CSV files; files placed at its root are ignored
import.help.tips (nouvelle, insérée en position 3, après « Prévisualisez vos données… ») À l'aperçu, une dépense doit compter parmi les sorties, en négatif ; sinon, « Inverser les signes » corrige la source pour les prochains imports In the preview, an expense must count among the outflows, as a negative amount; if not, “Flip the signs” fixes the source for future imports
docs.import.steps[1] Créez un sous-dossier par compte et placez-y ses fichiers CSV : la carte de crédit et le compte chèques d'une même banque font deux sources, et les fichiers posés directement dans le dossier parent sont ignorés — tant que le dossier est vide, le bouton « Créer un dossier d'exemple » dépose deux sous-dossiers fictifs (« Exemple Desjardins », « Exemple Tangerine ») pour essayer l'assistant sans attendre vos vrais relevés ; supprimez-les ensuite Create one subfolder per account and place its CSV files inside: the credit card and the chequing account of the same bank are two sources, and files placed directly in the parent folder are ignored — while the folder is empty, the "Create a sample folder" button writes two fictitious subfolders ("Exemple Desjardins", "Exemple Tangerine") so you can try the wizard without waiting for your real statements; delete them afterwards
docs.import.steps[5] Examinez l'aperçu : le récapitulatif indique combien de sorties et d'entrées le fichier produira, et pour quels montants ; une dépense doit compter parmi les sorties, en négatif Read the preview: the recap tells you how many outflows and inflows the file will produce, and for what amounts; an expense must count among the outflows, as a negative amount
docs.import.steps[6] remplacer « les prochains fichiers de cette banque » par « les prochains fichiers de ce compte » replace "the next files from that bank" with "the next files from that account"

Guide Markdown (docs/guide-utilisateur.md, section Import) : la ligne qui reprend docs.import.steps[1] (aujourd'hui « 2. Créez un sous-dossier pour chaque banque/source… ») reçoit le texte FR de docs.import.steps[1] ; les lignes qui reprennent [5] et [6] reçoivent les leurs. La puce « Formats reconnus par banque — Desjardins, RBC… » est juste et ne change pas.

Fichiers concernés

  • src/components/import/ImportFolderStructure.tsx (nouveau) et son test
  • src/components/import/ImportEmptyState.tsx, src/components/import/ImportEmptyState.test.tsx
  • src/utils/onboardingPath.ts, src/utils/onboardingPath.test.ts
  • src/pages/ImportPage.render.test.tsx
  • src/i18n/locales/fr.json, src/i18n/locales/en.json
  • docs/guide-utilisateur.md, docs/qa-onboarding.html
  • CHANGELOG.md, CHANGELOG.fr.md

Depends on

Lien d'ordre seulement (CHANGELOG partagé) : #424 est le premier maillon de la pile.

Tests

  • importCardModel à l'étape file-preview rend labels = { button: "import.wizard.checkDuplicates", flip: "import.preview.flipSigns" } ; les autres lignes inchangées.
  • ImportPage.render.test.tsx : la phrase attendue de la ligne file-preview (cas paramétré des étapes de l'assistant) porte les deux libellés.
  • ImportFolderStructure rend ses sept clés dans une liste imbriquée ; ImportEmptyState le rend dans ses deux variantes.
  • Liste QA : les phrases des cartes Import (aucun dossier, aucune source, aperçu) et l'encadré.

Critères d'acceptation

  • Sans dossier choisi, et dans un dossier sans sous-dossier, la page Import montre l'encadré « Structure attendue ».
  • Plus aucune chaîne ne décrit un sous-dossier par banque. Contrôle : grep -n -P 'sous-dossier par banque|banque/source|sub-?folder per bank(?! account)|bank/source' src/i18n/locales/*.json docs/guide-utilisateur.md ne rend rien.
  • La carte de l'aperçu nomme « Inverser les signes » et « Vérifier les doublons », entre guillemets.
  • Chaque phrase de carte d'import qui nomme un contrôle l'entoure de guillemets, en FR et en EN.
  • npm run build et npm test verts.

Review caveats

  • 🔴 Technique, résolu : le contrôle grep d'origine attrapait des phrases justes (« Formats reconnus par banque », « one subfolder per bank account ») ; il est ciblé, et la puce des formats par banque est conservée.
  • 🟡 Technique, résolu : ImportPage.render.test.tsx affirme la phrase exacte de chaque étape ; il est dans les fichiers.

Décisions prises en planification

  • « Par compte » partout où une phrase disait « par banque » pour décrire les sous-dossiers, y compris la carte de la liste des sources (Max, 2026-10-12).
  • Guillemets autour des libellés de contrôle dans toutes les phrases de carte d'import, y compris celles des doublons et de la confirmation (Max, 2026-10-12). La carte de configuration est réécrite par #426.
  • « Utiliser « confirmer » plutôt que « passer » » est retiré : mauvaise lecture de Max (2026-10-12).

Conventions

  • Toute chaîne en FR et en EN (src/i18n/locales/fr.json, en.json) ; les textes de ce corps s'écrivent mot pour mot (FR validé par Max le 2026-10-12, EN rédigé sur le même contenu).
  • Phrase de carte : un contrôle cité passe par StepCardText.labels (src/utils/onboardingPath.ts), traduit par StepCard ; jamais recopié dans la phrase. Guillemets « » en FR et “ ” en EN autour de chaque libellé de contrôle interpolé ; {{filter, lowercase}} sans guillemets.
  • CHANGELOG : une entrée sous ## [Unreleased] dans CHANGELOG.md et CHANGELOG.fr.md.
  • Tests de rendu : renderToStaticMarkup (pas de jsdom) et le faux t partagé livré par #389.
  • Journal : aucune ligne avec un chemin absolu, un nom de relevé ni un nom de dossier d'import (règle de useImportWizard.ts:423-425 : le Journal part avec un rapport de feedback).
  • Aucune migration ; npm run build (il vérifie aussi les types des fichiers de test) et npm test verts.
  • Guide Markdown (docs/guide-utilisateur.md) : repérer une ligne par son texte cité, pas par son numéro.

CHANGELOG

Changed / Modifié : FR « Import : l'état vide montre la structure attendue (un dossier parent, un sous-dossier par compte), et les cartes du parcours demandent de choisir le dossier parent et de vérifier qu'une dépense compte parmi les sorties. » EN "Import: the empty state shows the expected structure (a parent folder, one subfolder per account), and the getting-started cards ask you to choose the parent folder and to check that an expense counts among the outflows."

Texte d'origine (Max, 2026-10-12)

Lors de l'import, petite explication du fonctionnement / choix de dossier.

  • dossier parent (<- choisissez a ce niveau)
    • dossier source 1 (par exemple carte de crédit)
      • fichier csv 1
      • fichier csv 2
    • dossier source 2 (par exemple compte cheque)

Avant l'import, mention de vérifier les signes - une dépense devrait etre négative.
Utiliser "confirmer" plutôt que "passer".

Lors de la classification des transactions, expliquer les "mots clé" et leur utilisation.

budget
(anomalie) pour le budget, lorsqu'on déplie, les catégories ne sont pas sous le parent mais plutôt à la fin de la section.
faire mention sur le fait que les saisies ne sont possibles que sur les catégories "feuilles" et non les noeuds
mentionner que si saisie dans colonne annuel, alors répartition automatique sur 12 mois

ajouter une étape pour parcourir la section catégorie et mots clés fait plus tôt
et parcours rapide de la page rapport

Spec source

spec-plan-retours-onboarding-v0171.md (local, ignoré par git) ; décisions dans spec-decisions-retours-onboarding-v0171.md.

La page Import n'explique pas qu'il faut choisir le dossier parent (un sous-dossier par compte), les cartes parlent d'un sous-dossier « par banque », et rien ne dit qu'une dépense doit apparaître en négatif à l'aperçu. Retours de Max sur la v0.17.1 ; textes validés par Max le 2026-10-12. Les autres retours de cette issue ont leur propre issue dans le jalon : #424 (Budget), #430 (cartes Transactions et Budget), #431 (aide périmée), #425 et #432 (étapes de visite). > Planifié le 2026-10-12 (`/plan-run`, jalon `planned-2026-10-12-retours-onboarding-v0171`), après `/analyze` et une revue `/review-spec` (sécurité, architecture, technique) dont les constats sont intégrés ci-dessous. Corps autosuffisant : la spec (`spec-plan-retours-onboarding-v0171.md`) est locale et ignorée par git. L'ancien corps est archivé en commentaire. > > **Préalable :** ce jalon s'exécute après le merge de `planned-2026-10-10-fiabilite-tests` (#408, #409, #395, #389). Les numéros de ligne cités sont lus sur `main` à `8b5b3b1` et ont pu bouger : se fier aux noms de fonctions, aux clés et aux textes cités. ## Contexte - Chaque sous-dossier direct et non caché du dossier choisi devient une source ; seuls les `.csv` et `.txt` posés directement dans un sous-dossier sont lus ; les fichiers posés à la racine et les niveaux plus profonds sont ignorés (`scan_import_folder`, `src-tauri/src/commands/fs_commands.rs:25-110`). - Une source garde un seul format (ADR 0019) : la carte de crédit et le compte chèques d'une même banque font deux sources. - L'aperçu affiche déjà « N sortie(s) » en rouge, « N entrée(s) » en vert et « Inverser les signes » (`src/components/import/FilePreviewTable.tsx:63-122`), mais aucun texte ne dit qu'une dépense doit être une sortie. ## Travail à faire - [ ] Nouveau composant `src/components/import/ImportFolderStructure.tsx` : encadré « Structure attendue », liste imbriquée `<ul>` (icônes lucide `Folder` et `FileText`, `aria-hidden`), textes `import.empty.structure.*`. Rendu dans `ImportEmptyState` (`src/components/import/ImportEmptyState.tsx`), dans ses deux variantes (« aucun dossier », « aucune source »). - [ ] `WIZARD_ROWS` (`src/utils/onboardingPath.ts:266-271`) porte plusieurs libellés par ligne : la ligne `file-preview` reçoit `flip: "import.preview.flipSigns"` en plus de `button: "import.wizard.checkDuplicates"` ; `importCardModel` (`:334-339`) passe tous les libellés de la ligne. - [ ] Textes ci-dessous (cartes, état vide, aide, guide intégré), puis le guide Markdown. ## Textes (FR | EN) | Clé | FR | EN | |---|---|---| | `onboarding.card.import.noFolder` | Choisissez avec le bouton « {{button}} » le dossier parent de vos relevés. Simpl'Résultat y lit un sous-dossier par compte : un pour la carte de crédit, un pour le compte chèques, et ainsi de suite. | With the “{{button}}” button, choose the parent folder of your statements. Simpl'Résultat reads one sub-folder per account in it: one for the credit card, one for the chequing account, and so on. | | `onboarding.card.import.noSources` | Dans le dossier « {{folder}} », créez un sous-dossier par compte et déposez-y ses relevés CSV, puis cliquez « {{refresh}} ». Pour essayer d'abord, « {{sample}} » dépose deux comptes fictifs. | In the “{{folder}}” folder, create one sub-folder per account and drop its CSV statements in it, then click “{{refresh}}”. To try first, “{{sample}}” adds two fictitious accounts. | | `onboarding.card.import.sourceList` | Cliquez sur la carte d'un compte. Simpl'Résultat reconnaît le format de ses relevés et vous montre ce qu'il a compris. | Click an account's card. Simpl'Résultat recognises the format of its statements and shows you what it understood. | | `onboarding.card.import.filePreview` | Vérifiez que les dates et les montants sont bien lus : une dépense doit compter parmi les sorties, en négatif. Sinon, cliquez « {{flip}} ». Puis cliquez « {{button}} ». | Check that dates and amounts are read correctly: an expense must count among the outflows, as a negative amount. If not, click “{{flip}}”. Then click “{{button}}”. | | `onboarding.card.import.duplicateCheck` | Choisissez quoi faire des transactions déjà importées, puis cliquez « {{button}} ». | Choose what to do with transactions already imported, then click “{{button}}”. | | `onboarding.card.import.confirm` | Cliquez « {{button}} » : la source est enregistrée et vos transactions arrivent. | Click “{{button}}”: the source is saved and your transactions come in. | | `import.empty.noSources.description` | Créez un sous-dossier par compte dans {{folderName}} et déposez-y ses fichiers CSV | Create one subfolder per account in {{folderName}} and drop its CSV files there | | `import.empty.structure.title` | Structure attendue | Expected structure | | `import.empty.structure.parent` | Dossier parent : choisissez celui-ci | Parent folder: choose this one | | `import.empty.structure.account1` | Carte de crédit : une source | Credit card: one source | | `import.empty.structure.file1` | releve-2026-08.csv | statement-2026-08.csv | | `import.empty.structure.file2` | releve-2026-09.csv | statement-2026-09.csv | | `import.empty.structure.account2` | Compte chèques : une autre source | Chequing account: another source | | `import.empty.structure.rootNote` | Les fichiers posés directement dans le dossier parent sont ignorés. | Files placed directly in the parent folder are ignored. | | `import.help.tips[0]` | Choisissez le dossier parent de vos relevés, puis créez-y un sous-dossier par compte avec ses fichiers CSV ; les fichiers posés à la racine sont ignorés | Choose the parent folder of your statements, then create one subfolder per account in it with its CSV files; files placed at its root are ignored | | `import.help.tips` (nouvelle, insérée en position 3, après « Prévisualisez vos données… ») | À l'aperçu, une dépense doit compter parmi les sorties, en négatif ; sinon, « Inverser les signes » corrige la source pour les prochains imports | In the preview, an expense must count among the outflows, as a negative amount; if not, “Flip the signs” fixes the source for future imports | | `docs.import.steps[1]` | Créez un sous-dossier par compte et placez-y ses fichiers CSV : la carte de crédit et le compte chèques d'une même banque font deux sources, et les fichiers posés directement dans le dossier parent sont ignorés — tant que le dossier est vide, le bouton « Créer un dossier d'exemple » dépose deux sous-dossiers fictifs (« Exemple Desjardins », « Exemple Tangerine ») pour essayer l'assistant sans attendre vos vrais relevés ; supprimez-les ensuite | Create one subfolder per account and place its CSV files inside: the credit card and the chequing account of the same bank are two sources, and files placed directly in the parent folder are ignored — while the folder is empty, the "Create a sample folder" button writes two fictitious subfolders ("Exemple Desjardins", "Exemple Tangerine") so you can try the wizard without waiting for your real statements; delete them afterwards | | `docs.import.steps[5]` | Examinez l'aperçu : le récapitulatif indique combien de sorties et d'entrées le fichier produira, et pour quels montants ; une dépense doit compter parmi les sorties, en négatif | Read the preview: the recap tells you how many outflows and inflows the file will produce, and for what amounts; an expense must count among the outflows, as a negative amount | | `docs.import.steps[6]` | remplacer « les prochains fichiers de cette banque » par « les prochains fichiers de ce compte » | replace "the next files from that bank" with "the next files from that account" | **Guide Markdown** (`docs/guide-utilisateur.md`, section Import) : la ligne qui reprend `docs.import.steps[1]` (aujourd'hui « 2. Créez un sous-dossier pour chaque banque/source… ») reçoit le texte FR de `docs.import.steps[1]` ; les lignes qui reprennent `[5]` et `[6]` reçoivent les leurs. La puce « Formats reconnus par banque — Desjardins, RBC… » est juste et ne change pas. ## Fichiers concernés - `src/components/import/ImportFolderStructure.tsx` (nouveau) et son test - `src/components/import/ImportEmptyState.tsx`, `src/components/import/ImportEmptyState.test.tsx` - `src/utils/onboardingPath.ts`, `src/utils/onboardingPath.test.ts` - `src/pages/ImportPage.render.test.tsx` - `src/i18n/locales/fr.json`, `src/i18n/locales/en.json` - `docs/guide-utilisateur.md`, `docs/qa-onboarding.html` - `CHANGELOG.md`, `CHANGELOG.fr.md` ## Depends on - #424 > Lien d'ordre seulement (CHANGELOG partagé) : #424 est le premier maillon de la pile. ## Tests - `importCardModel` à l'étape `file-preview` rend `labels` = `{ button: "import.wizard.checkDuplicates", flip: "import.preview.flipSigns" }` ; les autres lignes inchangées. - `ImportPage.render.test.tsx` : la phrase attendue de la ligne `file-preview` (cas paramétré des étapes de l'assistant) porte les deux libellés. - `ImportFolderStructure` rend ses sept clés dans une liste imbriquée ; `ImportEmptyState` le rend dans ses deux variantes. - Liste QA : les phrases des cartes Import (aucun dossier, aucune source, aperçu) et l'encadré. ## Critères d'acceptation - [ ] Sans dossier choisi, et dans un dossier sans sous-dossier, la page Import montre l'encadré « Structure attendue ». - [ ] Plus aucune chaîne ne décrit un sous-dossier par banque. Contrôle : `grep -n -P 'sous-dossier par banque|banque/source|sub-?folder per bank(?! account)|bank/source' src/i18n/locales/*.json docs/guide-utilisateur.md` ne rend rien. - [ ] La carte de l'aperçu nomme « Inverser les signes » et « Vérifier les doublons », entre guillemets. - [ ] Chaque phrase de carte d'import qui nomme un contrôle l'entoure de guillemets, en FR et en EN. - [ ] `npm run build` et `npm test` verts. ## Review caveats - 🔴 Technique, résolu : le contrôle `grep` d'origine attrapait des phrases justes (« Formats reconnus par banque », « one subfolder per bank account ») ; il est ciblé, et la puce des formats par banque est conservée. - 🟡 Technique, résolu : `ImportPage.render.test.tsx` affirme la phrase exacte de chaque étape ; il est dans les fichiers. ## Décisions prises en planification - « Par compte » partout où une phrase disait « par banque » pour décrire les sous-dossiers, y compris la carte de la liste des sources (Max, 2026-10-12). - Guillemets autour des libellés de contrôle dans toutes les phrases de carte d'import, y compris celles des doublons et de la confirmation (Max, 2026-10-12). La carte de configuration est réécrite par #426. - « Utiliser « confirmer » plutôt que « passer » » est retiré : mauvaise lecture de Max (2026-10-12). ## Conventions - Toute chaîne en FR et en EN (`src/i18n/locales/fr.json`, `en.json`) ; les textes de ce corps s'écrivent mot pour mot (FR validé par Max le 2026-10-12, EN rédigé sur le même contenu). - Phrase de carte : un contrôle cité passe par `StepCardText.labels` (`src/utils/onboardingPath.ts`), traduit par `StepCard` ; jamais recopié dans la phrase. Guillemets « » en FR et “ ” en EN autour de chaque libellé de contrôle interpolé ; `{{filter, lowercase}}` sans guillemets. - CHANGELOG : une entrée sous `## [Unreleased]` dans `CHANGELOG.md` et `CHANGELOG.fr.md`. - Tests de rendu : `renderToStaticMarkup` (pas de jsdom) et le faux `t` partagé livré par #389. - Journal : aucune ligne avec un chemin absolu, un nom de relevé ni un nom de dossier d'import (règle de `useImportWizard.ts:423-425` : le Journal part avec un rapport de feedback). - Aucune migration ; `npm run build` (il vérifie aussi les types des fichiers de test) et `npm test` verts. - Guide Markdown (`docs/guide-utilisateur.md`) : repérer une ligne par son texte cité, pas par son numéro. ## CHANGELOG Changed / Modifié : FR « Import : l'état vide montre la structure attendue (un dossier parent, un sous-dossier par compte), et les cartes du parcours demandent de choisir le dossier parent et de vérifier qu'une dépense compte parmi les sorties. » EN "Import: the empty state shows the expected structure (a parent folder, one subfolder per account), and the getting-started cards ask you to choose the parent folder and to check that an expense counts among the outflows." ## Texte d'origine (Max, 2026-10-12) > Lors de l'import, petite explication du fonctionnement / choix de dossier. > - dossier parent (<- choisissez a ce niveau) > - dossier source 1 (par exemple carte de crédit) > - fichier csv 1 > - fichier csv 2 > - dossier source 2 (par exemple compte cheque) > > Avant l'import, mention de vérifier les signes - une dépense devrait etre négative. > Utiliser "confirmer" plutôt que "passer". > > Lors de la classification des transactions, expliquer les "mots clé" et leur utilisation. > > budget > (anomalie) pour le budget, lorsqu'on déplie, les catégories ne sont pas sous le parent mais plutôt à la fin de la section. > faire mention sur le fait que les saisies ne sont possibles que sur les catégories "feuilles" et non les noeuds > mentionner que si saisie dans colonne annuel, alors répartition automatique sur 12 mois > > ajouter une étape pour parcourir la section catégorie et mots clés fait plus tôt > et parcours rapide de la page rapport ## Spec source `spec-plan-retours-onboarding-v0171.md` (local, ignoré par git) ; décisions dans `spec-decisions-retours-onboarding-v0171.md`.
maximus added the
status:triage
type:feature
source:human
labels 2026-10-12 20:37:16 +00:00
Author
Owner

Analyse du 2026-10-12 (/analyze, main à 1954502). Sur décision de Max, les retours sont répartis en trois issues :

  • #424 : l'anomalie du Budget (ordre des sous-catégories au dépli), bug indépendant du parcours, reproduit ;
  • #425 : les deux étapes de visite, Catégories et mots-clés puis Rapports ;
  • celle-ci, recentrée sur les textes des cartes, de l'aide et du guide.

Constats annexes ouverts en status:triage : #426 (source renommée introuvable) et #427 (CSV posés à la racine du dossier d'import). Le point « Utiliser "confirmer" plutôt que "passer" » est retiré : mauvaise lecture selon Max.

Corps d'origine (2026-10-12)

Retours de Max après un passage du parcours de démarrage sur la v0.17.1 (consignés le 2026-10-12). Le texte d'origine est cité en fin d'issue ; les notes en retrait sont du contexte relevé dans le code à l'ouverture, pas des décisions.

Import

  1. Structure du dossier d'import : expliquer, au moment du choix du dossier, qu'il faut choisir le dossier parent, avec un sous-dossier par source et les CSV dedans :

    dossier parent              ← choisissez à ce niveau
    ├── dossier source 1        (par exemple carte de crédit)
    │   ├── fichier csv 1
    │   └── fichier csv 2
    └── dossier source 2        (par exemple compte chèques)
    

    Les cartes actuelles parlent d'« un sous-dossier par banque » (onboarding.card.import.noFolder, onboarding.card.import.noSources), alors que l'exemple nomme une source par compte (carte de crédit, compte chèques).

  2. Vérifier les signes avant l'import : une dépense doit apparaître en négatif.

    Point d'ancrage probable : la phase filePreview de la carte Import (« Vérifiez que les dates et les montants sont bien lus, puis cliquez… »).

  3. « Confirmer » plutôt que « Passer », à préciser à l'analyse.

    Le seul libellé « Passer » de l'interface est le bouton « Passer cette étape » des cartes d'étape (onboarding.card.skip).

Classement des transactions

  1. Expliquer les mots-clés et leur utilisation.

    La carte de l'étape « Classer une transaction à la main » parle de catégorisation automatique sans nommer les mots-clés (onboarding.card.transactions.*).

Budget

  1. Anomalie : quand on déplie une catégorie, ses sous-catégories s'affichent à la fin de la section au lieu de sous leur parent. À reproduire ; lien possible avec #393 (catégories hors de la hiérarchie) à vérifier.
  2. Dire que la saisie n'est possible que sur les catégories feuilles, pas sur les nœuds.
  3. Dire qu'un montant saisi dans la colonne annuelle est réparti automatiquement sur les 12 mois.

Nouvelles étapes du parcours

  1. Une étape pour parcourir la page Catégories et ses mots-clés, placée plus tôt dans le parcours (position à préciser).
  2. Un parcours rapide de la page Rapports.

Texte d'origine

Lors de l'import, petite explication du fonctionnement / choix de dossier.

  • dossier parent (<- choisissez a ce niveau)
    • dossier source 1 (par exemple carte de crédit)
      • fichier csv 1
      • fichier csv 2
    • dossier source 2 (par exemple compte cheque)

Avant l'import, mention de vérifier les signes - une dépense devrait etre négative.
Utiliser "confirmer" plutôt que "passer".

Lors de la classification des transactions, expliquer les "mots clé" et leur utilisation.

budget
(anomalie) pour le budget, lorsqu'on déplie, les catégories ne sont pas sous le parent mais plutôt à la fin de la section.
faire mention sur le fait que les saisies ne sont possibles que sur les catégories "feuilles" et non les noeuds
mentionner que si saisie dans colonne annuel, alors répartition automatique sur 12 mois

ajouter une étape pour parcourir la section catégorie et mots clés fait plus tôt
et parcours rapide de la page rapport

Analyse du 2026-10-12 (`/analyze`, `main` à `1954502`). Sur décision de Max, les retours sont répartis en trois issues : - #424 : l'anomalie du Budget (ordre des sous-catégories au dépli), bug indépendant du parcours, reproduit ; - #425 : les deux étapes de visite, Catégories et mots-clés puis Rapports ; - celle-ci, recentrée sur les textes des cartes, de l'aide et du guide. Constats annexes ouverts en `status:triage` : #426 (source renommée introuvable) et #427 (CSV posés à la racine du dossier d'import). Le point « Utiliser "confirmer" plutôt que "passer" » est retiré : mauvaise lecture selon Max. <details><summary>Corps d'origine (2026-10-12)</summary> Retours de Max après un passage du parcours de démarrage sur la v0.17.1 (consignés le 2026-10-12). Le texte d'origine est cité en fin d'issue ; les notes en retrait sont du contexte relevé dans le code à l'ouverture, pas des décisions. ## Import 1. **Structure du dossier d'import** : expliquer, au moment du choix du dossier, qu'il faut choisir le dossier **parent**, avec un sous-dossier par source et les CSV dedans : ``` dossier parent ← choisissez à ce niveau ├── dossier source 1 (par exemple carte de crédit) │ ├── fichier csv 1 │ └── fichier csv 2 └── dossier source 2 (par exemple compte chèques) ``` > Les cartes actuelles parlent d'« un sous-dossier par banque » (`onboarding.card.import.noFolder`, `onboarding.card.import.noSources`), alors que l'exemple nomme une source par compte (carte de crédit, compte chèques). 2. **Vérifier les signes avant l'import** : une dépense doit apparaître en négatif. > Point d'ancrage probable : la phase `filePreview` de la carte Import (« Vérifiez que les dates et les montants sont bien lus, puis cliquez… »). 3. **« Confirmer » plutôt que « Passer »**, à préciser à l'analyse. > Le seul libellé « Passer » de l'interface est le bouton « Passer cette étape » des cartes d'étape (`onboarding.card.skip`). ## Classement des transactions 4. Expliquer les **mots-clés** et leur utilisation. > La carte de l'étape « Classer une transaction à la main » parle de catégorisation automatique sans nommer les mots-clés (`onboarding.card.transactions.*`). ## Budget 5. **Anomalie** : quand on déplie une catégorie, ses sous-catégories s'affichent à la fin de la section au lieu de sous leur parent. À reproduire ; lien possible avec #393 (catégories hors de la hiérarchie) à vérifier. 6. Dire que la saisie n'est possible que sur les catégories **feuilles**, pas sur les nœuds. 7. Dire qu'un montant saisi dans la colonne **annuelle** est réparti automatiquement sur les 12 mois. ## Nouvelles étapes du parcours 8. Une étape pour **parcourir la page Catégories et ses mots-clés**, placée plus tôt dans le parcours (position à préciser). 9. Un **parcours rapide de la page Rapports**. ## Texte d'origine > Lors de l'import, petite explication du fonctionnement / choix de dossier. > - dossier parent (<- choisissez a ce niveau) > - dossier source 1 (par exemple carte de crédit) > - fichier csv 1 > - fichier csv 2 > - dossier source 2 (par exemple compte cheque) > > Avant l'import, mention de vérifier les signes - une dépense devrait etre négative. > Utiliser "confirmer" plutôt que "passer". > > Lors de la classification des transactions, expliquer les "mots clé" et leur utilisation. > > budget > (anomalie) pour le budget, lorsqu'on déplie, les catégories ne sont pas sous le parent mais plutôt à la fin de la section. > faire mention sur le fait que les saisies ne sont possibles que sur les catégories "feuilles" et non les noeuds > mentionner que si saisie dans colonne annuel, alors répartition automatique sur 12 mois > > ajouter une étape pour parcourir la section catégorie et mots clés fait plus tôt > et parcours rapide de la page rapport </details>
maximus changed title from Parcours de démarrage v0.17.1 : retours de test (explications import, signes, mots-clés et budget, étapes Catégories et Rapports, ordre au dépli du Budget) to Parcours de démarrage v0.17.1 : textes des cartes (dossier d'import, signes, mots-clés, budget) et aide périmée 2026-10-12 21:08:57 +00:00
maximus added
status:ready
and removed
status:triage
labels 2026-10-12 21:08:57 +00:00
Author
Owner

Planification du 2026-10-12 (/plan-run, jalon planned-2026-10-12-retours-onboarding-v0171) : le corps est réécrit pour être autosuffisant (décisions de Max, constats de /review-spec intégrés). Corps précédent ci-dessous.

Corps précédent (titre : Parcours de démarrage v0.17.1 : textes des cartes (dossier d'import, signes, mots-clés, budget) et aide périmée)

Contexte

Retours de Max sur le parcours de démarrage de la v0.17.1, consignés le 2026-10-12 et analysés le même jour sur main à 1954502. Sur décision de Max, les retours sont répartis en trois issues :

  • celle-ci : les textes des cartes d'étape, de l'aide et du guide ;
  • #424 : l'anomalie du Budget (ordre des sous-catégories au dépli), un bug indépendant du parcours ;
  • #425 : deux étapes de visite à ajouter au parcours, Catégories et mots-clés puis Rapports.

Deux constats annexes ont leur issue : #426 (source renommée introuvable) et #427 (CSV posés à la racine du dossier d'import). Le corps d'origine est archivé en commentaire.

Retiré : « Utiliser "confirmer" plutôt que "passer" », une mauvaise lecture selon Max (2026-10-12).

Convention des cartes. Une phrase de carte nomme un contrôle par sa propre clé i18n, jamais en recopiant son libellé : StepCardText.labels (src/utils/onboardingPath.ts:228-238), traduit par StepCard (src/components/onboarding/StepCard.tsx:68-76). Chaque bouton cité dans une nouvelle phrase passe par là. Une carte dit quoi faire en 2 ou 3 phrases (décision D2 de la phase 2).

Travail à faire

1. Dossier d'import : choisir le dossier parent

Le modèle réel :

  • chaque sous-dossier direct et non caché du dossier choisi devient une source, nommée d'après lui ;

  • seuls les .csv et .txt posés directement dans un sous-dossier sont lus ; les fichiers posés à la racine et les niveaux plus profonds sont ignorés (scan_import_folder, src-tauri/src/commands/fs_commands.rs:25-110) ;

  • une source garde un seul format et une seule signature d'en-tête (ADR 0019) : une carte de crédit et un compte chèques de la même banque font deux sources.

  • Montrer la structure attendue dans l'état vide de la page Import (src/components/import/ImportEmptyState.tsx, variantes « aucun dossier » et « aucune source »). Il est visible avec ou sans parcours, et la carte du parcours l'accompagne. Liste imbriquée accessible, pas une image ; libellés i18n FR et EN :

    dossier parent              <- choisissez ce dossier
    ├── carte de crédit         (une source)
    │   ├── releve-2026-08.csv
    │   └── releve-2026-09.csv
    └── compte chèques          (une autre source)
    
  • Remplacer « un sous-dossier par banque » par « un sous-dossier par compte » : onboarding.card.import.noFolder, onboarding.card.import.noSources, import.empty.noSources.description, import.help.tips[0] et docs.import.steps[1] (ces deux derniers disent « banque/source »). Le guide et docs.gettingStarted disent déjà « par compte ».

  • Dire que les fichiers posés à la racine du dossier parent sont ignorés. L'avertissement à l'écran est #427.

2. Signes à l'aperçu

L'aperçu affiche déjà un récapitulatif signé : « N sortie(s) » en rouge, « N entrée(s) » en vert, et « Inverser les signes », qui corrige la configuration de la source pour les imports suivants (src/components/import/FilePreviewTable.tsx:63-122). Aucun texte ne dit qu'une dépense doit être une sortie.

  • onboarding.card.import.filePreview : une dépense doit apparaître dans les sorties, avec un montant négatif ; sinon, cliquer « Inverser les signes ». Le libellé import.preview.flipSigns s'ajoute aux labels de la ligne file-preview de WIZARD_ROWS (onboardingPath.ts:266-271), à côté de import.wizard.checkDuplicates.
  • La même règle dans l'aide de la page Import (import.help.tips) et dans le guide, section Import.

3. Mots-clés à l'étape « Classer une transaction à la main »

Décision de Max (2026-10-12) : le critère de l'étape ne change pas (une transaction classée à la main, is_manually_categorized = 1) ; la carte guide vers l'ajout d'un mot-clé. La carte de l'étape Catégories et mots-clés, juste avant (#425), annonce cet ajout.

Faits :

  • un mot-clé classe d'office, à l'import et par « Auto-catégoriser », les transactions dont la description le contient ; le plus prioritaire l'emporte (src/services/categorizationService.ts) ;

  • le clic droit sur une transaction, classée ou non, puis « Ajouter comme mot-clé » (reports.keyword.addFromTransaction) ouvre AddKeywordDialog (src/pages/TransactionsPage.tsx:175-198) : mot-clé prérempli avec le premier mot de la description, choix de la catégorie, aperçu des transactions qui correspondent, puis « Appliquer et recatégoriser ». Le mot-clé est créé (priorité 100) et les transactions cochées sont classées avec is_manually_categorized = 1 (categorizationService.ts:240-290) : l'étape se coche ;

  • l'icône « Ajouter un mot-clé » de la table n'apparaît que sur une transaction déjà classée (src/components/transactions/TransactionTable.tsx:225), donc pas dans l'entrée guidée, filtrée sur les non classées ;

  • #423 remplace le menu de catégorie de cette boîte par un menu avec saisie : la phrase de la carte reste vraie.

  • onboarding.card.transactions.uncategorized et .all : ce qu'est un mot-clé, puis le clic droit et « Ajouter comme mot-clé » comme façon recommandée de classer (libellé en labels, dans transactionsCardModel, onboardingPath.ts:360-375). Le choix direct de la catégorie reste possible, et la mise en évidence reste sur la catégorie de la première ligne.

  • Le guide, section Transactions, au même niveau.

4. Budget : feuilles seulement, et colonne Annuel

Faits :

  • seules les feuilles acceptent un montant ; une ligne à chevron est un sous-total en lecture seule (src/components/budget/BudgetTable.tsx:249-297) ;

  • un montant saisi dans « Annuel » est réparti également sur les 12 mois et remplace les montants mensuels (handleSaveAnnual puis splitEvenly, src/hooks/useBudget.ts:470-480 ; arrondi au cent, le reste réparti sur les premiers mois).

  • onboarding.card.budget.collapsed et .flat : seules les catégories du dernier niveau, sans chevron, acceptent un montant ; un montant saisi dans « Annuel » (budget.annual en labels, dans budgetCardModel, onboardingPath.ts:394-414) est réparti sur les 12 mois et remplace les montants mensuels.

  • budget.help.tips : les deux mêmes règles.

5. Aide et guide périmés (constat annexe, inclus sur décision de Max)

  • Budget : budget.help.tips[3], docs.budget.steps[3] et le guide décrivent un « bouton de répartition », retiré en v0.2.5 (ccdab1f) ; la répartition passe par la cellule Annuel.
  • Budget : docs.budget.tips[0] annonce un avertissement quand les mois ne correspondent pas à l'annuel. Il ne peut plus apparaître : l'annuel est toujours la somme des mois (useBudget.ts:126-137), ce qui rend morte la vérification de BudgetTable.tsx:342-349. Retirer la phrase ; le code mort est sans effet et reste hors de cette issue.
  • Rapports : reports.help.tips[0] parle d'onglets « Tendances, Par catégorie et Dans le temps », alors que le hub a des cartes depuis l'ADR 0007. docs.reports.overview annonce quatre sous-rapports, docs.reports.features « 4 cartes de navigation », et le guide « quatre cartes » (docs/guide-utilisateur.md:357). Le hub en a cinq : Faits saillants, Tendances, Comparables, Zoom catégorie, Cartes (src/pages/ReportsPage.tsx).

6. Docs et suivi

  • Guide FR (docs/guide-utilisateur.md) et clés docs.* FR et EN pour chaque texte ci-dessus.
  • CHANGELOG (CHANGELOG.md, CHANGELOG.fr.md) : « Changed » / « Modifié » pour les cartes, « Fixed » / « Corrigé » pour l'aide périmée.
  • Liste QA docs/qa-onboarding.html : les phrases des cartes Import (aucun dossier, aucune source, aperçu), Transactions et Budget.

Fichiers concernés

  • src/i18n/locales/fr.json, src/i18n/locales/en.json : textes des cartes, aide, clés docs.*.
  • src/utils/onboardingPath.ts : labels des phrases (aperçu, transactions, budget).
  • src/components/import/ImportEmptyState.tsx : arborescence du dossier.
  • docs/guide-utilisateur.md, docs/qa-onboarding.html, CHANGELOG.md, CHANGELOG.fr.md.

Surface de test

  • Tests existants : src/utils/onboardingPath.test.ts (modèles des cartes : clés et labels), src/components/onboarding/StepCard.render.test.tsx, src/components/onboarding/OnboardingStepCard.test.tsx, src/components/import/ImportEmptyState.test.tsx.
  • Tests à ajouter : les nouvelles interpolations des cartes Aperçu, Transactions et Budget ; l'arborescence dans l'état vide, dans ses deux variantes.
  • Rappel #389 : le faux t des tests de rendu rend la clé brute, un t oublié passe inaperçu.
  • Test de régression : non (aucun bug).

Critères d'acceptation

  • Sans dossier choisi, la page Import montre l'arborescence attendue et dit de choisir le dossier parent ; plus aucun texte ne parle d'un sous-dossier par banque.
  • La carte de l'aperçu dit qu'une dépense doit être une sortie et nomme « Inverser les signes ».
  • La carte Transactions explique les mots-clés et nomme « Ajouter comme mot-clé » ; l'étape se coche toujours par un classement à la main.
  • La carte Budget dit que seules les feuilles se saisissent, et ce que fait la colonne Annuel.
  • L'aide et le guide ne parlent plus du bouton de répartition, de l'avertissement Annuel, des onglets des Rapports ni de quatre cartes.
  • FR et EN complets ; npm test et npm run build verts.

Complexité estimée

Moyenne : surtout des textes, plus un petit composant (l'arborescence) et les labels de trois cartes.

Ordre

  • Avant #425, qui touche les mêmes fichiers (fr.json, en.json, onboardingPath.ts, guide, CHANGELOG, liste QA) : enchaîner, pas en parallèle.
  • #424 est indépendante (Budget seul, hors textes).
  • #423 touche aussi les CHANGELOG : conflit trivial si elles avancent en même temps.

Questions ouvertes

Aucune.

Texte d'origine

Lors de l'import, petite explication du fonctionnement / choix de dossier.

  • dossier parent (<- choisissez a ce niveau)
    • dossier source 1 (par exemple carte de crédit)
      • fichier csv 1
      • fichier csv 2
    • dossier source 2 (par exemple compte cheque)

Avant l'import, mention de vérifier les signes - une dépense devrait etre négative.
Utiliser "confirmer" plutôt que "passer".

Lors de la classification des transactions, expliquer les "mots clé" et leur utilisation.

budget
(anomalie) pour le budget, lorsqu'on déplie, les catégories ne sont pas sous le parent mais plutôt à la fin de la section.
faire mention sur le fait que les saisies ne sont possibles que sur les catégories "feuilles" et non les noeuds
mentionner que si saisie dans colonne annuel, alors répartition automatique sur 12 mois

ajouter une étape pour parcourir la section catégorie et mots clés fait plus tôt
et parcours rapide de la page rapport

Planification du 2026-10-12 (`/plan-run`, jalon `planned-2026-10-12-retours-onboarding-v0171`) : le corps est réécrit pour être autosuffisant (décisions de Max, constats de `/review-spec` intégrés). Corps précédent ci-dessous. <details><summary>Corps précédent (titre : Parcours de démarrage v0.17.1 : textes des cartes (dossier d'import, signes, mots-clés, budget) et aide périmée)</summary> ## Contexte Retours de Max sur le parcours de démarrage de la v0.17.1, consignés le 2026-10-12 et analysés le même jour sur `main` à `1954502`. Sur décision de Max, les retours sont répartis en trois issues : - celle-ci : les textes des cartes d'étape, de l'aide et du guide ; - #424 : l'anomalie du Budget (ordre des sous-catégories au dépli), un bug indépendant du parcours ; - #425 : deux étapes de visite à ajouter au parcours, Catégories et mots-clés puis Rapports. Deux constats annexes ont leur issue : #426 (source renommée introuvable) et #427 (CSV posés à la racine du dossier d'import). Le corps d'origine est archivé en commentaire. Retiré : « Utiliser "confirmer" plutôt que "passer" », une mauvaise lecture selon Max (2026-10-12). **Convention des cartes.** Une phrase de carte nomme un contrôle par sa propre clé i18n, jamais en recopiant son libellé : `StepCardText.labels` (`src/utils/onboardingPath.ts:228-238`), traduit par `StepCard` (`src/components/onboarding/StepCard.tsx:68-76`). Chaque bouton cité dans une nouvelle phrase passe par là. Une carte dit quoi faire en 2 ou 3 phrases (décision D2 de la phase 2). ## Travail à faire ### 1. Dossier d'import : choisir le dossier parent Le modèle réel : - chaque sous-dossier direct et non caché du dossier choisi devient une source, nommée d'après lui ; - seuls les `.csv` et `.txt` posés directement dans un sous-dossier sont lus ; les fichiers posés à la racine et les niveaux plus profonds sont ignorés (`scan_import_folder`, `src-tauri/src/commands/fs_commands.rs:25-110`) ; - une source garde un seul format et une seule signature d'en-tête (ADR 0019) : une carte de crédit et un compte chèques de la même banque font deux sources. - [ ] Montrer la structure attendue dans l'état vide de la page Import (`src/components/import/ImportEmptyState.tsx`, variantes « aucun dossier » et « aucune source »). Il est visible avec ou sans parcours, et la carte du parcours l'accompagne. Liste imbriquée accessible, pas une image ; libellés i18n FR et EN : ``` dossier parent <- choisissez ce dossier ├── carte de crédit (une source) │ ├── releve-2026-08.csv │ └── releve-2026-09.csv └── compte chèques (une autre source) ``` - [ ] Remplacer « un sous-dossier par banque » par « un sous-dossier par compte » : `onboarding.card.import.noFolder`, `onboarding.card.import.noSources`, `import.empty.noSources.description`, `import.help.tips[0]` et `docs.import.steps[1]` (ces deux derniers disent « banque/source »). Le guide et `docs.gettingStarted` disent déjà « par compte ». - [ ] Dire que les fichiers posés à la racine du dossier parent sont ignorés. L'avertissement à l'écran est #427. ### 2. Signes à l'aperçu L'aperçu affiche déjà un récapitulatif signé : « N sortie(s) » en rouge, « N entrée(s) » en vert, et « Inverser les signes », qui corrige la configuration de la source pour les imports suivants (`src/components/import/FilePreviewTable.tsx:63-122`). Aucun texte ne dit qu'une dépense doit être une sortie. - [ ] `onboarding.card.import.filePreview` : une dépense doit apparaître dans les sorties, avec un montant négatif ; sinon, cliquer « Inverser les signes ». Le libellé `import.preview.flipSigns` s'ajoute aux `labels` de la ligne `file-preview` de `WIZARD_ROWS` (`onboardingPath.ts:266-271`), à côté de `import.wizard.checkDuplicates`. - [ ] La même règle dans l'aide de la page Import (`import.help.tips`) et dans le guide, section Import. ### 3. Mots-clés à l'étape « Classer une transaction à la main » Décision de Max (2026-10-12) : le critère de l'étape ne change pas (une transaction classée à la main, `is_manually_categorized = 1`) ; la carte guide vers l'ajout d'un mot-clé. La carte de l'étape Catégories et mots-clés, juste avant (#425), annonce cet ajout. Faits : - un mot-clé classe d'office, à l'import et par « Auto-catégoriser », les transactions dont la description le contient ; le plus prioritaire l'emporte (`src/services/categorizationService.ts`) ; - le clic droit sur une transaction, classée ou non, puis « Ajouter comme mot-clé » (`reports.keyword.addFromTransaction`) ouvre `AddKeywordDialog` (`src/pages/TransactionsPage.tsx:175-198`) : mot-clé prérempli avec le premier mot de la description, choix de la catégorie, aperçu des transactions qui correspondent, puis « Appliquer et recatégoriser ». Le mot-clé est créé (priorité 100) et les transactions cochées sont classées avec `is_manually_categorized = 1` (`categorizationService.ts:240-290`) : l'étape se coche ; - l'icône « Ajouter un mot-clé » de la table n'apparaît que sur une transaction déjà classée (`src/components/transactions/TransactionTable.tsx:225`), donc pas dans l'entrée guidée, filtrée sur les non classées ; - #423 remplace le menu de catégorie de cette boîte par un menu avec saisie : la phrase de la carte reste vraie. - [ ] `onboarding.card.transactions.uncategorized` et `.all` : ce qu'est un mot-clé, puis le clic droit et « Ajouter comme mot-clé » comme façon recommandée de classer (libellé en `labels`, dans `transactionsCardModel`, `onboardingPath.ts:360-375`). Le choix direct de la catégorie reste possible, et la mise en évidence reste sur la catégorie de la première ligne. - [ ] Le guide, section Transactions, au même niveau. ### 4. Budget : feuilles seulement, et colonne Annuel Faits : - seules les feuilles acceptent un montant ; une ligne à chevron est un sous-total en lecture seule (`src/components/budget/BudgetTable.tsx:249-297`) ; - un montant saisi dans « Annuel » est réparti également sur les 12 mois et remplace les montants mensuels (`handleSaveAnnual` puis `splitEvenly`, `src/hooks/useBudget.ts:470-480` ; arrondi au cent, le reste réparti sur les premiers mois). - [ ] `onboarding.card.budget.collapsed` et `.flat` : seules les catégories du dernier niveau, sans chevron, acceptent un montant ; un montant saisi dans « Annuel » (`budget.annual` en `labels`, dans `budgetCardModel`, `onboardingPath.ts:394-414`) est réparti sur les 12 mois et remplace les montants mensuels. - [ ] `budget.help.tips` : les deux mêmes règles. ### 5. Aide et guide périmés (constat annexe, inclus sur décision de Max) - [ ] Budget : `budget.help.tips[3]`, `docs.budget.steps[3]` et le guide décrivent un « bouton de répartition », retiré en v0.2.5 (`ccdab1f`) ; la répartition passe par la cellule Annuel. - [ ] Budget : `docs.budget.tips[0]` annonce un avertissement quand les mois ne correspondent pas à l'annuel. Il ne peut plus apparaître : l'annuel est toujours la somme des mois (`useBudget.ts:126-137`), ce qui rend morte la vérification de `BudgetTable.tsx:342-349`. Retirer la phrase ; le code mort est sans effet et reste hors de cette issue. - [ ] Rapports : `reports.help.tips[0]` parle d'onglets « Tendances, Par catégorie et Dans le temps », alors que le hub a des cartes depuis l'ADR 0007. `docs.reports.overview` annonce quatre sous-rapports, `docs.reports.features` « 4 cartes de navigation », et le guide « quatre cartes » (`docs/guide-utilisateur.md:357`). Le hub en a cinq : Faits saillants, Tendances, Comparables, Zoom catégorie, Cartes (`src/pages/ReportsPage.tsx`). ### 6. Docs et suivi - [ ] Guide FR (`docs/guide-utilisateur.md`) et clés `docs.*` FR et EN pour chaque texte ci-dessus. - [ ] CHANGELOG (`CHANGELOG.md`, `CHANGELOG.fr.md`) : « Changed » / « Modifié » pour les cartes, « Fixed » / « Corrigé » pour l'aide périmée. - [ ] Liste QA `docs/qa-onboarding.html` : les phrases des cartes Import (aucun dossier, aucune source, aperçu), Transactions et Budget. ## Fichiers concernés - `src/i18n/locales/fr.json`, `src/i18n/locales/en.json` : textes des cartes, aide, clés `docs.*`. - `src/utils/onboardingPath.ts` : `labels` des phrases (aperçu, transactions, budget). - `src/components/import/ImportEmptyState.tsx` : arborescence du dossier. - `docs/guide-utilisateur.md`, `docs/qa-onboarding.html`, `CHANGELOG.md`, `CHANGELOG.fr.md`. ## Surface de test - Tests existants : `src/utils/onboardingPath.test.ts` (modèles des cartes : clés et `labels`), `src/components/onboarding/StepCard.render.test.tsx`, `src/components/onboarding/OnboardingStepCard.test.tsx`, `src/components/import/ImportEmptyState.test.tsx`. - Tests à ajouter : les nouvelles interpolations des cartes Aperçu, Transactions et Budget ; l'arborescence dans l'état vide, dans ses deux variantes. - Rappel #389 : le faux `t` des tests de rendu rend la clé brute, un `t` oublié passe inaperçu. - Test de régression : non (aucun bug). ## Critères d'acceptation - [ ] Sans dossier choisi, la page Import montre l'arborescence attendue et dit de choisir le dossier parent ; plus aucun texte ne parle d'un sous-dossier par banque. - [ ] La carte de l'aperçu dit qu'une dépense doit être une sortie et nomme « Inverser les signes ». - [ ] La carte Transactions explique les mots-clés et nomme « Ajouter comme mot-clé » ; l'étape se coche toujours par un classement à la main. - [ ] La carte Budget dit que seules les feuilles se saisissent, et ce que fait la colonne Annuel. - [ ] L'aide et le guide ne parlent plus du bouton de répartition, de l'avertissement Annuel, des onglets des Rapports ni de quatre cartes. - [ ] FR et EN complets ; `npm test` et `npm run build` verts. ## Complexité estimée Moyenne : surtout des textes, plus un petit composant (l'arborescence) et les `labels` de trois cartes. ## Ordre - Avant #425, qui touche les mêmes fichiers (`fr.json`, `en.json`, `onboardingPath.ts`, guide, CHANGELOG, liste QA) : enchaîner, pas en parallèle. - #424 est indépendante (Budget seul, hors textes). - #423 touche aussi les CHANGELOG : conflit trivial si elles avancent en même temps. ## Questions ouvertes Aucune. ## Texte d'origine > Lors de l'import, petite explication du fonctionnement / choix de dossier. > - dossier parent (<- choisissez a ce niveau) > - dossier source 1 (par exemple carte de crédit) > - fichier csv 1 > - fichier csv 2 > - dossier source 2 (par exemple compte cheque) > > Avant l'import, mention de vérifier les signes - une dépense devrait etre négative. > Utiliser "confirmer" plutôt que "passer". > > Lors de la classification des transactions, expliquer les "mots clé" et leur utilisation. > > budget > (anomalie) pour le budget, lorsqu'on déplie, les catégories ne sont pas sous le parent mais plutôt à la fin de la section. > faire mention sur le fait que les saisies ne sont possibles que sur les catégories "feuilles" et non les noeuds > mentionner que si saisie dans colonne annuel, alors répartition automatique sur 12 mois > > ajouter une étape pour parcourir la section catégorie et mots clés fait plus tôt > et parcours rapide de la page rapport </details>
maximus changed title from Parcours de démarrage v0.17.1 : textes des cartes (dossier d'import, signes, mots-clés, budget) et aide périmée to Import : dossier parent, un sous-dossier par compte, signes à l'aperçu, guillemets dans les cartes 2026-10-12 23:24:34 +00:00
maximus added this to the planned-2026-10-12-retours-onboarding-v0171 milestone 2026-10-12 23:24:34 +00:00
maximus added
status:in-progress
and removed
status:ready
labels 2026-10-14 00:45:48 +00:00
maximus added
status:review
and removed
status:in-progress
labels 2026-10-14 00:54:17 +00:00
maximus added
status:approved
and removed
status:review
labels 2026-10-14 23:49:16 +00:00
maximus removed the
status:approved
label 2026-10-16 00:38:16 +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#422
No description provided.