From d11337ccf6ecc4998f9766b581889ead25062989 Mon Sep 17 00:00:00 2001 From: le king fu Date: Sat, 3 Oct 2026 20:25:55 -0400 Subject: [PATCH] docs(onboarding): changelog, architecture, user guide and interactive QA checklist (#357) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes phase 1 of the onboarding wave (#351-#356) on the documentation side. - CHANGELOG.md / CHANGELOG.fr.md: Added (guided empty states, getting-started checklist, sample folder, bank CSV export guide) and Changed (re-show button in Settings > Users, Import "?" popover linking to the guide) under [Unreleased] / [Non publié], same entries in both languages. - docs/architecture.md: create_sample_import_folders (fs_commands 6 -> 7, total 36 -> 37) with its contract, onboardingService, useOnboardingChecklist, the onboarding_checklist_hidden preference, the samples/ corpus next to csv/, and an "Onboarding" section (four empty states and their signal, source of truth of the six checklist rows, sample-folder flow). Tree counts measured for the directories the wave touched. - docs/guide-utilisateur.md chapters 3 and 11 + docs.dashboard.* and docs.settings.* keys (FR/EN). Hand-off from #355: docs.gettingStarted.steps aligned with the six-step quick start of the markdown, docs.import.steps mentions the sample folder, so the three guide copies agree. - docs/qa-onboarding.html: interactive manual-test checklist, French only, static, no network dependency, state in localStorage, plain-text report to the clipboard with a visible fallback, reset button. Resolves #357 Co-Authored-By: Claude Fable 5.1 --- CHANGELOG.fr.md | 12 ++ CHANGELOG.md | 12 ++ docs/architecture.md | 60 +++++-- docs/guide-utilisateur.md | 19 +- docs/qa-onboarding.html | 368 ++++++++++++++++++++++++++++++++++++++ src/i18n/locales/en.json | 30 ++-- src/i18n/locales/fr.json | 30 ++-- 7 files changed, 489 insertions(+), 42 deletions(-) create mode 100644 docs/qa-onboarding.html diff --git a/CHANGELOG.fr.md b/CHANGELOG.fr.md index e559b1e..682c0dd 100644 --- a/CHANGELOG.fr.md +++ b/CHANGELOG.fr.md @@ -2,6 +2,18 @@ ## [Non publié] +### Ajouté + +- États vides guidés sur le Tableau de bord, Import, Transactions et Budget : un profil sans transaction explique désormais ce que la page montrera et propose l'étape suivante (« Choisir un dossier d'import », « Importer des transactions ») au lieu d'un graphique ou d'un tableau vides (#352, #353, #356). +- Une liste de démarrage sur le Tableau de bord, calculée depuis vos données : six étapes (créer un profil, choisir un dossier d'import, configurer une source d'import, importer un premier fichier, classer une transaction à la main, saisir un premier budget) se cochent d'elles-mêmes au fil de votre progression, et l'étape Budget est marquée « Base et plus » en édition Gratuite. La liste occupe le tableau de bord vide, se réduit à une barre compacte dès qu'il y a des transactions, disparaît quand toutes les étapes sont faites, et « Masquer » la retire pour le profil courant seulement (#351, #352). +- « Créer un dossier d'exemple » sur la page Import quand le dossier d'import n'a aucun sous-dossier de banque : le bouton dépose deux sources fictives (« Exemple Desjardins », « Exemple Tangerine »), un relevé chacune couvrant les deux mois précédents, pour essayer l'assistant avant que vos vrais relevés soient en place. Il refuse d'écraser un dossier existant du même nom (#354, #356). +- Une sous-section « Exporter un CSV depuis votre banque » dans le guide d'utilisation, avec une procédure par banque (Desjardins, Tangerine, RBC, Banque Nationale, BMO) et une ligne de statut indiquant si chacune a été confirmée sur un compte réel (#355). + +### Modifié + +- Paramètres → Utilisateurs propose « Afficher la liste de démarrage » une fois la liste masquée, et confirme qu'elle réapparaîtra sur le tableau de bord (#352). +- Le popover d'aide « ? » de la page Import renvoie désormais à la sous-section « Exporter un CSV depuis votre banque » du guide, comme l'état vide d'Import (#356). + ## [0.16.0] - 2026-10-03 ### Ajouté diff --git a/CHANGELOG.md b/CHANGELOG.md index 6912853..fb3752b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,18 @@ ## [Unreleased] +### Added + +- Guided empty states on the Dashboard, Import, Transactions and Budget pages: a profile without transactions now explains what the page will show and offers the next step ("Choose an import folder", "Import transactions") instead of an empty chart or table (#352, #353, #356). +- A getting-started checklist on the Dashboard, computed from your data: six steps (create a profile, choose an import folder, set up an import source, import a first file, categorize a transaction by hand, enter a first budget) tick themselves as you go, and the Budget step is marked "Base and up" in the Free edition. The list fills the empty dashboard, shrinks to a compact bar once transactions exist, disappears when every step is done, and "Hide" dismisses it for the current profile only (#351, #352). +- "Create a sample folder" on the Import page when the import folder has no bank sub-folder: it writes two fictitious sources ("Exemple Desjardins", "Exemple Tangerine"), one statement each covering the two previous months, so you can try the wizard before your real statements are in place. It refuses to overwrite an existing folder of the same name (#354, #356). +- An "Export a CSV from your bank" sub-section in the user guide, with a procedure per bank (Desjardins, Tangerine, RBC, National Bank, BMO) and a status line saying whether each one was confirmed on a real account (#355). + +### Changed + +- Settings → Users offers "Show the getting-started checklist" once the checklist was hidden, and confirms that it will reappear on the dashboard (#352). +- The "?" help popover of the Import page now links to the guide's "Export a CSV from your bank" sub-section, as does the Import empty state (#356). + ## [0.16.0] - 2026-10-03 ### Added diff --git a/docs/architecture.md b/docs/architecture.md index 3366d75..d6e199a 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -31,21 +31,22 @@ simpl-resultat/ │ │ ├── balance/ # 8 composants Bilan (AccountForm, BalanceAccountsTable, BalanceEvolutionChart, BalanceOnboardingCard, BalanceOverviewCard, LinkTransfersModal, SnapshotEditor, SnapshotLineRow) │ │ ├── budget/ # 5 composants │ │ ├── categories/ # 5 composants -│ │ ├── dashboard/ # 2 composants -│ │ ├── import/ # 14 composants (wizard d'import, dont FormatDriftPanel et RepairPathNotice) +│ │ ├── dashboard/ # 7 composants (dont DashboardEmptyState et OnboardingChecklist) +│ │ ├── import/ # 15 composants (wizard d'import, dont FormatDriftPanel, RepairPathNotice et ImportEmptyState) │ │ ├── layout/ # AppShell, Sidebar │ │ ├── profile/ # 3 composants (PIN, formulaire, switcher) │ │ ├── reports/ # ~25 composants (hub, faits saillants, tendances, comparables, zoom catégorie) -│ │ ├── settings/ # 5 composants (+ LogViewerCard, LicenseCard, LicenseKeyForm, AccountCard) -│ │ ├── shared/ # 12 composants réutilisables (dont RequireFeature, UpsellGate, PurchaseButton) +│ │ ├── settings/ # 17 composants (dont LogViewerCard, LicenseCard, LicenseKeyForm, AccountCard, DocsContent et DocsSubsections) +│ │ ├── shared/ # 12 composants réutilisables (dont RequireFeature, UpsellGate, PurchaseButton, EmptyState) │ │ └── transactions/ # 5 composants │ ├── contexts/ # LicenseContext (licence machine) + ProfileContext (état global profil) -│ ├── hooks/ # 18+ hooks custom (useReducer, 5 hooks rapports par domaine) +│ ├── hooks/ # 29 hooks custom (useReducer, 5 hooks rapports par domaine) │ ├── pages/ # 14 pages (dont 4 sous-pages rapports) -│ ├── services/ # 14 services métier +│ ├── services/ # 25 services métier (19 détaillés dans la section « Services TypeScript ») │ ├── shared/ # Types, constantes, matrice d'entitlements (entitlements.ts), gate profils (profileGate.ts), CTA d'upsell (upsellCta.ts), URL d'achat (purchaseUrl.ts), échéance de licence (licenseExpiry.ts) │ ├── utils/ # 13 utilitaires purs (parsing montants/dates, détection CSV, codec de format d'import, dictionnaire lexical, signatures de banques, charts) │ ├── i18n/ # Config i18next + locales FR/EN +│ ├── __fixtures__/ # csv/ : corpus de détection (15 cas figés) ; samples/ : gabarits du dossier d'exemple embarqués par Rust │ ├── App.tsx # Router principal │ └── main.tsx # Point d'entrée ├── src-tauri/ # Backend Rust @@ -93,7 +94,7 @@ simpl-resultat/ | `budget_templates` | Modèles de budget réutilisables | | `budget_template_entries` | Catégories et montants dans les modèles | | `import_config_templates` | Modèles prédéfinis de config d'import | -| `user_preferences` | Préférences applicatives (clé-valeur) — `import_folder`, `balance_show_returns`, `balance_starter_proposed`… **et l'état de repli des catégories** (clés `reports-compare-expanded`, `reports-bva-expanded`, `reports-trends-expanded`, `budget-grid-expanded`) : persisté ici **par profil** plutôt qu'en `localStorage`, pour être détruit avec le profil (pas de résidu machine-global survivant à la suppression) — voir [ADR 0016](adr/0016-persistance-etat-ui-par-profil.md) | +| `user_preferences` | Préférences applicatives (clé-valeur) — `import_folder`, `balance_show_returns`, `balance_starter_proposed`, `onboarding_checklist_hidden` (« 1 » quand la liste de démarrage a été masquée ; la clé est supprimée par « Afficher la liste de démarrage », #351-#352)… **et l'état de repli des catégories** (clés `reports-compare-expanded`, `reports-bva-expanded`, `reports-trends-expanded`, `budget-grid-expanded`) : persisté ici **par profil** plutôt qu'en `localStorage`, pour être détruit avec le profil (pas de résidu machine-global survivant à la suppression) — voir [ADR 0016](adr/0016-persistance-etat-ui-par-profil.md) | | `balance_categories` | Taxonomie des **classes d'actif** (Liquidités, Fonds/FNB, Actions, Crypto, Autres) — `kind ∈ {simple, priced}` (défaut suggéré pour les nouveaux comptes), `custom_label` pour le renommage bilingue-safe (v12). Les ex-types véhicules (TFSA/RRSP) ont migré vers `balance_accounts.vehicle_type` (Étape 1, v12/v13, [ADR 0014](adr/0014-balance-vehicule-attribut.md)) | | `balance_accounts` | Comptes de bilan (rattachés à une catégorie). `currency` hardcodée à `CAD` au MVP via CHECK. `archived_at` pour soft-delete. `vehicle_type` (enveloppe fiscale nullable, v12, [ADR 0014](adr/0014-balance-vehicule-attribut.md)). `kind ∈ {simple, detailed}` + `detailed_since` (pivot faisant autorité, v15, [ADR 0015](adr/0015-balance-detail-par-titre.md)) — porte désormais l'axe simple/détaillé (auparavant dérivé de `category.kind`). **Issue #179** : 4 comptes de départ seedés (`consolidated_schema.sql`) + proposés aux profils existants via `StarterAccountsModal` | | `balance_snapshots` | Snapshots datés (`snapshot_date` UNIQUE) — éditer = mettre à jour les lignes, pas dupliquer | @@ -165,14 +166,14 @@ v17 est purement additive : elle n'ajoute **ni table ni index** (20 tables / 24 Pour les **nouveaux profils**, le fichier `consolidated_schema.sql` contient le schéma complet avec toutes les migrations pré-appliquées (pas besoin de rejouer les migrations). -## Services TypeScript (18) +## Services TypeScript (19) | Service | Responsabilité | |---------|---------------| | `db.ts` | Wrapper de connexion (tauri-plugin-sql) | | `profileService.ts` | Gestion des profils | | `categoryService.ts` | CRUD catégories hiérarchiques | -| `transactionService.ts` | CRUD et filtrage des transactions ; détection d'erreurs FK RESTRICT pour transactions liées à un compte de bilan (typed `TransactionLinkedToBalanceError`) | +| `transactionService.ts` | CRUD et filtrage des transactions ; détection d'erreurs FK RESTRICT pour transactions liées à un compte de bilan (typed `TransactionLinkedToBalanceError`) ; `getTransactionCount` (compte brut de la table, sans filtre — signal des états vides de Transactions et Budget, #351/#353) | | `importSourceService.ts` | Configuration des sources d'import — lit et écrit le format complet via le codec `importFormat.ts` ([ADR 0019](adr/0019-format-import-persiste.md)) | | `importedFileService.ts` | Suivi des fichiers importés | | `importConfigTemplateService.ts` | Modèles de configuration d'import | @@ -183,6 +184,7 @@ Pour les **nouveaux profils**, le fichier `consolidated_schema.sql` contient le | `reportService.ts` | Génération de rapports : `getMonthlyTrends`, `getCategoryOverTime`, `getHighlights`, `getCompareMonthOverMonth`, `getCompareYearOverYear`, `getCategoryZoom` (CTE récursive bornée anti-cycle), `getCartesSnapshot` (snapshot dashboard Cartes, requêtes parallèles) | | `dataExportService.ts` | Export de données (chiffré). L'enveloppe SREF porte un `format_version` explicite (`SREF_FORMAT_VERSION = 2`) et **inclut `import_sources` + `import_config_templates`** depuis #331 ; wipe et restauration sous `withTransaction`, modèles restaurés avant les sources avec remap de `template_id` | | `userPreferenceService.ts` | Stockage préférences utilisateur | +| `onboardingService.ts` | Liste de démarrage (#351) : `getOnboardingCounters` lit en une passe parallèle les cinq compteurs (`import_sources`, `imported_files` terminés, transactions `is_manually_categorized = 1`, `budget_entries`, transactions), le dossier d'import et la préférence `onboarding_checklist_hidden` ; `hideChecklist` / `showChecklist` posent et retirent la préférence. Aucune UI ici : `computeChecklist` (`utils/onboardingChecklist.ts`, pur) transforme le snapshot en six lignes — voir la section « Onboarding » | | `logService.ts` | Capture des logs console (buffer circulaire, sessionStorage) | | `licenseService.ts` | Validation et gestion de la clé de licence (appels commandes Tauri). Les appels au serveur de licences (activation, désactivation, liste des machines) renvoient un résultat typé `{ ok, value }` / `{ ok, error }` ; `parseLicenseError` lit le JSON `{code}` de `LicenseError` et `LICENSE_ERROR_I18N_MAP` le relie à `license.errors.*` (#270). Les commandes de clé (`store_license`, `read_license`) rejettent avec le même JSON depuis #347 : la carte Licence n'affiche jamais une chaîne brute. `LicenseInfo.revoked` porte l'état de révocation que Rust tient pour la clé, et `checkLicenseRevocation` lance le contrôle du démarrage, qui rend `{ outcome, revoked }` (#365) | | `authService.ts` | OAuth2 PKCE / Compte Maximus (appels commandes Tauri auth_*) | @@ -199,7 +201,7 @@ Un seul service par convention projet (1 service par domaine, splitter seulement Le CRUD passe par `getDb()` + `tauri-plugin-sql` direct, **jamais** via une commande Tauri — convention projet. Les commandes Rust sont réservées au filesystem, OAuth, license, profils, feedback et au seul calcul Modified Dietz (qui a besoin d'arithmétique de dates `chrono`). -## Hooks (17+) +## Hooks (25+) Chaque hook encapsule la logique d'état via `useReducer` : @@ -213,6 +215,7 @@ Chaque hook encapsule la logique d'état via `useReducer` : | `useAdjustments` | Ajustements | | `useBudget` | Budget | | `useDashboard` | Tableau de bord (`/`) — convergé sur le modèle `/reports/cartes` (#279) : KPIs+deltas/top movers/adherence budget via `getCartesSnapshot` sur un mois de référence propre au Dashboard (`referenceYear`/`referenceMonth`, défaut mois précédent), barres classées + tendance par catégorie sur une période flexible propre (`period`/dates custom), filtre compte (`accountIds`) local partagé par les deux axes temporels, tuile valeur nette (Bilan) chargée une fois, indépendante du filtre compte | +| `useOnboardingChecklist` | Liste de démarrage (#351) : reducer exporté (`onboardingChecklistReducer`, états `loading` / `ready` / `error`), charge le snapshot d'`onboardingService` au montage et le passe à `computeChecklist` avec `useEntitlement("budget")` (ligne Budget verrouillée hors Base+, exclue du total). Expose `status`, `checklist`, `counters` (le Dashboard lit `transactions` pour l'état vide), `hidden`, `budgetReady`, `hide()` / `show()` / `refresh()`. Un échec de lecture garde les compteurs précédents et laisse `hidden` intact — une lecture ratée ne ressuscite jamais une liste masquée ; le Dashboard rend alors la page sans liste et journalise | | `useReportsPeriod` | Période de reporting synchronisée via query string (bookmarkable) + filtre compte (`accountIds`, `import_sources.id`) via le paramètre `sources`, même mécanique bookmarkable ; défaut `[]` = aucun filtre (fondation #272). Branché sur les 7 services de rapports (#273) et exposé via `` (#274) ; adopté sur Tendances (#275) puis Comparaison et Budget (#276). Le Dashboard (`/`) n'utilise pas ce hook — il porte son propre `accountIds` local (`useDashboard`), câblé au même `` (#279) | | `useHighlights` | Panneau de faits saillants du hub rapports | | `useTrends` | Rapport Tendances (sous-vue flux global / par catégorie) | @@ -286,6 +289,38 @@ L'étape `file-preview`, déclarée depuis l'origine dans `ImportWizardStep` san 15 fichiers CSV **synthétiques** (aucune donnée réelle, aucun relevé réel n'entre dans ce dépôt — les signatures de banques sont écrites depuis des dispositions documentées). Ils couvrent des formes qu'un vrai relevé ne réunit jamais toutes : montant signé, débit/crédit, débit/crédit inversés, colonne inutilisée à `0,00`, préambule, en-tête contenant un nombre, en-tête à libellé numérique, sans en-tête, tout-positif, Desjardins quoté, montant absolu + indicateur, plus les quatre dispositions de banque. Posés en #326 **avant** la refonte, avec le comportement fautif figé et marqué `KNOWN DEFECT` + l'issue devant le corriger ; chaque maillon suivant a mis à jour l'attente et retiré le marqueur, sans jamais supprimer un test. +### Gabarits du dossier d'exemple — `src/__fixtures__/samples/` + +Deux relevés **inventés** (`exemple-desjardins.csv` : compte chèque Desjardins ; `exemple-tangerine.csv` : carte de crédit Tangerine ; 41 lignes chacun), avec les jetons `{{M1}}` / `{{M2}}` que la commande Rust `create_sample_import_folders` remplace par les deux mois complets précédant le clic (`MM/YYYY`). Les fichiers sont embarqués dans le binaire par `include_str!` : le dépôt est la seule source, il n'y a rien à copier au build. Le module est **séparé** de `csv/index.ts` à dessein — ce corpus est figé à quinze cas par `csvAutoDetect.test.ts` et six boucles y passent chaque fixture ; y ajouter les gabarits élargirait le contrat figé en silence. `src/__integration__/onboarding-samples.test.ts` lit les **mêmes** fichiers et fige ce que l'assistant en fera : chaque fichier reconnu par la signature de la banque qu'il imite, toutes les lignes lues, aucune ligne en erreur, totaux signés attendus, et la part catégorisée par les 180 mots-clés du seed — en laissant exprès des lignes à classer à la main (dont « GARDERIE LES PETITS PAS »), pour que la cinquième case de la liste de démarrage ait quelque chose à cocher (#354). + +## Onboarding — états vides et liste de démarrage + +Phase 1 de l'accueil des nouveaux profils (#351-#357 ; analyse d'origine dans `docs/analyse-onboarding-2026-09.md`). Aucune migration ni table : tout se lit dans les données existantes, et une seule préférence est écrite. + +**Les quatre états vides** rendent le composant partagé `EmptyState` (`src/components/shared/` : icône, titre, description, action primaire en `` ou ` + + + + + + +

Les noms entre guillemets sont ceux des boutons tels qu'ils apparaissent en français. « Exemple Desjardins » et « Exemple Tangerine » sont des relevés inventés : aucune donnée réelle.

+ + + + + diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index 15ca960..73e6abc 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -841,13 +841,12 @@ "Data export and import with optional AES-256 encryption" ], "steps": [ - "On first launch, choose or create a profile — each profile has its own database", - "Go to Settings and set your import folder — create one subfolder per bank account", - "Place your CSV bank statements in the corresponding subfolder", - "Open the Import page and configure your source (column mapping, delimiter, date format)", - "Import your transactions, then head to Categories to set up keyword rules", - "Use Auto-categorize on the Transactions page to apply your rules in bulk", - "Set up your Budget and track progress via Reports" + "Create a profile — each profile has its own database", + "Choose an import folder — the folder where you will drop your statements, one subfolder per bank account", + "Set up an import source — opening a subfolder for the first time detects the file format", + "Import a first file — after reading the preview and its signed recap", + "Categorize a transaction by hand — the keyword seed does most of the work, a manual correction refines the rest", + "Enter a first budget — Base edition and up; then track your progress through Reports" ], "tips": [ "You can switch between English and French using the language selector in the sidebar", @@ -887,9 +886,13 @@ "Budget vs Actual table for the current month (variance in $ and %)", "Stacked bar chart of expenses by category and month", "Adjustable time period selector (default: year to date)", - "Context menu (right-click) to hide a category or view its transactions" + "Context menu (right-click) to hide a category or view its transactions", + "Getting-started checklist for a new profile: six boxes that tick themselves from your data, with a \"Hide\" button" ], "steps": [ + "In a profile without transactions, the dashboard shows a welcome card and the getting-started checklist: create a profile (already ticked), choose an import folder, set up an import source, import a first file, categorize a transaction by hand, enter a first budget. Each unticked row leads to the page where it is done; the Budget box is marked \"Base and up\" in the Free edition and does not count towards the total", + "After your first import, the list shrinks to a compact bar above the filters, with its counter (for instance 4 / 6), and disappears on its own once every box is ticked", + "\"Hide\" removes the list from this profile only; you can show it again from Settings → Users", "Use the period selector in the top-right to choose a time range (month, 3 months, year, etc.)", "Review the summary cards for your balance, total income, and total expenses", "Check the pie chart to see how your spending is distributed across categories", @@ -901,7 +904,8 @@ "The default period is year to date for an annual overview when you open the app", "The balance is calculated as income minus expenses for the selected period", "Hidden categories appear as dismissible chips above the chart — click Show All to restore them", - "SVG patterns (lines, dots, crosshatch) help distinguish categories beyond just color" + "SVG patterns (lines, dots, crosshatch) help distinguish categories beyond just color", + "The checklist boxes tick on your data, not on a click: \"Categorize a transaction by hand\" expects a transaction whose category you changed yourself; the automatic categorization of the import does not tick it" ] }, "import": { @@ -920,7 +924,7 @@ ], "steps": [ "Set your import folder via the folder picker at the top of the page", - "Create a subfolder for each bank/source and place CSV files inside", + "Create a subfolder for each bank/source and place CSV files inside — 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", "Click on a source to open the import wizard — the first time, the format is detected automatically and a banner announces the result", "Check the proposed configuration (delimiter, encoding, date format, column mapping) and correct it if the banner reports an uncertain format", "Select which files to import", @@ -1207,7 +1211,8 @@ "Data export (transactions, categories, or both) in JSON or CSV format", "Data import from a previously exported file", "Optional AES-256-GCM encryption for exported files", - "Optional feedback submission to feedback.lacompagniemaximus.com (explicit exception to the 100% local operation — prompts for consent)" + "Optional feedback submission to feedback.lacompagniemaximus.com (explicit exception to the 100% local operation — prompts for consent)", + "Show the dashboard's getting-started checklist again (Settings → Users) once it was hidden" ], "steps": [ "Click User Guide to access the full documentation", @@ -1216,7 +1221,8 @@ "Use the Data Management section to export or import your data", "When exporting, choose what to include and optionally set a password for encryption", "When importing, select a previously exported file — encrypted files will prompt for the password", - "Click Send feedback in the Logs section to share a suggestion, comment, or issue — the identify and context/logs checkboxes are unchecked by default" + "Click Send feedback in the Logs section to share a suggestion, comment, or issue — the identify and context/logs checkboxes are unchecked by default", + "To see the getting-started checklist again after hiding it, open Settings → Users and click \"Show the getting-started checklist\"; it reappears on this profile's dashboard. The button is only visible once the list was hidden" ], "tips": [ "Updates only replace the app binary — your database is never modified", diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json index 4d26f8b..894c897 100644 --- a/src/i18n/locales/fr.json +++ b/src/i18n/locales/fr.json @@ -841,13 +841,12 @@ "Export et import de données avec chiffrement AES-256 optionnel" ], "steps": [ - "Au premier lancement, choisissez ou créez un profil — chaque profil a sa propre base de données", - "Allez dans Paramètres et définissez votre dossier d'import — créez un sous-dossier par compte bancaire", - "Placez vos relevés bancaires CSV dans le sous-dossier correspondant", - "Ouvrez la page Import et configurez votre source (mapping des colonnes, délimiteur, format de date)", - "Importez vos transactions, puis allez dans Catégories pour configurer les règles de mots-clés", - "Utilisez l'auto-catégorisation sur la page Transactions pour appliquer vos règles en masse", - "Configurez votre Budget et suivez votre progression via les Rapports" + "Créer un profil — chaque profil a sa propre base de données", + "Choisir un dossier d'import — le dossier où vous déposerez vos relevés, un sous-dossier par compte bancaire", + "Configurer une source d'import — la première ouverture d'un sous-dossier détecte le format du fichier", + "Importer un premier fichier — après avoir lu l'aperçu et son récapitulatif signé", + "Classer une transaction à la main — le seed de mots-clés fait le gros du travail, une correction manuelle affine le reste", + "Saisir un premier budget — édition Base et plus ; suivez ensuite votre progression via les Rapports" ], "tips": [ "Vous pouvez basculer entre le français et l'anglais via le sélecteur de langue dans la barre latérale", @@ -887,9 +886,13 @@ "Tableau Budget vs Réel du mois courant (écart en $ et %)", "Histogramme empilé des dépenses par catégorie et par mois", "Sélecteur de période ajustable (par défaut : année à ce jour)", - "Menu contextuel (clic droit) pour masquer une catégorie ou voir ses transactions" + "Menu contextuel (clic droit) pour masquer une catégorie ou voir ses transactions", + "Liste de démarrage pour un profil neuf : six cases qui se cochent d'elles-mêmes selon vos données, avec un bouton « Masquer »" ], "steps": [ + "Dans un profil sans transaction, le tableau de bord affiche une carte d'accueil et la liste de démarrage : créer un profil (déjà cochée), choisir un dossier d'import, configurer une source d'import, importer un premier fichier, classer une transaction à la main, saisir un premier budget. Chaque ligne non cochée mène à la page où la faire ; la case Budget est marquée « Base et plus » en édition Gratuite et ne compte pas dans le total", + "Après votre premier import, la liste se réduit à une barre compacte au-dessus des filtres, avec son compteur (par exemple 4 / 6), et disparaît d'elle-même quand toutes les cases sont cochées", + "« Masquer » retire la liste de ce profil seulement ; vous pouvez la réafficher depuis Paramètres → Utilisateurs", "Utilisez le sélecteur de période en haut à droite pour choisir une plage de temps (mois, 3 mois, année, etc.)", "Consultez les cartes résumées pour votre solde, revenus totaux et dépenses totales", "Vérifiez le graphique circulaire pour voir comment vos dépenses sont réparties par catégorie", @@ -901,7 +904,8 @@ "La période par défaut est « année à ce jour » pour un aperçu annuel dès l'ouverture", "Le solde est calculé comme les revenus moins les dépenses pour la période sélectionnée", "Les catégories masquées apparaissent sous forme de pastilles au-dessus du graphique — cliquez sur Tout afficher pour les restaurer", - "Les motifs SVG (lignes, points, hachures) aident à distinguer les catégories au-delà des couleurs" + "Les motifs SVG (lignes, points, hachures) aident à distinguer les catégories au-delà des couleurs", + "Les cases de la liste de démarrage se cochent sur vos données, pas sur un clic : « Classer une transaction à la main » attend une transaction dont vous avez changé la catégorie vous-même, la catégorisation automatique de l'import ne la coche pas" ] }, "import": { @@ -920,7 +924,7 @@ ], "steps": [ "Définissez votre dossier d'import via le sélecteur de dossier en haut de la page", - "Créez un sous-dossier pour chaque banque/source et placez-y les fichiers CSV", + "Créez un sous-dossier pour chaque banque/source et placez-y les fichiers CSV — 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", "Cliquez sur une source pour ouvrir l'assistant d'import — la première fois, le format est détecté automatiquement et un bandeau annonce le résultat", "Vérifiez la configuration proposée (délimiteur, encodage, format de date, mapping des colonnes) et corrigez-la si le bandeau signale un format incertain", "Sélectionnez les fichiers à importer", @@ -1207,7 +1211,8 @@ "Export des données (transactions, catégories, ou les deux) en format JSON ou CSV", "Import des données depuis un fichier exporté précédemment", "Chiffrement AES-256-GCM optionnel pour les fichiers exportés", - "Envoi de feedback optionnel vers feedback.lacompagniemaximus.com (exception explicite au fonctionnement 100% local — déclenche une demande de consentement)" + "Envoi de feedback optionnel vers feedback.lacompagniemaximus.com (exception explicite au fonctionnement 100% local — déclenche une demande de consentement)", + "Réaffichage de la liste de démarrage du tableau de bord (Paramètres → Utilisateurs) quand elle a été masquée" ], "steps": [ "Cliquez sur Guide d'utilisation pour accéder à la documentation complète", @@ -1216,7 +1221,8 @@ "Utilisez la section Gestion des données pour exporter ou importer vos données", "Lors de l'export, choisissez ce qu'il faut inclure et définissez optionnellement un mot de passe pour le chiffrement", "Lors de l'import, sélectionnez un fichier exporté précédemment — les fichiers chiffrés demanderont le mot de passe", - "Cliquez sur Envoyer un feedback dans la section Journaux pour partager une suggestion, un commentaire ou un problème — la case d'identification et d'envoi du contexte/logs sont décochées par défaut" + "Cliquez sur Envoyer un feedback dans la section Journaux pour partager une suggestion, un commentaire ou un problème — la case d'identification et d'envoi du contexte/logs sont décochées par défaut", + "Pour revoir la liste de démarrage après l'avoir masquée, ouvrez Paramètres → Utilisateurs et cliquez sur « Afficher la liste de démarrage » ; elle réapparaît sur le tableau de bord de ce profil. Le bouton n'est visible que si la liste a été masquée" ], "tips": [ "Les mises à jour ne remplacent que le programme — votre base de données n'est jamais modifiée",