-
Simpl'Résultat v0.9.1
StableAll checks were successfulRelease / build-and-release (push) Successful in 29m42sreleased this
2026-05-11 00:36:51 +00:00 | 0 commits to main since this releaseAdded
- Bilan: 4 starter accounts (Checking account, TFSA, RRSP, Non-registered account) are seeded for new profiles, and a one-shot opt-in modal proposes them to existing profiles on their first /balance visit. Default-checked checkboxes; existing accounts with the same name + category disable the matching row with a "Already exists" tooltip. Confirming or dismissing both write
user_preferences.balance_starter_proposedso the modal never re-appears. ADR 0012 (Proposed) captures the future two-level vehicle × composition model (#179).
Changed
- Price-fetching activated —
maximus-api/v1/pricesis live in production since 2026-05-05. The premium price-fetching feature shipped in 0.9.0 (#160) is now functionally available end-to-end (#161). - Settings reorganized into 3 sub-pages — the single 12-card
Settingspage is split into a hub (/settings) that links to three thematic sub-pages:/settings/users(accounts, licenses, user guide),/settings/data(categories, backup, price-fetch privacy) and/settings/systems(version, update, version history, logs + feedback). The user guide and changelog, previously full-page routes, are now embedded inside their parent sub-page; the legacy/docsand/changelogURLs redirect to keep external bookmarks and release-note links working. The token-store fallback security banner is now rendered once at the top of the settings layout, visible from every main settings sub-page (#190). - App icon — replaced the default Tauri scaffolding icon with a custom design: a robot-faced calculator with a privacy lock on the Enter /
=key. Conveys the four product values — robot (assistant), simplicity (geometric shapes), accounting (calculator), privacy (lock). Source SVG kept atsrc-tauri/icons/icon.svgfor future iterations; all 16 platform-specific raster sizes regenerated viatauri icon. Web favicon and window<title>updated too (was "Tauri + React + Typescript" from the default scaffold). - Bilan: replaced empty /balance state with a 2-step onboarding card (Create an account → Enter a snapshot) so users no longer see a confusing "no snapshot" screen before any account exists. The "+ New snapshot" button is hidden until at least one account exists. The /balance/snapshot empty-state copy now clarifies what an account is vs. what a snapshot is (#178).
Fixed
- Bilan: fix SQLite "misuse of aggregate function MIN()" error when loading /balance with existing snapshots; replaced aggregate-in-WHERE pattern with ROW_NUMBER() window function in getAccountsPeriodAnchor (#175).
- Bilan: snapshot save now uses atomic BEGIN/COMMIT and validates all lines before any DB write, preventing orphan snapshot rows when validation fails. Migration v11 cleans existing orphans (#176).
- Bilan: snapshot date picker on
/balance/snapshotnow closes after a date is selected on Linux (WebKitGTK), instead of staying open until the user pressed Esc. Workaround callsblur()on the input after each change — no-op on Windows WebView2 / macOS WKWebView, where the picker already auto-closes (#177). - Updated
postcssdependency (8.5.6 → 8.5.13) to address moderate severity advisory GHSA-qx2v-qp2m-jg93 (XSS via unescaped</style>in CSS stringifier). Transitive via vite, build-time only — no runtime impact on the shipped Tauri binary (#180). - WebKitGTK date picker workaround extended to the remaining 7 native
<input type="date">fields across 4 components (Transactions filter bar, Adjustments form, Link Transfers modal, Period selector). Each onChange handler now callse.currentTarget.blur()to dismiss the native popup on Linux Tauri WebView — no-op on Windows WebView2 / macOS WKWebView. Same approach as #177 (#188). - Bilan: post-merge cleanup of suggestions raised in the #182-#185 reviews. Six fixes bundled: (1)
getStarterCollisionsnow filtersarchived_at IS NULLso re-creating a voluntarily archived starter is no longer blocked; (2)proposeStarterAccountsre-checks each (name, category) collision in-transaction before INSERT as defense-in-depth (skips silently on hit, no UNIQUE constraint added); (3) brand-new profiles now getbalance_starter_proposedpre-seeded inconsolidated_schema.sqlso the StarterAccountsModal never briefly opens with all-collisions on first /balance visit; (4)/balancenow hides the period selector, evolution chart and accounts table while the empty-state onboarding card is shown (avoids three stacked empty messages); (5)BalanceOnboardingCard.Stepnow callsuseTranslation()directly instead of receivingtas a prop; (6)return_calculator.rsModified Dietz formula doc block is wrapped in atextfence socargo test --docno longer fails to compile pseudo-math as Rust (#187).
Installation
Windows : Téléchargez le fichier
.execi-dessous.
Linux : Téléchargez le fichier.debou.AppImageci-dessous.Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
Simpl Resultat-0.9.1-1.x86_64.rpm
6 downloads · 9.5 MiB
-
Simpl Resultat-0.9.1-1.x86_64.rpm.sig
5 downloads · 424 B
-
Simpl Resultat_0.9.1_amd64.deb
6 downloads · 9.5 MiB
-
Simpl Resultat_0.9.1_amd64.deb.sig
5 downloads · 420 B
-
Simpl Resultat_0.9.1_x64-setup.exe
3 downloads · 5.2 MiB
-
Simpl Resultat_0.9.1_x64-setup.exe.sig
6 downloads · 428 B
-
latest.json
2 downloads · 6 KiB
- Bilan: 4 starter accounts (Checking account, TFSA, RRSP, Non-registered account) are seeded for new profiles, and a one-shot opt-in modal proposes them to existing profiles on their first /balance visit. Default-checked checkboxes; existing accounts with the same name + category disable the matching row with a "Already exists" tooltip. Confirming or dismissing both write
-
Simpl'Résultat v0.9.0
StableAll checks were successfulRelease / build-and-release (push) Successful in 25m25sreleased this
2026-04-29 23:20:03 +00:00 | 35 commits to main since this releaseAdded
-
Balance sheet —
asset_typecolumn on priced categories (route/balance/accounts): priced balance categories now carry an explicitasset_type(stockorcrypto) that drives PriceFetchControl provider routing without relying on symbol heuristics (e.g. ETH = Ethan Allen NYSE and Ethereum crypto are no longer ambiguous). Migration v10 adds a nullable column and backfills the two seeded priced categories (stock,crypto) with their matching values; legacy custom priced rows stay NULL until a future edit-category UI lets the user fill them in. The category creation form (Categories tab) now shows an asset-type selector whenkind = pricedand rejects submission until a value is picked. The snapshot editor hides the price-fetch button on priced rows whoseasset_typeis still NULL — manual entry remains the only path on those legacy rows. (#169) -
Balance sheet — documentation and ADRs (
docs/): closes the Bilan milestone with the documentation pass.docs/architecture.mdnow lists the 5 new tables (balance_categories,balance_accounts,balance_snapshots,balance_snapshot_lines,balance_account_transfers), the 7 new indexes, the SQL CHECK and FK invariants (CAD-only, kind invariants,RESTRICTontransaction_idfor Modified Dietz reproducibility), thebalance.service.ts4-section layout (CRUD / snapshots+lines / returns+transfers / prices), the 3 page-scoped hooks (useBalanceAccounts,useSnapshotEditor,useBalanceOverview), thecompute_account_returnTauri command (with thefetch_pricefuture-Phase-5 mention), and the 3 new/balance*routes. Three new ADRs land alongside: 0008 — Modified Dietz (justifies the choice vs. ROI / TWR / IRR with reference toreturn_calculator.rs); 0009 — Proxy price-fetching via maximus-api (architecture documented now, implementation stays BLOCKED by maximus-api Phase 2 — covers privacy considerations like header stripping, no(symbol, license)log correlation and the fixedsimpl-resultatUA, the Yahoo + CoinGecko provider abstraction, the Bearer auth strategy, the client + server rate limiting and the dual-side premium gating); 0010 — FK RESTRICT onbalance_account_transfers.transaction_id(justifies the integrity over friction trade-off for Modified Dietz reproducibility). The user guide gains a new Balance sheet section walking through snapshot entry (simple + priced), transfer linking, multi-horizon return reading (3M / 1Y / since inception with the side-by-side unadjusted column), with the price-fetching premium flagged "coming in Phase 5".docs.balance.*i18n keys (FR + EN) ship so the in-app guide reflects the new section (#145) -
Balance sheet — cross-cutting integration test suite (test infrastructure): closes out the Bilan feature with a layer of integration tests that exercise the whole TypeScript surface in a single happy-path flow (account → priced category → priced snapshot → linked transfer → return) plus dedicated assertions for currency lock (CAD-only at the MVP, rejected at both the service layer and SQL CHECK), priced-kind tolerance safety (a bad save must NOT clear pre-existing lines),
computeAccountReturnwiring (active-profile resolution, ISO date forwarding, partial-period payload pass-through). Three new Rust integration tests apply migration v9 on top of a seeded v1 schema with pre-existing transactions to verify (1) no row loss / data mutation, (2) link / unlink transfer round-trip on real transaction ids, (3) the FK RESTRICT chain (linked transaction deletion blocked, unblocked after unlink), (4) the v1categories.idand v9balance_categories.idnamespaces coexist independently. A non-regression source-level test onTransactionTable.tsxlocks down the inlined transfer icon contract: optional prop, optional-chaining short-circuit, i18n keys, aria-label, shared description-cell layout — so the page renders identically when no transfers are linked. (#144) -
Balance sheet — Modified Dietz returns and transfer linking (route
/balance): per-account performance now ships. New Rust modulecommands/return_calculator.rsimplements the Modified Dietz formulaR = (V_end − V_start − ΣCF_i) / (V_start + ΣW_i × CF_i)with day-precision contribution weightsW_i = (T − t_i) / T, plus(1 + R)^(365/T) − 1annualization. Edge cases — missing endpoint snapshot, no flows tagged in the period, account created mid-period, depleted-then-refilled, zero-length period — are surfaced with explicitis_partial/has_no_transfers_warningflags so the UI shows a clean dash + tooltip instead of a confusing number. The new Tauri commandcompute_account_return(account_id, period_start, period_end)runs three short SQL reads against the active profile DB (latest snapshot ≤ period start, latest snapshot ≤ period end, transfers JOINed with transactions filtered to the period) and feeds the calculator. Seven co-located TDD tests cover every case before the implementation. The accounts table on/balancenow shows four extra columns side-by-side: 3M / 1Y / Since-inception (Modified Dietz) plus an Unadjusted column showing the simple(V_end − V_start) / V_startso the user can see at a glance how much of the return came from contribution timing. Each row's actions menu gains a Link transfers item that opens a multi-select modal with date range / category / free-text filters; the modal auto-proposes the direction (infor negative bank amounts,outfor positive) and the user can flip it per row before submitting. Transactions linked to one or more balance accounts now show a smallLink2icon next to the description in the Transactions page, with a tooltip listing the account name(s) and direction(s). Bulk transaction-deletion paths (per-imported-file and clear-all) now pre-check for any link inbalance_account_transfersand surface a typedTransactionLinkedToBalanceError("This transaction is linked to balance account X — unlink it before deleting") instead of leaking the raw SQLite FK error. The evolution chart on/balancenow overlays vertical reference lines at every linked-transfer date (green forin, red forout). New i18n keys underbalance.returns.*,balance.accountsTable.*,balance.transfers.*,balance.evolution.*,transactions.transferIcon.*(FR + EN) (#142) -
Balance sheet —
/balanceoverview page, evolution chart and sidebar entry (route/balance): fourth slice of the Bilan feature finally surfaces it in the navigation. The new page composes (1) an overview card with the latest aggregate net worth, the Δ% versus the previous chronological snapshot (rendered as "—" when only one snapshot exists), a 60-day staleness warning when the latest snapshot is older than that threshold, and a New snapshot CTA pointing at/balance/snapshot; (2) a period selector (3 months / 6 months / 1 year / 3 years / All) that re-fetches every series in parallel; (3) an evolution chart with two modes — Line (single series ofSUM(value) GROUP BY snapshot_date) and Stacked by category (one Recharts<Area stackId>perbalance_categories.key); (4) an accounts table listing every active account with its latest snapshot value, the per-account Δ% over the active period (latest value vs the value at the earliest snapshot inside the window — null when no anchor exists, rendered as "—"), and an actions menu (Details placeholder, Archive). Return-metric columns (3M / 1Y / since-creation / unadjusted) are reserved for a later release with aTODOmarker. The sidebar now exposes the Balance sheet entry (Walleticon) between Reports and Settings. The service grows three time-series helpers:getSnapshotTotalsByDate(range?),getSnapshotTotalsByCategoryAndDate(range?),getAccountsLatestSnapshot()and a per-account anchor querygetAccountsPeriodAnchor(range)— all guarded by unit tests. NewuseBalanceOverviewhook (scopeduseReducer) drives the page state. New i18n keys underbalance.overview.*,balance.period.*,balance.chart.*plusnav.balance(FR + EN) (#141) -
Balance sheet — priced kind (quantity × unit price) (routes
/balance/accountsand/balance/snapshot): third slice of the Bilan feature. Categories now expose a kind selector at creation:simple(direct value entry) orpriced(quantity × unit_price). Accounts linked to a priced category require a symbol. The snapshot editor dispatches on the account's category kind: simple accounts keep their single value field, priced accounts get three inputs —quantity,unit_price(both required) and a read-onlyvaluefield computed live fromquantity × unit_price(rounded to 2 decimals). A[Manual]/[Manuel]attribution tag is shown on each priced row; the future[via Maximus on YYYY-MM-DD]tag will land with automatic price-fetching. The Prefill from previous button now copies quantities for priced accounts but leaves unit prices blank (a fresh price must be entered each time). The service validates priced lines ahead of the SQL CHECK: kind invariants (priced lines must carry both quantity and unit_price; simple lines must carry neither) and a value-match invariant|value − quantity × unit_price| ≤ 0.01(one cent tolerance to absorb floating-point drift). Category deletion now blocks earlier and surfaces a richer error: a category linked to one or more accounts shows a dismissable banner listing the count and up to three account names so the user knows exactly which accounts to archive first; seeded categories remain protected at the service layer with their button disabled in the UI. New i18n keysbalance.category.kind.*,balance.category.form.kindLabel/kindHint*,balance.category.error.has_accounts,balance.snapshot.priced.*(FR + EN) (#140) -
Balance sheet — snapshot editor (simple kind) (route
/balance/snapshot): second slice of the Bilan feature. The new page lets you create or edit a dated snapshot of your balance: pick a date (defaulting to today), enter the value of each active account grouped by category, and save. The mode is driven by the?date=query parameter — when a snapshot already exists at that date the page automatically flips into edit mode (the underlyingbalance_snapshots.snapshot_dateUNIQUE constraint guarantees one snapshot per day). The date of an existing snapshot is immutable: to change it, delete the snapshot and create a new one. A Prefill from previous snapshot button copies values from the most recent earlier snapshot (simple-kind accounts only — priced accounts will be handled when the priced editor lands in a later release). A Delete button surfaces a double-confirmation modal that requires retyping the snapshot date before the destructive action is enabled. Only simple-kind values are accepted at this stage (quantityandunit_priceare keptNULL); the priced editor (quantity × unit price + price fetch) ships in a later release. NewuseSnapshotEditorhook (scopeduseReducercovering the full lifecycle) and two new componentsSnapshotEditor+SnapshotLineRow. FR/EN i18n underbalance.snapshot.*(#146) -
Balance sheet — schema foundation and accounts page (route
/balance/accounts): first slice of the upcoming Bilan feature. New SQL migration v9 introduces 5 tables (balance_categories,balance_accounts,balance_snapshots,balance_snapshot_lines,balance_account_transfers) with 7 indexes and seeds 7 standard categories — Cash, TFSA, RRSP, Mutual Fund, Other (simple kind) plus Stock and Crypto (priced kind). Thecurrencycolumn is hardcoded toCADvia a CHECK constraint at the MVP ��� multi-currency support will come in a later release. The new accounts page exposes two tabs: Accounts (full CRUD over the user's holdings, soft-archive instead of hard delete to preserve historic snapshots) and Categories (rename any category, create simple-kind ones, delete user-created ones — seeded categories are protected). The full FR/EN i18n coverage uses keys underbalance.*. Snapshots, transfers, returns and the price-fetching premium remain to ship in upcoming issues; for now the route is reachable directly via URL (no sidebar entry yet) (#138) -
Price-fetching premium for stocks (best-effort) and crypto (direct exchanges) — privacy preserved via maximus-api proxy. Privacy toggle in Settings to revoke consent. (#160)
Changed
- License Ed25519 public key rotated to match the freshly deployed
maximus-apilicense server (now live athttps://api.lacompagniemaximus.com). No production licenses had been issued against the previous key, so this change is invisible to existing users — but/licenses/activatenow answers, so machine activation (Issue #53) is unblocked once this release ships. The matching private key lives only on the server (#49)
Fixed
- Category zoom report (
/reports/category): the category combobox dropdown now renders the full list in proper hierarchical DFS order — each root is emitted before its descendants, with siblings sorted bysort_orderthen display name. Previously the list was ordered bysort_orderglobally (from a SQLORDER BY sort_order, name), which interleaved parents and children from different sub-trees that shared the samesort_order, producing scrambled indentation and a mis-leading tree. Filtering (accent-insensitive search) still behaves identically (#126)
Installation
Windows : Téléchargez le fichier
.execi-dessous.
Linux : Téléchargez le fichier.debou.AppImageci-dessous.Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
2 downloads
-
Simpl Resultat-0.9.0-1.x86_64.rpm
5 downloads · 9.5 MiB
-
Simpl Resultat-0.9.0-1.x86_64.rpm.sig
6 downloads · 424 B
-
Simpl Resultat_0.9.0_amd64.deb
7 downloads · 9.5 MiB
-
Simpl Resultat_0.9.0_amd64.deb.sig
6 downloads · 420 B
-
Simpl Resultat_0.9.0_x64-setup.exe
2 downloads · 5.2 MiB
-
Simpl Resultat_0.9.0_x64-setup.exe.sig
5 downloads · 428 B
-
latest.json
2 downloads · 14 KiB
-
-
Simpl'Résultat v0.8.4
StableAll checks were successfulRelease / build-and-release (push) Successful in 24m1sreleased this
2026-04-21 23:32:52 +00:00 | 107 commits to main since this releaseAdded
- Settings banner (90-day) and permanent Restore action to roll back a category migration from the automatic pre-migration backup (Settings → Categories): after a v2→v1 migration, a dismissable banner (
ShieldCheckicon) now appears at the top of the Categories card for 90 days, pointing at the automatic SREF backup written bycategoryBackupService. A dedicated Restore a backup entry stays available below the migrate link as long as a migration is recorded — even past the 90-day window — so the rollback is never lost. The confirm modal reads thelast_categories_migrationjournal for its timestamp and backup path, enforces a two-step confirmation with a red Restore button, falls back to a file picker when the recorded path is missing on disk, prompts for the profile PIN when the SREF file is encrypted, and on success resetscategories_schema_version=v2and stampsreverted_aton the journal before reloading the app. The banner hides automatically once the migration has been reverted. New Tauri commandfile_existsfor the pre-flight presence check, newcategoryRestoreServicewrappingread_import_file+importTransactionsWithCategorieswith stable error codes (#122) - 3-step category migration page (route
/settings/categories/migrate, Settings → Migrate to the standard structure): legacy v2 profiles can now opt in to migrate to the new v1 IPC taxonomy through a guided flow — Discover (read-only tree reused from the guide page), Simulate (3-column dry-run table with high / medium / low / needs-review confidence badges, a clickable side panel showing the first 50 affected transactions per row, inline target picker for unresolved rows, next button blocked until every row is resolved), and Consent (checklist + optional PIN field for protected profiles + 4-step loader). On confirm, the page creates a verified SREF backup viacategoryBackupService(mandatory, abort on failure with no DB write) and then runs an atomic SQL transaction via the newcategoryMigrationService.applyMigration(plan, backup)— BEGIN → INSERT v1 taxonomy → UPDATE transactions / budgets / budget_templates / keywords / suppliers to the new v1 category ids → reparent custom categories under a new Custom categories (migration) parent → soft-deactivate the v2 seed categories → bumpcategories_schema_version='v1'and journal the run inuser_preferences.last_categories_migration→ COMMIT. Any thrown error triggers ROLLBACK so the profile stays in its pre-migration state. Success and error screens surface the backup path and (for success) the counts of rows inserted / transactions, keywords and budgets migrated (#121) - Dashboard banner inviting v2 profiles to discover the new v1 IPC category taxonomy: legacy profiles (tagged
categories_schema_version='v2') now see a dismissable banner at the top of the Dashboard pointing to the new standard categories guide page. The banner is non-destructive (read-only CTA, no category changes), only shown to v2 profiles (new v1-seeded profiles never see it), and its dismissal is persisted inuser_preferencesundercategories_v1_banner_dismissedso it never reappears once closed (#118) - Standard categories guide page (Settings → Standard category structure, route
/settings/categories/standard): new read-only page that exposes the full v1 IPC taxonomy as a navigable tree with expand/collapse per root, a live category counter (roots · subcategories · leaves · total), accent-insensitive full-text search over translated names, hover tooltips showing thei18n_key/ type / ID of each node, and a Export as PDF button that triggers the browser print dialog. A dedicated@media printrule forces every branch to render fully expanded regardless of the on-screen collapse state. All labels resolve viacategoriesSeed.*withnameas fallback for future custom rows. No database writes, no destructive actions (#117) - IPC-aligned categories seed for new profiles: brand-new profiles are now seeded with the v1 IPC (Indice des prix à la consommation) taxonomy — a structured hierarchy aligned with Statistics Canada consumer price index categories. Category labels are now translated dynamically from the
categoriesSeed.*i18n namespace (FR/EN), so seed categories display in the user's current language. Existing profiles remain on the legacy v2 seed, marked via a newcategories_schema_versionuser preference (a later migration wizard will offer the v2→v1 transition). Internally: nullablecategories.i18n_keycolumn added in migration v8 (additive only),src/data/categoryTaxonomyV1.jsonbundled as the TS-side source of truth,CategoryTreeandCategoryComboboxrenderers fall back to the rawnamewhen no translation key is present (user-created rows) (#115)
Installation
Windows : Téléchargez le fichier
.execi-dessous.
Linux : Téléchargez le fichier.debou.AppImageci-dessous.Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
2 downloads
-
Simpl Resultat-0.8.4-1.x86_64.rpm
6 downloads · 9.4 MiB
-
Simpl Resultat-0.8.4-1.x86_64.rpm.sig
6 downloads · 424 B
-
Simpl Resultat_0.8.4_amd64.deb
6 downloads · 9.4 MiB
-
Simpl Resultat_0.8.4_amd64.deb.sig
5 downloads · 420 B
-
Simpl Resultat_0.8.4_x64-setup.exe
3 downloads · 5.1 MiB
-
Simpl Resultat_0.8.4_x64-setup.exe.sig
5 downloads · 428 B
-
latest.json
2 downloads · 6 KiB
- Settings banner (90-day) and permanent Restore action to roll back a category migration from the automatic pre-migration backup (Settings → Categories): after a v2→v1 migration, a dismissable banner (
-
Simpl'Résultat v0.8.3
StableAll checks were successfulRelease / build-and-release (push) Successful in 23m6sreleased this
2026-04-19 14:01:37 +00:00 | 129 commits to main since this releaseAdded
- Cartes report — Monthly / YTD toggle (
/reports/cartes): new segmented toggle next to the reference-month picker flips the four KPI cards (income, expenses, net balance, savings rate) between the reference-month value (unchanged default) and a Year-to-Date cumulative view. In YTD mode, the "current" value sums January → reference month, MoM delta compares it to the same-year Jan → (refMonth − 1) window (null for January), YoY delta compares it to Jan → refMonth of the previous year, and the savings rate uses the YTD income/expenses. The 13-month sparkline, top movers, seasonality and budget adherence cards remain monthly regardless of the toggle. The savings-rate tooltip now reflects the active mode. Choice persisted inlocalStorage(reports-cartes-period-mode) (#102) - User guide — Cartes section: new dedicated section documenting the four KPI formulas, the Monthly/YTD toggle, the sparkline, top movers, seasonality and budget adherence rules, along with the savings-rate edge case ("—" when income is zero) (#102)
- Cartes report: help tooltip on the savings-rate KPI explaining the formula —
(income − expenses) ÷ income × 100, computed on the reference month (#101) - Trends report — by category (
/reports/trends): new segmented toggle to switch the category-evolution chart between stacked bars (default, unchanged) and a Recharts stacked-area view (<AreaChart stackId="1">) that shows total composition over time. Both modes share the same category palette and SVG grayscale patterns. The chosen type is persisted inlocalStorage(reports-trends-category-charttype) (#105)
Changed
- Category zoom report (
/reports/category): the category picker is now a typeable, searchable combobox with accent-insensitive matching, keyboard navigation (↑/↓/Enter/Esc) and hierarchy indentation, replacing the native<select>(#103) - Compare report — Actual vs. actual (
/reports/compare): the table now mirrors the rich 8-column structure of the Actual vs. budget table, splitting each comparison into a Monthly block (reference month vs. comparison month) and a Cumulative YTD block (progress through the reference month vs. progress through the previous window). MoM cumulative-previous uses Jan → end-of-previous-month of the same year; YoY cumulative-previous uses Jan → same-month of the previous year. The chart remains a monthly-only view (#104) - Highlights report (
/reports/highlights): the monthly tiles (current-month balance, top movers vs. previous month) now default to the previous calendar month instead of the current one, matching the Cartes and Compare reports. The YTD tile stays pinned to Jan 1st of the current civil year. A new reference-month picker lets you pivot both the monthly balance and the top-movers comparison to any past month; the selection is persisted in the URL via?refY=YYYY&refM=MMso the view is bookmarkable. The hub highlights panel follows the same default (#106)
Fixed
- Cartes report: removed the non-functional period selector — the Cartes report is a "month X vs X-1 vs X-12" snapshot, so only the reference-month picker is needed (#101)
- Cartes report: savings-rate KPI now shows "—" instead of "0 %" when the reference month has no income (division by zero is undefined, not zero) (#101)
- Cartes report — budget adherence: the card was always saying "no budgeted categories this month" even when budgets were defined on expense categories. Root cause: expense budgets are stored signed-negative, and the filter/comparison used raw values instead of absolutes. Categories, in-target counts, and worst-overrun amounts are now all computed on absolute values (#112)
Installation
Windows : Téléchargez le fichier
.execi-dessous.
Linux : Téléchargez le fichier.debou.AppImageci-dessous.Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
2 downloads
-
Simpl Resultat-0.8.3-1.x86_64.rpm
6 downloads · 9.4 MiB
-
Simpl Resultat-0.8.3-1.x86_64.rpm.sig
6 downloads · 424 B
-
Simpl Resultat_0.8.3_amd64.deb
7 downloads · 9.4 MiB
-
Simpl Resultat_0.8.3_amd64.deb.sig
5 downloads · 420 B
-
Simpl Resultat_0.8.3_x64-setup.exe
2 downloads · 5.1 MiB
-
Simpl Resultat_0.8.3_x64-setup.exe.sig
6 downloads · 428 B
-
latest.json
2 downloads · 5 KiB
- Cartes report — Monthly / YTD toggle (
-
Simpl'Résultat v0.8.2
StableAll checks were successfulRelease / build-and-release (push) Successful in 24m6sreleased this
2026-04-17 14:41:48 +00:00 | 145 commits to main since this releaseAdded
- Feedback Hub widget (Settings → Logs): a Send feedback button in the Logs card opens a dialog to submit suggestions, comments, or bug reports to the central Feedback Hub. A one-time consent prompt explains that submission reaches
feedback.lacompagniemaximus.com— an explicit exception to the app's 100% local operation. Three opt-in checkboxes (all unchecked by default): include navigation context (page, theme, viewport, app version, OS), include recent error logs, identify with your Maximus account. Routed through a Rust-side command so nothing is sent unless you press Send (#67) - Cartes report (
/reports/cartes): new dashboard-style sub-report in the Reports hub. Combines four KPI cards (income, expenses, net balance, savings rate) showing MoM and YoY deltas simultaneously with a 13-month sparkline highlighting the reference month, a 12-month income vs. expenses overlay chart (bars + net balance line), top 5 category increases and top 5 decreases vs. the previous month, a budget-adherence card (N/M on-target plus the three worst overruns with progress bars), and a seasonality card that compares the reference month against the same calendar month from the two previous years. All data comes from a singlegetCartesSnapshot()service call that runs its queries concurrently (#97)
Changed
- Compare report (
/reports/compare): reduced from three tabs (MoM / YoY / Budget) to two modes (Actual vs. actual / Actual vs. budget). The actual-vs-actual view now has an explicit reference-month dropdown in the header (defaults to the previous month), a MoM ↔ YoY sub-toggle, and a grouped side-by-side bar chart (two bars per category: reference period vs. comparison period). The URLPeriodSelectorstays in sync with the reference month picker (#96)
Installation
Windows : Téléchargez le fichier
.execi-dessous.
Linux : Téléchargez le fichier.debou.AppImageci-dessous.Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
2 downloads
-
Simpl Resultat-0.8.2-1.x86_64.rpm
6 downloads · 9.3 MiB
-
Simpl Resultat-0.8.2-1.x86_64.rpm.sig
6 downloads · 424 B
-
Simpl Resultat_0.8.2_amd64.deb
6 downloads · 9.3 MiB
-
Simpl Resultat_0.8.2_amd64.deb.sig
5 downloads · 420 B
-
Simpl Resultat_0.8.2_x64-setup.exe
1 download · 5.1 MiB
-
Simpl Resultat_0.8.2_x64-setup.exe.sig
6 downloads · 428 B
-
latest.json
2 downloads · 3.1 KiB
- Feedback Hub widget (Settings → Logs): a Send feedback button in the Logs card opens a dialog to submit suggestions, comments, or bug reports to the central Feedback Hub. A one-time consent prompt explains that submission reaches
-
Simpl'Résultat v0.8.1
StableAll checks were successfulRelease / build-and-release (push) Successful in 24m56sreleased this
2026-04-16 02:07:53 +00:00 | 147 commits to main since this release
Installation
Windows : Téléchargez le fichier
.execi-dessous.
Linux : Téléchargez le fichier.debou.AppImageci-dessous.Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
2 downloads
-
Simpl Resultat-0.8.1-1.x86_64.rpm
5 downloads · 9.3 MiB
-
Simpl Resultat-0.8.1-1.x86_64.rpm.sig
5 downloads · 424 B
-
Simpl Resultat_0.8.1_amd64.deb
6 downloads · 9.3 MiB
-
Simpl Resultat_0.8.1_amd64.deb.sig
6 downloads · 420 B
-
Simpl Resultat_0.8.1_x64-setup.exe
2 downloads · 5.1 MiB
-
Simpl Resultat_0.8.1_x64-setup.exe.sig
5 downloads · 428 B
-
latest.json
2 downloads · 1.3 KiB
-
Source code (ZIP)
-
Simpl'Résultat v0.8.0
StableAll checks were successfulRelease / build-and-release (push) Successful in 25m4sreleased this
2026-04-14 19:39:27 +00:00 | 152 commits to main since this releaseAdded
- Reports hub:
/reportsis now a hub surfacing a live highlights panel (current month + YTD net balance with sparklines, top movers vs. last month, top recent transactions) and four navigation cards to dedicated sub-reports (#69–#76) - Highlights report (
/reports/highlights): balance tiles with 12-month sparklines, sortable top movers table, diverging bar chart, recent transactions list with 30/60/90 day window toggle (#71) - Trends report (
/reports/trends): internal sub-view toggle between global flow (income vs. expenses) and by-category evolution, chart/table toggle on both (#72) - Compare report (
/reports/compare): tab bar for Month vs. Previous Month, Year vs. Previous Year, and Actual vs. Budget; diverging bar chart centered on zero for the first two modes (#73) - Category zoom (
/reports/category): single-category drill-down with donut chart of subcategory breakdown, monthly evolution area chart, and filterable transactions table (#74) - Contextual keyword editing: right-click any transaction row to add its description as a categorization keyword; a preview dialog shows every transaction that would be recategorized (capped at 50, with an opt-in checkbox for N+) before you confirm. Available on the category zoom, the highlights list, and the main transactions page (#74, #75)
- Bookmarkable period: the reports period now lives in the URL (
?from=YYYY-MM-DD&to=YYYY-MM-DD), so you can copy, paste, and share the link and keep the same state (#70) - View mode preference (chart vs. table) is now persisted in
localStorageper report section
Changed
- The legacy monolithic
useReportshook has been split into per-domain hooks (useReportsPeriod,useHighlights,useTrends,useCompare,useCategoryZoom) so every sub-report owns only the state it needs (#70) - Context menu on reports (right-click) is now a generic
ContextMenushell reused by the existing chart menu and the new keyword dialog (#69)
Removed
- The dynamic pivot table report was removed. Over 90% of its real usage was zooming into a single category, which is better served by the new Category Zoom report. Git history preserves the old implementation if it ever needs to come back (#69)
Security
- New
AddKeywordDialogenforces a 2–64 character length bound on user keywords to prevent ReDoS on large transaction sets (CWE-1333), uses parameterizedLIKEqueries for the preview (CWE-89), wraps its INSERT + per-transaction UPDATEs in an explicit BEGIN/COMMIT/ROLLBACK transaction (CWE-662), renders all untrusted descriptions as React children (CWE-79), and recategorizes only the rows the user explicitly checked — never retroactively. Keyword reassignment across categories requires an explicit confirmation step (#74) getCategoryZoomwalks the category tree through a bounded recursive CTE (WHERE depth < 5), protecting against malformedparent_idcycles (CWE-835) (#74)
Installation
Windows : Téléchargez le fichier
.execi-dessous.
Linux : Téléchargez le fichier.debou.AppImageci-dessous.Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
2 downloads
-
Simpl Resultat-0.8.0-1.x86_64.rpm
5 downloads · 9.3 MiB
-
Simpl Resultat-0.8.0-1.x86_64.rpm.sig
5 downloads · 424 B
-
Simpl Resultat_0.8.0_amd64.deb
6 downloads · 9.3 MiB
-
Simpl Resultat_0.8.0_amd64.deb.sig
5 downloads · 420 B
-
Simpl Resultat_0.8.0_x64-setup.exe
6 downloads · 5.1 MiB
-
Simpl Resultat_0.8.0_x64-setup.exe.sig
6 downloads · 428 B
-
latest.json
2 downloads · 4.2 KiB
- Reports hub:
-
Simpl'Résultat v0.7.4
StableAll checks were successfulRelease / build-and-release (push) Successful in 26m7sreleased this
2026-04-14 15:24:40 +00:00 | 169 commits to main since this releaseChanged
- OAuth tokens are now stored in the OS keychain (Credential Manager on Windows, Secret Service on Linux) instead of a plaintext JSON file. Existing users are migrated transparently on the next sign-in refresh; the old file is zeroed and removed. A "tokens stored in plaintext fallback" banner appears in Settings if the keychain is unavailable (#66, #78, #79, #81)
- Cached account info is now HMAC-signed with a keychain-stored key: writing
subscription_statustoaccount.jsonmanually can no longer bypass the Premium gate (#80) - PIN hashing migrated from SHA-256 to Argon2id for brute-force resistance (CWE-916). Existing SHA-256 PINs are verified transparently and rehashed on next successful unlock; new PINs use Argon2id (#54)
Security
- Closed CWE-312 (cleartext storage of OAuth tokens), CWE-345 (missing integrity check on the subscription cache), and CWE-916 (weak PIN hashing). Legacy
tokens.jsonand legacy unsignedaccount.jsoncaches are rejected by the gating path until the next token refresh re-establishes a keychain-anchored trust (#66, #54)
Installation
Windows : Téléchargez le fichier
.execi-dessous.
Linux : Téléchargez le fichier.debou.AppImageci-dessous.Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
Simpl Resultat-0.7.4-1.x86_64.rpm
5 downloads · 9.3 MiB
-
Simpl Resultat-0.7.4-1.x86_64.rpm.sig
5 downloads · 424 B
-
Simpl Resultat_0.7.4_amd64.deb
6 downloads · 9.3 MiB
-
Simpl Resultat_0.7.4_amd64.deb.sig
5 downloads · 420 B
-
Simpl Resultat_0.7.4_x64-setup.exe
4 downloads · 5.1 MiB
-
Simpl Resultat_0.7.4_x64-setup.exe.sig
5 downloads · 428 B
-
latest.json
2 downloads · 2.4 KiB
-
Simpl'Résultat v0.7.3
StableAll checks were successfulRelease / build-and-release (push) Successful in 27m50sreleased this
2026-04-13 19:26:17 +00:00 | 189 commits to main since this releaseFixed
- Maximus Account sign-in: the deep-link callback now uses the canonical Tauri v2
on_open_urlAPI, so the auth code is properly received by the running app instead of leaving the UI stuck in "loading" (#51, #65) - OAuth callbacks containing an
errorparameter now surface the error to the UI instead of being silently ignored (#51)
Installation
Windows : Téléchargez le fichier
.execi-dessous.
Linux : Téléchargez le fichier.debou.AppImageci-dessous.Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
Simpl Resultat-0.7.3-1.x86_64.rpm
5 downloads · 9 MiB
-
Simpl Resultat-0.7.3-1.x86_64.rpm.sig
5 downloads · 424 B
-
Simpl Resultat_0.7.3_amd64.deb
5 downloads · 9 MiB
-
Simpl Resultat_0.7.3_amd64.deb.sig
4 downloads · 420 B
-
Simpl Resultat_0.7.3_x64-setup.exe
2 downloads · 5.1 MiB
-
Simpl Resultat_0.7.3_x64-setup.exe.sig
5 downloads · 428 B
-
latest.json
2 downloads · 1.6 KiB
- Maximus Account sign-in: the deep-link callback now uses the canonical Tauri v2
-
Simpl'Résultat v0.7.2
StableAll checks were successfulRelease / build-and-release (push) Successful in 25m59sreleased this
2026-04-13 18:11:16 +00:00 | 190 commits to main since this releaseChanged
- Auto-updates are temporarily open to the Free edition until the license server (issue #49) is live. Gating will be restored once paid activation works end-to-end (#48)
Installation
Windows : Téléchargez le fichier
.execi-dessous.
Linux : Téléchargez le fichier.debou.AppImageci-dessous.Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
Simpl Resultat-0.7.2-1.x86_64.rpm
5 downloads · 9 MiB
-
Simpl Resultat-0.7.2-1.x86_64.rpm.sig
5 downloads · 424 B
-
Simpl Resultat_0.7.2_amd64.deb
6 downloads · 9 MiB
-
Simpl Resultat_0.7.2_amd64.deb.sig
5 downloads · 420 B
-
Simpl Resultat_0.7.2_x64-setup.exe
1 download · 5 MiB
-
Simpl Resultat_0.7.2_x64-setup.exe.sig
5 downloads · 428 B
-
latest.json
2 downloads · 1.5 KiB