feat(reports): behandlingshistorik report (BFL 5 kap. 11 §, BFNAR 2013:2 p. 9.16) (#1787)
* feat(reports): behandlingshistorik report (BFL 5 kap. 11 §, BFNAR 2013:2 p. 9.16) Adds the per-räkenskapsår processing history as a first-class report in Rapporter (Export & arkiv), with CSV/XLSX export. Until now the behandlingshistorik only existed as raw audit_log JSON inside the Säkerhetsbackup ZIP; revisorer ask for a readable per-year document. - lib/reports/behandlingshistorik.ts: read model over journal_entries (committed_at = registreringsdatum, the complete source of bokföringsposter), the trigger-written audit_log (storno, deletions, diffs, kontoplan, settings, period lock/unlock/close, API keys, dimensions, accruals), the rättelse log, company_migration_resets, sie_imports and bank_file_imports. Field-level diffs with Swedish labels; company_settings restricted to processing-relevant keys (p. 9.16 second paragraph); kontoplan seeding and bulk underlag deletions collapse into one summary row; actor labels for users, API keys, MCP, agent, cron and system; fiscal-year mode unions audit rows touching the year's entries regardless of timestamp (bokslut/storno land after period_end), date-range mode narrows by registration time. - GET /api/reports/behandlingshistorik?period_id&from_date&to_date&category&format (json|csv|xlsx), withRouteContext + Zod, e-mail labels via service-role profiles lookup scoped to the ids in the result, app version stamped. - Report catalog row + focused view (category filter, export menu), sv/en. - Tests: 30 read-model tests, 10 route tests; smoke-tested read-only on prod. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Kw2CFCEt8MxzbJiXMAgMVi * fix(reports): keep behandlingshistorik queries statically resolvable for the schema guard tests/schema/no-phantom-columns.test.ts counts `.or()` calls with non-literal arguments as unresolvable and holds a ceiling (379); the report added two. The audit_log table/action filter is now a string literal in the call (pinned to AUDITED_TABLES / GLOBAL_ACTIONS by a unit test), and the migration-reset lookup is two plain `.eq()` queries instead of an interpolated `.or()`. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Kw2CFCEt8MxzbJiXMAgMVi --------- Co-authored-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
Jakob Wennberg
parent
d3409183c0
commit
4be51aae67
@@ -6622,6 +6622,27 @@
|
||||
"name_ink2_declaration": "INK2",
|
||||
"name_huvudbok": "General ledger",
|
||||
"name_grundbok": "Journal register",
|
||||
"name_behandlingshistorik": "Processing history",
|
||||
"desc_behandlingshistorik": "Who did what and when: posted vouchers, corrections and changes to the system (BFL 5 kap. 11 §)",
|
||||
"bh_summary": "{count, plural, =1 {1 event} other {# events}}",
|
||||
"bh_range_to": "to",
|
||||
"bh_version": "Software version",
|
||||
"bh_col_time": "Time",
|
||||
"bh_col_event": "Event",
|
||||
"bh_col_actor": "Performed by",
|
||||
"bh_col_details": "Details",
|
||||
"bh_filter_all": "All",
|
||||
"bh_filter_aria": "Filter events by category",
|
||||
"bh_cat_verifikation": "Vouchers",
|
||||
"bh_cat_kontoplan": "Chart of accounts",
|
||||
"bh_cat_installningar": "Settings",
|
||||
"bh_cat_period": "Fiscal years",
|
||||
"bh_cat_import": "Imports",
|
||||
"bh_cat_atkomst": "Access",
|
||||
"bh_cat_ovrigt": "Other",
|
||||
"bh_empty_title": "No events in the period",
|
||||
"bh_empty_desc": "The processing history lists posted vouchers, corrections and changes to the system. Pick another fiscal year or date range.",
|
||||
"bh_error": "Could not load the processing history",
|
||||
"name_kundreskontra": "Accounts receivable ledger",
|
||||
"name_supplier_ledger": "Accounts payable ledger",
|
||||
"name_bank_reconciliation": "Bank reconciliation",
|
||||
|
||||
@@ -6622,6 +6622,27 @@
|
||||
"name_ink2_declaration": "INK2",
|
||||
"name_huvudbok": "Huvudbok",
|
||||
"name_grundbok": "Grundbok",
|
||||
"name_behandlingshistorik": "Behandlingshistorik",
|
||||
"desc_behandlingshistorik": "Vem gjorde vad och när: bokförda verifikationer, rättelser och ändringar i systemet (BFL 5 kap. 11 §)",
|
||||
"bh_summary": "{count, plural, =1 {1 händelse} other {# händelser}}",
|
||||
"bh_range_to": "till",
|
||||
"bh_version": "Programversion",
|
||||
"bh_col_time": "Tidpunkt",
|
||||
"bh_col_event": "Händelse",
|
||||
"bh_col_actor": "Utförd av",
|
||||
"bh_col_details": "Detaljer",
|
||||
"bh_filter_all": "Alla",
|
||||
"bh_filter_aria": "Filtrera händelser per kategori",
|
||||
"bh_cat_verifikation": "Verifikationer",
|
||||
"bh_cat_kontoplan": "Kontoplan",
|
||||
"bh_cat_installningar": "Inställningar",
|
||||
"bh_cat_period": "Räkenskapsår",
|
||||
"bh_cat_import": "Import",
|
||||
"bh_cat_atkomst": "Åtkomst",
|
||||
"bh_cat_ovrigt": "Övrigt",
|
||||
"bh_empty_title": "Inga händelser i perioden",
|
||||
"bh_empty_desc": "Behandlingshistoriken visar bokförda verifikationer, rättelser och ändringar i systemet. Välj ett annat räkenskapsår eller datumintervall.",
|
||||
"bh_error": "Kunde inte hämta behandlingshistoriken",
|
||||
"name_kundreskontra": "Kundreskontra",
|
||||
"name_supplier_ledger": "Leverantörsreskontra",
|
||||
"name_bank_reconciliation": "Bankavstämning",
|
||||
|
||||
Reference in New Issue
Block a user