* feat(reconciliation): close the bank-feed loop on voucher links and re-tag mis-typed opening balances
Two related fixes to bank reconciliation correctness:
1. Auto-reconcile on voucher link. Linking an invoice or supplier invoice to
an existing voucher previously advanced only the invoice — the bank
transaction that paid it kept sitting in the Transactions inbox with a null
journal_entry_id. linkInvoiceToVoucher / linkSupplierInvoiceToVoucher now
call autoReconcileTransactionForLinkedVoucher (lib/reconciliation), which
links the bank transaction to the same verifikat when exactly one unbooked
line matches it. Best-effort and post-commit: a failure here never fails the
link. The result surfaces reconciledTransactionId; the inbox row leaves the
list and the UI shows link_success_tx_reconciled.
2. Re-tag mis-typed opening balances. getReconciliationStatus and the GL-line
matching RPCs identify a cash account's ingående balans solely by
journal_entries.source_type='opening_balance'. Companies migrated from other
systems often booked the bank IB as an ordinary voucher (source_type
'import' or 'manual'), so it was never excluded and surfaced as a phantom
reconciliation difference equal to the opening balance. Adds:
- migration mark_entry_as_opening_balance: a GUC-gated carve-out in the
immutability trigger plus a SECURITY DEFINER RPC that validates the entry
(balance-sheet lines only, dated on a fiscal-period boundary), flips the
source_type, and writes an audit row — no blanket data sweep.
- POST /api/reconciliation/bank/mark-opening-balance + MarkOpeningBalanceSchema.
- BankReconciliationView action to trigger it from the IB diff.
The gnubok_create_voucher executor now accepts a typed is_opening_balance flag
and derives source_type='opening_balance' only after validating class 1/2 lines
on the period start, so new IBs land correctly typed.
Covered by lib/reconciliation auto-reconcile tests, voucher-executors tests,
and a mark-entry-as-opening-balance pg-real test.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* chore: rebrand gnubok → Accounted and prune swarm agent skills
Product rebrand and skills housekeeping. No runtime behaviour change.
Rebrand: replace user-visible "gnubok" with "Accounted" across docs, READMEs,
in-code comments, doc-site content, MCP skill/resource prose, and the
gnubok-mcp package description. The MCP resource URI scheme is moved gnubok://
→ Accounted:// consistently across resource registrations, the event-type
comment, and the resource/skill tests. Deliberately preserved as stable
identifiers (NOT rebranded): the gnubok-company-id cookie, gnubok_sk_ / gnubok_inv_
token prefixes, the gnubok-mcp npm bridge name, and the AGI <gem:Programnamn>
value (kept 'gnubok' per its source comment — it is the software identifier sent
to Skatteverket and must not churn across visual rebrands).
Skills: remove the 27 swarm-* agent SKILL.md atoms (no longer used; already
absent from the agent_atom_registry in prod), refresh the remaining skill docs,
add the .claude/rules/ path-scoped rule set, and regenerate the
seed_agent_atom_bodies migration + .skill-body-manifest.json via
`npm run skills:generate` so the DB-backed skill bodies match the trimmed set.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
6.6 KiB
Regulatory Changes 2024-2026
Recent and upcoming changes to Swedish accounting law, tax rules, and reporting requirements. Organized chronologically.
Already in effect
1 July 2024: Pappersfritt bokföring (SFS 2024:494)
BFL 7 kap 6§ updated.
- No longer required to keep paper originals after digitization
- Applies retroactively to material digitized before 1 July 2024
- The digital copy must be a faithful reproduction
- Must still preserve for 7 years
- Software implication: receipt OCR/scanning is now the primary archival path, not supplementary. Your digitization workflow must ensure completeness and immutability.
1 January 2025: Momsregistreringsgräns höjd
- Threshold raised from 30 000 to 80 000 kr per 12-month period
- Companies with momspliktig omsättning under 80 000 kr need not register for moms
- Can still register voluntarily
- Software implication: update validation logic for momsregistrering recommendations.
1 January 2025: AGI föräldraledighet/VAB
- Employers must report monthly to Skatteverket when employees take föräldraledighet or vård av sjukt barn (VAB)
- Reported as part of arbetsgivardeklaration
- Software implication: add föräldraledighet/VAB fields to AGI submission.
Effective 1 January 2026
3:12-reglerna reformed
Major overhaul of fåmansföretagsreglerna:
New gränsbelopp calculation (3 components):
- Grundbelopp: 4 IBB = 4 × 83 400 = 333 600 kr, divided equally among shares
- Lönebaserat utrymme: 50% × (andel av löneunderlag - 8 IBB per delägare). Max: 50 × egen/närstående lön
- Ränta på omkostnadsbelopp: statslåneränta + 9% on omkostnadsbelopp > 100 000 kr
Key changes:
- Löneuttagskravet slopat (no minimum salary requirement for 2025)
- Replaced by löneavdrag: 8 IBB (667 200 kr for 2026) per delägare subtracted from löneunderlag
- 4-procentsspärren borta: all delägare can use löneunderlag regardless of ownership share
- Karensti shortened from 5 to 4 years
- Ränteuppräkning of sparat utdelningsutrymme abolished
- Index- och kapitalunderlagsreglerna phased out (can still be used until 2029 for old shares)
Software implication: K10-blanketten for 2025 (filed spring 2027) uses new rules. If your software calculates utdelningsutrymme, the entire calculation engine needs rebuilding.
K2/K3 changes (BFN decision June 2025)
Applies to räkenskapsår starting after 31 December 2025 (i.e., 2026 calendar year onwards).
Excluded from K2:
- Bostadsrättsföreningar and bostadsföreningar (must use K3)
- Companies where byggnader generate >= 75% of nettoomsättning (must use K3)
- Nystartade företag starting after 30 June 2025 with förlängt first räkenskapsår ending 31 Dec 2026 or later must apply new rules immediately
K3 changes:
- Updated rules for aktierelaterade ersättningar (ch. 26)
- Updated rules for eventualtillgångar (ch. 21.15): must now be "så gott som säkert" for recognition
- New transitional provisions for applying changes
Software implication: if your system helps companies choose K-regelverk, update the decision logic. If you generate årsredovisning, BRF templates need K3 format.
Belopp och gränser 2026
| Item | 2025 | 2026 |
|---|---|---|
| Prisbasbelopp | 58 800 | 59 200 |
| Förhöjt prisbasbelopp | 59 900 | 60 500 |
| Inkomstbasbelopp | 80 600 | 83 400 |
| Inventarier av mindre värde | 29 400 | 29 600 |
| Traktamente heldag | 290 | 300 |
| Traktamente halvdag | 145 | 150 |
| Nattraktamente | 145 | 150 |
Ålderspensionsavgift
- Persons who are 67+ at year start (born 1959 or earlier): only ålderspensionsavgift 10.21%
- Previous threshold was 66 years (born 1958 or earlier)
F-skatt changes
- Applicant can request tidsbegränsat godkännande
- Skatteverket gains right to demand documentation proving eligibility
- Intended to combat missbruk of F-skatt
ROT-avdrag
- Returns to 30% of arbetskostnad (was temporarily 35% during 2024)
- Max 50 000 kr per person per year
- Combined ROT+RUT max: 75 000 kr
Reseavdrag
- Threshold for avdrag for resor between bostad och arbetsplats raised from 11 000 to 15 000 kr
CSRD hållbarhetsrapportering
- From 2026 (for reporting year 2025): larger companies beyond listed must comply with CSRD
- Criteria: 2 of 3: >250 employees, >40 MSEK balansomslutning, >80 MSEK nettoomsättning
- Smaller listed companies from 2027 (reporting year 2026)
- Software implication: not directly accounting, but some customers may need help with data collection
Effective 1 April 2026
Sänkt livsmedelsmoms (Prop. 2025/26:55)
- Livsmedel: 12% -> 6% (tillfälligt)
- Period: 1 April 2026 - 31 December 2027
- Restaurang/servering: stays at 12%
- Transition rule: rate based on leveransdatum, not fakturadatum
- Take-away/avhämtning: 6%. Servering/förtäring på plats: 12%
Critical implementation details:
- Invoices spanning the transition date: split by delivery date
- Advance payments (förskott): apply the rate valid when the supply actually occurs
- Credit notes: apply the rate that was valid for the original transaction
- BAS accounts: livsmedel output VAT moves from 2621 (12%) to 2631 (6%)
- Momsdeklaration: ruta 31 (12%) decreases, ruta 32 (6%) increases
Software implication: your system needs a date-aware momssats lookup. Hard-coding rates is not viable. Store momssatser with giltighetstid (valid_from, valid_to).
Expected mid-2026
Skatteverket digital granskning (Prop. 2025/26:107)
- Proposed effective date: 1 July 2026 (pending riksdag vote spring 2026)
- Skatteverket may access digital bokföring directly via internet during revision
- Only when legal ground for kontroll already exists
- Removes the ban on telenät-based granskning in skatteförfarandelagen
Software implication: your system should support read-only access for Skatteverket during revision. Accounted's immutable audit_log, WORM document storage, and immutability of posted entries naturally support this. Consider building a dedicated API endpoint or export mechanism.
On the horizon (2027+)
Obligatorisk e-fakturering B2B
EU directive ViDA (VAT in the Digital Age) will likely require structured e-invoicing for B2B transactions. Sweden expected to implement 2028-2030. Standards: Peppol BIS Billing 3.0, EN 16931.
Software implication: start supporting Peppol e-invoicing format now. It's already used by the public sector (offentlig sektor requires e-faktura since 2019). B2B mandate will make it universal.
Livsmedelsmoms reversion
Expected 1 January 2028: livsmedel reverts from 6% to 12%. Your system must handle the reversion date. Make sure momssats lookup is date-driven.