{ "app": { "name": "Simpl'Résultat" }, "changelog": { "title": "Historique des versions", "description": "Consultez les nouveautés et corrections de chaque version", "empty": "Aucune entrée disponible" }, "nav": { "dashboard": "Tableau de bord", "import": "Importer", "transactions": "Transactions", "categories": "Catégories", "adjustments": "Ajustements", "budget": "Budget", "reports": "Rapports", "balance": "Bilan", "settings": "Paramètres", "locked": "Fonctionnalité verrouillée" }, "dashboard": { "title": "Tableau de bord", "kpiSectionTitle": "Indicateurs clés", "income": "Revenus", "expenses": "Dépenses", "net": "Net", "noData": "Aucune donnée disponible. Commencez par importer vos relevés bancaires.", "expensesByCategory": "Dépenses par catégorie", "recentTransactions": "Transactions récentes", "budgetVsActual": "Budget vs Réel", "expensesOverTime": "Dépenses dans le temps", "categoriesBanner": { "title": "Nouvelle taxonomie de catégories disponible", "description": "Votre profil utilise la taxonomie historique. Une nouvelle structure standard, alignée sur l'IPC de Statistique Canada, est désormais disponible. Découvrez-la dans les paramètres.", "cta": "Découvrir la structure standard", "dismiss": "Fermer la bannière" }, "period": { "month": "Ce mois", "3months": "3 mois", "6months": "6 mois", "12months": "12 mois", "year": "Cette année", "all": "Tout", "custom": "Personnalisé" }, "dateFrom": "Du", "dateTo": "Au", "apply": "Appliquer", "help": { "title": "Comment utiliser le tableau de bord", "tips": [ "Le filtre en haut choisit la plage de dates et les sources d'import à inclure", "Les indicateurs clés (revenus, dépenses, net, taux d'épargne) portent sur le mois de référence choisi, avec leur variation vs le mois précédent et vs l'an dernier", "La tuile « Valeur nette actuelle » vient du Bilan — elle n'est pas filtrée par source d'import", "Les catégories en hausse/en baisse et le respect du budget résument les changements du mois de référence", "Le graphique en barres classe vos dépenses par catégorie ; le graphique du bas en suit l'évolution dans le temps" ] }, "empty": { "title": "Bienvenue dans Simpl'Résultat", "description": "Après votre premier import, cette page montrera vos revenus, vos dépenses, votre taux d'épargne et vos principales catégories pour le mois choisi.", "cta": "Choisir un dossier d'import" } }, "onboarding": { "banner": { "label": "Parcours de démarrage", "progress": "Démarrage {{done}}/{{total}}", "next": "Étape suivante :", "showList": "Voir la liste", "hideList": "Fermer la liste", "complete": "Démarrage terminé. Le guide d'utilisation vous accompagne pour la suite.", "openGuide": "Ouvrir le guide" }, "card": { "stepOf": "Étape {{n}} sur {{total}}", "skip": "Passer cette étape", "done": "Fait.", "next": "Étape suivante : {{step}} →", "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.", "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.", "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.", "sourceConfig": "Vérifiez le nom de la source et les fichiers cochés, puis cliquez « {{button}} ».", "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}} ».", "duplicateCheck": "Choisissez quoi faire des transactions déjà importées, puis cliquez « {{button}} ».", "confirm": "Cliquez « {{button}} » : la source est enregistrée et vos transactions arrivent.", "importing": "Import en cours…", "failed": "L'import n'a ajouté aucune transaction ; le rapport ci-dessous dit pourquoi." }, "transactions": { "uncategorized": "Seules les transactions {{filter, lowercase}} sont affichées. Cliquez sur la catégorie de l'une d'elles et choisissez-en une dans la liste. Simpl'Résultat retient ce choix, et la catégorisation automatique ne le remplacera pas.", "all": "Cliquez sur la catégorie d'une transaction et choisissez-en une dans la liste. Simpl'Résultat retient ce choix, et la catégorisation automatique ne le remplacera pas." }, "budget": { "collapsed": "Cliquez {{expand}} pour afficher vos catégories, puis cliquez sur un mois et saisissez un montant. Entrée enregistre ; Tab enregistre et passe au mois suivant.", "flat": "Cliquez sur un mois et saisissez un montant. Entrée enregistre ; Tab enregistre et passe au mois suivant." } }, "state": { "done": "(faite)", "skipped": "(passée)", "locked": "(verrouillée)", "pending": "(en attente)" }, "checklist": { "title": "Liste de démarrage", "counter": "{{done}} / {{total}}", "hide": "Masquer", "lockedBudget": "Base et plus", "skippedBadge": "Passée", "resume": "Reprendre", "items": { "profile": "Créer un profil", "importFolder": "Choisir un dossier d'import", "source": "Configurer une source d'import", "import": "Importer un premier fichier", "manualCategory": "Classer une transaction à la main", "budget": "Saisir un premier budget" } } }, "import": { "title": "Importer des relevés", "dropzone": "Glissez vos fichiers CSV ici ou cliquez pour sélectionner", "source": "Source", "file": "Fichier", "status": "Statut", "date": "Date", "folder": { "label": "Dossier d'import", "notConfigured": "Aucun dossier configuré", "browse": "Parcourir", "refresh": "Actualiser" }, "sources": { "title": "Sources d'import", "empty": "Aucune source trouvée. Créez des sous-dossiers dans votre dossier d'import avec des fichiers CSV.", "new": "nouveau", "fileCount_one": "{{count}} fichier", "fileCount_other": "{{count}} fichiers", "fileCount": "{{count}} fichier(s)" }, "config": { "title": "Configuration de la source", "sourceName": "Nom de la source", "delimiter": "Délimiteur", "semicolon": "Point-virgule", "comma": "Virgule", "tab": "Tabulation", "encoding": "Encodage", "dateFormat": "Format de date", "skipLines": "Lignes à ignorer", "hasHeader": "La première ligne contient les en-têtes", "signConvention": "Convention de signe", "negativeExpense": "Dépenses négatives", "positiveExpense": "Dépenses positives", "columnMapping": "Mapping des colonnes", "dateColumn": "Colonne date", "descriptionColumn": "Colonne description", "amountColumn": "Colonne montant", "amountMode": "Mode montant", "singleAmount": "Montant unique", "debitCredit": "Débit / Crédit séparés", "debitColumn": "Colonne débit", "creditColumn": "Colonne crédit", "selectFiles": "Fichiers à importer", "selectAll": "Tout sélectionner", "alreadyImported": "Importé", "autoDetect": "Auto-détecter", "saveAsTemplate": "Sauver comme modèle", "loadTemplate": "Charger un modèle", "templateName": "Nom du modèle", "templateSaved": "Modèle sauvegardé", "deleteTemplate": "Supprimer le modèle", "noTemplates": "Aucun modèle sauvegardé", "updateTemplate": "Mettre à jour le modèle", "detectionRecognized": "Format reconnu — {{read}} des {{total}} lignes lues", "detectionUncertain": "Format incertain — {{read}} des {{total}} lignes lues seulement", "detectionUncertainHint": "Vérifiez le mapping des colonnes et le format de date, puis regardez l'aperçu avant d'importer.", "detectionBank": "Format {{bank}} reconnu — {{read}} des {{total}} lignes lues" }, "drift": { "title": "Le format de cette source a changé", "intro": "L'en-tête de ce fichier ne correspond plus à celui du dernier import réussi. Les colonnes mémorisées ne pointent peut-être plus sur les bonnes données.", "columnMoved": "{{label}} : colonne {{from}} → {{to}}", "columnAdded": "{{label}} : nouvelle colonne, en position {{to}}", "columnRemoved": "{{label}} : colonne disparue, elle était en position {{from}}", "adopt": "Adopter le format re-détecté", "adoptHint": "Relit le fichier tel qu'il se présente aujourd'hui. La nouvelle configuration est mémorisée à l'import.", "adoptUnavailable": "La détection n'a pas su lire cette nouvelle forme : corrigez le mapping à l'étape précédente.", "keep": "Conserver la configuration actuelle", "keepHint": "Garde le mapping mémorisé. À utiliser si l'en-tête a changé sans que les colonnes bougent." }, "repairPath": { "title": "Réparer un import déjà écrit de travers", "body": "Ne réimportez pas un fichier déjà importé pour le corriger : les doublons sont repérés sur la date, la description ET le montant, donc une ligne au montant corrigé ne s'apparie pas à la ligne fautive — elle s'ajoute. Une inversion de signe crée en prime deux lignes miroir qui s'annulent dans les rapports. Supprimez d'abord l'import fautif dans l'historique des imports, puis rejouez le fichier." }, "preview": { "title": "Aperçu des données", "noData": "Aucune donnée à afficher", "rowCount": "{{count}} ligne(s)", "errorCount": "{{count}} erreur(s)", "date": "Date", "description": "Description", "amount": "Montant", "raw": "Données brutes", "moreRows": "... et {{count}} ligne(s) supplémentaire(s)", "outflowCount": "{{count}} sortie(s)", "inflowCount": "{{count}} entrée(s)", "errorRows": "Lignes en erreur", "flipSigns": "Inverser les signes", "flipSignsHint": "Corrige la configuration de la source, pas seulement cet aperçu : la correction est mémorisée pour les prochains imports." }, "duplicates": { "title": "Détection des doublons", "fileAlreadyImported": "Ce fichier a déjà été importé", "fileAlreadyImportedDesc": "Un fichier avec le même contenu existe déjà dans la base de données.", "rowsFound": "{{count}} doublon(s) détecté(s)", "rowsFoundDesc": "Ces lignes correspondent à des transactions déjà existantes.", "noneFound": "Aucun doublon détecté", "skip": "Ignorer les doublons", "includeAll": "Tout importer", "summary": "Total : {{total}} lignes — {{new}} nouvelles — {{duplicates}} doublon(s)", "withinBatch": "Doublon entre fichiers importés", "sourceDb": "Existant", "sourceBatch": "Entre fichiers" }, "confirm": { "title": "Confirmation de l'import", "source": "Source", "files": "Fichiers", "settings": "Paramètres", "rowsToImport": "Lignes à importer", "rowsSummary": "{{count}} ligne(s) à importer, {{skipped}} doublon(s) ignoré(s)", "columnUnmapped": "non associée" }, "progress": { "title": "Import en cours", "importing": "Import en cours...", "rows": "lignes" }, "report": { "title": "Rapport d'import", "totalRows": "Total lignes", "imported": "Importées", "skippedDuplicates": "Doublons ignorés", "errors": "Erreurs", "categorized": "Catégorisées", "uncategorized": "Non catégorisées", "errorDetails": "Détail des erreurs", "row": "Ligne", "errorMessage": "Message d'erreur", "done": "Terminé" }, "history": { "title": "Historique des imports", "empty": "Aucun import pour le moment.", "deleteAll": "Tout supprimer", "deleteConfirm": "Supprimer cet import et ses {{count}} transaction(s) ?", "deleteAllConfirm": "Supprimer TOUS les imports et leurs transactions ? Cette action est irréversible.", "source": "Source", "filename": "Fichier", "date": "Date", "rows": "Lignes", "status": "Statut" }, "wizard": { "back": "Retour", "next": "Suivant", "preview": "Aperçu", "checkDuplicates": "Vérifier les doublons", "confirm": "Confirmer", "import": "Importer" }, "errors": { "unsupportedAmountMode": "Le mode de montant enregistré pour cette source n'est pas reconnu. Reconfigurez la source avant d'importer.", "unsupportedSignConvention": "La convention de signe enregistrée pour cette source n'est pas reconnue. Reconfigurez la source avant d'importer.", "invalidColumnMapping": "Le mapping de colonnes enregistré pour cette source est illisible. Reconfigurez la source avant d'importer.", "absoluteIndicatorFormat": "Ce fichier utilise des montants positifs accompagnés d'une colonne indiquant le sens (D pour débit, C pour crédit). Ce format n'est pas encore pris en charge : l'importer maintenant enregistrerait chaque dépôt comme une dépense. Exportez le relevé avec des montants signés ou avec deux colonnes débit et crédit.", "autoDetectFailed": "La détection automatique n'a pas pu lire ce fichier. Configurez le format manuellement." }, "rowErrors": { "invalidDate": "Date illisible", "invalidAmount": "Montant illisible", "amountColumnNotMapped": "Colonne de montant non mappée", "parseError": "Ligne illisible" }, "help": { "title": "Comment importer des relevés bancaires", "tips": [ "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", "Cliquez sur une source pour configurer le mapping des colonnes, le délimiteur et le format de date", "Prévisualisez vos données avant l'import pour détecter les problèmes de formatage", "À 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", "La détection des doublons empêche d'importer les mêmes transactions deux fois" ], "linkLabel": "Comment exporter un CSV depuis ma banque ?" }, "empty": { "noFolder": { "title": "Aucun dossier d'import", "description": "Commencez par choisir le dossier où vous déposerez vos relevés", "cta": "Choisir un dossier" }, "noSources": { "title": "Aucune source trouvée", "description": "Créez un sous-dossier par compte dans {{folderName}} et déposez-y ses fichiers CSV" }, "createSample": "Créer un dossier d'exemple", "refresh": "Actualiser", "guideLink": "Comment exporter un CSV depuis ma banque ?", "structure": { "title": "Structure attendue", "parent": "Dossier parent : choisissez celui-ci", "account1": "Carte de crédit : une source", "file1": "releve-2026-08.csv", "file2": "releve-2026-09.csv", "account2": "Compte chèques : une autre source", "rootNote": "Les fichiers posés directement dans le dossier parent sont ignorés." }, "sampleCreated": "Deux dossiers d'exemple ont été créés : {{names}}. Cliquez sur l'un d'eux pour lancer l'import. Supprimez-les quand vos vrais relevés sont en place." }, "rootFiles": { "message_one": "{{count}} fichier est posé directement dans « {{folder}} » et est ignoré : {{names}}. Déplacez-le dans un sous-dossier par compte.", "message_other": "{{count}} fichiers sont posés directement dans « {{folder}} » et sont ignorés : {{names}}. Déplacez-les dans un sous-dossier par compte.", "more_one": "et {{count}} autre", "more_other": "et {{count}} autres" } }, "transactions": { "title": "Transactions", "date": "Date", "description": "Description", "amount": "Montant", "category": "Catégorie", "supplier": "Fournisseur", "noTransactions": "Aucune transaction trouvée.", "filters": { "search": "Rechercher", "searchPlaceholder": "Rechercher par description...", "allCategories": "Toutes les catégories", "allSources": "Toutes les sources", "uncategorized": "Non catégorisées", "dateFrom": "Du", "dateTo": "Au" }, "summary": { "count": "Transactions", "income": "Revenus", "expenses": "Dépenses", "balance": "Solde" }, "table": { "noCategory": "— Sans catégorie —" }, "pagination": { "showing": "Affichage", "of": "sur", "previous": "Précédent", "next": "Suivant" }, "notes": { "placeholder": "Ajouter une note..." }, "autoCategorize": "Auto-catégoriser", "autoCategorizeResult": "{{count}} transaction(s) catégorisée(s)", "autoCategorizeNone": "Aucune correspondance trouvée", "addKeyword": "Ajouter un mot-clé", "keywordAdded": "Mot-clé ajouté", "keywordPlaceholder": "Mot-clé à rechercher...", "splitAdjustment": "Répartition", "splitBase": "Base", "splitAdjusted": "Ajusté", "splitCategory": "Catégorie", "splitAmount": "Montant", "splitDescription": "Description", "splitAddRow": "Ajouter une répartition", "splitRemove": "Supprimer la répartition", "splitTotal": "Le total doit égaler le montant original", "splitDeleteConfirm": "Supprimer cette répartition ?", "help": { "title": "Comment utiliser les Transactions", "tips": [ "Utilisez les filtres pour rechercher par description, catégorie, source ou plage de dates", "Cliquez sur un en-tête de colonne pour trier les transactions", "Assignez une catégorie via le menu déroulant sur chaque ligne", "L'auto-catégorisation utilise vos règles de mots-clés pour catégoriser en masse" ] }, "transferIcon": { "tooltip": "Liée à un compte de bilan", "ariaLabel": "Transaction liée à un compte de bilan" }, "empty": { "title": "Aucune transaction pour l'instant", "description": "Importez d'abord vos relevés bancaires.", "cta": "Importer des transactions" } }, "categories": { "title": "Catégories", "name": "Nom", "type": "Type", "parent": "Catégorie parente", "color": "Couleur", "expense": "Dépense", "income": "Revenu", "transfer": "Transfert", "keywords": "Mots-clés", "addCategory": "Ajouter une catégorie", "editCategory": "Modifier la catégorie", "deleteCategory": "Supprimer la catégorie", "deleteConfirm": "Êtes-vous sûr de vouloir supprimer cette catégorie ? Ses sous-catégories seront promues au niveau supérieur.", "deleteBlocked": "Impossible de supprimer : cette catégorie ou ses sous-catégories sont utilisées par {{count}} transaction(s).", "reinitialize": "Réinitialiser", "reinitializeConfirm": "Réinitialiser toutes les catégories et mots-clés à leurs valeurs par défaut ? Les catégories des transactions seront dissociées. Cette action est irréversible.", "noParent": "Aucun parent (niveau supérieur)", "isInputable": "Autoriser la saisie", "isInputableHint": "Décocher pour masquer du budget et des listes de catégories", "dragToReorder": "Glisser pour réordonner ou changer le parent", "selectCategory": "Sélectionnez une catégorie pour voir les détails", "keywordCount": "Mots-clés", "keywordText": "Mot-clé...", "priority": "Priorité", "customColor": "Couleur personnalisée", "allKeywords": "Tous les mots-clés", "allKeywordsEmpty": "Aucun mot-clé", "help": { "title": "Comment gérer les Catégories", "tips": [ "Créez des catégories et sous-catégories pour organiser vos dépenses et revenus", "Ajoutez des mots-clés à une catégorie pour que les transactions correspondantes soient auto-catégorisées", "Définissez une priorité sur les mots-clés pour résoudre les conflits entre catégories", "Cliquez sur une catégorie dans l'arbre pour voir ses détails, la modifier ou gérer ses mots-clés" ] } }, "adjustments": { "title": "Ajustements", "name": "Nom", "date": "Date", "description": "Description", "amount": "Montant", "recurring": "Récurrent", "entries": "Entrées", "addEntry": "Ajouter une entrée", "newAdjustment": "Nouvel ajustement", "editAdjustment": "Modifier l'ajustement", "deleteConfirm": "Supprimer cet ajustement ?", "total": "Total", "selectAdjustment": "Sélectionnez un ajustement", "category": "Catégorie", "noEntries": "Aucune entrée", "splitTransactions": "Répartitions de transactions", "help": { "title": "Comment utiliser les Ajustements", "tips": [ "Les ajustements permettent d'ajouter des entrées manuelles non issues de vos relevés bancaires", "Utilisez-les pour des dépenses ou revenus prévus non encore reflétés dans vos relevés", "Les ajustements récurrents se répètent automatiquement à chaque période" ] } }, "budget": { "title": "Budget", "category": "Catégorie", "planned": "Prévu", "actual": "Réel", "difference": "Écart", "annual": "Annuel", "previousYear": "Année préc.", "splitEvenly": "Répartir également sur 12 mois", "annualMismatch": "Le total annuel ne correspond pas à la somme des montants mensuels", "clickToEdit": "Cliquer pour modifier", "applyToMonth": "Appliquer au mois", "allMonths": "Les 12 mois", "expenses": "Dépenses", "income": "Revenus", "transfers": "Transferts", "totalExpenses": "Total des dépenses", "totalIncome": "Total des revenus", "totalTransfers": "Total des transferts", "totalPlanned": "Total prévu", "totalActual": "Total réel", "totalDifference": "Écart", "noCategories": "Aucune catégorie trouvée. Créez des catégories pour configurer votre budget.", "saveAsTemplate": "Sauvegarder comme modèle", "applyTemplate": "Appliquer un modèle", "noTemplates": "Aucun modèle enregistré.", "templateName": "Nom du modèle", "templateDescription": "Description (optionnel)", "directSuffix": "(direct)", "deleteTemplateConfirm": "Supprimer ce modèle ?", "help": { "title": "Comment utiliser le Budget", "tips": [ "Utilisez le navigateur d'année pour changer d'année", "Cliquez sur une cellule de mois pour modifier le montant prévu — Entrée pour sauvegarder, Échap pour annuler, Tab pour passer au mois suivant", "La colonne Annuel affiche le total des 12 mois", "Utilisez le bouton de répartition pour distribuer le total annuel également sur tous les mois", "Sauvegardez votre budget comme modèle et appliquez-le à des mois spécifiques ou aux 12 mois d'un coup" ] }, "empty": { "title": "Le budget se construit sur vos transactions", "description": "Importez d'abord vos relevés bancaires.", "cta": "Importer des transactions" } }, "reports": { "title": "Rapports", "period": "Période", "byCategory": "Dépenses par catégorie", "overTime": "Catégories dans le temps", "trends": { "subviewGlobal": "Flux global", "subviewByCategory": "Par catégorie", "chartBar": "Barres", "chartArea": "Surface empilée", "chartTypeAria": "Type de graphique" }, "budgetVsActual": "Budget vs Réel", "subtotalsOnTop": "Sous-totaux en haut", "subtotalsOnBottom": "Sous-totaux en bas", "collapse": { "expandAll": "Tout déplier", "collapseAll": "Tout replier" }, "detail": { "showAmounts": "Afficher les montants", "hideAmounts": "Masquer les montants" }, "filters": { "title": "Catégories", "search": "Rechercher...", "all": "Toutes", "none": "Aucune", "allTypes": "Tous les types", "accounts": { "label": "Sources d'import", "hint": "Aucune sélection = toutes les sources" } }, "bva": { "monthly": "Mensuel", "ytd": "Cumul annuel", "dollarVar": "$ Écart", "pctVar": "% Écart", "noData": "Aucune donnée de budget ou de transaction pour cette période." }, "export": "Exporter", "month": "Mois", "viewMode": { "chart": "Graphique", "table": "Tableau" }, "hub": { "title": "Rapports", "explore": "Explorer", "highlights": "Faits saillants", "highlightsDescription": "Ce qui a bougé ce mois-ci", "trends": "Tendances", "trendsDescription": "Où vous allez sur 12 mois", "compare": "Comparables", "compareDescription": "Comparer un mois de référence au précédent, à l'année passée ou au budget", "categoryZoom": "Analyse par catégorie", "categoryZoomDescription": "Zoom sur une catégorie", "cartes": "Cartes", "cartesDescription": "Tableau de bord KPI, sparklines, top mouvements, budget et saisonnalité" }, "compare": { "modeActual": "Réel vs réel", "modeBudget": "Réel vs budget", "subModeMoM": "Mois précédent", "subModeYoY": "Année précédente", "subModeAria": "Période de comparaison", "referenceMonth": "Mois de référence", "currentAmount": "Courant", "previousAmount": "Précédent", "sections": { "expenses": "Dépenses", "income": "Revenus", "transfers": "Transferts" }, "totalExpenses": "Total des dépenses", "totalIncome": "Total des revenus", "totalTransfers": "Total des transferts", "resultBeforeTransfers": "Résultat avant transferts", "resultNet": "Résultat net" }, "cartes": { "kpiSectionAria": "Indicateurs clés du mois de référence", "income": "Revenus", "expenses": "Dépenses", "net": "Solde net", "savingsRate": "Taux d'épargne", "savingsRateTooltip": { "month": "Formule : (revenus − dépenses) ÷ revenus × 100, calculée sur le mois de référence.", "ytd": "Formule : (revenus YTD − dépenses YTD) ÷ revenus YTD × 100, cumul depuis le 1er janvier." }, "periodMode": { "month": "Mensuel", "ytd": "Cumul annuel", "aria": "Choix de la période" }, "deltaMoMLabel": "vs mois précédent", "deltaYoYLabel": "vs l'an dernier", "flowChartTitle": "Revenus vs dépenses — 12 derniers mois", "topMoversUp": "Catégories en hausse", "topMoversDown": "Catégories en baisse", "budgetAdherenceTitle": "Respect du budget", "budgetAdherenceSubtitle": "{{score}} des catégories avec budget sont dans la cible", "budgetAdherenceEmpty": "Aucune catégorie avec budget ce mois-ci", "budgetAdherenceWorst": "Pires dépassements", "seasonalityTitle": "Saisonnalité", "seasonalityEmpty": "Pas assez d'historique pour ce mois", "seasonalityAverage": "Moyenne", "seasonalityDeviation": "{{pct}} par rapport à la moyenne" }, "category": { "selectCategory": "Choisir une catégorie", "searchPlaceholder": "Rechercher une catégorie…", "includeSubcategories": "Inclure les sous-catégories", "directOnly": "Directe seulement", "breakdown": "Total", "evolution": "Évolution", "transactions": "Transactions" }, "keyword": { "addFromTransaction": "Ajouter comme mot-clé", "dialogTitle": "Nouveau mot-clé", "willMatch": "Matchera aussi", "nMatches_one": "{{count}} transaction matchée", "nMatches_other": "{{count}} transactions matchées", "applyAndRecategorize": "Appliquer et recatégoriser", "applyToHidden": "Appliquer aussi aux {{count}} transactions non affichées", "tooShort": "Minimum {{min}} caractères", "tooLong": "Maximum {{max}} caractères", "alreadyExists": "Ce mot-clé existe déjà pour une autre catégorie. Remplacer ?" }, "highlights": { "balances": "Soldes", "netBalanceCurrent": "Ce mois-ci", "netBalanceYtd": "Cumul annuel", "topMovers": "Top mouvements", "topTransactions": "Plus grosses transactions récentes", "category": "Catégorie", "previousAmount": "Précédent", "currentAmount": "Courant", "variationAbs": "Écart ($)", "variationPct": "Écart (%)", "vsLastMonth": "vs mois précédent", "windowDays30": "30 jours", "windowDays60": "60 jours", "windowDays90": "90 jours" }, "empty": { "noData": "Aucune donnée pour cette période", "importCta": "Importer un relevé" }, "help": { "title": "Comment utiliser les Rapports", "tips": [ "Basculez entre les vues Tendances, Par catégorie et Dans le temps via les onglets", "Utilisez le sélecteur de période pour ajuster la plage de dates de tous les graphiques", "Les tendances mensuelles montrent vos revenus et dépenses au fil du temps", "Catégories dans le temps suit l'évolution des dépenses par catégorie" ] } }, "settings": { "title": "Paramètres", "version": "Version {{version}}", "updates": { "title": "Mises à jour", "checkButton": "Vérifier les mises à jour", "checking": "Vérification en cours...", "upToDate": "L'application est à jour", "available": "Version {{version}} disponible", "downloadButton": "Télécharger et installer", "downloading": "Téléchargement en cours...", "readyToInstall": "Mise à jour prête à installer", "installButton": "Installer et redémarrer", "installing": "Installation en cours...", "error": "Erreur lors de la mise à jour", "retryButton": "Réessayer", "releaseNotes": "Nouveautés", "notEntitled": "Les mises à jour automatiques sont incluses dans l'édition Base.", "downloadLatest": "Télécharger la dernière version" }, "dataManagement": { "title": "Gestion des données", "export": { "title": "Exporter", "modeLabel": "Que exporter", "modeTransactionsWithCategories": "Transactions avec catégories", "modeTransactionsOnly": "Transactions uniquement", "modeCategoriesOnly": "Catégories uniquement", "formatLabel": "Format", "csvDisabledNote": "transactions uniquement", "encryptLabel": "Chiffrer avec un mot de passe", "passwordPlaceholder": "Mot de passe (min 8 caractères)", "passwordConfirmPlaceholder": "Confirmer le mot de passe", "passwordTooShort": "Le mot de passe doit contenir au moins 8 caractères", "passwordMismatch": "Les mots de passe ne correspondent pas", "button": "Exporter", "success": "Export terminé avec succès" }, "import": { "title": "Importer", "description": "Importer des données depuis un fichier exporté précédemment. Les données existantes seront remplacées.", "button": "Importer depuis un fichier", "passwordRequired": "Ce fichier est chiffré. Entrez le mot de passe pour le déchiffrer.", "passwordPlaceholder": "Mot de passe", "decrypt": "Déchiffrer", "confirmTitle": "Remplacer les données", "willDeleteLabel": "Les données suivantes seront supprimées :", "willDeleteCategories": "Toutes les catégories, fournisseurs et mots-clés", "willDeleteTransactions": "Toutes les transactions et l'historique d'import", "willDeleteAll": "Toutes les transactions, catégories, fournisseurs, mots-clés et l'historique d'import", "willImportLabel": "Les données suivantes seront importées :", "countCategories": "{{count}} catégorie(s)", "countSuppliers": "{{count}} fournisseur(s)", "countKeywords": "{{count}} mot(s)-clé(s)", "countTransactions": "{{count}} transaction(s)", "countImportSources": "{{count}} source(s) d'import", "countImportTemplates": "{{count}} modèle(s) d'import", "irreversibleWarning": "Cette action est irréversible. Toutes les données existantes du type sélectionné seront définitivement supprimées et remplacées.", "typeToConfirm": "Tapez « {{word}} » pour confirmer :", "confirmWord": "REMPLACER", "replaceButton": "Remplacer les données", "success": "Import terminé avec succès", "tryAgain": "Réessayer", "errors": { "unsupportedAmountMode": "Ce fichier ne peut pas être importé : la source « {{name}} » a été enregistrée avec un mode de montant que cette version ne prend pas en charge ({{value}}). Rien n'a été modifié.", "unsupportedSignConvention": "Ce fichier ne peut pas être importé : la source « {{name}} » a été enregistrée avec une convention de signe que cette version ne prend pas en charge ({{value}}). Rien n'a été modifié.", "invalidFormatRow": "Ce fichier ne peut pas être importé : la configuration d'import de « {{name}} » est incomplète ou endommagée. Rien n'a été modifié." } } }, "userGuide": { "title": "Guide d'utilisation", "description": "Apprenez à utiliser toutes les fonctionnalités de l'application" }, "categoriesCard": { "title": "Gestion des catégories", "description": "Organisez vos dépenses et revenus selon vos besoins.", "standardGuideTitle": "Structure standard des catégories", "standardGuideDescription": "Explorer la taxonomie IPC (lecture seule)", "migrateTitle": "Migrer vers la structure standard", "migrateDescription": "Aperçu, sauvegarde et migration en 3 étapes", "restoreEntry": { "title": "Rétablir une sauvegarde", "description": "Annuler une migration de catégories en restaurant sa sauvegarde automatique" }, "restoreBanner": { "title": "Sauvegarde disponible", "description": "Votre ancienne structure de catégories est sauvegardée jusqu'au {{expiry}}. Rétablissez-la si la nouvelle structure ne vous convient pas.", "cta": "Rétablir la sauvegarde", "dismiss": "Fermer" }, "restoreModal": { "title": "Confirmer le rétablissement", "subtitle": "Sauvegarde du {{date}}", "warning": "Cette action va remplacer TOUTES vos données actuelles par le contenu de la sauvegarde. Cette action est irréversible.", "filePath": "Fichier de sauvegarde", "fileMissingTitle": "Fichier de sauvegarde introuvable", "fileMissingHint": "Le fichier de sauvegarde n'est plus à son emplacement d'origine. Choisissez-le manuellement pour continuer — il se trouve habituellement dans le dossier Documents sous Simpl-Resultat/backups/.", "pickFile": "Choisir un fichier de sauvegarde", "passwordLabel": "NIP du profil", "passwordHelp": "Cette sauvegarde est chiffrée. Saisissez le NIP actif lors de la migration pour la déchiffrer.", "cancel": "Annuler", "confirm": "Rétablir", "close": "Fermer", "retry": "Réessayer", "restoring": "Rétablissement en cours — ne fermez pas l'application...", "errors": { "file_missing": "Le fichier de sauvegarde est introuvable à l'emplacement enregistré.", "read_failed": "Le fichier de sauvegarde n'a pas pu être lu.", "parse_failed": "Le fichier de sauvegarde n'a pas pu être lu. Il est peut-être corrompu.", "wrong_envelope_type": "Ce fichier n'est pas une sauvegarde complète avant migration.", "no_recorded_migration": "Aucune migration n'a été enregistrée sur ce profil.", "needs_password": "Cette sauvegarde est chiffrée — un NIP est requis.", "wrong_password": "NIP incorrect. La sauvegarde n'a pas pu être déchiffrée.", "import_failed": "Le rétablissement a échoué lors de la réécriture de votre profil. Veuillez réessayer." } } }, "logs": { "title": "Journaux", "clear": "Effacer", "copy": "Copier", "copied": "Copié !", "empty": "Aucun journal", "filterAll": "Tout" }, "dataSafeNotice": "Vos données sont en sécurité — seul le programme est remplacé, votre base de données n'est pas modifiée.", "help": { "title": "À propos des Paramètres", "tips": [ "Vérifiez les mises à jour de l'application et installez-les directement depuis cette page", "Vos données sont stockées localement et ne sont jamais affectées par les mises à jour", "Changez la langue de l'application via le sélecteur de langue dans la barre latérale" ] }, "privacy": { "title": "Confidentialité", "priceFetchConsent": { "label": "Récupération de prix via Maximus", "description": "Permet à Simpl'Résultat d'utiliser le proxy Maximus pour récupérer les prix d'actifs. Privacy : ton IP est masquée.", "confirmRevoke": "Le bouton de récupération demandera à nouveau ton consentement la prochaine fois. Continuer ?", "revokeButton": "Révoquer le consentement", "notPremium": "Réservé aux licences premium" } }, "backToHome": "Retour aux paramètres", "home": { "intro": "Configurez l'application en trois sections : utilisateurs, données et système." }, "users": { "title": "Utilisateurs", "description": "Comptes, licences et guide d'utilisation.", "sections": { "accounts": "Comptes", "licenses": "Licences", "userGuide": "Guide d'utilisation" }, "onboarding": { "label": "Parcours de démarrage", "show": "Afficher la liste de démarrage", "confirmation": "Le parcours de démarrage réapparaît en haut des pages" } }, "data": { "title": "Données", "description": "Catégories, sauvegardes et confidentialité.", "sections": { "categories": "Catégories", "backup": "Sauvegarde", "priceFetch": "Confidentialité des prix" } }, "systems": { "title": "Système", "description": "Version, mises à jour, journaux et historique.", "sections": { "version": "Version", "update": "Mise à jour", "changelog": "Historique des versions", "logs": "Journaux et commentaires" } } }, "charts": { "hideCategory": "Masquer la catégorie", "viewTransactions": "Voir les transactions", "hiddenCategories": "Masquées", "showAll": "Tout afficher", "total": "Total", "transactions": "transactions", "clickToShow": "Cliquer pour afficher" }, "months": { "jan": "Jan", "feb": "Fév", "mar": "Mar", "apr": "Avr", "may": "Mai", "jun": "Jun", "jul": "Jul", "aug": "Aoû", "sep": "Sep", "oct": "Oct", "nov": "Nov", "dec": "Déc" }, "docs": { "title": "Guide d'utilisation", "backToSettings": "Retour aux paramètres", "print": "Imprimer", "features": "Fonctionnalités", "howTo": "Comment faire", "quickStart": "Démarrage rapide", "tipsHeader": "Astuces", "gettingStarted": { "title": "Premiers pas", "overview": "Simpl'Résultat vous aide à suivre vos finances personnelles en important des relevés bancaires, en catégorisant les transactions, en planifiant des budgets et en générant des rapports. L'application est disponible sur Windows et Linux.", "features": [ "Importation de relevés bancaires CSV depuis plusieurs sources", "Catégorisation automatique et manuelle des transactions", "Répartition (split) d'une transaction sur plusieurs catégories", "Planification budgétaire avec vues mensuelles et annuelles", "Rapports visuels et graphiques interactifs avec menu contextuel", "Profils multiples avec bases de données séparées et NIP optionnel", "Mode sombre avec palette gris chaud", "Export et import de données avec chiffrement AES-256 optionnel", "Parcours de démarrage guidé : un bandeau en haut de chaque page et, sur la page de l'étape en cours, une carte qui dit quoi faire" ], "steps": [ "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" ], "subsections": [ { "id": "getting-started-path", "title": "Le parcours de démarrage", "steps": [ "Le bandeau de démarrage s'affiche en haut de chaque page tant que le parcours n'est pas masqué. Il indique votre progression, par exemple « Démarrage 3/6 », et l'étape suivante, avec un lien vers la page où la faire. Il n'apparaît pas sur le tableau de bord d'un profil sans transaction, dont la carte d'accueil contient déjà la liste", "« Voir la liste » déplie les six étapes sous le bandeau et « Fermer la liste » les replie ; la liste se replie aussi quand vous changez de page. Chaque étape à faire mène à la page où la faire", "Sur les pages Import, Transactions et Budget, quand l'étape suivante s'y fait, une carte de démarrage remplace le bandeau. Elle indique « Étape n sur N », dit quoi faire et entoure d'un contour le contrôle à utiliser. Le contour pulse trois fois, et pas du tout si votre système demande de réduire les animations. Si vous arrivez par un lien « Étape suivante », le focus du clavier se place sur le titre de la carte", "La carte suit l'étape sans que vous changiez de page. Sur la page Import, elle accompagne l'assistant écran par écran. Le lien de l'étape « Classer une transaction à la main » ouvre la page Transactions sur les transactions non catégorisées, toutes dates confondues, ou sur toutes les transactions s'il n'en reste aucune à classer. Sur la page Budget, la carte désigne d'abord « Tout déplier », puis la cellule du mois courant de la première catégorie à remplir ; elle ne déplie jamais la grille à votre place", "Dès que l'étape est faite, la carte reste affichée, annonce « Fait. » et propose l'étape suivante, avec un lien vers sa page. Sur la page Import, elle passe d'une étape à la suivante sans quitter la page et annonce « Fait. » une fois le fichier importé ; jamais pour un import qui n'a ajouté aucune transaction : le rapport dit pourquoi, et l'étape reste à faire", "« Passer cette étape », sur la carte, marque l'étape comme passée : elle compte dans la progression, et la liste l'affiche avec le badge « Passée » et un lien « Reprendre ». « Reprendre » remet l'étape à faire et ouvre sa page", "Quand toutes les étapes sont faites ou passées, le bandeau, ou la carte de la dernière étape, annonce « Démarrage terminé. Le guide d'utilisation vous accompagne pour la suite. » « Ouvrir le guide » mène à cette section Premiers pas, et « Fermer » masque le parcours", "« Masquer », dans le bandeau ou dans la liste, masque le bandeau et la liste pour ce profil seulement. Pour les retrouver, ouvrez Paramètres → Utilisateurs et cliquez sur « Afficher la liste de démarrage » : le parcours réapparaît en haut des pages. Ce bouton est visible dès que le parcours est masqué", "Un profil qui contenait déjà des transactions avant l'arrivée du parcours guidé le voit masqué d'office à sa première ouverture, comme après « Masquer » ; Paramètres → Utilisateurs le réaffiche. Un profil vide ou neuf le garde" ], "note": "Les étapes se cochent d'elles-mêmes, sur vos données et sans changer de page : « Importer un premier fichier » attend un fichier qui a ajouté au moins une transaction, « Classer une transaction à la main » attend une transaction dont vous avez choisi la catégorie vous-même, et la catégorisation automatique de l'import ne la coche pas. En édition Gratuite, l'étape Budget est verrouillée et ne compte pas : le parcours se termine à 5/5." } ], "tips": [ "Vous pouvez basculer entre le français et l'anglais via le sélecteur de langue dans la barre latérale", "Activez le mode sombre via le bouton dans la barre latérale", "Chaque page a une icône d'aide (?) dans l'en-tête avec des astuces rapides", "Vos données sont stockées localement sur votre ordinateur — rien n'est envoyé vers le cloud" ] }, "profiles": { "title": "Profils", "overview": "Gérez plusieurs profils indépendants, chacun avec sa propre base de données. Idéal pour séparer les finances personnelles et professionnelles, ou pour plusieurs utilisateurs sur un même ordinateur.", "features": [ "Création de profils multiples avec noms et couleurs personnalisés", "Chaque profil possède sa propre base de données séparée", "Protection optionnelle par NIP (code numérique)", "Changement de profil rapide depuis la barre latérale", "Suppression de profil avec toutes ses données" ], "steps": [ "Cliquez sur le sélecteur de profil dans la barre latérale pour voir les profils disponibles", "Cliquez sur Gérer les profils pour créer, modifier ou supprimer des profils", "Créez un nouveau profil en choisissant un nom, une couleur et un NIP optionnel", "Basculez entre les profils en cliquant sur celui de votre choix dans le sélecteur" ], "tips": [ "Un profil par défaut est créé automatiquement au premier lancement", "Le NIP est demandé à chaque fois que vous accédez à un profil protégé", "La suppression d'un profil supprime définitivement toutes ses données — cette action est irréversible", "À l'ouverture d'un profil créé par une version antérieure, l'application met sa base à jour après en avoir gardé une copie dans le dossier migration-backups, à côté des bases (sous Linux ~/.config/com.simpl.resultat/, sous Windows %APPDATA%\\com.simpl.resultat\\). Une seule copie est gardée par profil, la plus récente : elle est refaite à chaque mise à jour de la base et supprimée avec le profil", "Sous Linux, les versions jusqu'à la 0.17.0 laissaient sur le disque la base d'un profil supprimé (~/.config/com.simpl.resultat/profile_….db) ; vous pouvez supprimer ce fichier à la main", "Le parcours de démarrage est propre à chaque profil : ses étapes se cochent sur les données du profil, et le masquer dans un profil ne le masque pas dans les autres" ] }, "dashboard": { "title": "Tableau de bord", "overview": "Le tableau de bord vous donne un aperçu rapide de votre situation financière pour une période sélectionnée.", "features": [ "Cartes résumées du solde, des revenus et des dépenses", "Répartition des dépenses par catégorie (graphique circulaire avec motifs SVG)", "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", "Carte d'accueil d'un profil sans transaction, avec la liste de démarrage : six étapes qui se cochent d'elles-mêmes selon vos données, et 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", "Dès que le profil a des transactions, la liste quitte le tableau de bord : le bandeau de démarrage, en haut de chaque page, la remplace jusqu'à la fin du parcours (voir Premiers pas → Le parcours de démarrage)", "« Masquer » retire la liste de la carte d'accueil, et le bandeau de toutes les pages, pour ce profil seulement ; Paramètres → Utilisateurs les réaffiche", "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", "Consultez le tableau Budget vs Réel pour comparer vos dépenses au budget du mois courant", "Analysez l'histogramme en bas de page pour voir l'évolution de vos dépenses par catégorie dans le temps", "Cliquez droit sur une catégorie dans un graphique pour la masquer ou voir le détail de ses transactions" ], "tips": [ "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 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": { "title": "Import", "overview": "Importez des relevés bancaires à partir de fichiers CSV à l'aide d'un assistant étape par étape. Chaque compte bancaire est représenté par un dossier source.", "features": [ "Détection automatique du format à l'ouverture d'une source jamais configurée : délimiteur, encodage, format de date et colonnes reconnues par leur libellé (français et anglais)", "Formats reconnus par banque — Desjardins, RBC, Banque Nationale et Tangerine sont lus par leur nom", "Score de confiance affiché après détection (« 147 des 150 lignes lues ») : il indique ce qui a pu être lu, jamais si le sens est bon", "Aperçu obligatoire avant chaque import, avec un récapitulatif signé : sorties, entrées, totaux et lignes en erreur, plus un bouton « Inverser les signes »", "Avertissement quand l'en-tête d'un fichier ne correspond plus à celui du dernier import réussi, colonne par colonne", "Mapping de colonnes configurable, délimiteur, encodage et format de date modifiables à tout moment", "Détection automatique des doublons (dans le lot et contre les données existantes)", "Modèles d'import pour sauvegarder et réutiliser les configurations", "Historique des imports avec possibilité de supprimer les imports précédents" ], "steps": [ "Définissez votre dossier d'import via le sélecteur de dossier en haut de la page", "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", "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", "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", "Si les entrées et les sorties sont inversées, cliquez sur « Inverser les signes » — la correction est enregistrée avec la source, les prochains fichiers de ce compte se liront correctement d'eux-mêmes", "Vérifiez les doublons, examinez le résumé, puis confirmez l'import" ], "subsections": [ { "id": "import-export", "title": "Exporter un CSV depuis votre banque", "steps": [ "Créez un sous-dossier par compte dans votre dossier d'import (un pour le compte chèque, un pour la carte de crédit, et ainsi de suite)", "Sur le site de votre banque, choisissez la plage de dates la plus large offerte", "Gardez le fichier tel quel : ne l'ouvrez pas et ne le réenregistrez pas dans un tableur, qui modifierait les dates et les montants", "Relancez l'export chaque mois et déposez le nouveau fichier dans le même sous-dossier" ], "note": "Les banques ci-dessous ont une procédure détaillée. La ligne de statut de chacune indique si elle a été confirmée sur un compte réel." }, { "id": "import-desjardins", "title": "Desjardins", "status": "Procédure reconstituée depuis des guides tiers, à confirmer sur un compte réel", "steps": [ "Connectez-vous à AccèsD sur le site de Desjardins (pas l'application mobile)", "Ouvrez Comptes et choisissez le folio voulu", "Ouvrez l'onglet Relevés (ou Transactions / Historique selon la version)", "Choisissez la période", "Cliquez sur Télécharger ou Exporter, puis choisissez le format CSV" ], "note": "L'export ne couvre que l'activité récente du folio. Pour une carte de crédit Desjardins, le CSV n'est pas garanti : certaines cartes n'offrent que le PDF." }, { "id": "import-tangerine", "title": "Tangerine", "status": "Étapes confirmées par la FAQ officielle de Tangerine", "steps": [ "Connectez-vous sur tangerine.ca (pas l'application mobile)", "Ouvrez Transactions", "Cliquez sur le bouton « Télécharger les transactions » (« Download Transactions » en anglais)", "Choisissez le compte et la plage de dates", "Choisissez le format CSV, puis cliquez sur Télécharger" ], "note": "L'historique disponible peut être limité à quelques mois : relancez l'export régulièrement." }, { "id": "import-rbc", "title": "RBC", "status": "Procédure reconstituée depuis des guides tiers, à confirmer sur un compte réel", "steps": [ "Connectez-vous à Banque en direct RBC", "Ouvrez Mes comptes et choisissez le compte", "Cliquez sur le bouton Télécharger, au-dessus du tableau des opérations", "Choisissez le format CSV, puis cliquez sur Continuer", "Enregistrez le fichier dans le sous-dossier du compte" ], "note": "Les cartes de crédit n'offrent qu'environ trois mois d'historique." }, { "id": "import-bnc", "title": "Banque Nationale (BNC)", "status": "Aucune procédure publique trouvée pour les particuliers", "steps": [ "L'application attend un fichier dont l'en-tête est Date;Description;Catégorie;Débit;Crédit;Solde", "Si votre export BNC a une autre forme, envoyez-nous uniquement la ligne d'en-tête et une ou deux lignes aux valeurs fictives via Paramètres → Système → Envoyer un feedback" ], "note": "Ne collez jamais un numéro de compte, un solde ni une transaction réelle : la rétroaction est un message texte envoyé à un serveur, c'est la seule exception au fonctionnement local de l'application." }, { "id": "import-bmo", "title": "BMO", "status": "Procédure reconstituée d'après une description générale, à confirmer sur un compte réel ; format de fichier non encore reconnu", "steps": [ "Connectez-vous aux Services bancaires en ligne BMO sur bmo.com (le site, pas l'application)", "Dans le sommaire, cliquez sur le compte voulu (chèques, épargne ou Mastercard)", "Au-dessus de la liste des transactions, cliquez sur « Télécharger » (ou « Exporter »)", "Choisissez le format CSV — les autres options visent QuickBooks, Quicken, Simply Accounting ou Microsoft Money", "Choisissez la période, puis téléchargez le fichier" ], "note": "L'historique téléchargeable est limité à 123 jours au maximum, et à environ trois mois plus les transactions non facturées pour une Mastercard : exportez chaque mois. Les prêts, hypothèques et marges de crédit ne s'exportent pas (relevés PDF seulement, conservés 7 ans). Les colonnes diffèrent entre les comptes de dépôt et la carte de crédit. BMO n'a pas encore de format reconnu par l'application : la détection générique lit la plupart des exports à montants signés ; si l'aperçu signale des entrées et des sorties inversées, utilisez « Inverser les signes ». Si le fichier n'est pas lu, envoyez-nous uniquement la ligne d'en-tête et une ou deux lignes aux valeurs fictives via Paramètres → Système → Envoyer un feedback. Ne collez jamais un numéro de compte, un solde ni une transaction réelle : la rétroaction est un message texte envoyé à un serveur, c'est la seule exception au fonctionnement local de l'application." } ], "tips": [ "Le récapitulatif de l'aperçu est le seul contrôle qui voit le sens des montants : un score de 100 % signifie que chaque ligne a été lue, pas que vos dépenses ne sont pas comptées comme des revenus. Prenez deux secondes pour le lire.", "Votre configuration est mémorisée intégralement sur la source, y compris le mode de montant et la convention de signe : une source configurée une fois n'est plus jamais re-devinée aux imports suivants", "Si votre banque change la disposition de ses colonnes, un panneau le signale avant l'import et propose deux choix : adopter le nouveau format détecté, ou conserver celui enregistré", "Pour réparer un import déjà écrit de travers, ne ré-importez pas le fichier par-dessus : les doublons sont repérés sur la date, la description ET le montant, donc une ligne corrigée s'ajoute au lieu de remplacer la fautive. Supprimez d'abord l'import fautif dans l'historique, puis rejouez le fichier.", "Un relevé à montants positifs accompagné d'une colonne « D / C » est refusé plutôt qu'importé à l'envers : réexportez-le depuis votre banque avec des montants signés, ou avec deux colonnes débit et crédit séparées", "Sauvegardez votre configuration comme modèle pour ne pas avoir à reconfigurer à chaque fois. Un modèle sert à initialiser une source ; le modifier ensuite ne change aucune source déjà configurée.", "Les fichiers déjà importés sont marqués d'un badge — les ré-importer déclenchera la détection de doublons", "Vous pouvez supprimer un import de l'historique pour retirer toutes ses transactions", "Vos sources et vos modèles d'import font désormais partie de la sauvegarde chiffrée : restaurer un backup ne vous oblige plus à tout reconfigurer", "Si des fichiers CSV sont posés directement dans le dossier d'import, un avertissement les nomme : déplacez-les dans un sous-dossier par compte" ] }, "transactions": { "title": "Transactions", "overview": "Parcourez, filtrez, triez et catégorisez toutes vos transactions importées. C'est ici que vous organisez vos données financières.", "features": [ "Recherche et filtre par description, catégorie, source ou plage de dates", "Sélecteurs de période rapides (ce mois, mois dernier, cette année, etc.)", "Colonnes triables (date, description, montant, catégorie)", "Assignation de catégorie en ligne via menu déroulant", "Auto-catégorisation basée sur les règles de mots-clés", "Ajout de mots-clés directement depuis une transaction", "Répartition (split) d'une transaction sur plusieurs catégories", "Notes sur les transactions" ], "steps": [ "Utilisez la barre de filtres pour affiner les transactions par texte, catégorie, source ou date", "Cliquez sur un en-tête de colonne pour trier par ordre croissant ou décroissant", "Pour catégoriser une transaction, cliquez sur son menu déroulant de catégorie et sélectionnez une catégorie", "Pour auto-catégoriser toutes les transactions non catégorisées, cliquez sur le bouton Auto-catégoriser", "Pour ajouter une règle de mot-clé depuis une transaction, cliquez sur l'icône + et entrez le mot-clé", "Pour répartir une transaction sur plusieurs catégories, utilisez le bouton Répartition et ajoutez les montants par catégorie" ], "tips": [ "Utilisez les boutons de période rapide (Ce mois, Mois dernier, etc.) pour filtrer rapidement par date", "L'auto-catégorisation n'affecte que les transactions non catégorisées — elle n'écrase pas les assignations manuelles", "Ajouter un mot-clé depuis une transaction pré-remplit la catégorie pour construire rapidement vos règles", "Les transactions réparties affichent un indicateur visuel et le détail de la répartition" ] }, "categories": { "title": "Catégories", "overview": "Gérez votre arbre de catégories avec des sous-catégories, des règles de mots-clés pour l'auto-catégorisation et des couleurs personnalisées.", "features": [ "Catégories hiérarchiques avec relations parent/enfant", "Trois types de catégories : Dépense, Revenu, Transfert", "Règles de mots-clés avec niveaux de priorité pour l'auto-catégorisation", "Couleurs personnalisées pour l'affichage des graphiques", "Glisser-déposer pour réordonner les catégories ou changer leur parent", "Basculer les catégories en saisissable ou non-saisissable", "Vue « Tous les mots-clés » pour voir l'ensemble des règles", "Réinitialiser les catégories aux valeurs par défaut" ], "steps": [ "Cliquez sur Ajouter une catégorie pour créer une nouvelle catégorie — choisissez un nom, un type et un parent optionnel (tapez quelques lettres pour filtrer la liste des parents)", "Sélectionnez une catégorie dans l'arbre pour voir ses détails et sa liste de mots-clés", "Glissez-déposez une catégorie dans l'arbre pour la réordonner ou la déplacer sous un autre parent", "Ajoutez des mots-clés correspondant aux descriptions des transactions pour l'auto-catégorisation", "Définissez la priorité des mots-clés pour résoudre les conflits quand plusieurs catégories correspondent", "Utilisez le sélecteur de couleur pour assigner une couleur personnalisée pour les graphiques" ], "tips": [ "Les catégories non-saisissables sont masquées du budget et des menus déroulants mais restent visibles dans les rapports", "Les mots-clés de priorité supérieure l'emportent quand plusieurs catégories correspondent à la même transaction", "Utilisez la vue Tous les mots-clés pour avoir un aperçu global de vos règles de catégorisation", "Utilisez Réinitialiser pour revenir aux catégories par défaut — cela dissociera toutes les catégories des transactions" ] }, "adjustments": { "title": "Ajustements", "overview": "Ajoutez des entrées manuelles non issues de vos relevés bancaires, et consultez les répartitions de transactions créées depuis la page Transactions.", "features": [ "Créer des groupes d'ajustement nommés avec plusieurs entrées", "Assigner une catégorie à chaque entrée", "Marquer des ajustements comme récurrents", "Consultation des répartitions (splits) de transactions dans une section dédiée" ], "steps": [ "Cliquez sur Nouvel ajustement pour créer un groupe d'ajustement", "Ajoutez des entrées avec une description, un montant, une date et une catégorie", "Activez le drapeau récurrent si l'ajustement doit se répéter à chaque période", "Consultez la section Répartitions de transactions pour voir les splits créés depuis la page Transactions" ], "tips": [ "Les ajustements apparaissent dans vos réels de budget aux côtés des transactions importées", "Utilisez les ajustements pour les dépenses prévues qui n'ont pas encore été débitées de votre compte", "Les répartitions de transactions sont créées depuis la page Transactions et apparaissent automatiquement ici" ] }, "budget": { "title": "Budget", "overview": "Planifiez votre budget mensuel pour chaque catégorie et suivez le prévu par rapport au réel tout au long de l'année.", "features": [ "Grille budgétaire mensuelle pour toutes les catégories", "Colonne annuelle avec totaux automatiques", "Répartition égale du montant annuel sur 12 mois", "Modèles de budget pour sauvegarder et appliquer des configurations", "Sous-totaux par catégorie parente", "Repli / dépli de la hiérarchie à chaque niveau : chaque catégorie parente a son chevron, la grille s'ouvre entièrement repliée, et un bouton « Tout déplier / Tout replier » ouvre ou ferme tous les niveaux d'un coup — mémorisé par profil", "En-têtes de colonnes fixes au défilement vertical" ], "steps": [ "Utilisez le navigateur d'année pour sélectionner l'année du budget", "Cliquez sur une cellule de mois pour entrer un montant prévu", "Appuyez sur Entrée pour sauvegarder, Échap pour annuler, ou Tab pour passer au mois suivant", "Utilisez le bouton de répartition (sur la colonne Annuel) pour distribuer également sur tous les mois", "Sauvegardez votre budget comme modèle pour le réutiliser les années suivantes" ], "tips": [ "La colonne Annuel additionne automatiquement les 12 mois — un avertissement apparaît si les totaux mensuels ne correspondent pas", "Les modèles peuvent être appliqués à des mois spécifiques ou aux 12 mois d'un coup", "Les catégories parentes affichent les sous-totaux agrégés de leurs enfants", "Replier une catégorie est purement visuel : les sous-totaux et les totaux annuels sont toujours calculés sur toutes les lignes, jamais sur les seules lignes visibles — aucun montant saisi n'est perdu" ] }, "reports": { "title": "Rapports", "overview": "Un hub qui affiche un panneau de faits saillants en direct plus quatre sous-rapports dédiés (Faits saillants, Tendances, Comparables, Zoom catégorie). Chaque page partage une période bookmarkable via la query string de l'URL.", "features": [ "Hub : panneau de faits saillants condensé + 4 cartes de navigation", "Faits saillants : soldes mois courant et cumul annuel avec sparklines, top mouvements vs mois précédent, plus grosses transactions récentes (fenêtre 30/60/90 jours)", "Cartes : tableau de bord KPI d'un mois (revenus, dépenses, solde net, taux d'épargne) avec toggle Mensuel/YTD, sparklines 13 mois, top mouvements, adhésion budgétaire et saisonnalité", "Tendances : flux global (revenus vs dépenses) et évolution par catégorie avec toggle graphique/tableau", "Comparables : Mois vs Mois précédent, Année vs Année précédente, et Réel vs Budget", "Zoom catégorie : analyse d'une seule catégorie avec donut, évolution mensuelle et tableau de transactions filtrable ; rollup automatique des sous-catégories", "Édition contextuelle des mots-clés : clic droit sur une ligne de transaction pour ajouter sa description comme mot-clé avec prévisualisation en direct des matches", "Motifs SVG (lignes, points, hachures) pour distinguer les catégories", "Préférence chart/table mémorisée par section de rapport", "Repli de la hiérarchie à chaque niveau sur les Comparables et la tendance Par catégorie : chevron par catégorie parente, ouverture entièrement repliée, bouton « Tout déplier / Tout replier » ; purement visuel (sous-totaux et résultats inchangés), mémorisé par profil" ], "steps": [ "Ouvrez /reports pour voir le panneau de faits saillants et les quatre cartes de navigation", "Ajustez la période avec le sélecteur — elle est reflétée dans l'URL et partagée avec tous les sous-rapports", "Cliquez sur une carte ou un lien pour ouvrir le sous-rapport correspondant", "Sur /reports/cartes, choisissez un mois de référence puis basculez entre Mensuel et Cumul annuel (YTD) pour flipper les 4 cartes KPI — le choix est persisté", "Basculez graphique/tableau sur n'importe quel sous-rapport — votre choix est mémorisé", "Cliquez droit sur une ligne de transaction dans le zoom catégorie, la liste des faits saillants, ou la page transactions pour ajouter un mot-clé", "Dans le dialog de mot-clé, passez en revue la prévisualisation des transactions qui matchent et confirmez pour appliquer" ], "tips": [ "Copiez l'URL pour partager une période et un rapport spécifiques", "Les mots-clés doivent faire entre 2 et 64 caractères", "Le Zoom catégorie est protégé contre les arborescences malformées : un cycle parent_id ne peut pas figer l'app", "Sur /reports/cartes en mode YTD, le delta MoM du mois de janvier est toujours « — » (pas de fenêtre YTD antérieure dans la même année), et le taux d'épargne reste « — » quand les revenus YTD sont à zéro", "La saisonnalité, les top mouvements et l'adhésion budgétaire restent mensuels même quand le toggle est sur YTD — seuls les 4 chiffres KPI changent", "Vos choix de repli des catégories (Comparables, Tendances, Budget) sont mémorisés par profil : stockés dans la base du profil, ils disparaissent avec lui" ] }, "balance": { "title": "Bilan", "overview": "Le Bilan est une vue patrimoniale : vous saisissez périodiquement un snapshot (relevé daté de votre patrimoine) de l'ensemble de vos comptes, suivez leur évolution dans le temps et calculez le vrai rendement de chaque compte d'investissement en liant les transferts (apports/retraits) aux comptes correspondants. Deux axes indépendants : la classe d'actif (le type du compte : Liquidités, Fonds / FNB, Actions, Crypto, Autres) et l'enveloppe fiscale (un attribut optionnel du compte : CELI, REER, FERR, CELIAPP, REEE, ou aucune). Un compte se saisit en montant unique (compte simple) ou titre par titre (compte détaillé : chaque valeur mobilière avec quantité × cours et coût d'acquisition, la valeur du compte étant la somme de ses positions).", "features": [ "5 types standard pré-installés, qui sont des classes d'actif (Liquidités, Fonds / FNB, Actions, Crypto, Autres) — renommables, non-supprimables ; un type regroupe des comptes de même nature (distinct des catégories de transactions). Les enveloppes fiscales ne sont plus des types", "Création de types personnalisés avec choix simple (montant direct) ou priced (quantité × prix unitaire)", "Comptes détaillés (par titre) : un compte peut contenir plusieurs valeurs mobilières — chaque titre a sa ligne (symbole, quantité, cours, valeur, coût d'acquisition, gain latent), la valeur du compte étant la somme de ses titres. Sélecteur de titre avec autocomplétion et création inline (symbole + classe d'actif Action/Crypto)", "Gain latent par titre et agrégé (par compte, par classe d'actif, par enveloppe) : valeur − coût d'acquisition, en $ et en % ; drill-down par titre dans le tableau des comptes ; une position sans coût d'acquisition affiche « N/A » et est exclue du %", "Assistant « Détailler en titres » : bascule un compte simple en compte détaillé à partir d'une date de bascule (pivot) ; l'historique agrégé passé reste figé en lecture seule", "Comptes par type : nom, enveloppe fiscale optionnelle (Non-enregistré, CELI, REER, FERR, CELIAPP, REEE, ou aucune par défaut), symbole optionnel (même pour les types cotés, il ne sert qu'à la récupération automatique des prix), devise (CAD au MVP), notes", "Renommer un type ne casse plus le bilingue : le nom personnalisé est stocké à part, la traduction FR/EN d'origine est préservée", "Snapshots datés avec contrainte UNIQUE par date — éditer = revenir sur la même date, jamais dupliquer ; la date d'un snapshot existant peut être déplacée (lignes conservées) si la date cible est libre", "Bouton « Pré-remplir depuis le snapshot précédent » : copie les valeurs simples, les quantités priced, et les titres/quantités/coûts d'acquisition des comptes détaillés (un titre à quantité 0 est ignoré)", "Liaison de transactions existantes à un compte de bilan (modal avec filtres et sens auto-proposé)", "Icône d'attribution dans la page Transactions pour les transactions liées à un transfert", "Graphique d'évolution avec mode courbe ou aire empilée, avec un sous-choix d'axe : par classe d'actif (défaut) ou par enveloppe + marqueurs verticaux pour les transferts (vert = in, rouge = out)", "Tableau des comptes avec 3 colonnes de rendement Modified Dietz (3M / 1A / depuis création) + colonne rendement non-ajusté côte-à-côte, repliées par défaut (toggle, choix mémorisé)", "Avertissement si le dernier snapshot remonte à plus de 60 jours", "Soft-delete des comptes (Archiver) — masqués des nouveaux snapshots, conservés dans l'historique", "Suppression d'un snapshot avec double-confirmation par re-saisie de la date", "Privacy-first : tout est local, aucun appel sortant au MVP" ], "steps": [ "Allez dans /balance/accounts → onglet Types pour créer si besoin une classe d'actif supplémentaire en simple (montant direct) ou priced (quantité × prix unitaire)", "Allez dans l'onglet Comptes pour créer chaque compte (Tangerine rattaché à Liquidités, BTC Ledger rattaché à Crypto avec symbole BTC — optionnel). Choisissez l'enveloppe fiscale si le compte est logé dans un CELI/REER/etc., ou laissez « Aucune »", "Cliquez « + Nouveau snapshot » depuis /balance pour ouvrir /balance/snapshot à la date du jour", "Remplissez les valeurs par compte (groupées par type). Pour les comptes priced, saisissez la quantité et le prix unitaire — la valeur est calculée", "Enregistrez. Le graphique sur /balance s'actualise immédiatement", "Pour calculer le rendement réel d'un compte d'investissement, ouvrez le menu actions → « Lier transferts » → cochez les transactions qui correspondent à des apports/retraits — le sens (in/out) est proposé automatiquement", "Le tableau des comptes affiche maintenant les rendements Modified Dietz sur 3M / 1A / depuis création, avec le rendement non-ajusté côte-à-côte", "Pour suivre un compte titre par titre, créez-le détaillé ou ouvrez son menu d'actions → « Détailler en titres » ; aux snapshots suivants, ajoutez chaque valeur mobilière avec sa quantité, son cours et son coût d'acquisition (la valeur du compte = la somme des titres)", "Pour éditer un snapshot existant, cliquez sur son point dans le graphique ou utilisez le sélecteur de date — la page s'ouvre en mode édition. Vous pouvez aussi corriger la date : changez-la puis enregistrez, le snapshot est déplacé avec ses lignes (message d'alerte si la date cible est déjà prise)", "Pour supprimer un snapshot, cliquez « Supprimer » dans son éditeur et re-saisissez la date pour confirmer" ], "tips": [ "Saisissez vos snapshots à un rythme régulier (mensuel ou trimestriel) — la qualité des rendements dépend de la régularité", "Le rendement non-ajusté à droite vous permet de voir « valeur du compte » vs « vraie performance » : la différence vient des apports, pas de la performance", "Les marqueurs verticaux du graphique aident à lire les sauts de valeur : un saut suivi d'un marqueur vert n'est pas une « performance », c'est un dépôt", "Si vous tentez de supprimer une transaction liée à un compte de bilan, l'app vous demande de la délier d'abord — cette friction préserve la reproductibilité de vos rendements passés", "L'avertissement « bilan pas à jour » apparaît si votre dernier snapshot remonte à plus de 60 jours", "Gain latent ≠ rendement : le gain latent (valeur − coût d'acquisition) mesure votre plus-value depuis l'achat, le rendement Modified Dietz mesure la performance en tenant compte du timing de vos apports — les deux s'affichent sur un compte détaillé. Ajustez le coût d'acquisition après un achat/vente, sinon le gain latent dérive", "(À venir Phase 5) Récupération automatique des prix pour Actions/Crypto via un proxy privé (premium-only) qui anonymise votre requête — la saisie manuelle reste toujours disponible", "Basculez l'axe du graphique empilé entre « par classe d'actif » et « par enveloppe » pour lire les deux faces du patrimoine. Note : un snapshot saisi avant la séparation classe/enveloppe apparaît sous « Autres » sur l'axe par classe d'actif (les ex-types CELI/REER sont devenus des enveloppes) — c'est attendu, l'axe par enveloppe retrouve bien vos CELI/REER, vos montants ne changent pas" ] }, "settings": { "title": "Paramètres", "overview": "Configurez les préférences de l'application, vérifiez les mises à jour, accédez au guide utilisateur et gérez vos données avec les outils d'export/import.", "features": [ "Affichage de la version de l'application", "Guide d'utilisation complet accessible directement depuis les paramètres", "Vérification automatique des mises à jour avec installation en un clic", "Journaux de l'application (logs) consultables avec filtres par niveau, copie et effacement", "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)", "Réaffichage du parcours de démarrage (Paramètres → Utilisateurs) quand il a été masqué" ], "steps": [ "Cliquez sur Guide d'utilisation pour accéder à la documentation complète", "Cliquez sur Vérifier les mises à jour pour voir si une nouvelle version est disponible", "Consultez la section Journaux pour voir les logs de l'application — filtrez par niveau (Tout, Error, Warn, Info), copiez ou effacez", "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", "Pour revoir le parcours de démarrage après l'avoir masqué, ouvrez Paramètres → Utilisateurs et cliquez sur « Afficher la liste de démarrage » : le parcours réapparaît en haut des pages de ce profil, et un message le confirme. Le bouton est visible dès que le parcours est masqué, même depuis le bandeau de cette page" ], "tips": [ "Les mises à jour ne remplacent que le programme — votre base de données n'est jamais modifiée", "Changez la langue de l'application via le sélecteur de langue dans la barre latérale", "Exportez régulièrement pour garder une sauvegarde de vos données", "Le guide d'utilisation peut être imprimé ou exporté en PDF via le bouton Imprimer", "Les journaux persistent pendant la session — ils survivent à un rafraîchissement de la page", "En cas de problème, copiez les journaux et joignez-les à votre signalement", "L'application ne contacte un serveur que pour les mises à jour, la connexion Maximus, le feedback, la licence (activation et vérification) et les cours du marché. Une seule requête part d'elle-même, au démarrage et à la saisie d'une clé : la vérification de la licence, au plus une fois par 24 heures pour une même clé et seulement si une clé est enregistrée. Aucune télémétrie" ] }, "editions": { "title": "Éditions", "overview": "Simpl'Résultat existe en trois éditions — Gratuite, Base et Premium. L'édition détermine quels modules sont accessibles ; elle ne touche jamais à vos données, qui restent locales et complètes quelle que soit l'édition active.", "features": [ "Gratuite — Tableau de bord, Import CSV, Transactions, Catégories, rapport Tendances (et le hub Rapports), export/import chiffré et journal des modifications, avec un profil", "Base — tout de la Gratuite, plus Budget, Ajustements, les rapports avancés (Faits saillants, Comparables, Analyse par catégorie, Cartes), les profils multiples et les mises à jour automatiques", "Premium — tout de la Base, plus le module Bilan complet (patrimoine, détail par titre, cours du marché)", "Les modules au-dessus de votre édition restent visibles mais verrouillés : cadenas dans la barre latérale et sur les tuiles de rapports — les ouvrir affiche l'écran de déverrouillage" ], "steps": [ "Repérez le cadenas dans la barre latérale ou sur les tuiles du hub Rapports : il marque les modules au-dessus de votre édition", "Cliquez sur un module verrouillé pour voir l'édition requise", "Pour acheter l'édition Base, cliquez sur « Obtenir Base » : la page produit s'ouvre dans votre navigateur (Premium n'est pas encore offert en ligne)", "Une fois votre clé de licence en main, cliquez sur « J'ai déjà une clé » (ou allez dans Paramètres → Utilisateurs) et entrez-la", "Les modules se déverrouillent immédiatement — aucune réinstallation ni redémarrage nécessaire" ], "tips": [ "Le verrouillage n'est jamais destructif : si votre édition baisse (clé expirée, invalide, révoquée ou retirée), les données des modules verrouillés — budgets, ajustements, snapshots de bilan, profils — sont intégralement conservées et réapparaissent dès qu'une clé valide est entrée", "En édition Gratuite, votre profil actif reste toujours accessible — seuls la création d'un profil supplémentaire et le passage à un autre profil sont verrouillés", "La clé de licence s'applique à toute la machine, pas à un profil : elle déverrouille les modules pour tous les profils du poste", "En édition Gratuite, les mises à jour automatiques sont verrouillées : la carte Mises à jour (Paramètres → Système) propose de télécharger la dernière version depuis la page produit, et l'installation manuelle reste gratuite", "La carte Licence (Paramètres → Utilisateurs) affiche votre édition et l'échéance de la clé ; une clé valide pour plus de 50 ans indique « Sans échéance »", "Activer une machine la lie à votre clé auprès du serveur de licences ; cela ne sert qu'aux cours du marché du Bilan (Premium), votre édition n'en dépend jamais. Après une réinstallation, un changement d'ordinateur, l'enregistrement d'une autre clé ou l'expiration de l'activation, la carte affiche « Non activée » : cliquez sur « Activer ». L'application retire aussi d'elle-même une activation qui ne sert plus, et la carte affiche alors « Non activée » : quand la récupération d'un cours est refusée parce que l'activation de cette machine appartient à une licence révoquée (par exemple celle d'une clé remboursée, restée à côté de votre clé actuelle depuis une version antérieure), et quand la liste des machines ne compte pas cette machine (désactivée depuis un autre ordinateur, par exemple). Chacun de ces retraits est inscrit dans les journaux (Paramètres → Système)", "L'activation envoie au serveur de licences votre clé, le nom de cet ordinateur et un identifiant dérivé, propre à Simpl'Résultat, à la place de l'identifiant machine du système", "La liste des machines indique combien sont activées sur le nombre permis par votre clé ; désactivez-en une pour libérer une place", "Si le serveur de licences signale que votre clé a été révoquée, par exemple après un remboursement, l'application repasse en édition Gratuite et le reste d'une session à l'autre : la carte Licence, les écrans verrouillés et la carte Mises à jour l'indiquent. Vos données sont conservées, et une autre clé valide redonne son édition", "Quand une clé est enregistrée, l'application vérifie auprès du serveur de licences qu'elle n'a pas été révoquée : au démarrage et dès que vous entrez une clé, au plus une fois par 24 heures pour une même clé, en envoyant le produit et la clé, rien d'autre. La vérification d'une clé entrée se fait en arrière-plan : la carte Licence rend la main tout de suite, et une clé révoquée affiche son édition une à deux secondes avant de repasser en Gratuite. Sans clé enregistrée, aucune requête ne part ; si le serveur ne répond pas, rien ne change. Chaque vérification est inscrite dans les journaux (Paramètres → Système). La vérification continue après une révocation, tant que la clé reste enregistrée : une correction faite par le serveur de licences est ainsi reprise au démarrage suivant. Pour arrêter cette vérification, retirez la clé (« Retirer la clé » dans la carte Licence) ; l'enregistrement d'une autre clé arrête aussi l'envoi de la précédente", "« Retirer la clé » (carte Licence) retire votre clé de cet ordinateur, après confirmation : les modules de votre édition se verrouillent et vos données sont conservées. Si cette machine est activée, sa place est d'abord libérée sur le serveur de licences ; hors ligne, l'application demande s'il faut retirer la clé quand même, et la place reste alors occupée jusqu'à ce que vous la libériez depuis un autre ordinateur où la clé est enregistrée. Une clé révoquée retirée puis entrée de nouveau reste révoquée" ] } }, "profile": { "title": "Profils", "select": "Sélectionnez un profil", "create": "Créer un profil", "edit": "Modifier le profil", "delete": "Supprimer le profil", "deleteConfirm": "Supprimer ce profil et toutes ses données ? Cette action est irréversible.", "name": "Nom du profil", "namePlaceholder": "Entrez un nom...", "color": "Couleur", "pin": "NIP", "pinSet": "NIP défini", "pinNotSet": "Aucun NIP", "setPin": "Définir un NIP", "removePin": "Supprimer le NIP", "enterPin": "Entrez votre NIP", "wrongPin": "NIP incorrect. Réessayez.", "switchProfile": "Changer de profil", "manageProfiles": "Gérer les profils", "default": "Par défaut" }, "error": { "title": "Une erreur est survenue", "startupTimeout": "La connexion à la base de données a expiré", "unexpectedError": "Une erreur inattendue s'est produite", "showDetails": "Afficher les détails", "hideDetails": "Masquer les détails", "refresh": "Actualiser", "checkUpdate": "Vérifier les mises à jour", "updateAvailable": "Mise à jour disponible : v{{version}}", "upToDate": "L'application est à jour", "updateNotEntitled": "Les mises à jour automatiques sont disponibles avec l'édition Base.", "contactUs": "Nous contacter", "contactEmail": "Envoyez un email à", "reportIssue": "Signaler un problème" }, "common": { "save": "Enregistrer", "cancel": "Annuler", "delete": "Supprimer", "edit": "Modifier", "add": "Ajouter", "search": "Rechercher", "filter": "Filtrer", "loading": "Chargement...", "noResults": "Aucun résultat", "confirm": "Confirmer", "language": "Langue", "total": "Total", "darkMode": "Mode sombre", "lightMode": "Mode clair", "close": "Fermer", "underConstruction": "En construction", "back": "Retour" }, "license": { "title": "Licence", "currentEdition": "Édition actuelle", "expiresAt": "Expire le", "noExpiry": "Sans échéance", "enterKey": "Entrer une clé de licence", "keyPlaceholder": "SR-BASE-...", "activate": "Activer", "purchase": "Acheter Simpl'Résultat", "removeKey": { "button": "Retirer la clé", "removing": "Retrait...", "confirmValid": "Retirer la clé de licence de cet ordinateur ?\n\nLes modules de votre édition se verrouillent et l'application repasse en édition Gratuite. Vos données sont conservées et réapparaissent dès qu'une clé valide est entrée.", "confirmActivated": "Retirer la clé de licence de cet ordinateur ?\n\nLa place de cette machine est d'abord libérée sur le serveur de licences. Les modules de votre édition se verrouillent et l'application repasse en édition Gratuite ; vos données sont conservées et réapparaissent dès qu'une clé valide est entrée.", "confirmRevoked": "Retirer la clé révoquée de cet ordinateur ?\n\nL'application cesse de l'envoyer au serveur de licences pour vérification (au plus une fois par 24 heures). Vos données sont conservées.", "confirmWithoutRelease": "La place de cette machine n'a pas pu être libérée. {{reason}}\n\nRetirer la clé quand même ? La place restera occupée sur le serveur de licences ; vous pourrez la libérer depuis la liste des machines, sur un autre ordinateur où la clé est enregistrée.", "failed": "La clé n'a pas été retirée. {{reason}}" }, "editions": { "free": "Gratuite", "base": "Base", "premium": "Premium" }, "machines": { "title": "Machines", "count": "{{count}}/{{limit}} machines activées", "activating": "Activation...", "activated": "Activée", "notActivated": "Non activée", "deactivate": "Désactiver", "deactivating": "Désactivation...", "thisMachine": "Cette machine", "noMachines": "Aucune machine activée" }, "errors": { "licenseNotFound": "Cette clé de licence est introuvable sur le serveur de licences.", "licenseRevoked": "Cette clé de licence a été révoquée.", "licenseExpired": "Cette clé de licence est expirée.", "machineLimitReached": "Le nombre maximal de machines pour cette licence est atteint. Désactivez une machine dans la liste pour libérer une place.", "noActiveActivation": "Cette machine n'est pas activée pour cette licence.", "invalidInput": "La requête envoyée au serveur de licences est invalide.", "invalidPrefix": "Une clé de licence commence par SR-BASE- ou SR-PREMIUM-. Vérifiez qu'elle a été copiée en entier.", "invalidSignature": "Cette clé de licence n'a pas pu être vérifiée. Vérifiez qu'elle a été copiée en entier ; si c'est le cas, elle n'a pas été émise par le serveur de licences de Simpl'Résultat.", "malformed": "Cette clé de licence est illisible. Vérifiez qu'elle a été copiée en entier, sans espace ni retour à la ligne.", "unknownEdition": "Cette clé de licence désigne une édition que cette version de l'application ne connaît pas. Mettez l'application à jour, puis entrez la clé de nouveau.", "rateLimit_one": "Trop de tentatives. Réessayez dans {{count}} seconde.", "rateLimit_other": "Trop de tentatives. Réessayez dans {{count}} secondes.", "network": "Impossible de joindre le serveur de licences. Vérifiez votre connexion Internet.", "invalidResponse": "Le serveur de licences a renvoyé une réponse inattendue.", "server": "Le serveur de licences a rencontré une erreur. Réessayez plus tard.", "noLicenseStored": "Aucune clé de licence n'est enregistrée sur cette machine.", "storage": "Impossible de lire ou d'écrire le fichier de licence.", "internal": "Erreur interne de l'application.", "unknown": "Une erreur inattendue est survenue." } }, "upsell": { "title": "Fonctionnalité {{tier}}", "features": { "budget": "Planifiez des budgets mensuels par catégorie et comparez-les à vos dépenses réelles.", "adjustments": "Ajoutez des écritures manuelles et fractionnez des transactions sur plusieurs catégories.", "reports-advanced": "Explorez les rapports avancés : Faits saillants, Comparables, Analyse par catégorie et Cartes.", "multi-profile": "Créez plusieurs profils, chacun avec sa base de données locale et sa protection par NIP.", "balance": "Suivez votre patrimoine : comptes, instantanés, détail par titre et cours du marché." }, "ctaGet": "Obtenir {{tier}}", "premiumNotForSale": "Premium n'est pas encore offert en ligne.", "ctaHaveKey": "J'ai déjà une clé", "revoked": "Votre clé de licence a été révoquée : l'édition Gratuite s'applique." }, "account": { "title": "Compte Maximus", "optional": "Optionnel", "description": "Le compte sert à retrouver vos licences sur lacompagniemaximus.com et à vous identifier dans vos rétroactions. Les éditions Base et Premium viennent de la clé de licence, pas du compte.", "signIn": "Se connecter", "signOut": "Se déconnecter", "connected": "Connecté", "tokenStore": { "fallback": { "title": "Stockage des tokens en clair", "description": "Vos jetons d'authentification sont stockés dans un fichier local protégé par les permissions du système. Pour une protection renforcée via le trousseau du système d'exploitation, vérifiez que le service de trousseau est disponible (GNOME Keyring, KWallet, ou équivalent)." } } }, "feedback": { "button": "Envoyer un feedback", "logsHeading": "Logs récents :", "dialog": { "title": "Votre avis", "placeholder": "Décrivez votre suggestion, commentaire ou problème...", "submit": "Envoyer", "sending": "Envoi...", "cancel": "Annuler" }, "checkbox": { "context": "Inclure le contexte de navigation (page, thème, écran, version)", "logs": "Inclure les derniers logs d'erreur", "identify": "M'identifier avec mon compte Maximus" }, "toast": { "success": "Merci pour votre feedback", "error": { "429": "Trop de feedbacks envoyés récemment. Réessayez plus tard.", "400": "Feedback invalide. Vérifiez le contenu.", "generic": "Erreur lors de l'envoi. Réessayez plus tard." } }, "consent": { "title": "Envoi de feedback", "body": "Votre feedback sera envoyé à feedback.lacompagniemaximus.com pour que nous puissions améliorer l'application. Cette opération nécessite une connexion Internet et constitue une exception au fonctionnement 100 % local de l'application.", "accept": "J'accepte" } }, "categoriesSeed": { "revenus": { "root": "Revenus", "emploi": { "root": "Emploi", "paie": "Paie régulière", "primes": "Primes & bonus", "autonome": "Travail autonome" }, "gouvernemental": { "root": "Gouvernemental", "remboursementImpot": "Remboursement impôt", "allocations": "Allocations familiales", "credits": "Crédits TPS/TVQ", "assuranceEmploi": "Assurance-emploi / RQAP" }, "placement": { "root": "Revenus de placement", "interets": "Intérêts & dividendes", "capital": "Gains en capital", "locatifs": "Revenus locatifs" }, "autres": "Autres revenus" }, "alimentation": { "root": "Alimentation", "epicerie": { "root": "Épicerie & marché", "reguliere": "Épicerie régulière", "boucherie": "Boucherie & poissonnerie", "boulangerie": "Boulangerie & pâtisserie", "depanneur": "Dépanneur", "marche": "Marché & produits spécialisés" }, "restauration": { "root": "Restauration", "restaurant": "Restaurant", "cafe": "Café & boulangerie rapide", "fastfood": "Restauration rapide", "livraison": "Livraison à domicile", "cantine": "Cantine & cafétéria" } }, "logement": { "root": "Logement", "habitation": { "root": "Habitation principale", "loyer": "Loyer", "hypotheque": "Hypothèque", "taxes": "Taxes municipales & scolaires", "copropriete": "Charges de copropriété" }, "services": { "root": "Services publics", "electricite": "Électricité", "gaz": "Gaz naturel", "chauffage": "Chauffage (mazout, propane)", "eau": "Eau & égouts" }, "communications": { "root": "Communications", "internet": "Internet résidentiel", "mobile": "Téléphonie mobile", "residentielle": "Téléphonie résidentielle", "streamingTv": "Câblodistribution & streaming TV" }, "entretien": { "root": "Entretien & réparations", "general": "Entretien général", "renovations": "Rénovations", "materiaux": "Matériaux & outils", "paysager": "Aménagement paysager" }, "assurance": "Assurance habitation" }, "menage": { "root": "Ménage & ameublement", "ameublement": { "root": "Ameublement", "meubles": "Meubles", "electromenagers": "Électroménagers", "decoration": "Décoration" }, "fournitures": { "root": "Fournitures ménagères", "entretien": "Produits d'entretien", "literie": "Literie & linge de maison", "vaisselle": "Vaisselle & ustensiles" }, "services": { "root": "Services domestiques", "nettoyage": "Ménage & nettoyage", "buanderie": "Buanderie & pressing" } }, "vetements": { "root": "Vêtements & chaussures", "adultes": "Vêtements adultes", "enfants": "Vêtements enfants", "chaussures": "Chaussures", "accessoires": "Accessoires & bijoux" }, "transport": { "root": "Transport", "vehicule": { "root": "Véhicule personnel", "achat": "Achat / location véhicule", "essence": "Essence", "entretien": "Entretien & réparations auto", "immatriculation": "Immatriculation & permis", "stationnement": "Stationnement & péages", "assurance": "Assurance auto" }, "public": { "root": "Transport public", "autobus": "Autobus & métro", "train": "Train de banlieue", "taxi": "Taxi & covoiturage" }, "voyages": { "root": "Voyages longue distance", "avion": "Avion", "trainAutocar": "Train & autocar", "hebergement": "Hébergement", "location": "Location véhicule voyage" } }, "sante": { "root": "Santé & soins personnels", "medicaux": { "root": "Soins médicaux", "pharmacie": "Pharmacie", "consultations": "Consultations médicales", "dentiste": "Dentiste & orthodontiste", "optometrie": "Optométrie & lunettes", "therapies": "Thérapies (physio, psycho, etc.)", "assurance": "Assurance santé complémentaire" }, "personnels": { "root": "Soins personnels", "coiffure": "Coiffure & esthétique", "soins": "Produits de soins corporels" }, "assuranceVie": "Assurance vie & invalidité" }, "loisirs": { "root": "Loisirs, formation & lecture", "divertissement": { "root": "Divertissement", "cinema": "Cinéma & spectacles", "jeux": "Jeux vidéo & consoles", "streamingVideo": "Streaming vidéo", "streamingMusique": "Streaming musique & audio", "jouets": "Jouets & passe-temps" }, "sports": { "root": "Sports & plein air", "abonnements": "Abonnements sportifs", "equipement": "Équipement sportif", "parcs": "Parcs & activités plein air" }, "formation": { "root": "Formation & éducation", "scolarite": "Scolarité (frais)", "materiel": "Matériel scolaire", "cours": "Cours & certifications", "abonnements": "Abonnements professionnels" }, "lecture": { "root": "Lecture & médias", "livres": "Livres", "journaux": "Journaux & magazines" }, "animaux": { "root": "Animaux de compagnie", "nourriture": "Nourriture & accessoires animaux", "veterinaire": "Vétérinaire" } }, "consommation": { "root": "Boissons, tabac & cannabis", "alcool": "Alcool (SAQ, microbrasseries)", "cannabis": "Cannabis (SQDC)", "tabac": "Tabac" }, "finances": { "root": "Finances & obligations", "fraisBancaires": { "root": "Frais bancaires", "compte": "Frais de compte", "interets": "Intérêts & frais de crédit", "change": "Frais de change" }, "impots": { "root": "Impôts & taxes", "federal": "Impôt fédéral", "provincial": "Impôt provincial", "acomptes": "Acomptes provisionnels" }, "dons": { "root": "Dons & cotisations", "charite": "Dons de charité", "professionnelles": "Cotisations professionnelles", "syndicales": "Cotisations syndicales" }, "cadeaux": "Cadeaux", "cash": "Retrait cash", "divers": "Achats divers non catégorisés" }, "transferts": { "root": "Transferts & placements", "epargne": { "root": "Épargne & placements", "reer": "REER", "celi": "CELI", "reee": "REEE", "nonEnregistre": "Compte non-enregistré", "urgence": "Fonds d'urgence" }, "dette": { "root": "Remboursement de dette", "carteCredit": "Paiement carte crédit", "etudiant": "Remboursement prêt étudiant", "personnel": "Remboursement prêt perso" }, "internes": "Transferts internes" }, "guidePage": { "title": "Guide des catégories standard", "subtitle": "Inspiré de la classification IPC de Statistique Canada", "backToSettings": "Retour aux paramètres", "intro": { "title": "Pourquoi cette structure ?", "body": "La classification officielle des dépenses des ménages au Canada (Statistique Canada, panier IPC) identifie les grandes composantes du budget d'un ménage. Cette structure permet de couvrir l'ensemble des flux financiers d'un ménage québécois typique, de comparer vos dépenses à des références externes et d'obtenir des rapports plus lisibles." }, "counter": "{{roots}} catégories racines · {{subcategories}} sous-catégories · {{leaves}} feuilles · {{total}} catégories au total", "searchPlaceholder": "Rechercher une catégorie...", "expandAll": "Tout déplier", "collapseAll": "Tout replier", "print": "Exporter en PDF", "printHint": "Utilisez la boîte de dialogue d'impression pour enregistrer en PDF.", "noResults": "Aucune catégorie ne correspond à votre recherche.", "tooltip": { "key": "Clé i18n", "type": "Type", "id": "Identifiant" }, "type": { "income": "Revenu", "expense": "Dépense", "transfer": "Transfert" }, "legend": { "title": "Légende", "root": "Catégorie racine", "subcategory": "Sous-catégorie", "leaf": "Feuille (catégorie finale)" } }, "migration": { "customParent": "Catégories personnalisées (migration)", "pageTitle": "Migrer vers la structure standard", "pageSubtitle": "Trois étapes : découvrir, simuler, consentir. Aucune donnée n'est modifiée avant l'étape finale.", "backToSettings": "Retour aux paramètres", "stepper": { "ariaLabel": "Progression de la migration", "discover": "Découvrir", "simulate": "Simuler", "consent": "Consentir" }, "alreadyMigrated": { "title": "Votre profil utilise déjà la structure standard", "body": "Aucune migration à effectuer. Si vous avez récemment migré, vous pouvez consulter la sauvegarde depuis les paramètres." }, "discover": { "title": "Étape 1 · Découvrir la nouvelle structure", "subtitle": "Prenez le temps d'explorer l'arborescence. Vous pouvez revenir plus tard sans risque.", "intro": { "title": "Pourquoi cette structure ?", "body": "La classification officielle des dépenses des ménages au Canada (Statistique Canada, panier IPC) identifie les grandes composantes du budget d'un ménage. Elle couvre 100 % des flux financiers d'un ménage québécois typique et permet des rapports plus lisibles." }, "next": "Continuer vers l'aperçu de migration" }, "simulate": { "title": "Étape 2 · Aperçu de la migration", "subtitle": "Simulation sans écriture. Cliquez sur une ligne pour voir les transactions impactées et, si besoin, choisir une autre cible.", "loadError": "Impossible de charger les données du profil : {{error}}", "needsReview": "À réviser", "chooseTarget": "Choisir une cible...", "editTargetAria": "Modifier la cible pour {{category}}", "txCount_one": "{{count}} transaction", "txCount_other": "{{count}} transactions", "unresolvedWarning_one": "Vous avez {{count}} décision à prendre avant de pouvoir continuer.", "unresolvedWarning_other": "Vous avez {{count}} décisions à prendre avant de pouvoir continuer.", "header": { "current": "Catégorie actuelle", "match": "Correspondance", "target": "Cible v1 proposée" }, "confidence": { "high": "Haute", "medium": "Moyenne", "low": "Basse", "none": "À réviser" }, "reason": { "keyword": "Basée sur un mot-clé", "supplier": "Basée sur un fournisseur", "default": "Mapping par défaut", "review": "Révision manuelle requise", "preserved": "Préservée" }, "stats": { "total": "Total" }, "preserved": { "title_one": "{{count}} catégorie personnalisée", "title_other": "{{count}} catégories personnalisées", "body": "Ces catégories n'ont pas d'équivalent standard. Choisissez une cible pour fusionner une catégorie : ses transactions, budgets, mots-clés et fournisseurs y sont réassignés et la catégorie disparaît. Laissez le champ vide pour la conserver telle quelle sous « Catégories personnalisées (migration) »." }, "panel": { "title": "Transactions impactées", "subtitle_one": "{{count}} transaction attachée à cette catégorie", "subtitle_other": "{{count}} transactions attachées à cette catégorie", "close": "Fermer le panneau", "noTransactions": "Aucune transaction attachée à cette catégorie.", "overflow_one": "... et {{count}} autre transaction", "overflow_other": "... et {{count}} autres transactions", "willMapTo": "Sera réassignée à : {{target}}", "noTarget": "Aucune cible choisie — une décision est requise." }, "back": "Revenir à la découverte", "next": "Toutes décisions prises · Continuer" }, "consent": { "title": "Étape 3 · Confirmation et sauvegarde", "subtitle": "Une copie chiffrée de votre profil sera créée AVANT tout changement. Vous pourrez la rétablir à tout moment.", "backup": { "title": "Sauvegarde automatique avant migration", "body": "Simpl'Résultat crée une copie vérifiée de votre profil dans le dossier Documents. Le nom du fichier contient la date et l'heure — aucune donnée ne quitte votre appareil.", "location": "Emplacement : ~/Documents/Simpl-Resultat/backups/" }, "password": { "label": "NIP du profil", "help": "Votre NIP est utilisé pour chiffrer la sauvegarde (AES-256-GCM). Il ne quitte jamais votre appareil." }, "checklist": { "title": "Confirmez que :", "item1": "J'ai compris que cette opération modifie définitivement mes catégories.", "item2": "Je confirme qu'une sauvegarde vérifiée sera créée avant tout changement.", "item3": "Je pourrai rétablir la sauvegarde à tout moment pendant 90 jours." }, "back": "Revenir", "confirm": "Créer la sauvegarde et migrer" }, "running": { "title": "Migration en cours...", "subtitle": "Ne fermez pas l'application avant la fin de l'opération.", "step1": "Étape 1 · Création de la sauvegarde", "step2": "Étape 2 · Vérification de la sauvegarde (checksum SHA-256)", "step3": "Étape 3 · Application de la migration (transaction SQL)", "step4": "Étape 4 · Validation et rafraîchissement" }, "success": { "title": "Migration réussie", "subtitle": "Votre profil utilise maintenant la structure standard (IPC Statistique Canada).", "backupLabel": "Votre sauvegarde est ici :", "restoreHint": "Vous pourrez rétablir cette sauvegarde à tout moment depuis Paramètres > Catégories pendant 90 jours.", "stats": { "inserted": "Catégories ajoutées", "transactions": "Transactions migrées", "keywords": "Mots-clés migrés", "budgets": "Budgets migrés" }, "backToDashboard": "Aller au tableau de bord", "viewCategories": "Voir mes catégories" }, "error": { "title": "La migration n'a pas pu être appliquée", "subtitle": "Aucun changement n'a été enregistré. Votre profil est dans l'état exact où il se trouvait avant l'opération.", "rollbackNote": "Si une sauvegarde partielle a été créée, elle reste disponible dans votre dossier Documents — vous pouvez la supprimer manuellement si elle ne vous sert pas.", "retry": "Revenir à l'étape de consentement", "backToSettings": "Retour aux paramètres", "backup": { "missing_password": "NIP manquant — la sauvegarde d'un profil protégé nécessite le NIP.", "documents_dir_unavailable": "Impossible de localiser le dossier Documents.", "permission_denied": "Permissions insuffisantes pour écrire dans le dossier de sauvegarde.", "disk_space": "Espace disque insuffisant pour créer la sauvegarde.", "create_dir_failed": "Impossible de créer le dossier de sauvegarde.", "write_failed": "Échec d'écriture du fichier de sauvegarde.", "read_back_failed": "Impossible de relire le fichier de sauvegarde pour vérification.", "verification_mismatch": "La vérification de la sauvegarde a échoué (checksum invalide ou fichier corrompu)." } } } }, "balance": { "overview": { "title": "Bilan", "latestTotal": "Valeur nette actuelle", "asOf": "au {{date}}", "noSnapshots": "Aucun snapshot (relevé daté de votre patrimoine) pour l'instant. Créez-en un pour suivre l'évolution de votre bilan.", "vsPrevious": "vs précédent", "newSnapshot": "Nouveau snapshot", "staleWarning": "Le dernier snapshot date de plus de {{days}} jours. Pensez à le mettre à jour pour suivre fidèlement l'évolution de votre bilan.", "latestValue": "Dernière valeur", "periodDelta": "Δ% sur la période", "noAccounts": "Aucun compte actif. Commencez par créer un compte de bilan.", "accountsTitle": "Comptes" }, "period": { "legend": "Période d'analyse", "3M": "3 mois", "6M": "6 mois", "1A": "1 an", "3A": "3 ans", "all": "Tout" }, "chart": { "empty": "Aucun snapshot pour cette période.", "modeLegend": "Mode d'affichage du graphique", "axisLegend": "Axe de regroupement du graphique empilé", "totalSeriesLabel": "Total", "mode": { "line": "Ligne", "stacked": "Empilé par type" }, "axis": { "byAssetClass": "Par classe d'actif", "byVehicle": "Par enveloppe" } }, "hub": { "getStarted": "Commencer", "manage": "Gérer", "accounts": { "title": "Gérer les comptes", "description": "Créez, modifiez ou archivez vos comptes et vos types d'actif." }, "snapshot": { "title": "Nouveau snapshot", "description": "Enregistrez le solde de chaque compte à une date donnée." } }, "landing": { "empty": { "title": "Suivez votre valeur nette", "subtitle": "Commencez par créer un compte : compte chèque, CELI, REER, actions, crypto, etc." }, "noSnapshot": { "title": "Saisissez votre premier snapshot", "subtitle": "Vos comptes sont prêts. Saisissez un snapshot pour suivre l'évolution de votre valeur nette dans le temps — ou continuez à gérer vos comptes." } }, "starters": { "title": "Comptes de départ", "description": "Voulez-vous ajouter ces 4 comptes courants ? Vous pourrez les renommer ou les archiver à tout moment.", "cta_add": "Ajouter les comptes sélectionnés", "cta_later": "Plus tard", "collision_tooltip": "Déjà présent", "items": { "cash": "Compte chèque", "tfsa": "CELI", "rrsp": "REER", "other": "Compte non-enregistré" }, "errors": { "insert": "Impossible d'ajouter les comptes. Veuillez réessayer." } }, "sidebar": "Bilan", "accountsPage": { "title": "Comptes du bilan", "tabs": { "accounts": "Comptes", "categories": "Types" }, "newAccount": "Nouveau compte", "includeArchived": "Afficher les comptes archivés", "empty": "Aucun compte pour l'instant. Cliquez sur « Nouveau compte » pour commencer." }, "account": { "fields": { "name": "Nom", "category": "Type", "symbol": "Symbole", "currency": "Devise", "status": "Statut", "actions": "Actions" }, "status": { "active": "Actif", "archived": "Archivé" }, "actions": { "archive": "Archiver", "unarchive": "Restaurer" }, "form": { "createTitle": "Nouveau compte", "editTitle": "Modifier le compte", "category": "Type", "noCategory": "(aucun type disponible)", "name": "Nom du compte", "nameRequired": "Le nom est obligatoire.", "symbol": "Symbole", "symbolPricedHint": "optionnel — requis seulement pour la récupération automatique des prix", "symbolPlaceholderSimple": "Optionnel", "symbolPlaceholderPriced": "ex. AAPL, BTC-USD (optionnel)", "notes": "Notes", "currencyMvpNotice": "Au MVP, tous les comptes sont en CAD. Le support multi-devises arrivera dans une version ultérieure.", "save": "Enregistrer", "create": "Créer le compte", "vehicleType": { "label": "Véhicule fiscal", "none": "Aucun", "unregistered": "Non-enregistré", "tfsa": "CELI", "rrsp": "REER", "rrif": "FERR", "fhsa": "CELIAPP", "resp": "REEE", "hint": "Enveloppe fiscale du compte (CELI, REER…). Optionnel — la classe d'actif reste le type." }, "kind": { "label": "Mode de saisie", "simple": "Montant unique", "detailed": "Par titre (valeurs mobilières)", "hint": "Montant unique = un total par snapshot. Par titre = un détail en valeurs mobilières individuelles (quantité × cours).", "detailedCreateHint": "Les nouveaux comptes démarrent en montant unique ; convertissez-en un en « par titre » depuis la liste des comptes." } } }, "category": { "intro": "Les types fournis par l'application (CELI, REER, Liquidités, etc.) ne sont pas supprimables. Vous pouvez en créer de nouveaux pour vos cas particuliers.", "fields": { "name": "Nom", "key": "Clé", "kind": "Mode de saisie", "origin": "Origine", "actions": "Actions" }, "kind": { "simple": "Montant direct", "priced": "Quantité × prix" }, "origin": { "seeded": "Standard", "user": "Personnalisé" }, "actions": { "create": "Nouveau type", "renamePrompt": "Nouveau libellé pour ce type", "deleteConfirm": "Supprimer ce type ? Cette action est irréversible.", "deleteSeedHint": "Les types standard ne peuvent pas être supprimés.", "deleteHasAccountsHint": "Ce type a {{count}} compte(s) lié(s) — archivez ou déplacez-les d'abord." }, "form": { "createTitle": "Nouveau type", "key": "Clé", "keyPlaceholder": "ex. ferr, rpdb", "label": "Libellé", "labelPlaceholder": "ex. FERR, RPDB", "kindLabel": "Mode de saisie", "kindHintSimple": "Saisie d'un montant direct (ex: solde de compte courant).", "kindHintPriced": "Saisie d'une quantité × prix unitaire (ex: actions, cryptomonnaies). Un symbole est optionnel pour les comptes liés (requis seulement pour la récupération automatique des prix).", "simpleOnlyNotice": "Les types cotés (actions, crypto) seront disponibles dans une prochaine version.", "create": "Créer le type", "customLabel": "Libellé", "customLabelPlaceholder": "ex. Mon FERR, Épargne voyage", "customLabelHint": "Nom affiché pour ce type. Laisser vide pour utiliser le libellé par défaut." }, "assetType": { "label": "Type d'actif", "stock": "Action", "crypto": "Crypto", "required": "Sélectionne le type d'actif" }, "error": { "has_accounts": "Impossible de supprimer ce type : {{count}} compte(s) lié(s) ({{names}}). Archivez ou déplacez-les d'abord." }, "cash": "Liquidités", "tfsa": "CELI", "rrsp": "REER", "fund": "Fonds / FNB", "other": "Autre", "stock": "Action", "crypto": "Cryptomonnaie" }, "snapshot": { "page": { "newTitle": "Nouveau snapshot", "editTitle": "Modifier le snapshot", "dateLabel": "Date du snapshot", "dateMovableHint": "Vous pouvez changer la date de ce snapshot. Les valeurs saisies sont conservées et déplacées à la nouvelle date.", "total": "Total saisi", "noAccounts": "Pour saisir un snapshot, créez d'abord au moins un compte. Un compte = où vous tenez votre argent (chèque, CELI, REER, actions, etc.). Un snapshot = la photo de combien il y avait dans chaque compte à une date donnée.", "goToAccounts": "Créer un compte", "prefill": "Pré-remplir depuis le précédent", "prefillTooltip": "Copier les valeurs du snapshot du {{date}}", "prefillNoPrevious": "Aucun snapshot antérieur disponible.", "save": "Enregistrer", "create": "Créer le snapshot", "delete": "Supprimer ce snapshot" }, "editor": { "empty": "Aucun compte actif. Créez un compte avant de saisir un snapshot." }, "line": { "valuePlaceholder": "0,00", "valueLabel": "Valeur pour {{account}}" }, "priced": { "quantity": "Quantité", "quantityLabel": "Quantité pour {{account}}", "quantityPlaceholder": "0", "unitPrice": "Prix unitaire", "unitPriceLabel": "Prix unitaire pour {{account}}", "unitPricePlaceholder": "0,00", "computedValue": "Valeur (calculée)", "computedValueLabel": "Valeur calculée pour {{account}}", "computedValuePlaceholder": "—", "attributionManual": "Manuel", "attributionManualHint": "Valeur saisie manuellement. La récupération automatique des prix arrivera dans une prochaine version." }, "detailed": { "badge": "Par titre", "badgeHint": "Ce compte est détaillé en titres individuels. Sa valeur est la somme de ses positions.", "empty": "Aucune position. Ajoutez un titre pour saisir le contenu de ce compte.", "addTitle": "Ajouter un titre", "removeTitle": "Retirer ce titre", "symbolLabel": "Symbole du titre", "symbolPlaceholder": "Symbole", "bookCostLabel": "Coût d'acquisition pour {{account}}", "bookCostPlaceholder": "0,00", "latentGainLabel": "Gain latent pour {{account}}", "latentGainNA": "—", "col": { "title": "Titre", "quantity": "Quantité", "unitPrice": "Cours", "value": "Valeur", "bookCost": "Coût d'acquisition", "latentGain": "Gain latent" }, "picker": { "placeholder": "Symbole (ex. AAPL, BTC)", "empty": "Tapez un symbole pour le créer.", "create": "Créer « {{symbol}} »", "assetTypeLabel": "Type :", "assetType": { "stock": "Action", "crypto": "Crypto" } }, "importCsv": { "button": "Importer un CSV", "title": "Importer des titres depuis un CSV", "intro": "Importez les positions de « {{account}} » depuis un fichier CSV (relevé de courtier, exportation). Les colonnes sont détectées automatiquement ; ajustez-les au besoin.", "selectFile": "Choisir un fichier CSV", "loading": "Lecture du fichier…", "hint": "Formats acceptés : .csv, .txt. Le séparateur et l'encodage sont détectés automatiquement.", "detectError": "Impossible de détecter les colonnes dans ce fichier. Vérifiez qu'il s'agit d'un CSV de titres valide.", "readError": "Impossible de lire le fichier.", "retry": "Réessayer", "symbolColumn": "Colonne du symbole", "quantityColumn": "Colonne de la quantité", "priceColumn": "Colonne du cours (facultatif)", "bookCostColumn": "Colonne du coût d'acquisition (facultatif)", "noColumn": "— Aucune —", "noPriceNote": "Aucune colonne de cours : les titres seront importés sans prix. Vous pourrez le récupérer ou le saisir ensuite.", "summary": "{{count}} titre(s) seront importé(s).", "import": "Importer" } }, "delete": { "title": "Supprimer ce snapshot ?", "body": "Cette action supprime définitivement le snapshot du {{date}} et toutes ses lignes. Pour confirmer, retapez la date ci-dessous.", "confirmLabel": "Retapez la date {{date}} pour confirmer", "confirm": "Supprimer définitivement" } }, "errors": { "currency_unsupported": "Seul le CAD est supporté au MVP.", "category_seed_protected": "Les types standard ne peuvent pas être supprimés.", "category_has_accounts": "Impossible de supprimer un type avec des comptes liés. Déplacez ou archivez d'abord les comptes liés.", "category_not_found": "Type introuvable.", "account_not_found": "Compte introuvable.", "name_required": "Le nom est obligatoire.", "kind_invalid": "Mode de saisie invalide.", "snapshot_date_required": "Une date au format AAAA-MM-JJ est obligatoire.", "snapshot_date_taken": "Un snapshot existe déjà à cette date — modifiez-le au lieu d'en créer un nouveau.", "snapshot_date_exists": "Un autre snapshot existe déjà à cette date. Choisissez une date libre ou modifiez le snapshot existant.", "snapshot_not_found": "Snapshot introuvable.", "snapshot_value_invalid": "Une valeur saisie n'est pas un nombre valide.", "snapshot_priced_unsupported": "Les comptes cotés (actions/crypto) seront supportés dans une prochaine version.", "snapshot_priced_quantity_required": "La quantité est obligatoire pour les comptes cotés.", "snapshot_priced_unit_price_required": "Le prix unitaire est obligatoire pour les comptes cotés.", "snapshot_priced_value_mismatch": "La valeur saisie ne correspond pas à quantité × prix unitaire.", "snapshot_simple_must_be_scalar": "Une valeur simple ne doit pas comporter de quantité ou de prix.", "vehicle_type_invalid": "Véhicule fiscal invalide." }, "returns": { "partialTooltip": "Rendement partiel : un snapshot manque pour calculer la performance sur cette période.", "noTransfersWarning": "Aucun transfert lié — la performance peut être faussée si des apports n'ont pas été tagués." }, "accountsTable": { "return3m": "3M", "return3mTooltip": "Rendement Modified Dietz sur les 90 derniers jours.", "return1y": "1A", "return1yTooltip": "Rendement Modified Dietz sur les 365 derniers jours.", "sinceCreation": "Depuis création", "sinceCreationTooltip": "Rendement Modified Dietz depuis le premier snapshot.", "unadjusted": "Non ajusté", "unadjustedTooltip": "Rendement simple (V_fin − V_début) / V_début, sans pondération des apports.", "toggleReturns": { "show": "Afficher les rendements", "hide": "Masquer les rendements" } }, "latentGain": { "column": "Gain latent", "tooltip": "Gain latent d'un compte détaillé : valeur actuelle moins le coût d'acquisition, en dollars et en pourcentage. Affiché « — » quand le coût d'acquisition est inconnu.", "totalLabel": "Gain latent", "na": "—", "partial": "Partiel : certaines positions n'ont pas de coût d'acquisition saisi et sont exclues du pourcentage.", "drilldown": { "expand": "Afficher les titres", "collapse": "Masquer les titres", "security": "Titre", "value": "Valeur", "gain": "Gain latent" }, "summary": { "title": "Répartition du gain latent", "byClass": "Par classe d'actif", "byVehicle": "Par enveloppe" } }, "vehicle": { "none": "Sans enveloppe" }, "detailWizard": { "action": "Détailler en titres", "title": "Détailler « {{account}} » en titres", "intro": "Ce compte passera en saisie détaillée par titre. Les titres se saisissent au prochain instantané (snapshot) normal — cet assistant ne capture aucun titre maintenant.", "pointFrozen": "L'historique agrégé passé reste figé en lecture seule : les anciens instantanés conservent leur valeur globale.", "pointNextSnapshot": "À partir d'aujourd'hui, chaque nouvel instantané exigera le détail par titre (avec coût d'acquisition).", "pointPivot": "Date de bascule (pivot) : {{date}}.", "irreversible": "Action à sens unique : une fois des titres saisis, ce compte ne pourra plus revenir en saisie agrégée.", "confirm": "Détailler", "confirming": "Bascule…", "errors": { "account_kind_detailed_has_holdings": "Ce compte a déjà des titres saisis et ne peut plus revenir en saisie agrégée." } }, "transfers": { "linkAction": "Lier transferts", "direction": { "in": "Entrée", "out": "Sortie" }, "modal": { "title": "Lier des transferts à {{account}}", "subtitle": "Sélectionnez les transactions à attribuer à ce compte de bilan. La direction est proposée d'après le signe du montant.", "from": "Du", "to": "Au", "category": "Catégorie", "anyCategory": "Toutes les catégories", "search": "Rechercher", "searchPlaceholder": "Mot-clé dans la description…", "loading": "Chargement…", "noTransactions": "Aucune transaction ne correspond aux filtres.", "direction": "Sens", "toggleDirection": "Cliquer pour inverser le sens", "summary": "{{selected}} sélectionnée(s) sur {{total}} affichée(s)", "linkSelection": "Lier {{count}} transaction(s)", "linking": "Liaison…", "partialFailure": "{{linked}}/{{total}} liées avec succès" }, "errors": { "transfer_direction_invalid": "Direction de transfert invalide (in/out attendu).", "transfer_already_linked": "Cette transaction est déjà liée à ce compte.", "transfer_not_linked": "Cette transaction n'est pas liée à ce compte.", "transfer_active_profile_unknown": "Aucun profil actif — impossible de calculer le rendement.", "transaction_linked_to_balance_account": "Cette transaction est liée au compte de bilan {{account}} — déliez-la avant de supprimer." } }, "evolution": { "transferIn": "Entrée", "transferOut": "Sortie" }, "priceFetching": { "button": "Récupérer le prix", "tooltipNotPremium": "Disponible avec abonnement premium", "bestEffortNotice": "Source non garantie, peut être indisponible. La saisie manuelle reste prioritaire.", "bestEffortBadge": "non garanti", "attribution": "via Maximus le {{date}}", "consent": { "title": "Récupération de prix via Maximus", "body": "En cliquant sur \"Accepter\", tu autorises Simpl'Résultat à interroger le proxy Maximus pour récupérer ce prix. Le proxy masque ton IP aux fournisseurs de données. Aucun historique de consultation n'est stocké.", "accept": "Accepter", "decline": "Annuler" }, "errors": { "invalidSymbol": "Symbole invalide", "invalidDate": "Date invalide", "missingParam": "Paramètre manquant", "authFailed": "Échec d'authentification — activez cette machine dans Paramètres → Utilisateurs", "premiumRequired": "Cette fonction nécessite un abonnement premium", "licenseRevoked": "L'activation de cette machine est liée à une licence révoquée — activez de nouveau cette machine dans Paramètres → Utilisateurs", "symbolNotFound": "Symbole introuvable", "rateLimit": "Trop de requêtes — réessaie dans {{seconds}} s", "serverUnavailable": "Serveur indisponible — réessaie plus tard", "bestEffortDegraded": "Source de prix temporairement indisponible — réessayez dans {{minutes}} min ou saisissez manuellement", "sessionCapReached": "Limite de récupération atteinte pour cette session. Saisissez les prix restants manuellement." } } } }