fix(reconciliation): Bankavstämning phase 0 — correctness + feedback batch (+ nav IA regrouping) (#879)

* feat(nav): interaction-mode sidebar grouping — Arbeta/Analys/Data/Skatt & bokslut

Nav IA redesign phase 0 (dev_docs/nav_ia_redesign.md): same routes,
regrouped by what the user is doing. CLAUDE.md restructured around Hard
Rules (doc references updated); pending-page explainer removed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(reconciliation): correctness + feedback batch for Bankavstämning (phase 0)

Engine: fetchAllRows pagination on status/run/RPC fetches (silent 1000-row
cap corrupted totals), optimistic-lock guards on manualLink + apply,
unlink audit rows attributed to the acting user (was: company UUID),
selected_matches partial apply intersected with a fresh match run.

View: silent in-place refresh instead of a full-page skeleton per action,
checkbox-gated apply with confidence badges (fuzzy unticked) in chunks of
500, honest result toasts, dry-run errors surfaced, ranked per-row picker
candidates pinned to the applied date window, currency-correct amounts
(bank side in account currency, GL side SEK), voucher links, translated
source types, colored differens, dirty-date-filter guard.

Discovery: year-end preflight 404 href fixed (/reconciliation/bank never
existed), ⌘K palette entry, real links from the transactions page.

v1: status registry schema now matches the actual ReconciliationStatus
payload, errors documented as a count, false ~0.85-threshold pitfall
replaced, route test mocks the real shape.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Jakob Wennberg
2026-07-03 11:21:38 +02:00
committed by GitHub
co-authored by Claude Fable 5
parent 59ecaee650
commit ea236cbcdf
20 changed files with 1124 additions and 563 deletions
+7 -6
View File
@@ -93,15 +93,18 @@
"expenses": "Expenses",
"receipts": "Receipts",
"deadlines": "Deadlines",
"vat_declaration": "VAT",
"skattekonto": "Tax account",
"year_end": "Year-end",
"pending": "Pending",
"help": "Help",
"extensions": "Extensions",
"settings": "Settings",
"group_main": "Main",
"group_sales": "Sales",
"group_purchases": "Purchases",
"group_personnel": "Personnel",
"group_accounting": "Accounting",
"group_work": "Work",
"group_analysis": "Analytics",
"group_data": "Data",
"group_tax": "Tax & year-end",
"group_other": "Other",
"group_extensions": "Extensions",
"mitt_konto": "My account",
@@ -279,8 +282,6 @@
"origin_mcp": "Suggested by an AI assistant via {label}",
"origin_api": "Suggested via API integration",
"origin_cron": "Created by a scheduled job",
"explainer": "Approve executes the bookkeeping operation. Reject just discards the proposal — nothing is booked.",
"auto_expiry_note": "Unhandled proposals expire automatically after 30 days — doing nothing is safe.",
"badge_auto_expired": "Expired automatically",
"auto_expired_detail": "Expired automatically after 30 days without action. Nothing was booked."
},
+7 -6
View File
@@ -93,15 +93,18 @@
"expenses": "Utlägg",
"receipts": "Kvitton",
"deadlines": "Deadlines",
"vat_declaration": "Moms",
"skattekonto": "Skattekonto",
"year_end": "Bokslut",
"pending": "Väntande",
"help": "Hjälp",
"extensions": "Tillägg",
"settings": "Inställningar",
"group_main": "Huvudmeny",
"group_sales": "Försäljning",
"group_purchases": "Inköp",
"group_personnel": "Personal",
"group_accounting": "Redovisning",
"group_work": "Arbeta",
"group_analysis": "Analys",
"group_data": "Data",
"group_tax": "Skatt & bokslut",
"group_other": "Övrigt",
"group_extensions": "Tillägg",
"mitt_konto": "Mitt konto",
@@ -279,8 +282,6 @@
"origin_mcp": "Föreslaget av AI-assistent via {label}",
"origin_api": "Föreslaget via API-integration",
"origin_cron": "Skapat av automatiskt jobb",
"explainer": "Godkänn utför bokföringen. Avvisa kastar bara förslaget — inget bokförs.",
"auto_expiry_note": "Förslag som inte hanteras utgår automatiskt efter 30 dagar — att inte göra något är säkert.",
"badge_auto_expired": "Utgick automatiskt",
"auto_expired_detail": "Utgick automatiskt efter 30 dagar utan åtgärd. Inget bokfördes."
},