Files
accounted/.claude/skills/swedish-e-invoicing/references/consumer-and-b2c.md
T
Jakob Wennberg ec27228a8e style: remove em/en dashes repo-wide, add CLAUDE.md rule against them (#890)
Em dashes (—) and en dashes (–) had spread across comments, docs, tests,
and a few UI strings, reading as AI-generated boilerplate rather than
house style. Replaced each with punctuation matching its context: colon
for explanatory clauses, comma for asides, plain hyphen for numeric/legal
ranges (e.g. "21-23§"), "to"/"till" for date ranges, parentheses for
paired-dash asides. messages/en.json and messages/sv.json were fixed by
hand together to keep sv/en in sync.

Left untouched where the dash is the functional subject rather than
decorative punctuation: date-range-parser.ts's separator regex,
charset-repair.ts's CP1252 byte-mapping table (and its test), the SIE
encoding mojibake docs, generic-csv.ts's minus-sign normalizer, the
agent system-prompt files that already instruct against em dashes, and
a golden iXBRL test fixture compared byte-for-byte.

Also fixes two bugs surfaced along the way: an off-by-one in
ApiKeysPanel's scope-label split (a leftover from an earlier partial
pass), and a charset-repair test that had lost the literal en-dash it
exists to verify.

Regenerated the agent atom seed migration (skills:generate) since 27
SKILL.md files changed. Added a CLAUDE.md rule against em/en dashes,
with an explicit carve-out for the functional-dash cases above.

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-04 15:58:06 +02:00

4.9 KiB

Consumer E-Faktura Ecosystem (B2C)

The B2C side of Swedish e-invoicing runs on completely different rails from Peppol and must be implemented separately. This reference covers Bankgirot's e-faktura privat, Kivra digital mailbox, Min Myndighetspost, and how a Swedish accounting/fintech product should approach B2C invoicing.

Bankgirot e-faktura privat, the bank rail

E-faktura privat distributes invoices directly into Swedish individuals' internet bank inboxes. Volume hit a record 168.9 million e-invoices to private individuals in 2024 (Bankföreningen).

Connection process

Senders connect via Anslutningsärende (Standard or Express track) using the EFA / e-giroformat. Recipients identify themselves through Anmälningsärende in their own bank, selecting which senders to receive from.

Bank "license" fees ~1,000 SEK/yr per bank. Transaction fees per document negotiated.

Bank participants

All major Swedish banks participate:

  • Swedbank
  • Handelsbanken
  • Nordea
  • SEB
  • Länsförsäkringar Bank
  • ICA Banken
  • SBAB
  • Danske Bank
  • Skandia
  • Sparbankerna (the network of independent savings banks)

Volume trajectory

Year Volume
2009 35M
2010 60M
2022 160M
2024 168.9M

Growth has flattened as Kivra has captured incremental volume.

Kivra, the digital mailbox

Kivra is the de facto digital mailbox in Sweden. Numbers (April 2026):

  • 6+ million users (~70% of Swedish adults).
  • 50,000+ corporate senders.
  • 532+ million dispatches in 2024.
  • 99% open rate.
  • 200,000+ companies and associations as recipients.

Ownership

41an Invest (Karl-Johan Persson + Stefan Krook), FAM, with SEB minority.

Capabilities

  • Invoice delivery + storage.
  • Tink-based PISP payments and Swish integration (one-tap pay from inbox).
  • Receipts, contracts, official mail.
  • Per-document pricing typically 3-5 SEK.

API integration

Kivra exposes a REST API for tenant senders. Visma Autoinvoice exposes Kivra-routing via its B2CSE service flag, viable shortcut for early product launches.

Min Myndighetspost

DIGG-operated digital mailbox for government communications. Significantly lower adoption than Kivra. Mostly used for tax-related correspondence. Not a primary channel for commercial invoicing.

Consumer rails vs Peppol, the architectural distinction

Dimension Peppol (B2B/B2G) Bank rails / Kivra (B2C)
Format UBL 2.1 (EN 16931) EFA / e-giroformat / proprietary JSON
Identifier Peppol-ID (orgnr) Personnummer / bank account
Routing SMP/SML/AS4 Bank backend / Kivra API
Onboarding Recipient publishes in SMP Recipient consents in their bank/Kivra
Discovery Peppol Directory Bank-side recipient lookup or Kivra API
Payment OCR/Bankgiro/Plusgiro/IBAN One-tap from bank/Kivra (Swish/PISP)
Cost per doc 3-3.50 SEK 3-5 SEK (Kivra), 1-3 SEK (bank)

Bankgirot and Plusgirot, ownership

  • Bankgirot (BGC, founded 1959) is jointly owned by SEB, Swedbank, Handelsbanken, Danske Bank, Nordea, Länsförsäkringar Bank and SkandiaBanken.
  • Plusgirot is owned by Nordea (acquired 2002 from Posten). A Plusgiro number is a real Nordea bank account, unlike Bankgiro which is alias-routing.
  • Both joined Bankgirot membership in 2002 for interbank deposits.

Implementation strategy for a new Swedish accounting product

To support consumer (B2C) invoicing, a Swedish accounting platform needs two parallel integrations beyond Peppol:

  1. Bankgirot e-faktura privat, via a Certified Technical Distributor (CTD) or directly. CTD route is faster (no per-bank license negotiations) but adds intermediary cost.
  2. Kivra, commercial agreement plus REST API integration. Volume-tier pricing.

Shortcut: Visma Autoinvoice exposes both via its B2CSE service flag and Kivra-routing. Acceptable for MVP / early launch; migrate to direct integration once volume justifies cost.

Routing logic the product must implement:

if recipient is org → Peppol BIS Billing 3
elif recipient has Kivra registered → Kivra API
elif recipient has bank e-faktura registered → Bankgirot e-faktura privat
elif recipient prefers email → PDF + email (BGC's Stora Inbetalningskortet legacy or own)
else → paper postal (8.25-20 SEK)

Most B2C-heavy senders end up using Kivra preferentially because of higher engagement (99% open rate), but bank e-faktura still dominates recurring/predictable invoices (utilities, telecom, mortgages).

Authoritative source list