fix(periodisering): stop overselling automatic periodization to enskild firma (#1730)

* fix(bokslut): honest periodisering for enskild firma (K1)

Stop mis-selling automatic periodisering to sole traders and give the
auto-detect a materiality floor:

- Remove the inert PeriodiseringAutoDetectToggle (write-only localStorage,
  no reader anywhere); the settings row is now a plain link to the
  periodisering wizard, with new i18n keys in sv+en.
- Auto-detect tags suggestions under 5 000 kr as low confidence with the
  reason 'Under 5 000 kr: behöver normalt inte periodiseras', citing K1
  (BFNAR 2006:1) for enskild firma and K2 for aktiebolag; the wizard only
  pre-ticks high-confidence rows, so under-floor posts land unticked.
  Personnel-cost lines (7xxx) are exempt: they must always be accrued.
- The accruals GET route resolves companies.entity_type and threads it to
  the detector.
- Per-line accrual hint in the invoice editors is entity-aware: new
  accruals.k1_hint (K1, förenklat årsbokslut) for EF, k2_hint stays for AB.
- Periodisering wizard and year-end AccrualsStep relabel Revisionsarvode
  to Bokslutsarvode for EF, default the liability account to 2991 instead
  of 2992, and show a muted K1-floor intro line.

All copy stays advisory (behöver normalt inte, never får inte):
entity_type is a proxy since no förenklat-vs-full-årsbokslut flag exists.

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

* fix(bokslut): SEK-correct materiality floor, entity-type via settings, narrower personnel exemption

Review fixes on the K1 periodisering branch:

- The 5 000 kr floor now compares a SEK amount: queries select currency
  and subtotal_sek, the floor uses the periodisation share of
  subtotal_sek for foreign-currency invoices, and is skipped entirely
  when no SEK amount is resolvable (accrual-k2-hint precedent,
  DECISIONS.md 2026-07-26).
- The accruals route resolves entity type via getCompanyEntityType
  (company_settings-primary, companies fallback) instead of reading
  companies.entity_type directly.
- The personnel-cost exemption from the floor is narrowed from
  startsWith('7') to /^7[0-6]/: 78xx/79xx are not personnel costs.

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

---------

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:
Jakob Wennberg
2026-08-20 10:06:01 +02:00
committed by GitHub
co-authored by Claude Fable 5 Jakob Wennberg
parent c402421908
commit 64fc7c783d
16 changed files with 622 additions and 179 deletions
+5 -1
View File
@@ -1047,6 +1047,7 @@
"preview_invalid_period": "The period end must be after its start",
"preview_min_months": "Deferral requires at least 2 calendar months",
"k2_hint": "Amounts under SEK 5,000 normally do not need to be deferred (K2).",
"k1_hint": "Amounts under SEK 5,000 normally do not need to be deferred (K1, simplified annual accounts).",
"validation_period": "Enter a period of at least 2 calendar months",
"incomplete_toast_title": "Incomplete deferral",
"incomplete_toast_description": "Set the period start and end (at least 2 months) or remove the deferral from the line."
@@ -1949,7 +1950,10 @@
"fy_unlock_success": "Fiscal year unlocked",
"fy_action_error": "The action could not be completed",
"related_heading": "Related",
"related_chart_of_accounts": "Chart of accounts (BAS)"
"related_chart_of_accounts": "Chart of accounts (BAS)",
"periodisering_label": "Accruals",
"periodisering_help": "The year-end wizard scans invoices for date ranges extending into the next fiscal year and suggests accruals. Nothing is booked without your review.",
"periodisering_open_wizard": "Open the accruals wizard"
},
"settings_tax": {},
"settings_team": {},
+5 -1
View File
@@ -1047,6 +1047,7 @@
"preview_invalid_period": "Periodens slut måste vara efter dess start",
"preview_min_months": "Periodisering kräver minst 2 kalendermånader",
"k2_hint": "Belopp under 5 000 kr behöver normalt inte periodiseras (K2).",
"k1_hint": "Belopp under 5 000 kr behöver normalt inte periodiseras (K1, förenklat årsbokslut).",
"validation_period": "Ange en period på minst 2 kalendermånader",
"incomplete_toast_title": "Ofullständig periodisering",
"incomplete_toast_description": "Ange periodens start och slut (minst 2 månader) eller ta bort periodiseringen från raden."
@@ -1949,7 +1950,10 @@
"fy_unlock_success": "Räkenskapsåret är upplåst",
"fy_action_error": "Åtgärden kunde inte slutföras",
"related_heading": "Relaterat",
"related_chart_of_accounts": "Kontoplan (BAS)"
"related_chart_of_accounts": "Kontoplan (BAS)",
"periodisering_label": "Periodisering",
"periodisering_help": "I bokslut-wizarden skannas fakturor efter datumintervall som sträcker sig in i nästa räkenskapsår och periodiseringar föreslås. Inget bokförs utan din granskning.",
"periodisering_open_wizard": "Öppna periodiserings-wizarden"
},
"settings_tax": {},
"settings_team": {},