diff --git a/.claude/skills/swedish-asset-accounting/references/leasing-and-disposal.md b/.claude/skills/swedish-asset-accounting/references/leasing-and-disposal.md index 0abe501f..f28202c0 100644 --- a/.claude/skills/swedish-asset-accounting/references/leasing-and-disposal.md +++ b/.claude/skills/swedish-asset-accounting/references/leasing-and-disposal.md @@ -79,24 +79,20 @@ Regardless of whether the lease is capitalized in accounting. Asset must be depreciated up to the disposal date before calculating gain/loss. -### Booking Pattern (Sale of Inventory) +### Booking Pattern -**Step 1 - Record sale with VAT:** -``` -Debit 1510 Kundfordran [sale price incl. 25% VAT] -Credit 2611 Utgående moms 25% [VAT amount] -Credit 3973 Vinst avyttring [sale price ex VAT] (or Debit 7973 if loss) -``` +Use one balanced entry after depreciation through the disposal date. The gain +or loss equals `försäljningspris ex moms − bokfört restvärde`. -**Step 2 - Remove asset from books:** ``` -Debit 1229 Ack. avskr. inventarier [accumulated depreciation] -Debit 7973 Förlust avyttring [remaining book value] (or Credit 3973 if already used above) -Credit 1221 Inventarier [original acquisition cost] +Debit 1510 Kundfordran [gross proceeds] +Debit 1229 Ack. avskr. inventarier [accumulated depreciation] +Debit 7973 Förlust vid avyttring [only for a loss] +Credit 1221 Inventarier [original acquisition cost] +Credit 2611 Utgående moms 25% [output VAT] +Credit 3973 Vinst vid avyttring [only for a gain] ``` -**Alternative (net method):** Some systems use a combined entry. The gain/loss equals: `försäljningspris ex moms − bokfört restvärde`. - ### Gain/Loss Accounts | Account | Direction | Description | @@ -114,17 +110,15 @@ Asset: anskaffningsvärde 50,000 kr, ack. avskr. 10,000 kr (book value 40,000 kr Sold for 56,000 kr ex VAT. ``` -Debit 1510 70,000 (56,000 + 14,000 VAT) -Credit 2611 14,000 (25% moms) -Credit 3973 16,000 (gain: 56,000 − 40,000) +Debit 1510 70,000 (gross proceeds) Debit 1229 10,000 (remove accumulated depreciation) Credit 1221 50,000 (remove asset at cost) -Debit 7973 40,000 (book value to loss account) +Credit 2611 14,000 (25% output VAT) +Credit 3973 16,000 (gain: 56,000 − 40,000) ``` -Net effect on income: 3973 16,000 credit + 7973 40,000 debit = 3973 16,000 gain (after netting with book value removal, the two 7973 entries cancel). - -**Note:** Many Swedish systems handle this more cleanly by netting directly. The above shows the full debit/credit flow. +Debits and credits are both 80,000. The 16,000 credit is the complete income +statement effect of the disposal. --- @@ -157,19 +151,30 @@ Credit 1221 [full amount] ### Exceptions 1. **Verksamhetsöverlåtelse (business transfer, ML 5 kap. 38 §):** No VAT when transferring entire business or independent branch. -2. **No original input VAT deduction:** No output VAT on sale if input VAT was never deducted. +2. **No original input VAT deduction (ML 10 kap. 37 §):** The exemption applies only when no part of the input VAT was deductible, including VAT on significant later additions to the asset. 3. **Real property (fastighet):** Generally VAT-exempt sales. ### Jämkning (VAT Adjustment Rules, ML 15 kap.) -Applies to capital goods where significant input VAT was deducted: +Applies to investment goods based on total original input VAT, whether or not +the full amount was deducted: -| Asset type | Correction period | Threshold (ingående moms) | +| Asset type | Adjustment period | Threshold (input VAT) | |---|---|---| | Byggnader | 10 years | ≥ 100,000 kr | | Maskiner/inventarier | 5 years | ≥ 50,000 kr | -If a building is sold outside a business transfer, seller must repay remaining investment VAT in one lump sum for the rest of the correction period. +The acquisition or completion tax year counts as year 1. The disposal tax year +also counts. A one-time adjustment uses: + +`original input VAT × change in deduction percentage × remaining years / total years` + +No adjustment is made when the change is less than 5 percentage points. A +positive adjustment on a taxable sale of movable property is capped at 25% of +the sale price excluding VAT. In a qualifying business transfer under ML 5 +kap. 38 §, the acquirer takes over the adjustment rights and obligations when +the statutory conditions are met. An adjustment document with the information +required by ML 15 kap. 28-31 §§ must be prepared and retained. --- @@ -189,4 +194,4 @@ Disposal triggers reversal of prior värdeminskningsavdrag. Difference between s ### Restvärdeavskrivning -Sale proceeds reduce the skattemässigt restvärde directly. \ No newline at end of file +Sale proceeds reduce the skattemässigt restvärde directly. diff --git a/app/(dashboard)/assets/[id]/dispose/page.tsx b/app/(dashboard)/assets/[id]/dispose/page.tsx index c3dc44c2..3d127b62 100644 --- a/app/(dashboard)/assets/[id]/dispose/page.tsx +++ b/app/(dashboard)/assets/[id]/dispose/page.tsx @@ -1,18 +1,17 @@ 'use client' -import { use, useCallback, useEffect, useMemo, useState } from 'react' +import { use, useCallback, useEffect, useMemo, useState, type ReactNode } from 'react' +import { useTranslations } from 'next-intl' import { useRouter } from 'next/navigation' import Link from 'next/link' import { ArrowLeft, Loader2, Lock } from 'lucide-react' +import { Badge } from '@/components/ui/badge' import { Button } from '@/components/ui/button' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { PageHeader } from '@/components/ui/page-header' -import { Switch } from '@/components/ui/switch' -import { Skeleton } from '@/components/ui/skeleton' -import { Badge } from '@/components/ui/badge' import { Select, SelectContent, @@ -20,15 +19,14 @@ import { SelectTrigger, SelectValue, } from '@/components/ui/select' +import { Skeleton } from '@/components/ui/skeleton' +import { Switch } from '@/components/ui/switch' import { useToast } from '@/components/ui/use-toast' +import { assessJamkning, assessJamkningEligibility } from '@/lib/bokslut/assets/jamkning' +import { getErrorMessage } from '@/lib/errors/get-error-message' import { useCanWrite } from '@/lib/hooks/use-can-write' import { formatCurrency, formatDate } from '@/lib/utils' -import { getErrorMessage } from '@/lib/errors/get-error-message' -import { - assessJamkningEligibility, - computeJamkningAmount, -} from '@/lib/bokslut/assets/jamkning' -import type { Asset, FiscalPeriod, VatTreatment } from '@/types' +import type { Asset, AssetDisposalType, FiscalPeriod, VatTreatment } from '@/types' interface PeriodOption { id: string @@ -39,21 +37,23 @@ interface PeriodOption { locked_at: string | null } -const VAT_TREATMENT_OPTIONS: { value: VatTreatment; label: string; rate: number | null }[] = [ - { value: 'standard_25', label: 'Standard 25 %', rate: 0.25 }, - { value: 'reduced_12', label: 'Reducerad 12 %', rate: 0.12 }, - { value: 'reduced_6', label: 'Reducerad 6 %', rate: 0.06 }, - { value: 'reverse_charge', label: 'Omvänd skattskyldighet', rate: null }, - { value: 'export', label: 'Export (utanför EU)', rate: null }, - { value: 'exempt', label: 'Momsfri', rate: null }, -] +const VAT_TREATMENTS = ['standard_25', 'reverse_charge', 'export', 'exempt'] as const -function round2(n: number): number { - return Math.round(n * 100) / 100 +function round2(value: number): number { + return Math.round(value * 100) / 100 +} + +// Accept Swedish-formatted amounts ("125 000,50") as well as dot decimals. +function parseAmount(raw: string): number | null { + const normalized = raw.replace(/\s/g, '').replace(',', '.') + if (normalized === '') return null + const value = Number(normalized) + return Number.isFinite(value) ? value : null } export default function DisposeAssetPage({ params }: { params: Promise<{ id: string }> }) { const { id } = use(params) + const t = useTranslations('assets.disposal') const router = useRouter() const { toast } = useToast() const { canWrite } = useCanWrite() @@ -62,513 +62,337 @@ export default function DisposeAssetPage({ params }: { params: Promise<{ id: str const [periods, setPeriods] = useState([]) const [loading, setLoading] = useState(true) const [submitting, setSubmitting] = useState(false) - - // Form state - const [disposalDate, setDisposalDate] = useState(() => new Date().toISOString().slice(0, 10)) - const [proceeds, setProceeds] = useState('') + const [disposalType, setDisposalType] = useState('sale') + const [disposalDate, setDisposalDate] = useState( + () => new Date().toISOString().slice(0, 10), + ) + const [proceeds, setProceeds] = useState('') const [vatTreatment, setVatTreatment] = useState('standard_25') - const [vatAmount, setVatAmount] = useState('') - const [vatAutoCalc, setVatAutoCalc] = useState(true) - const [periodId, setPeriodId] = useState('') - const [proceedsAccount, setProceedsAccount] = useState('1930') + const [periodId, setPeriodId] = useState('') + const [proceedsAccount, setProceedsAccount] = useState('1930') + const [originalInputVat, setOriginalInputVat] = useState('') + const [originalDeductionPercent, setOriginalDeductionPercent] = useState('100') + const [businessTransferConfirmed, setBusinessTransferConfirmed] = useState(false) + const [adjustmentDocumentConfirmed, setAdjustmentDocumentConfirmed] = useState(false) - // Jämkning state - const [jamkningEnabled, setJamkningEnabled] = useState(false) - const [originalInputVat, setOriginalInputVat] = useState('') - - // Load asset + periods useEffect(() => { let cancelled = false Promise.all([ - fetch(`/api/assets`).then((r) => r.json()), - fetch('/api/bookkeeping/fiscal-periods').then((r) => r.json()), + fetch(`/api/assets/${id}`).then((response) => response.json()), + fetch('/api/bookkeeping/fiscal-periods').then((response) => response.json()), ]) - .then(([assetsRes, periodsRes]) => { + .then(([assetResponse, periodsResponse]) => { if (cancelled) return - const assets: Asset[] = assetsRes.data ?? [] - const found = assets.find((a) => a.id === id) ?? null - setAsset(found) - const periodList: PeriodOption[] = (periodsRes.data ?? []).map((p: FiscalPeriod) => ({ - id: p.id, - name: p.name, - period_start: p.period_start, - period_end: p.period_end, - is_closed: p.is_closed, - locked_at: p.locked_at, - })) - setPeriods(periodList) - setLoading(false) + setAsset(assetResponse.data ?? null) + setPeriods( + (periodsResponse.data ?? []).map((period: FiscalPeriod) => ({ + id: period.id, + name: period.name, + period_start: period.period_start, + period_end: period.period_end, + is_closed: period.is_closed, + locked_at: period.locked_at, + })), + ) }) .catch(() => { if (!cancelled) { toast({ - title: 'Kunde inte ladda', - description: 'Försök igen.', + title: t('load_failed_title'), + description: t('try_again'), variant: 'destructive', }) - setLoading(false) } }) + .finally(() => { + if (!cancelled) setLoading(false) + }) return () => { cancelled = true } - }, [id, toast]) + }, [id, t, toast]) - // Auto-select matching fiscal period when disposalDate changes. useEffect(() => { - if (!disposalDate || periods.length === 0) return const match = periods.find( - (p) => disposalDate >= p.period_start && disposalDate <= p.period_end, + (period) => disposalDate >= period.period_start && disposalDate <= period.period_end, ) - if (match && match.id !== periodId) setPeriodId(match.id) - }, [disposalDate, periods, periodId]) + if (match) setPeriodId(match.id) + }, [disposalDate, periods]) - // Derived: VAT rate from treatment - const selectedVatOpt = VAT_TREATMENT_OPTIONS.find((o) => o.value === vatTreatment) - const proceedsNum = Number(proceeds) || 0 - const computedVat = useMemo(() => { - if (!selectedVatOpt || selectedVatOpt.rate === null) return 0 - // Standard convention: proceeds is GROSS (incl VAT). - // vat = gross × rate / (1 + rate) - return round2((proceedsNum * selectedVatOpt.rate) / (1 + selectedVatOpt.rate)) - }, [proceedsNum, selectedVatOpt]) - - // Auto-fill VAT amount when auto-calc is on. useEffect(() => { - if (vatAutoCalc) { - if (selectedVatOpt && selectedVatOpt.rate !== null) { - setVatAmount(String(computedVat)) - } else { - setVatAmount('0') - } + if (disposalType === 'scrap') setProceeds('0') + if (disposalType !== 'business_transfer') { + setBusinessTransferConfirmed(false) + setAdjustmentDocumentConfirmed(false) } - }, [computedVat, selectedVatOpt, vatAutoCalc]) + }, [disposalType]) + + const parsedProceeds = parseAmount(proceeds) + const proceedsNumber = parsedProceeds ?? 0 + const proceedsInvalid = + disposalType !== 'scrap' && proceeds.trim() !== '' && parsedProceeds === null + const vatAmount = + disposalType === 'sale' && vatTreatment === 'standard_25' + ? round2(proceedsNumber * (0.25 / 1.25)) + : 0 + const netProceeds = round2(proceedsNumber - vatAmount) + const selectedPeriod = periods.find((period) => period.id === periodId) + const periodLocked = Boolean( + selectedPeriod && (selectedPeriod.is_closed || selectedPeriod.locked_at !== null), + ) - // Jämkning eligibility, derived from asset + disposal date. const eligibility = useMemo(() => { if (!asset) return null return assessJamkningEligibility({ - basAssetAccount: asset.bas_asset_account, - basExpenseAccount: asset.bas_expense_account, - category: asset.category, acquisitionDate: asset.acquisition_date, disposalDate, + basAssetAccount: asset.bas_asset_account, + category: asset.category, }) }, [asset, disposalDate]) - - // Auto-enable jämkning toggle when disposal falls within the correction period. - useEffect(() => { - if (eligibility?.withinCorrectionPeriod && !jamkningEnabled) { - setJamkningEnabled(true) - } - }, [eligibility?.withinCorrectionPeriod, jamkningEnabled]) - - const originalInputVatNum = Number(originalInputVat) || 0 - const jamkningAmount = useMemo(() => { - if (!jamkningEnabled || !eligibility) return 0 - return computeJamkningAmount({ - originalInputVat: originalInputVatNum, - totalCorrectionMonths: eligibility.totalCorrectionMonths, - remainingMonths: eligibility.remainingMonths, - disposalEvent: 'triggers_jamkning', + const possibleInvestmentGood = Boolean( + asset && + eligibility?.withinAdjustmentPeriod && + Number(asset.acquisition_cost) >= (eligibility.totalYears === 10 ? 400_000 : 200_000), + ) + const jamkningAssessment = useMemo(() => { + if (!asset || originalInputVat === '' || originalDeductionPercent === '') return null + return assessJamkning({ + acquisitionDate: asset.acquisition_date, + disposalDate, + category: asset.category, + basAssetAccount: asset.bas_asset_account, + originalInputVat: Number(originalInputVat) || 0, + originalDeductionPercent: Number(originalDeductionPercent) || 0, + disposalType, + vatTreatment: disposalType === 'sale' ? vatTreatment : undefined, + netProceeds, }) - }, [jamkningEnabled, eligibility, originalInputVatNum]) + }, [ + asset, + disposalDate, + disposalType, + netProceeds, + originalDeductionPercent, + originalInputVat, + vatTreatment, + ]) const handleSubmit = useCallback(async () => { if (!asset || !periodId) return setSubmitting(true) - const vatNum = Number(vatAmount) || 0 const body: Record = { + disposal_type: disposalType, disposed_at: disposalDate, - disposed_proceeds: proceedsNum, + disposed_proceeds: disposalType === 'scrap' ? 0 : proceedsNumber, fiscal_period_id: periodId, proceeds_account: proceedsAccount, } - if (vatNum > 0) { - body.proceeds_vat = vatNum - body.vat_treatment = vatTreatment + if (disposalType === 'sale') body.vat_treatment = vatTreatment + if (originalInputVat !== '' && originalDeductionPercent !== '') { + body.jamkning_original_input_vat = Number(originalInputVat) + body.jamkning_original_deduction_percent = Number(originalDeductionPercent) } - if (jamkningEnabled && jamkningAmount > 0 && eligibility) { - body.jamkning_amount = jamkningAmount - body.jamkning_remaining_months = eligibility.remainingMonths - body.jamkning_total_months = eligibility.totalCorrectionMonths - body.jamkning_original_input_vat = originalInputVatNum + if (disposalType === 'business_transfer') { + body.business_transfer_confirmed = businessTransferConfirmed + body.adjustment_document_confirmed = adjustmentDocumentConfirmed } try { - const res = await fetch(`/api/assets/${id}/dispose`, { + const response = await fetch(`/api/assets/${id}/dispose`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body), }) - const json = await res.json() - if (!res.ok) { + const json = await response.json() + if (!response.ok) { toast({ - title: 'Avyttring misslyckades', - description: getErrorMessage(json?.error ?? json) || 'Försök igen.', + title: t('submit_failed_title'), + description: getErrorMessage(json?.error ?? json) || t('try_again'), variant: 'destructive', }) return } - toast({ - title: 'Tillgång avyttrad', - description: 'Verifikat skapat.', - }) + toast({ title: t('success_title'), description: t('success_description') }) router.push('/assets') - } catch (err) { + } catch (error) { toast({ - title: 'Avyttring misslyckades', - description: getErrorMessage(err), + title: t('submit_failed_title'), + description: getErrorMessage(error), variant: 'destructive', }) } finally { setSubmitting(false) } }, [ + adjustmentDocumentConfirmed, asset, + businessTransferConfirmed, disposalDate, - eligibility, + disposalType, id, - jamkningAmount, - jamkningEnabled, - originalInputVatNum, + originalDeductionPercent, + originalInputVat, periodId, proceedsAccount, - proceedsNum, + proceedsNumber, router, + t, toast, - vatAmount, vatTreatment, ]) if (loading) { return (
- - - - - - - - + +
) } - if (!asset) { + if (!asset || asset.disposed_at) { return (
- + - -

Tillgången kunde inte hittas.

-
- - - -
+ +

{!asset ? t('not_found') : t('already_disposed', { date: formatDate(asset.disposed_at!) })}

+
) } - if (asset.disposed_at) { - return ( -
- - - -

- Tillgången är redan avyttrad ({formatDate(asset.disposed_at)}). -

- - - -
-
-
- ) - } - - const netProceeds = round2(proceedsNum - (Number(vatAmount) || 0)) - const isVatLineTreatment = selectedVatOpt?.rate !== null - const selectedPeriod = periods.find((p) => p.id === periodId) - const periodLocked = selectedPeriod - ? selectedPeriod.is_closed || selectedPeriod.locked_at !== null - : false + const transferNeedsDocument = jamkningAssessment?.direction === 'transferred' + const missingJamkningData = possibleInvestmentGood && + (originalInputVat === '' || originalDeductionPercent === '') return (
- - - } + title={t('title')} + action={} /> - - {asset.name} - - -
- Anskaffningsvärde - {formatCurrency(Number(asset.acquisition_cost))} -
-
- Anskaffat - {formatDate(asset.acquisition_date)} -
-
- Konton (BAS) - - {asset.bas_asset_account} / {asset.bas_accumulated_account} / {asset.bas_expense_account} - -
+ {asset.name} + + + +
- - Avyttringsuppgifter - - -
-
- - setDisposalDate(e.target.value)} - className="tabular-nums" - /> -
+ {t('details_title')} + + + + + + setDisposalDate(event.target.value)} className="tabular-nums" /> + + + + {periodLocked &&

{t('period_locked')}

} +
+ + setProceeds(event.target.value)} disabled={disposalType === 'scrap'} className="tabular-nums" /> + + {disposalType !== 'scrap' && setProceedsAccount(event.target.value)} className="tabular-nums" />} +
+ -
- - setVatTreatment(value as VatTreatment)}> + + {VAT_TREATMENTS.map((value) => {t(`vat_${value}`)})} - {periodLocked && ( -

- Vald period är låst eller stängd: välj en öppen period. -

- )} + +
+ + +
- -
- - setProceeds(e.target.value)} - placeholder="0,00" - className="tabular-nums" - /> -
- -
- - setProceedsAccount(e.target.value)} - placeholder="1930" - className="tabular-nums" - /> -
-
- - + + + )} - - Moms vid avyttring (ML 3 kap 3 §) - - -
-
- - -
- -
- - { - setVatAutoCalc(false) - setVatAmount(e.target.value) - }} - placeholder="0,00" - disabled={!isVatLineTreatment} - className="tabular-nums" - /> - {isVatLineTreatment && ( -
- - Räkna ut moms automatiskt -
- )} -
-
- -
-
- Brutto - {formatCurrency(proceedsNum)} -
-
- Moms - {formatCurrency(Number(vatAmount) || 0)} -
-
- Netto - {formatCurrency(netProceeds)} -
-
-
-
- - - - Jämkning av ingående moms (ML 8a kap) - - - {eligibility?.withinCorrectionPeriod ? ( - - Inom korrigeringstid ({eligibility.remainingMonths} mån kvar av{' '} - {eligibility.totalCorrectionMonths}) - - ) : ( - Utanför korrigeringstid: ingen jämkning behövs - )} - -
- - -
- - {jamkningEnabled && eligibility?.withinCorrectionPeriod && ( -
-
-
- - setOriginalInputVat(e.target.value)} - placeholder="0,00" - className="tabular-nums" - /> -
-
- -
- {eligibility.totalCorrectionMonths} mån -
-
-
- -
- {eligibility.remainingMonths} mån -
-
-
- -
- {formatCurrency(jamkningAmount)} -
-
-
-

- Jämkningen bokförs som kredit på 2641 (återförd ingående moms) och debet på - förlustkontot för tillgångsklassen. -

+ {t('adjustment_title')} + + {eligibility?.withinAdjustmentPeriod + ? {t('within_adjustment_period', { years: eligibility.remainingYears, total: eligibility.totalYears })} + : {t('outside_adjustment_period')}} + {eligibility?.withinAdjustmentPeriod && ( +
+ + setOriginalInputVat(event.target.value)} className="tabular-nums" /> + + + setOriginalDeductionPercent(event.target.value)} className="tabular-nums" /> +
)} + {jamkningAssessment && ( +
+ + + {jamkningAssessment.capped &&

{t('adjustment_capped')}

} +
+ )} + {disposalType === 'business_transfer' && ( +
+ + +
+ )} + {disposalType === 'business_transfer' && transferNeedsDocument && ( +
+ + +
+ )} + {missingJamkningData &&

{t('adjustment_data_required')}

}
- - - +
) } + +function Field({ label, htmlFor, hint, children }: { label: string; htmlFor: string; hint?: string; children: ReactNode }) { + return
{children}{hint &&

{hint}

}
+} + +function SummaryRow({ label, value, strong = false }: { label: string; value: string; strong?: boolean }) { + return
{label}{value}
+} diff --git a/app/api/assets/[id]/dispose/route.ts b/app/api/assets/[id]/dispose/route.ts index de2d1195..279c591e 100644 --- a/app/api/assets/[id]/dispose/route.ts +++ b/app/api/assets/[id]/dispose/route.ts @@ -7,8 +7,6 @@ import { disposeAsset } from '@/lib/bokslut/assets/asset-service' const VAT_TREATMENTS = [ 'standard_25', - 'reduced_12', - 'reduced_6', 'reverse_charge', 'export', 'exempt', @@ -16,77 +14,52 @@ const VAT_TREATMENTS = [ const DisposeAssetSchema = z .object({ + disposal_type: z.enum(['sale', 'scrap', 'business_transfer']), disposed_at: z.string().regex(/^\d{4}-\d{2}-\d{2}$/), - /** Gross proceeds (INCL VAT when applicable). */ disposed_proceeds: z.number().nonnegative(), proceeds_account: z.string().regex(/^\d{4}$/).optional(), fiscal_period_id: z.string().uuid(), - /** Output VAT on the proceeds. Defaults to 0 (sale was momsfri). */ - proceeds_vat: z.number().nonnegative().optional(), - /** Required when proceeds_vat > 0 so the engine can resolve a 26xx account. */ vat_treatment: z.enum(VAT_TREATMENTS).optional(), - /** Precomputed jämkning amount (ML 8a kap 7 §). Caller supplies; engine - * books a 2641 credit + loss-account debit. */ - jamkning_amount: z.number().nonnegative().optional(), - /** Audit metadata. */ - jamkning_remaining_months: z.number().int().nonnegative().optional(), - jamkning_total_months: z.number().int().positive().optional(), jamkning_original_input_vat: z.number().nonnegative().optional(), - // accumulated_depreciation is intentionally NOT accepted from the client: - // disposeAsset sums depreciation_schedules server-side so callers cannot - // inflate the book-value calculation. + jamkning_original_deduction_percent: z.number().min(0).max(100).optional(), + business_transfer_confirmed: z.boolean().optional(), + adjustment_document_confirmed: z.boolean().optional(), }) .superRefine((value, ctx) => { - // VAT consistency: if a treatment that produces a VAT line is selected, - // the VAT amount must equal 25%/12%/6% of the net proceeds. Tolerance is - // ±0.50 kr to handle rounding on item prices. - if (value.proceeds_vat && value.proceeds_vat > 0) { - if (!value.vat_treatment) { - ctx.addIssue({ - code: z.ZodIssueCode.custom, - path: ['vat_treatment'], - message: 'vat_treatment krävs när proceeds_vat > 0.', - }) - return - } - const rate = vatRateFromTreatment(value.vat_treatment) - if (rate === null) { - // Treatments without a VAT line must carry 0 VAT. - ctx.addIssue({ - code: z.ZodIssueCode.custom, - path: ['proceeds_vat'], - message: `proceeds_vat måste vara 0 för momsbehandling "${value.vat_treatment}".`, - }) - return - } - // Expected: proceeds_gross = net × (1 + rate), so net = gross / (1 + rate) - // and vat = gross - net = gross × rate / (1 + rate). - const expectedVat = (value.disposed_proceeds * rate) / (1 + rate) - if (Math.abs(expectedVat - value.proceeds_vat) > 0.5) { - ctx.addIssue({ - code: z.ZodIssueCode.custom, - path: ['proceeds_vat'], - message: `proceeds_vat ska vara ~${Math.round(expectedVat * 100) / 100} kr för momsbehandling "${value.vat_treatment}" på ${value.disposed_proceeds} kr brutto.`, - }) - } + if (value.disposal_type === 'scrap' && value.disposed_proceeds !== 0) { + ctx.addIssue({ + code: z.ZodIssueCode.custom, + path: ['disposed_proceeds'], + message: 'disposed_proceeds måste vara 0 vid utrangering.', + }) + } + if (value.disposal_type === 'sale' && value.disposed_proceeds > 0 && !value.vat_treatment) { + ctx.addIssue({ + code: z.ZodIssueCode.custom, + path: ['vat_treatment'], + message: 'vat_treatment krävs vid försäljning.', + }) + } + if (value.disposal_type !== 'sale' && value.vat_treatment !== undefined) { + ctx.addIssue({ + code: z.ZodIssueCode.custom, + path: ['vat_treatment'], + message: 'vat_treatment får bara anges vid försäljning.', + }) + } + const hasVat = value.jamkning_original_input_vat !== undefined + const hasPercent = value.jamkning_original_deduction_percent !== undefined + if (hasVat !== hasPercent) { + ctx.addIssue({ + code: z.ZodIssueCode.custom, + path: hasVat + ? ['jamkning_original_deduction_percent'] + : ['jamkning_original_input_vat'], + message: 'Ursprungsmoms och ursprunglig avdragsprocent måste anges tillsammans.', + }) } }) -function vatRateFromTreatment(t: (typeof VAT_TREATMENTS)[number]): number | null { - switch (t) { - case 'standard_25': - return 0.25 - case 'reduced_12': - return 0.12 - case 'reduced_6': - return 0.06 - case 'reverse_charge': - case 'export': - case 'exempt': - return null - } -} - export const POST = withRouteContext( 'assets.dispose', async (request, ctx, { params }: { params: Promise<{ id: string }> }) => { diff --git a/app/api/assets/__tests__/dispose.test.ts b/app/api/assets/__tests__/dispose.test.ts new file mode 100644 index 00000000..cfd6a536 --- /dev/null +++ b/app/api/assets/__tests__/dispose.test.ts @@ -0,0 +1,112 @@ +import { beforeEach, describe, expect, it, vi } from 'vitest' +import { NextResponse } from 'next/server' +import { createMockRequest, createQueuedMockSupabase, parseJsonResponse } from '@/tests/helpers' + +const { supabase, reset } = createQueuedMockSupabase() +const requireAuthMock = vi.fn() +const requireWriteMock = vi.fn() + +vi.mock('@/lib/auth/require-auth', () => ({ + requireAuth: (...args: unknown[]) => requireAuthMock(...args), +})) +vi.mock('@/lib/company/context', () => ({ + getActiveCompanyId: vi.fn().mockResolvedValue('company-1'), + requireCompanyId: vi.fn().mockResolvedValue('company-1'), +})) +vi.mock('@/lib/auth/require-write', () => ({ + requireWritePermission: (...args: unknown[]) => requireWriteMock(...args), +})) +vi.mock('@/lib/bokslut/assets/asset-service', () => ({ + disposeAsset: vi.fn(), +})) + +import { disposeAsset } from '@/lib/bokslut/assets/asset-service' +import { POST } from '../[id]/dispose/route' + +const mockDisposeAsset = vi.mocked(disposeAsset) +const routeParams = { params: Promise.resolve({ id: 'asset-1' }) } +const validBody = { + disposal_type: 'sale', + disposed_at: '2026-06-30', + disposed_proceeds: 125_000, + proceeds_account: '1930', + fiscal_period_id: '11111111-1111-4111-8111-111111111111', + vat_treatment: 'standard_25', +} + +beforeEach(() => { + vi.clearAllMocks() + reset() + requireAuthMock.mockResolvedValue({ user: { id: 'user-1' }, supabase, error: null }) + requireWriteMock.mockResolvedValue({ ok: true }) +}) + +describe('POST /api/assets/[id]/dispose', () => { + it('returns 401 when not authenticated', async () => { + requireAuthMock.mockResolvedValue({ + user: null, + supabase, + error: NextResponse.json({ error: 'Unauthorized' }, { status: 401 }), + }) + + const response = await POST( + createMockRequest('/api/assets/asset-1/dispose', { method: 'POST', body: validBody }), + routeParams, + ) + + expect(response.status).toBe(401) + expect(mockDisposeAsset).not.toHaveBeenCalled() + }) + + it('returns 400 for inconsistent scrapping proceeds', async () => { + const response = await POST( + createMockRequest('/api/assets/asset-1/dispose', { + method: 'POST', + body: { ...validBody, disposal_type: 'scrap', disposed_proceeds: 100, vat_treatment: undefined }, + }), + routeParams, + ) + + expect(response.status).toBe(400) + expect(mockDisposeAsset).not.toHaveBeenCalled() + }) + + it('returns 404 when the asset does not exist', async () => { + mockDisposeAsset.mockRejectedValue(Object.assign(new Error('Asset not found'), { code: 'ASSET_NOT_FOUND' })) + + const { status, body } = await parseJsonResponse<{ error: { code: string } }>( + await POST( + createMockRequest('/api/assets/asset-1/dispose', { method: 'POST', body: validBody }), + routeParams, + ), + ) + + expect(status).toBe(404) + expect(body.error.code).toBe('ASSET_NOT_FOUND') + }) + + it('returns the atomically posted disposal', async () => { + mockDisposeAsset.mockResolvedValue({ + asset: { id: 'asset-1', disposed_at: '2026-06-30' }, + disposal_entry: { id: 'entry-1', status: 'posted', voucher_number: 42 }, + gain_or_loss: 10_000, + } as Awaited>) + + const { status, body } = await parseJsonResponse<{ data: { gain_or_loss: number } }>( + await POST( + createMockRequest('/api/assets/asset-1/dispose', { method: 'POST', body: validBody }), + routeParams, + ), + ) + + expect(status).toBe(200) + expect(body.data.gain_or_loss).toBe(10_000) + expect(mockDisposeAsset).toHaveBeenCalledWith( + supabase, + 'company-1', + 'user-1', + 'asset-1', + validBody, + ) + }) +}) diff --git a/lib/bokslut/__tests__/asset-service.test.ts b/lib/bokslut/__tests__/asset-service.test.ts index 39c50b38..8826236a 100644 --- a/lib/bokslut/__tests__/asset-service.test.ts +++ b/lib/bokslut/__tests__/asset-service.test.ts @@ -1,21 +1,13 @@ + import { describe, it, expect, vi } from 'vitest' import { AssetCorrectionBlockedError, DEFAULT_ACCOUNTS_BY_CATEGORY, - disposeAsset, updateAsset, } from '../assets/asset-service' import { getBASReference } from '@/lib/bookkeeping/bas-reference' import type { Asset } from '@/types' -vi.mock('@/lib/bookkeeping/engine', () => ({ - createJournalEntry: vi.fn().mockResolvedValue({ - id: 'entry-1', - voucher_series: 'A', - voucher_number: 1, - }), -})) - describe('DEFAULT_ACCOUNTS_BY_CATEGORY', () => { it('maps every AssetCategory to a BAS-aligned account triple', () => { const expected = { @@ -67,244 +59,6 @@ describe('DEFAULT_ACCOUNTS_BY_CATEGORY', () => { }) }) -describe('disposeAsset: gain/loss account selection', () => { - function makeAsset(overrides: Partial = {}): Asset { - return { - id: 'asset-1', - user_id: 'u', - company_id: 'co', - name: 'Test', - category: 'equipment', - acquisition_date: '2023-01-01', - acquisition_cost: 100_000, - salvage_value: 0, - useful_life_months: 60, - depreciation_method: 'linear', - bas_asset_account: '1220', - bas_accumulated_account: '1229', - bas_expense_account: '7832', - restvarde_target: null, - disposed_at: null, - disposed_proceeds: null, - disposed_proceeds_vat: 0, - disposed_vat_treatment: null, - jamkning_amount: 0, - jamkning_remaining_months: null, - jamkning_total_months: null, - jamkning_original_input_vat: null, - k3_components: null, - notes: null, - created_at: '2023-01-01T00:00:00Z', - updated_at: '2023-01-01T00:00:00Z', - ...overrides, - } - } - - function makeSupabaseForDispose(asset: Asset, schedules: Array<{ planned_depreciation: number }>) { - // Three from() calls happen inside disposeAsset: - // 1. getAsset (.maybeSingle on 'assets') - // 2. sumPostedDepreciation (.then on 'depreciation_schedules': server-derived - // accumulated_depreciation; replaces the previously client-supplied value) - // 3. update (.single on 'assets', returning the disposed row) - const builders = { - getBuilder: { - select: vi.fn().mockReturnThis(), - eq: vi.fn().mockReturnThis(), - maybeSingle: vi.fn().mockResolvedValue({ data: asset, error: null }), - }, - schedulesBuilder: (() => { - const b: Record = { - select: vi.fn(), - eq: vi.fn(), - not: vi.fn(), - then: undefined, - } - ;(b.select as ReturnType).mockReturnValue(b) - ;(b.eq as ReturnType).mockReturnValue(b) - ;(b.not as ReturnType).mockReturnValue(b) - b.then = (resolve: (v: { data: unknown; error: unknown }) => void) => - resolve({ data: schedules, error: null }) - return b as { select: ReturnType; eq: ReturnType; not: ReturnType } - })(), - updateBuilder: { - update: vi.fn().mockReturnThis(), - eq: vi.fn().mockReturnThis(), - select: vi.fn().mockReturnThis(), - single: vi.fn().mockResolvedValue({ - data: { ...asset, disposed_at: '2025-06-30', disposed_proceeds: 50_000 }, - error: null, - }), - }, - } - let calls = 0 - const supabase = { - from: vi.fn((table: string) => { - calls++ - if (table === 'depreciation_schedules') return builders.schedulesBuilder - return calls === 1 ? builders.getBuilder : builders.updateBuilder - }), - } - return { supabase, builders } as const - } - - it('uses 3973 / 7973 for tangible asset disposal (equipment)', async () => { - const { createJournalEntry } = await import('@/lib/bookkeeping/engine') - vi.mocked(createJournalEntry).mockClear() - const asset = makeAsset({ category: 'equipment' }) - // Two prior posted schedules summing to 40_000 → NBV = 60_000, proceeds 80_000 → gain 20_000 - const { supabase } = makeSupabaseForDispose(asset, [ - { planned_depreciation: 20_000 }, - { planned_depreciation: 20_000 }, - ]) - - await disposeAsset( - supabase as unknown as Parameters[0], - 'co', - 'u', - 'asset-1', - { - disposed_at: '2025-06-30', - disposed_proceeds: 80_000, - fiscal_period_id: 'fp', - }, - ) - - const call = vi.mocked(createJournalEntry).mock.calls[0] - expect(call).toBeDefined() - const lines = (call![3] as { lines: { account_number: string; debit_amount: number; credit_amount: number }[] }).lines - // Server-derived accumulated debits 1229 - expect(lines.find((l) => l.account_number === '1229')?.debit_amount).toBe(40_000) - // Gain goes to 3973 (tangible), not 3013 - expect(lines.find((l) => l.account_number === '3973')).toBeDefined() - expect(lines.find((l) => l.account_number === '3013')).toBeUndefined() - }) - - it('uses 3013 / 7813 for immaterial asset disposal', async () => { - const { createJournalEntry } = await import('@/lib/bookkeeping/engine') - vi.mocked(createJournalEntry).mockClear() - const asset = makeAsset({ - category: 'immaterial', - bas_asset_account: '1010', - bas_accumulated_account: '1019', - bas_expense_account: '7810', - }) - // NBV = 50_000, proceeds 10_000 → loss 40_000 - const { supabase } = makeSupabaseForDispose(asset, [{ planned_depreciation: 50_000 }]) - - await disposeAsset( - supabase as unknown as Parameters[0], - 'co', - 'u', - 'asset-1', - { - disposed_at: '2025-06-30', - disposed_proceeds: 10_000, - fiscal_period_id: 'fp', - }, - ) - - const call = vi.mocked(createJournalEntry).mock.calls[0] - expect(call).toBeDefined() - const lines = (call![3] as { lines: { account_number: string; debit_amount: number }[] }).lines - expect(lines.find((l) => l.account_number === '7813')).toBeDefined() - expect(lines.find((l) => l.account_number === '7973')).toBeUndefined() - }) - - it('uses 3971 / 7971 for building disposal', async () => { - const { createJournalEntry } = await import('@/lib/bookkeeping/engine') - vi.mocked(createJournalEntry).mockClear() - const asset = makeAsset({ - category: 'building', - acquisition_cost: 2_000_000, - bas_asset_account: '1110', - bas_accumulated_account: '1119', - bas_expense_account: '7821', - }) - // NBV = 1_500_000, proceeds 2_000_000 → gain 500_000 - const { supabase } = makeSupabaseForDispose(asset, [{ planned_depreciation: 500_000 }]) - - await disposeAsset( - supabase as unknown as Parameters[0], - 'co', - 'u', - 'asset-1', - { - disposed_at: '2025-06-30', - disposed_proceeds: 2_000_000, - fiscal_period_id: 'fp', - }, - ) - - const call = vi.mocked(createJournalEntry).mock.calls[0] - const lines = (call![3] as { lines: { account_number: string }[] }).lines - // Buildings route to 3971/7971, not 3973/7973 - expect(lines.find((l) => l.account_number === '3971')).toBeDefined() - expect(lines.find((l) => l.account_number === '3973')).toBeUndefined() - }) - - it('uses 3971 / 7971 for land_improvement disposal', async () => { - const { createJournalEntry } = await import('@/lib/bookkeeping/engine') - vi.mocked(createJournalEntry).mockClear() - const asset = makeAsset({ - category: 'land_improvement', - acquisition_cost: 100_000, - bas_asset_account: '1150', - bas_accumulated_account: '1159', - bas_expense_account: '7824', - }) - // NBV = 80_000, proceeds 40_000 → loss 40_000 - const { supabase } = makeSupabaseForDispose(asset, [{ planned_depreciation: 20_000 }]) - - await disposeAsset( - supabase as unknown as Parameters[0], - 'co', - 'u', - 'asset-1', - { - disposed_at: '2025-06-30', - disposed_proceeds: 40_000, - fiscal_period_id: 'fp', - }, - ) - - const call = vi.mocked(createJournalEntry).mock.calls[0] - const lines = (call![3] as { lines: { account_number: string }[] }).lines - // Markanläggning routes to 7971 like buildings - expect(lines.find((l) => l.account_number === '7971')).toBeDefined() - expect(lines.find((l) => l.account_number === '7973')).toBeUndefined() - }) - - it('server-derives accumulated_depreciation: caller cannot inflate gain', async () => { - const { createJournalEntry } = await import('@/lib/bookkeeping/engine') - vi.mocked(createJournalEntry).mockClear() - const asset = makeAsset({ category: 'equipment', acquisition_cost: 100_000 }) - // Real accumulated = 30_000 from one posted schedule. A malicious client - // could previously pass accumulated_depreciation: 100_000 to fake a fully - // depreciated asset and pocket a 50_000 phantom gain on proceeds. With - // server derivation, the lines reflect the actual 30_000. - const { supabase } = makeSupabaseForDispose(asset, [{ planned_depreciation: 30_000 }]) - - await disposeAsset( - supabase as unknown as Parameters[0], - 'co', - 'u', - 'asset-1', - { - disposed_at: '2025-06-30', - disposed_proceeds: 50_000, - fiscal_period_id: 'fp', - }, - ) - - const call = vi.mocked(createJournalEntry).mock.calls[0] - const lines = (call![3] as { lines: { account_number: string; debit_amount: number; credit_amount: number }[] }).lines - // accumulated debit must be 30_000 (server-derived), not anything else - expect(lines.find((l) => l.account_number === '1229')?.debit_amount).toBe(30_000) - // NBV = 100_000 − 30_000 = 70_000, proceeds 50_000 → loss 20_000 to 7973 - expect(lines.find((l) => l.account_number === '7973')?.debit_amount).toBe(20_000) - }) -}) - describe('updateAsset: acquisition-basis correction guard', () => { function makeAssetRow(overrides: Partial = {}): Asset { return { @@ -507,3 +261,5 @@ describe('updateAsset: acquisition-basis correction guard', () => { expect(captured.update).toMatchObject({ acquisition_date: '2025-08-15' }) }) }) + + diff --git a/lib/bokslut/assets/__tests__/asset-disposal-plan.test.ts b/lib/bokslut/assets/__tests__/asset-disposal-plan.test.ts new file mode 100644 index 00000000..72173e8c --- /dev/null +++ b/lib/bokslut/assets/__tests__/asset-disposal-plan.test.ts @@ -0,0 +1,228 @@ +import { describe, expect, it } from 'vitest' +import { buildAssetDisposalPlan, type DisposeAssetInput } from '../asset-service' +import type { Asset, AssetCategory } from '@/types' + +const PERIOD = { id: 'period-2026', period_start: '2026-01-01', period_end: '2026-12-31' } +const PERIODS = [ + { id: 'period-2025', period_start: '2025-01-01' }, + { id: 'period-2026', period_start: '2026-01-01' }, + { id: 'period-2027', period_start: '2027-01-01' }, +] + +function makeAsset(overrides: Partial = {}): Asset { + return { + id: 'asset-1', + user_id: 'user-1', + company_id: 'company-1', + name: 'Machine', + category: 'equipment', + acquisition_date: '2025-01-01', + acquisition_cost: 100_000, + salvage_value: 0, + useful_life_months: 60, + depreciation_method: 'linear', + bas_asset_account: '1220', + bas_accumulated_account: '1229', + bas_expense_account: '7832', + restvarde_target: null, + disposed_at: null, + disposed_proceeds: null, + disposed_proceeds_vat: 0, + disposed_vat_treatment: null, + jamkning_amount: 0, + jamkning_remaining_months: null, + jamkning_total_months: null, + jamkning_original_input_vat: null, + k3_components: null, + notes: null, + created_at: '2025-01-01T00:00:00Z', + updated_at: '2025-01-01T00:00:00Z', + ...overrides, + } +} + +function makeInput(overrides: Partial = {}): DisposeAssetInput { + return { + disposal_type: 'sale', + disposed_at: '2026-06-30', + disposed_proceeds: 100_000, + proceeds_account: '1930', + fiscal_period_id: PERIOD.id, + vat_treatment: 'standard_25', + ...overrides, + } +} + +function build(overrides: { + asset?: Partial + input?: Partial + schedules?: Array<{ + fiscal_period_id: string + planned_depreciation: number + journal_entry_id: string | null + }> +} = {}) { + return buildAssetDisposalPlan({ + asset: makeAsset(overrides.asset), + input: makeInput(overrides.input), + fiscalPeriod: PERIOD, + periods: PERIODS, + schedules: overrides.schedules ?? [ + { + fiscal_period_id: 'period-2025', + planned_depreciation: 20_000, + journal_entry_id: 'entry-2025', + }, + ], + }) +} + +describe('buildAssetDisposalPlan', () => { + it('books depreciation through the disposal date before removing the asset', () => { + const plan = build() + + expect(plan.currentDepreciation).toBe(9_918) + expect(plan.accumulatedDepreciation).toBe(29_918) + expect(plan.lines).toEqual( + expect.arrayContaining([ + expect.objectContaining({ account_number: '7832', debit_amount: 9_918 }), + expect.objectContaining({ account_number: '1229', credit_amount: 9_918 }), + expect.objectContaining({ account_number: '1229', debit_amount: 29_918 }), + expect.objectContaining({ account_number: '1220', credit_amount: 100_000 }), + ]), + ) + }) + + it('derives 25 percent output VAT from gross proceeds on the server', () => { + const plan = build({ input: { disposed_proceeds: 125_000 } }) + + expect(plan.proceedsVat).toBe(25_000) + expect(plan.lines).toEqual( + expect.arrayContaining([ + expect.objectContaining({ account_number: '1930', debit_amount: 125_000 }), + expect.objectContaining({ account_number: '2611', credit_amount: 25_000 }), + ]), + ) + }) + + it.each<[AssetCategory, string, string]>([ + ['immaterial', '3971', '7971'], + ['building', '3972', '7972'], + ['land_improvement', '3972', '7972'], + ['equipment', '3973', '7973'], + ])('uses the BAS disposal pair for %s', (category, gainAccount, lossAccount) => { + const accountOverrides = + category === 'immaterial' + ? { bas_asset_account: '1010', bas_accumulated_account: '1019', bas_expense_account: '7810' } + : category === 'building' || category === 'land_improvement' + ? { bas_asset_account: '1110', bas_accumulated_account: '1119', bas_expense_account: '7821' } + : {} + const gain = build({ + asset: { category, acquisition_cost: 20_000, ...accountOverrides }, + input: { disposed_proceeds: 125_000 }, + schedules: [], + }) + const loss = build({ + asset: { category, acquisition_cost: 100_000, ...accountOverrides }, + input: { disposal_type: 'scrap', disposed_proceeds: 0, vat_treatment: undefined }, + schedules: [], + }) + + expect(gain.lines.some((line) => line.account_number === gainAccount)).toBe(true) + expect(loss.lines.some((line) => line.account_number === lossAccount)).toBe(true) + }) + + it('fully clears a fully depreciated asset on scrapping', () => { + const plan = build({ + asset: { acquisition_date: '2021-01-01' }, + input: { disposal_type: 'scrap', disposed_proceeds: 0, vat_treatment: undefined }, + schedules: [ + { fiscal_period_id: 'period-2025', planned_depreciation: 100_000, journal_entry_id: 'entry' }, + ], + }) + + expect(plan.gainOrLoss).toBe(0) + expect(plan.lines).toEqual([ + expect.objectContaining({ account_number: '1229', debit_amount: 100_000 }), + expect.objectContaining({ account_number: '1220', credit_amount: 100_000 }), + ]) + }) + + it('refuses disposal when a later period already has posted depreciation', () => { + expect(() => + build({ + schedules: [ + { fiscal_period_id: 'period-2027', planned_depreciation: 20_000, journal_entry_id: 'entry' }, + ], + }), + ).toThrow('later_depreciation_posted') + }) + + it('refuses to overwrite a mismatched posted current-period schedule', () => { + expect(() => + build({ + schedules: [ + { fiscal_period_id: 'period-2026', planned_depreciation: 20_000, journal_entry_id: 'entry' }, + ], + }), + ).toThrow('current_depreciation_mismatch') + }) + + it('books negative VAT adjustment to 6999 and 2641', () => { + const plan = build({ + asset: { acquisition_cost: 300_000 }, + input: { + vat_treatment: 'exempt', + jamkning_original_input_vat: 75_000, + jamkning_original_deduction_percent: 100, + }, + }) + + expect(plan.jamkning).toMatchObject({ direction: 'decrease', amount: 60_000 }) + expect(plan.lines).toEqual( + expect.arrayContaining([ + expect.objectContaining({ account_number: '6999', debit_amount: 60_000 }), + expect.objectContaining({ account_number: '2641', credit_amount: 60_000 }), + ]), + ) + }) + + it('requires explicit ML 5:38 confirmation for a business transfer', () => { + expect(() => + build({ + input: { + disposal_type: 'business_transfer', + vat_treatment: undefined, + }, + }), + ).toThrow('ASSET_BUSINESS_TRANSFER_CONFIRMATION_REQUIRED') + }) + + it('requires an adjustment document when an investment-good obligation transfers', () => { + expect(() => + build({ + asset: { acquisition_cost: 300_000 }, + input: { + disposal_type: 'business_transfer', + vat_treatment: undefined, + business_transfer_confirmed: true, + jamkning_original_input_vat: 50_000, + jamkning_original_deduction_percent: 100, + }, + }), + ).toThrow('ASSET_ADJUSTMENT_DOCUMENT_REQUIRED') + + const plan = build({ + asset: { acquisition_cost: 300_000 }, + input: { + disposal_type: 'business_transfer', + vat_treatment: undefined, + business_transfer_confirmed: true, + adjustment_document_confirmed: true, + jamkning_original_input_vat: 50_000, + jamkning_original_deduction_percent: 100, + }, + }) + expect(plan.jamkning.direction).toBe('transferred') + }) +}) diff --git a/lib/bokslut/assets/__tests__/asset-disposal.pg.test.ts b/lib/bokslut/assets/__tests__/asset-disposal.pg.test.ts new file mode 100644 index 00000000..3eaa4d34 --- /dev/null +++ b/lib/bokslut/assets/__tests__/asset-disposal.pg.test.ts @@ -0,0 +1,163 @@ +import { randomUUID } from 'node:crypto' +import { describe, expect, it } from 'vitest' +import { getPool } from '@/tests/pg/setup' +import { seedCompany } from '@/tests/pg/fixtures' + +describe('commit_asset_disposal (pg-real)', () => { + async function insertAsset(userId: string, companyId: string): Promise { + const assetId = randomUUID() + await getPool().query( + `INSERT INTO public.assets ( + id, user_id, company_id, name, category, acquisition_date, + acquisition_cost, salvage_value, useful_life_months, + depreciation_method, bas_asset_account, bas_accumulated_account, + bas_expense_account + ) VALUES ($1, $2, $3, 'Machine', 'equipment', '2025-01-01', + 100000, 0, 60, 'linear', '1220', '1229', '7832')`, + [assetId, userId, companyId], + ) + return assetId + } + + async function insertDraft(args: { + userId: string + companyId: string + fiscalPeriodId: string + debitLines: Array<[string, number]> + creditLines: Array<[string, number]> + }): Promise { + const entryId = randomUUID() + await getPool().query( + `INSERT INTO public.journal_entries ( + id, user_id, company_id, fiscal_period_id, voucher_number, + voucher_series, entry_date, description, source_type, status + ) VALUES ($1, $2, $3, $4, 0, 'A', '2026-06-30', + 'Asset disposal', 'system', 'draft')`, + [entryId, args.userId, args.companyId, args.fiscalPeriodId], + ) + for (const [account, amount] of args.debitLines) { + await getPool().query( + `INSERT INTO public.journal_entry_lines + (journal_entry_id, account_number, debit_amount, credit_amount) + VALUES ($1, $2, $3, 0)`, + [entryId, account, amount], + ) + } + for (const [account, amount] of args.creditLines) { + await getPool().query( + `INSERT INTO public.journal_entry_lines + (journal_entry_id, account_number, debit_amount, credit_amount) + VALUES ($1, $2, 0, $3)`, + [entryId, account, amount], + ) + } + return entryId + } + + async function commit(args: { + companyId: string + assetId: string + entryId: string + fiscalPeriodId: string + disposalType?: string + currentDepreciation?: number + }) { + return getPool().query( + `SELECT * FROM public.commit_asset_disposal( + $1::uuid, $2::uuid, $3::uuid, $4::uuid, $5::text, + '2026-06-30'::date, 80000::numeric, 0::numeric, 'exempt'::text, + $6::numeric, 0::numeric, 'none'::text, 4::integer, 5::integer, + 0::numeric, 0::numeric, 0::numeric, NULL::text, NULL::text + )`, + [ + args.companyId, + args.assetId, + args.entryId, + args.fiscalPeriodId, + args.disposalType ?? 'sale', + args.currentDepreciation ?? 0, + ], + ) + } + + it('posts the voucher, schedule, and register state in one transaction', async () => { + const { userId, companyId, fiscalPeriodId } = await seedCompany() + const assetId = await insertAsset(userId, companyId) + const entryId = await insertDraft({ + userId, + companyId, + fiscalPeriodId, + debitLines: [['7832', 10_000], ['1229', 30_000], ['1930', 80_000]], + creditLines: [['1229', 10_000], ['1220', 100_000], ['3973', 10_000]], + }) + + await commit({ companyId, assetId, entryId, fiscalPeriodId, currentDepreciation: 10_000 }) + + const entry = await getPool().query( + `SELECT status, voucher_number FROM public.journal_entries WHERE id = $1`, + [entryId], + ) + const asset = await getPool().query( + `SELECT disposed_at::text, disposal_type, disposal_journal_entry_id + FROM public.assets WHERE id = $1`, + [assetId], + ) + const schedule = await getPool().query( + `SELECT planned_depreciation::numeric, journal_entry_id + FROM public.depreciation_schedules + WHERE asset_id = $1 AND fiscal_period_id = $2`, + [assetId, fiscalPeriodId], + ) + + expect(entry.rows[0]).toMatchObject({ status: 'posted' }) + expect(entry.rows[0].voucher_number).toBeGreaterThan(0) + expect(asset.rows[0]).toMatchObject({ + disposed_at: '2026-06-30', + disposal_type: 'sale', + disposal_journal_entry_id: entryId, + }) + expect(Number(schedule.rows[0].planned_depreciation)).toBe(10_000) + expect(schedule.rows[0].journal_entry_id).toBe(entryId) + + await expect( + getPool().query(`UPDATE public.assets SET disposed_proceeds = 1 WHERE id = $1`, [assetId]), + ).rejects.toThrow(/Cannot modify financial or disposal attributes/) + + await expect( + getPool().query(`UPDATE public.assets SET notes = 'Audit note' WHERE id = $1`, [assetId]), + ).resolves.toBeDefined() + }) + + it('rolls the voucher commit back when the register update fails', async () => { + const { userId, companyId, fiscalPeriodId } = await seedCompany() + const assetId = await insertAsset(userId, companyId) + const entryId = await insertDraft({ + userId, + companyId, + fiscalPeriodId, + debitLines: [['1930', 80_000], ['7973', 20_000]], + creditLines: [['1220', 100_000]], + }) + + await expect( + commit({ + companyId, + assetId, + entryId, + fiscalPeriodId, + disposalType: 'invalid', + }), + ).rejects.toThrow() + + const entry = await getPool().query( + `SELECT status, voucher_number FROM public.journal_entries WHERE id = $1`, + [entryId], + ) + const asset = await getPool().query( + `SELECT disposed_at FROM public.assets WHERE id = $1`, + [assetId], + ) + expect(entry.rows[0]).toMatchObject({ status: 'draft', voucher_number: 0 }) + expect(asset.rows[0].disposed_at).toBeNull() + }) +}) diff --git a/lib/bokslut/assets/__tests__/dispose-vat.test.ts b/lib/bokslut/assets/__tests__/dispose-vat.test.ts deleted file mode 100644 index 1a3e6eca..00000000 --- a/lib/bokslut/assets/__tests__/dispose-vat.test.ts +++ /dev/null @@ -1,436 +0,0 @@ -import { describe, it, expect, vi } from 'vitest' -import { disposeAsset } from '../asset-service' -import type { Asset } from '@/types' - -vi.mock('@/lib/bookkeeping/engine', () => ({ - createJournalEntry: vi.fn().mockResolvedValue({ - id: 'entry-1', - voucher_series: 'A', - voucher_number: 1, - }), -})) - -function makeAsset(overrides: Partial = {}): Asset { - return { - id: 'asset-1', - user_id: 'u', - company_id: 'co', - name: 'Test', - category: 'equipment', - acquisition_date: '2023-01-01', - acquisition_cost: 100_000, - salvage_value: 0, - useful_life_months: 60, - depreciation_method: 'linear', - bas_asset_account: '1220', - bas_accumulated_account: '1229', - bas_expense_account: '7832', - restvarde_target: null, - disposed_at: null, - disposed_proceeds: null, - disposed_proceeds_vat: 0, - disposed_vat_treatment: null, - jamkning_amount: 0, - jamkning_remaining_months: null, - jamkning_total_months: null, - jamkning_original_input_vat: null, - k3_components: null, - notes: null, - created_at: '2023-01-01T00:00:00Z', - updated_at: '2023-01-01T00:00:00Z', - ...overrides, - } -} - -interface CapturedLine { - account_number: string - debit_amount: number - credit_amount: number - line_description?: string -} - -function makeSupabaseForDispose(asset: Asset, schedules: Array<{ planned_depreciation: number }>) { - const builders = { - getBuilder: { - select: vi.fn().mockReturnThis(), - eq: vi.fn().mockReturnThis(), - maybeSingle: vi.fn().mockResolvedValue({ data: asset, error: null }), - }, - schedulesBuilder: (() => { - const b: Record = { - select: vi.fn(), - eq: vi.fn(), - not: vi.fn(), - then: undefined, - } - ;(b.select as ReturnType).mockReturnValue(b) - ;(b.eq as ReturnType).mockReturnValue(b) - ;(b.not as ReturnType).mockReturnValue(b) - b.then = (resolve: (v: { data: unknown; error: unknown }) => void) => - resolve({ data: schedules, error: null }) - return b as { - select: ReturnType - eq: ReturnType - not: ReturnType - } - })(), - updateBuilder: { - update: vi.fn().mockReturnThis(), - eq: vi.fn().mockReturnThis(), - select: vi.fn().mockReturnThis(), - single: vi.fn().mockResolvedValue({ - data: { ...asset, disposed_at: '2026-05-26' }, - error: null, - }), - }, - } - let calls = 0 - const supabase = { - from: vi.fn((table: string) => { - calls++ - if (table === 'depreciation_schedules') return builders.schedulesBuilder - return calls === 1 ? builders.getBuilder : builders.updateBuilder - }), - } - return { supabase, builders } as const -} - -async function captureLines(asset: Asset, schedules: Array<{ planned_depreciation: number }>, input: Parameters[4]): Promise<{ lines: CapturedLine[]; updateArgs: Record }> { - const { createJournalEntry } = await import('@/lib/bookkeeping/engine') - vi.mocked(createJournalEntry).mockClear() - const { supabase, builders } = makeSupabaseForDispose(asset, schedules) - await disposeAsset( - supabase as unknown as Parameters[0], - 'co', - 'u', - 'asset-1', - input, - ) - const call = vi.mocked(createJournalEntry).mock.calls[0] - const lines = (call![3] as { lines: CapturedLine[] }).lines - const updateArgs = (builders.updateBuilder.update.mock.calls[0]?.[0] ?? {}) as Record - return { lines, updateArgs } -} - -function sumDebit(lines: CapturedLine[]): number { - return Math.round(lines.reduce((s, l) => s + l.debit_amount, 0) * 100) / 100 -} -function sumCredit(lines: CapturedLine[]): number { - return Math.round(lines.reduce((s, l) => s + l.credit_amount, 0) * 100) / 100 -} - -describe('disposeAsset: VAT on proceeds', () => { - it('standard_25 sale appends a 2611 credit and balances', async () => { - // Acquisition 100 000, accumulated 40 000 → NBV 60 000. - // Gross proceeds 100 000 → net 80 000 → vat 20 000 → gain 20 000. - const asset = makeAsset({ category: 'equipment' }) - const { lines } = await captureLines( - asset, - [{ planned_depreciation: 40_000 }], - { - disposed_at: '2026-05-26', - disposed_proceeds: 100_000, - proceeds_vat: 20_000, - vat_treatment: 'standard_25', - fiscal_period_id: 'fp', - }, - ) - expect(lines.find((l) => l.account_number === '2611')?.credit_amount).toBe(20_000) - // Gain on NET proceeds, not gross: 80 000 net − 60 000 NBV = 20 000 gain - expect(lines.find((l) => l.account_number === '3973')?.credit_amount).toBe(20_000) - // No loss line on a gain scenario - expect(lines.find((l) => l.account_number === '7973')).toBeUndefined() - // Bank debit = gross - expect(lines.find((l) => l.account_number === '1930')?.debit_amount).toBe(100_000) - expect(sumDebit(lines)).toBe(sumCredit(lines)) - }) - - it('reduced_12 sale uses BAS 2621', async () => { - const asset = makeAsset() - const { lines } = await captureLines( - asset, - [{ planned_depreciation: 40_000 }], - { - disposed_at: '2026-05-26', - disposed_proceeds: 100_000, - proceeds_vat: 100_000 - 100_000 / 1.12, - vat_treatment: 'reduced_12', - fiscal_period_id: 'fp', - }, - ) - expect(lines.find((l) => l.account_number === '2621')).toBeDefined() - expect(lines.find((l) => l.account_number === '2611')).toBeUndefined() - expect(sumDebit(lines)).toBe(sumCredit(lines)) - }) - - it('reduced_6 sale uses BAS 2631', async () => { - const asset = makeAsset() - const { lines } = await captureLines( - asset, - [{ planned_depreciation: 40_000 }], - { - disposed_at: '2026-05-26', - disposed_proceeds: 100_000, - proceeds_vat: 100_000 - 100_000 / 1.06, - vat_treatment: 'reduced_6', - fiscal_period_id: 'fp', - }, - ) - expect(lines.find((l) => l.account_number === '2631')).toBeDefined() - expect(sumDebit(lines)).toBe(sumCredit(lines)) - }) - - it('reverse_charge sale posts NO VAT line', async () => { - const asset = makeAsset() - const { lines } = await captureLines( - asset, - [{ planned_depreciation: 40_000 }], - { - disposed_at: '2026-05-26', - disposed_proceeds: 80_000, - proceeds_vat: 0, - vat_treatment: 'reverse_charge', - fiscal_period_id: 'fp', - }, - ) - expect(lines.find((l) => l.account_number.startsWith('261'))).toBeUndefined() - // The full proceeds counts as net (no VAT taken out) → gain = 80 000 − 60 000 = 20 000 - expect(lines.find((l) => l.account_number === '3973')?.credit_amount).toBe(20_000) - expect(sumDebit(lines)).toBe(sumCredit(lines)) - }) - - it('export sale posts NO VAT line', async () => { - const asset = makeAsset() - const { lines } = await captureLines( - asset, - [{ planned_depreciation: 40_000 }], - { - disposed_at: '2026-05-26', - disposed_proceeds: 80_000, - proceeds_vat: 0, - vat_treatment: 'export', - fiscal_period_id: 'fp', - }, - ) - expect(lines.find((l) => l.account_number.startsWith('26'))).toBeUndefined() - expect(sumDebit(lines)).toBe(sumCredit(lines)) - }) - - it('throws when proceeds_vat > 0 but no vat_treatment is supplied', async () => { - const { createJournalEntry } = await import('@/lib/bookkeeping/engine') - vi.mocked(createJournalEntry).mockClear() - const { supabase } = makeSupabaseForDispose(makeAsset(), [{ planned_depreciation: 40_000 }]) - await expect( - disposeAsset(supabase as unknown as Parameters[0], 'co', 'u', 'asset-1', { - disposed_at: '2026-05-26', - disposed_proceeds: 100_000, - proceeds_vat: 20_000, - fiscal_period_id: 'fp', - }), - ).rejects.toThrow(/vat_treatment/) - }) - - it('throws when reverse_charge is selected but proceeds_vat > 0', async () => { - const { createJournalEntry } = await import('@/lib/bookkeeping/engine') - vi.mocked(createJournalEntry).mockClear() - const { supabase } = makeSupabaseForDispose(makeAsset(), [{ planned_depreciation: 40_000 }]) - await expect( - disposeAsset(supabase as unknown as Parameters[0], 'co', 'u', 'asset-1', { - disposed_at: '2026-05-26', - disposed_proceeds: 80_000, - proceeds_vat: 5_000, - vat_treatment: 'reverse_charge', - fiscal_period_id: 'fp', - }), - ).rejects.toThrow(/reverse_charge/) - }) - - it('zero-VAT sale (no fields passed) still posts a balanced entry', async () => { - const asset = makeAsset() - const { lines } = await captureLines( - asset, - [{ planned_depreciation: 40_000 }], - { - disposed_at: '2026-05-26', - disposed_proceeds: 50_000, - fiscal_period_id: 'fp', - }, - ) - // No VAT line - expect(lines.find((l) => l.account_number.startsWith('26'))).toBeUndefined() - // Loss on 50 000 − 60 000 = -10 000 → 7973 debit - expect(lines.find((l) => l.account_number === '7973')?.debit_amount).toBe(10_000) - expect(sumDebit(lines)).toBe(sumCredit(lines)) - }) -}) - -describe('disposeAsset: jämkning (input VAT correction)', () => { - it('credits 2641 and debits 6991 for the jämkning amount', async () => { - const asset = makeAsset({ category: 'equipment' }) - const { lines } = await captureLines( - asset, - [{ planned_depreciation: 40_000 }], - { - disposed_at: '2026-01-01', - disposed_proceeds: 60_000, - fiscal_period_id: 'fp', - // 5-year asset sold after 3 years; 24 months remain × 20 000 VAT × 24/60 = 8 000 - jamkning_amount: 8_000, - jamkning_remaining_months: 24, - jamkning_total_months: 60, - jamkning_original_input_vat: 20_000, - }, - ) - // 2641 credit (reverses prior input VAT deduction) - expect(lines.find((l) => l.account_number === '2641')?.credit_amount).toBe(8_000) - // Jämkning is a VAT correction (ML 8a kap), not a disposal loss: it must - // route to 6991 "Övriga externa kostnader, avdragsgilla", NOT to 78xx. - expect(lines.find((l) => l.account_number === '6991')?.debit_amount).toBe(8_000) - // No 78xx line: proceeds 60 000 = NBV 60 000 means no gain/loss, and the - // jämkning explicitly does not contaminate the disposal-loss accounts. - expect(lines.find((l) => l.account_number === '7973')).toBeUndefined() - expect(sumDebit(lines)).toBe(sumCredit(lines)) - }) - - it('combined VAT + jämkning + gain stays balanced', async () => { - const asset = makeAsset({ category: 'equipment' }) - const { lines } = await captureLines( - asset, - [{ planned_depreciation: 40_000 }], - { - disposed_at: '2026-01-01', - disposed_proceeds: 100_000, // gross - proceeds_vat: 20_000, // 25% - vat_treatment: 'standard_25', - fiscal_period_id: 'fp', - jamkning_amount: 8_000, - jamkning_remaining_months: 24, - jamkning_total_months: 60, - jamkning_original_input_vat: 20_000, - }, - ) - expect(lines.find((l) => l.account_number === '2611')?.credit_amount).toBe(20_000) - expect(lines.find((l) => l.account_number === '2641')?.credit_amount).toBe(8_000) - // Gain 20 000 on net proceeds → 3973 credit; jämkning 8 000 → 6991 debit - // (NOT 7973: see ML 8a kap, jämkning is a VAT correction not a loss). - expect(lines.find((l) => l.account_number === '3973')?.credit_amount).toBe(20_000) - expect(lines.find((l) => l.account_number === '6991')?.debit_amount).toBe(8_000) - expect(lines.find((l) => l.account_number === '7973')).toBeUndefined() - expect(sumDebit(lines)).toBe(sumCredit(lines)) - }) - - it('zero jämkning amount produces no extra lines', async () => { - const asset = makeAsset() - const { lines } = await captureLines( - asset, - [{ planned_depreciation: 40_000 }], - { - disposed_at: '2026-01-01', - disposed_proceeds: 60_000, - fiscal_period_id: 'fp', - jamkning_amount: 0, - }, - ) - expect(lines.find((l) => l.account_number === '2641')).toBeUndefined() - expect(sumDebit(lines)).toBe(sumCredit(lines)) - }) - - it('routes jämkning to 6991 even for building category (never to 78xx)', async () => { - const asset = makeAsset({ - category: 'building', - bas_asset_account: '1110', - bas_accumulated_account: '1119', - bas_expense_account: '7821', - acquisition_cost: 2_000_000, - }) - const { lines } = await captureLines( - asset, - [{ planned_depreciation: 200_000 }], - { - disposed_at: '2026-01-01', - disposed_proceeds: 1_800_000, - fiscal_period_id: 'fp', - // 10-year fastighet, 60 months remaining out of 120, original 200 000 → 100 000 - jamkning_amount: 100_000, - jamkning_remaining_months: 60, - jamkning_total_months: 120, - jamkning_original_input_vat: 200_000, - }, - ) - // Jämkning goes to 6991 regardless of asset category: it's a VAT - // correction per ML 8a kap, NOT a förlust vid avyttring (78xx). - expect(lines.find((l) => l.account_number === '6991')?.debit_amount).toBe(100_000) - // The disposal itself is at a loss (NBV 1.8M = proceeds 1.8M? Let's check: - // acq 2.0M − ack 0.2M = NBV 1.8M, proceeds 1.8M → no gain/loss line). The - // only debit-side cost line is the 6991 jämkning entry. - expect(lines.find((l) => l.account_number === '7971')).toBeUndefined() - expect(lines.find((l) => l.account_number === '7973')).toBeUndefined() - expect(sumDebit(lines)).toBe(sumCredit(lines)) - }) - - it('persists jämkning + VAT audit metadata on the asset row', async () => { - const asset = makeAsset() - const { updateArgs } = await captureLines( - asset, - [{ planned_depreciation: 40_000 }], - { - disposed_at: '2026-01-01', - disposed_proceeds: 100_000, - proceeds_vat: 20_000, - vat_treatment: 'standard_25', - fiscal_period_id: 'fp', - jamkning_amount: 8_000, - jamkning_remaining_months: 24, - jamkning_total_months: 60, - jamkning_original_input_vat: 20_000, - }, - ) - expect(updateArgs.disposed_proceeds).toBe(100_000) - expect(updateArgs.disposed_proceeds_vat).toBe(20_000) - expect(updateArgs.disposed_vat_treatment).toBe('standard_25') - expect(updateArgs.jamkning_amount).toBe(8_000) - expect(updateArgs.jamkning_remaining_months).toBe(24) - expect(updateArgs.jamkning_total_months).toBe(60) - expect(updateArgs.jamkning_original_input_vat).toBe(20_000) - }) -}) - -describe('disposeAsset: gain vs loss with VAT', () => { - it('gain scenario: net proceeds > NBV → 3973 credit', async () => { - const asset = makeAsset({ category: 'equipment' }) - const { lines } = await captureLines( - asset, - [{ planned_depreciation: 50_000 }], - { - disposed_at: '2026-05-26', - // NBV = 50 000, net proceeds = 80 000 → gain 30 000 - disposed_proceeds: 100_000, - proceeds_vat: 20_000, - vat_treatment: 'standard_25', - fiscal_period_id: 'fp', - }, - ) - expect(lines.find((l) => l.account_number === '3973')?.credit_amount).toBe(30_000) - expect(lines.find((l) => l.account_number === '7973')).toBeUndefined() - expect(sumDebit(lines)).toBe(sumCredit(lines)) - }) - - it('loss scenario: net proceeds < NBV → 7973 debit', async () => { - const asset = makeAsset({ category: 'equipment' }) - const { lines } = await captureLines( - asset, - [{ planned_depreciation: 20_000 }], - { - disposed_at: '2026-05-26', - // NBV = 80 000, net proceeds = 40 000 → loss 40 000 - disposed_proceeds: 50_000, - proceeds_vat: 10_000, - vat_treatment: 'standard_25', - fiscal_period_id: 'fp', - }, - ) - expect(lines.find((l) => l.account_number === '7973')?.debit_amount).toBe(40_000) - expect(lines.find((l) => l.account_number === '3973')).toBeUndefined() - expect(sumDebit(lines)).toBe(sumCredit(lines)) - }) -}) diff --git a/lib/bokslut/assets/__tests__/jamkning.test.ts b/lib/bokslut/assets/__tests__/jamkning.test.ts index b5661302..1f68f2e2 100644 --- a/lib/bokslut/assets/__tests__/jamkning.test.ts +++ b/lib/bokslut/assets/__tests__/jamkning.test.ts @@ -1,205 +1,116 @@ -import { describe, it, expect } from 'vitest' -import { - computeJamkningAmount, - assessJamkningEligibility, -} from '../jamkning' - -describe('computeJamkningAmount', () => { - it('5-year asset sold after 3 years (24 months remaining, 20 000 kr input VAT) → 8 000 kr', () => { - // ML 8a kap 7 §: (24 / 60) × 20 000 = 8 000 - const amount = computeJamkningAmount({ - originalInputVat: 20_000, - totalCorrectionMonths: 60, - remainingMonths: 24, - disposalEvent: 'triggers_jamkning', - }) - expect(amount).toBe(8_000) - }) - - it('10-year fastighet sold after 7 years (36 months remaining, 200 000 kr input VAT) → 60 000 kr', () => { - // ML 8a kap 7 §: (36 / 120) × 200 000 = 60 000 - const amount = computeJamkningAmount({ - originalInputVat: 200_000, - totalCorrectionMonths: 120, - remainingMonths: 36, - disposalEvent: 'triggers_jamkning', - }) - expect(amount).toBe(60_000) - }) - - it('sold after the correction period (0 remaining) → 0', () => { - const amount = computeJamkningAmount({ - originalInputVat: 20_000, - totalCorrectionMonths: 60, - remainingMonths: 0, - disposalEvent: 'triggers_jamkning', - }) - expect(amount).toBe(0) - }) - - it('sold immediately (60 months remaining on 60-month period) → full originalInputVat', () => { - // (60 / 60) × 20 000 = 20 000: the full deduction must be reversed - const amount = computeJamkningAmount({ - originalInputVat: 20_000, - totalCorrectionMonths: 60, - remainingMonths: 60, - disposalEvent: 'triggers_jamkning', - }) - expect(amount).toBe(20_000) - }) - - it('returns 0 when disposalEvent is no_jamkning', () => { - const amount = computeJamkningAmount({ - originalInputVat: 20_000, - totalCorrectionMonths: 60, - remainingMonths: 24, - disposalEvent: 'no_jamkning', - }) - expect(amount).toBe(0) - }) - - it('caps remaining months at totalCorrectionMonths (defensive)', () => { - // A caller bug could pass remainingMonths > totalCorrectionMonths. - // Cap at the total so the answer never exceeds originalInputVat. - const amount = computeJamkningAmount({ - originalInputVat: 10_000, - totalCorrectionMonths: 60, - remainingMonths: 120, - disposalEvent: 'triggers_jamkning', - }) - expect(amount).toBe(10_000) - }) - - it('handles negligible cost (zero originalInputVat) → 0 without NaN', () => { - const amount = computeJamkningAmount({ - originalInputVat: 0, - totalCorrectionMonths: 60, - remainingMonths: 24, - disposalEvent: 'triggers_jamkning', - }) - expect(amount).toBe(0) - expect(Number.isNaN(amount)).toBe(false) - }) - - it('returns 0 when totalCorrectionMonths is 0 (avoid divide-by-zero)', () => { - const amount = computeJamkningAmount({ - originalInputVat: 20_000, - totalCorrectionMonths: 0, - remainingMonths: 0, - disposalEvent: 'triggers_jamkning', - }) - expect(amount).toBe(0) - expect(Number.isFinite(amount)).toBe(true) - }) - - it('returns 0 when totalCorrectionMonths is negative (defensive)', () => { - const amount = computeJamkningAmount({ - originalInputVat: 20_000, - totalCorrectionMonths: -60, - remainingMonths: -24, - disposalEvent: 'triggers_jamkning', - }) - expect(amount).toBe(0) - expect(Number.isFinite(amount)).toBe(true) - }) - - it('rounds to two decimals (no öre stray cents)', () => { - // (17 / 60) × 10 000 = 2833.333... → 2833.33 - const amount = computeJamkningAmount({ - originalInputVat: 10_000, - totalCorrectionMonths: 60, - remainingMonths: 17, - disposalEvent: 'triggers_jamkning', - }) - expect(amount).toBe(2_833.33) - }) -}) +import { describe, expect, it } from 'vitest' +import { assessJamkning, assessJamkningEligibility } from '../jamkning' describe('assessJamkningEligibility', () => { - it('returns 120 months for fastighet BAS 1110', () => { - const e = assessJamkningEligibility({ - basAssetAccount: '1110', - basExpenseAccount: '7821', - category: 'building', - acquisitionDate: '2020-01-01', - disposalDate: '2026-01-01', - }) - expect(e.totalCorrectionMonths).toBe(120) - // 6 years = 72 months elapsed → 48 months remaining - expect(e.elapsedMonths).toBe(72) - expect(e.remainingMonths).toBe(48) - expect(e.withinCorrectionPeriod).toBe(true) + it('counts the acquisition and disposal tax years for movable property', () => { + expect( + assessJamkningEligibility({ + acquisitionDate: '2023-11-30', + disposalDate: '2026-01-02', + category: 'equipment', + }), + ).toMatchObject({ totalYears: 5, elapsedYears: 3, remainingYears: 2 }) }) - it('returns 60 months for equipment BAS 1220', () => { - const e = assessJamkningEligibility({ - basAssetAccount: '1220', - basExpenseAccount: '7832', - category: 'equipment', - acquisitionDate: '2024-01-01', - disposalDate: '2026-01-01', - }) - expect(e.totalCorrectionMonths).toBe(60) - // 2 years = 24 months → 36 months remaining - expect(e.elapsedMonths).toBe(24) - expect(e.remainingMonths).toBe(36) - expect(e.withinCorrectionPeriod).toBe(true) - }) - - it('detects markanläggning (BAS 1150) as real property → 120 months', () => { - const e = assessJamkningEligibility({ - basAssetAccount: '1150', - basExpenseAccount: '7824', - category: 'land_improvement', - acquisitionDate: '2023-06-01', - disposalDate: '2024-06-01', - }) - expect(e.totalCorrectionMonths).toBe(120) - }) - - it('falls back to category when account is unrecognized', () => { - // No BAS account provided: has to rely on the category signal. - const e = assessJamkningEligibility({ - category: 'building', - acquisitionDate: '2024-01-01', - disposalDate: '2026-01-01', - }) - expect(e.totalCorrectionMonths).toBe(120) - }) - - it('reports withinCorrectionPeriod = false after the full period elapses', () => { - const e = assessJamkningEligibility({ - basAssetAccount: '1220', - category: 'equipment', - acquisitionDate: '2020-01-01', - disposalDate: '2026-01-01', - }) - // 6 years = 72 months elapsed > 60 → 0 remaining - expect(e.remainingMonths).toBe(0) - expect(e.withinCorrectionPeriod).toBe(false) - }) - - it('counts complete months only (day-precision)', () => { - // 2023-01-15 to 2026-01-14 → 35 complete months (the 36th hasn't finished) - const e = assessJamkningEligibility({ - basAssetAccount: '1220', - category: 'equipment', - acquisitionDate: '2023-01-15', - disposalDate: '2026-01-14', - }) - expect(e.elapsedMonths).toBe(35) - expect(e.remainingMonths).toBe(25) - }) - - it('clamps elapsedMonths to 0 if disposalDate precedes acquisitionDate', () => { - // Defensive: should never happen in practice but must not blow up. - const e = assessJamkningEligibility({ - basAssetAccount: '1220', - category: 'equipment', - acquisitionDate: '2026-01-01', - disposalDate: '2024-01-01', - }) - expect(e.elapsedMonths).toBe(0) - expect(e.remainingMonths).toBe(60) + it('uses ten years and the higher threshold for real property', () => { + expect( + assessJamkningEligibility({ + acquisitionDate: '2023-01-01', + disposalDate: '2026-12-31', + basAssetAccount: '1110', + }), + ).toMatchObject({ totalYears: 10, remainingYears: 7, threshold: 100_000 }) + }) +}) + +describe('assessJamkning', () => { + it('calculates a positive adjustment from total original VAT', () => { + const result = assessJamkning({ + acquisitionDate: '2023-01-01', + disposalDate: '2025-06-30', + category: 'equipment', + originalInputVat: 100_000, + originalDeductionPercent: 40, + disposalType: 'sale', + vatTreatment: 'standard_25', + netProceeds: 1_000_000, + }) + + expect(result).toMatchObject({ + direction: 'increase', + remainingYears: 3, + amount: 36_000, + capped: false, + }) + }) + + it('caps positive movable-property adjustment at 25 percent of net proceeds', () => { + const result = assessJamkning({ + acquisitionDate: '2025-01-01', + disposalDate: '2025-12-31', + category: 'equipment', + originalInputVat: 100_000, + originalDeductionPercent: 0, + disposalType: 'sale', + vatTreatment: 'standard_25', + netProceeds: 40_000, + }) + + expect(result).toMatchObject({ direction: 'increase', amount: 10_000, capped: true }) + }) + + it('calculates a negative adjustment for an exempt sale', () => { + const result = assessJamkning({ + acquisitionDate: '2024-01-01', + disposalDate: '2026-01-01', + category: 'machinery', + originalInputVat: 75_000, + originalDeductionPercent: 100, + disposalType: 'sale', + vatTreatment: 'exempt', + netProceeds: 200_000, + }) + + expect(result).toMatchObject({ direction: 'decrease', remainingYears: 3, amount: 45_000 }) + }) + + it('does not adjust below the investment-good threshold', () => { + expect( + assessJamkning({ + acquisitionDate: '2026-01-01', + disposalDate: '2026-06-30', + category: 'equipment', + originalInputVat: 49_999, + originalDeductionPercent: 100, + disposalType: 'sale', + vatTreatment: 'exempt', + }), + ).toMatchObject({ direction: 'none', amount: 0, reason: 'below_threshold' }) + }) + + it('transfers the obligation in a qualifying business transfer', () => { + expect( + assessJamkning({ + acquisitionDate: '2026-01-01', + disposalDate: '2026-06-30', + category: 'equipment', + originalInputVat: 50_000, + originalDeductionPercent: 100, + disposalType: 'business_transfer', + }), + ).toMatchObject({ direction: 'transferred', amount: 0, reason: 'transferred' }) + }) + + it('does not adjust a scrapped asset', () => { + expect( + assessJamkning({ + acquisitionDate: '2026-01-01', + disposalDate: '2026-06-30', + category: 'equipment', + originalInputVat: 50_000, + originalDeductionPercent: 100, + disposalType: 'scrap', + }), + ).toMatchObject({ direction: 'none', amount: 0, reason: 'scrap' }) }) }) diff --git a/lib/bokslut/assets/asset-service.ts b/lib/bokslut/assets/asset-service.ts index 0f5aa053..6a6e1c2c 100644 --- a/lib/bokslut/assets/asset-service.ts +++ b/lib/bokslut/assets/asset-service.ts @@ -1,11 +1,18 @@ import type { SupabaseClient } from '@supabase/supabase-js' -import { createJournalEntry } from '@/lib/bookkeeping/engine' +import { + commitAssetDisposal, + createDraftEntry, +} from '@/lib/bookkeeping/engine' import { fetchAllRows } from '@/lib/supabase/fetch-all' import { fetchEntryLines, type EntryLinesQuery } from '@/lib/bookkeeping/entry-lines' +import { computeAnnualDepreciation } from './depreciation-engine' +import { assessJamkning, assessJamkningEligibility } from './jamkning' import type { Asset, AssetCategory, + AssetDisposalType, DepreciationMethod, + FiscalPeriod, K3Component, CreateJournalEntryLineInput, JournalEntry, @@ -477,54 +484,23 @@ function inBasRange(account: string, range: [string, string]): boolean { return account >= range[0] && account <= range[1] } +export type AssetDisposalVatTreatment = Exclude + export interface DisposeAssetInput { - /** ISO date of disposal: typically the day of sale or scrapping. */ + disposal_type: AssetDisposalType disposed_at: string - /** Cash / receivable received for the asset, INCLUDING VAT when applicable. - * Zero for scrapping. */ + /** Gross consideration, including VAT for a taxable sale. */ disposed_proceeds: number - /** Optional override for the bank/receivable account credited with the - * proceeds. Defaults to 1930 (företagskonto). */ proceeds_account?: string - /** Fiscal period the disposal entry lands in. Caller resolves this from - * disposed_at: we don't auto-derive to keep the period-lock check at - * the route layer. */ fiscal_period_id: string - /** - * Output VAT on the proceeds (ML 3 kap 3 § / 7 kap 3 §). When > 0, a - * credit on the matching 26xx account is appended to the journal entry, - * and `disposed_proceeds` is treated as the GROSS amount (incl. VAT). - * The net (proceeds − vat) is what gets compared to NBV to compute - * gain/loss. Defaults to 0 (sale was momsfri / outside scope). - */ - proceeds_vat?: number - /** - * Treatment for `proceeds_vat`. Required when `proceeds_vat > 0` because - * the engine needs to know which 26xx account to credit: - * - standard_25 → 2611 - * - reduced_12 → 2621 - * - reduced_6 → 2631 - * - reverse_charge / export / exempt → no VAT line (treated as - * informational; proceeds_vat must be 0 in those cases) - */ - vat_treatment?: VatTreatment - /** - * Jämkning amount per ML 8a kap 7 §: when the disposal happens inside - * the korrigeringstid, the originally-deducted input VAT must be - * partially paid back. The caller computes this via - * computeJamkningAmount() (lib/bokslut/assets/jamkning.ts) and passes - * the result here. A positive value means "pay back to the state" and - * is booked as a CREDIT to 2641 (reverses the original input-VAT - * deduction) with an offsetting debit on the asset's gain/loss account. - * Zero / undefined = no jämkning line. - */ - jamkning_amount?: number - /** Audit metadata: remaining months in korrigeringstid at disposal date. */ - jamkning_remaining_months?: number - /** Audit metadata: total korrigeringstid (60 or 120 months). */ - jamkning_total_months?: number - /** Audit metadata: original input VAT deducted at acquisition. */ + vat_treatment?: AssetDisposalVatTreatment + /** Total original input VAT, whether or not it was fully deducted. */ jamkning_original_input_vat?: number + jamkning_original_deduction_percent?: number + /** Confirms that the transaction qualifies under ML 5:38. */ + business_transfer_confirmed?: boolean + /** Confirms that the required adjustment document is handled at transfer. */ + adjustment_document_confirmed?: boolean } export interface DisposalResult { @@ -535,29 +511,265 @@ export interface DisposalResult { gain_or_loss: number } -/** - * Dispose of an asset. Posts a journal entry that: - * - Debit accumulated depreciation (to zero out the asset's accumulated - * account) - * - Credit acquisition cost (to zero out the asset's anskaffning account) - * - Debit proceeds account (bank / receivable) for sale price (gross, - * incl VAT) - * - Credit 26xx (output VAT) when the sale is momspliktig (standard_25 → - * 2611, reduced_12 → 2621, reduced_6 → 2631) - * - Credit 2641 + Debit loss account for the jämkning amount when the - * disposal happens inside the korrigeringstid (ML 8a kap 4-7 §§) - * - Debit 78xx (loss on sale) OR Credit 30xx (gain on sale) for the - * net gain / loss vs NBV: accounts branch on category (3013/7813 - * for immaterial, 3971/7971 for building / markanläggning, 3973/7973 - * for everything else). - * - * Gain/loss is computed on the NET proceeds (excl VAT), since VAT is a - * pass-through to Skatteverket and does not affect resultaträkningen. - * - * After posting, marks the asset row with disposed_at, disposed_proceeds, - * disposed_proceeds_vat, disposed_vat_treatment, and jämkning audit fields. - * The DB trigger then prevents further edits to financial fields. - */ +export class AssetNotFoundError extends Error { + readonly code = 'ASSET_NOT_FOUND' +} + +export class AssetAlreadyDisposedError extends Error { + readonly code = 'ASSET_ALREADY_DISPOSED' +} + +export class AssetDisposalBlockedError extends Error { + readonly code = 'ASSET_DISPOSAL_BLOCKED' + constructor(readonly reason: 'later_depreciation_posted' | 'current_depreciation_mismatch') { + super(reason) + } +} + +export class AssetJamkningDataRequiredError extends Error { + readonly code = 'ASSET_JAMKNING_DATA_REQUIRED' +} + +export class AssetAdjustmentDocumentRequiredError extends Error { + readonly code = 'ASSET_ADJUSTMENT_DOCUMENT_REQUIRED' + constructor() { + super('ASSET_ADJUSTMENT_DOCUMENT_REQUIRED') + } +} + +export class AssetBusinessTransferConfirmationRequiredError extends Error { + readonly code = 'ASSET_BUSINESS_TRANSFER_CONFIRMATION_REQUIRED' + constructor() { + super('ASSET_BUSINESS_TRANSFER_CONFIRMATION_REQUIRED') + } +} + +interface DisposalScheduleRow { + fiscal_period_id: string + planned_depreciation: number | string + journal_entry_id: string | null +} + +interface DisposalPlan { + lines: CreateJournalEntryLineInput[] + currentDepreciation: number + accumulatedDepreciation: number + proceedsGross: number + proceedsVat: number + vatTreatment: AssetDisposalVatTreatment | null + gainOrLoss: number + jamkning: ReturnType +} + +export function buildAssetDisposalPlan(args: { + asset: Asset + input: DisposeAssetInput + fiscalPeriod: Pick + periods: Array> + schedules: DisposalScheduleRow[] +}): DisposalPlan { + const { asset, input, fiscalPeriod, periods, schedules } = args + if (input.disposed_at < asset.acquisition_date) { + throw new Error('Avyttringsdatum kan inte vara före anskaffningsdatum.') + } + + const periodStartById = new Map(periods.map((period) => [period.id, period.period_start])) + const posted = schedules.filter((schedule) => schedule.journal_entry_id !== null) + const laterPosted = posted.some( + (schedule) => (periodStartById.get(schedule.fiscal_period_id) ?? '') > fiscalPeriod.period_start, + ) + if (laterPosted) throw new AssetDisposalBlockedError('later_depreciation_posted') + + const currentPosted = posted.find( + (schedule) => schedule.fiscal_period_id === fiscalPeriod.id, + ) + const priorAccumulated = round2( + posted + .filter((schedule) => { + const start = periodStartById.get(schedule.fiscal_period_id) + return start !== undefined && start < fiscalPeriod.period_start + }) + .reduce((sum, schedule) => sum + Number(schedule.planned_depreciation), 0), + ) + const requiredCurrent = computeAnnualDepreciation( + { ...asset, disposed_at: input.disposed_at }, + fiscalPeriod, + priorAccumulated, + ).amount + + let currentDepreciation = requiredCurrent + if (currentPosted) { + if (Math.abs(Number(currentPosted.planned_depreciation) - requiredCurrent) > 0.01) { + throw new AssetDisposalBlockedError('current_depreciation_mismatch') + } + currentDepreciation = 0 + } + + const accumulatedDepreciation = round2( + priorAccumulated + (currentPosted ? Number(currentPosted.planned_depreciation) : requiredCurrent), + ) + const acquisitionCost = round2(Number(asset.acquisition_cost)) + const proceedsGross = input.disposal_type === 'scrap' ? 0 : round2(input.disposed_proceeds) + const vatTreatment = input.disposal_type === 'sale' ? input.vat_treatment ?? null : null + if (input.disposal_type === 'sale' && proceedsGross > 0 && !vatTreatment) { + throw new Error('Momsbehandling krävs vid försäljning.') + } + const proceedsVat = round2( + vatTreatment === 'standard_25' ? proceedsGross * (0.25 / 1.25) : 0, + ) + const proceedsNet = round2(proceedsGross - proceedsVat) + const netBookValue = round2(acquisitionCost - accumulatedDepreciation) + const gainOrLoss = round2(proceedsNet - netBookValue) + + if (input.disposal_type === 'business_transfer' && !input.business_transfer_confirmed) { + throw new AssetBusinessTransferConfirmationRequiredError() + } + + const eligibility = assessJamkningEligibility({ + acquisitionDate: asset.acquisition_date, + disposalDate: input.disposed_at, + basAssetAccount: asset.bas_asset_account, + category: asset.category, + }) + const possibleInvestmentGoodCost = eligibility.totalYears === 10 ? 400_000 : 200_000 + if ( + eligibility.withinAdjustmentPeriod && + acquisitionCost >= possibleInvestmentGoodCost && + (input.jamkning_original_input_vat === undefined || + input.jamkning_original_deduction_percent === undefined) + ) { + throw new AssetJamkningDataRequiredError() + } + + const jamkning = assessJamkning({ + acquisitionDate: asset.acquisition_date, + disposalDate: input.disposed_at, + category: asset.category, + basAssetAccount: asset.bas_asset_account, + originalInputVat: input.jamkning_original_input_vat ?? 0, + originalDeductionPercent: input.jamkning_original_deduction_percent ?? 0, + disposalType: input.disposal_type, + vatTreatment: vatTreatment ?? undefined, + netProceeds: proceedsNet, + }) + if ( + jamkning.direction === 'transferred' && + !input.adjustment_document_confirmed + ) { + throw new AssetAdjustmentDocumentRequiredError() + } + + const lines: CreateJournalEntryLineInput[] = [] + if (currentDepreciation > 0.005) { + lines.push( + { + account_number: asset.bas_expense_account, + debit_amount: currentDepreciation, + credit_amount: 0, + line_description: `Avskrivning till avyttringsdag: ${asset.name}`, + }, + { + account_number: asset.bas_accumulated_account, + debit_amount: 0, + credit_amount: currentDepreciation, + line_description: `Ackumulerad avskrivning till avyttringsdag: ${asset.name}`, + }, + ) + } + if (accumulatedDepreciation > 0.005) { + lines.push({ + account_number: asset.bas_accumulated_account, + debit_amount: accumulatedDepreciation, + credit_amount: 0, + line_description: `Avyttring: nollställ ackumulerad avskrivning ${asset.name}`, + }) + } + if (acquisitionCost > 0.005) { + lines.push({ + account_number: asset.bas_asset_account, + debit_amount: 0, + credit_amount: acquisitionCost, + line_description: `Avyttring: nollställ anskaffningsvärde ${asset.name}`, + }) + } + if (proceedsGross > 0.005) { + lines.push({ + account_number: input.proceeds_account ?? '1930', + debit_amount: proceedsGross, + credit_amount: 0, + line_description: `Avyttring: erhållet belopp ${asset.name}`, + }) + } + if (proceedsVat > 0.005 && vatTreatment) { + lines.push({ + account_number: outputVatAccountFor(vatTreatment) ?? '2611', + debit_amount: 0, + credit_amount: proceedsVat, + line_description: `Utgående moms vid avyttring av ${asset.name}`, + }) + } + + const { gain, loss } = disposalAccounts(asset.category) + if (gainOrLoss > 0.005) { + lines.push({ + account_number: gain, + debit_amount: 0, + credit_amount: gainOrLoss, + line_description: `Vinst vid avyttring av ${asset.name}`, + }) + } else if (gainOrLoss < -0.005) { + lines.push({ + account_number: loss, + debit_amount: Math.abs(gainOrLoss), + credit_amount: 0, + line_description: `Förlust vid avyttring av ${asset.name}`, + }) + } + + if (jamkning.amount > 0.005 && jamkning.direction === 'decrease') { + lines.push( + { + account_number: '6999', + debit_amount: jamkning.amount, + credit_amount: 0, + line_description: `Negativ justering av ingående moms: ${asset.name}`, + }, + { + account_number: '2641', + debit_amount: 0, + credit_amount: jamkning.amount, + line_description: `Justerad ingående moms enligt ML 15 kap: ${asset.name}`, + }, + ) + } else if (jamkning.amount > 0.005 && jamkning.direction === 'increase') { + lines.push( + { + account_number: '2641', + debit_amount: jamkning.amount, + credit_amount: 0, + line_description: `Justerad ingående moms enligt ML 15 kap: ${asset.name}`, + }, + { + account_number: '6999', + debit_amount: 0, + credit_amount: jamkning.amount, + line_description: `Positiv justering av ingående moms: ${asset.name}`, + }, + ) + } + + return { + lines, + currentDepreciation, + accumulatedDepreciation, + proceedsGross, + proceedsVat, + vatTreatment, + gainOrLoss, + jamkning, + } +} + export async function disposeAsset( supabase: SupabaseClient, companyId: string, @@ -566,152 +778,50 @@ export async function disposeAsset( input: DisposeAssetInput, ): Promise { const asset = await getAsset(supabase, companyId, assetId) - if (!asset) throw new Error('Asset not found') - if (asset.disposed_at) { - throw new Error('Asset is already disposed') - } + if (!asset) throw new AssetNotFoundError() + if (asset.disposed_at) throw new AssetAlreadyDisposedError() - // Derive accumulated depreciation server-side from posted - // depreciation_schedules so a malicious or buggy caller cannot inflate the - // book-value calculation. Limitation: manual avskrivningsverifikationer - // posted outside the engine aren't captured here. Phase 5+ can replace - // this with a trial-balance scan on bas_accumulated_account. - const accumulated = await sumPostedDepreciation(supabase, companyId, assetId) - - const acquisitionCost = Number(asset.acquisition_cost) - const proceedsGross = round2(Number(input.disposed_proceeds)) - const proceedsVat = round2(Number(input.proceeds_vat ?? 0)) - const proceedsNet = round2(proceedsGross - proceedsVat) - const vatTreatment = input.vat_treatment - // Internal validation guard: when caller passes a VAT amount, treatment - // must accompany it so we can resolve the BAS 26xx account. The API - // layer also enforces this via Zod refinement; mirroring here keeps - // the engine self-defending against direct callers (MCP, scripts). - if (proceedsVat > 0.005 && !vatTreatment) { + // Paginated past PostgREST's silent 1000-row cap. A truncated period list + // can drop input.fiscal_period_id (false "Fiscal period not found") and + // starves the later_depreciation_posted guard of period start dates. + let periods: Array> + let scheduleRows: DisposalScheduleRow[] + try { + ;[periods, scheduleRows] = await Promise.all([ + fetchAllRows>( + ({ from, to }) => + supabase + .from('fiscal_periods') + .select('id, period_start, period_end') + .eq('company_id', companyId) + .order('period_start', { ascending: true }) + .order('id', { ascending: true }) + .range(from, to), + ), + fetchAllRows(({ from, to }) => + supabase + .from('depreciation_schedules') + .select('fiscal_period_id, planned_depreciation, journal_entry_id') + .eq('company_id', companyId) + .eq('asset_id', assetId) + .order('fiscal_period_id', { ascending: true }) + .range(from, to), + ), + ]) + } catch (error) { throw new Error( - 'vat_treatment krävs när proceeds_vat > 0: engine kan inte avgöra rätt 26xx-konto.', + `Failed to load disposal context: ${error instanceof Error ? error.message : String(error)}`, ) } - // Treatments that produce no VAT line must carry 0 VAT. - if ( - proceedsVat > 0.005 && - vatTreatment && - (vatTreatment === 'reverse_charge' || - vatTreatment === 'export' || - vatTreatment === 'exempt') - ) { - throw new Error( - `proceeds_vat måste vara 0 för momsbehandling "${vatTreatment}".`, - ) - } - - // Gain/loss is computed on the NET proceeds: VAT is pass-through and - // never hits the income statement. - const netBookValue = round2(acquisitionCost - accumulated) - const gainOrLoss = round2(proceedsNet - netBookValue) - const proceedsAccount = input.proceeds_account ?? '1930' - - // ── Jämkning (ML 8a kap 7 §) ────────────────────────────────────── - // When the disposal happens inside the korrigeringstid, part of the - // originally-deducted input VAT must be paid back. Caller passes the - // precomputed amount (positive = debt to the state). - // - // Booking direction: We credit 2641 to reverse the original input-VAT - // deduction (2641 normal balance is debit; a credit reduces the - // deduction). The offset is debited to BAS 6991: jämkning is a VAT - // correction per ML 8a kap, NOT a disposal loss, so it must NOT hit - // the 78xx förlust-vid-avyttring accounts. See the jämkning lines - // below for details. - const jamkning = round2(Number(input.jamkning_amount ?? 0)) - - const lines: CreateJournalEntryLineInput[] = [] - - if (accumulated > 0.005) { - lines.push({ - account_number: asset.bas_accumulated_account, - debit_amount: round2(accumulated), - credit_amount: 0, - line_description: `Avyttring: nollställ ack. avskrivning ${asset.name}`, - }) - } - lines.push({ - account_number: asset.bas_asset_account, - debit_amount: 0, - credit_amount: round2(acquisitionCost), - line_description: `Avyttring: nollställ anskaffning ${asset.name}`, + const fiscalPeriod = periods.find((period) => period.id === input.fiscal_period_id) + if (!fiscalPeriod) throw new Error('Fiscal period not found') + const plan = buildAssetDisposalPlan({ + asset, + input, + fiscalPeriod, + periods, + schedules: scheduleRows, }) - if (proceedsGross > 0.005) { - lines.push({ - account_number: proceedsAccount, - debit_amount: proceedsGross, - credit_amount: 0, - line_description: `Avyttring: erhållet belopp ${asset.name}`, - }) - } - - // Output VAT line: credit the matching 26xx account. - if (proceedsVat > 0.005 && vatTreatment) { - const vatAccount = outputVatAccountFor(vatTreatment) - if (vatAccount) { - lines.push({ - account_number: vatAccount, - debit_amount: 0, - credit_amount: proceedsVat, - line_description: `Utgående moms ${vatRateLabel(vatTreatment)} avyttring ${asset.name}`, - }) - } - } - - // Disposal gain/loss accounts vary by asset class: BAS 2026 splits them - // because INK2R routes each pair to a different field. Mixing them - // misclassifies in the tax declaration. - // - immaterial → 3013 (vinst) / 7813 (förlust) - // - building / markanlägg → 3971 / 7971 - // - other tangible → 3973 / 7973 - const isBuilding = asset.category === 'building' || asset.category === 'land_improvement' - const gainAccount = - asset.category === 'immaterial' ? '3013' : isBuilding ? '3971' : '3973' - const lossAccount = - asset.category === 'immaterial' ? '7813' : isBuilding ? '7971' : '7973' - - if (gainOrLoss > 0.005) { - lines.push({ - account_number: gainAccount, - debit_amount: 0, - credit_amount: gainOrLoss, - line_description: `Vinst vid avyttring av ${asset.name}`, - }) - } else if (gainOrLoss < -0.005) { - lines.push({ - account_number: lossAccount, - debit_amount: Math.abs(gainOrLoss), - credit_amount: 0, - line_description: `Förlust vid avyttring av ${asset.name}`, - }) - } - - // Jämkning lines: credit 2641 + debit 6991. Jämkning is a VAT - // correction per ML 8a kap, NOT a disposal loss. Routing it through - // the 78xx förlust-vid-avyttring accounts would distort both the - // gain/loss line on the income statement and the INK2R mapping, and - // mix tax-correction costs with disposal losses in the audit trail. - // BAS 6991 "Övriga externa kostnader, avdragsgilla" is the seeded - // catch-all för-en-extern-kostnad account that fits a repayment of - // previously-deducted input VAT. - if (jamkning > 0.005) { - lines.push({ - account_number: '6991', - debit_amount: jamkning, - credit_amount: 0, - line_description: `Jämkning av tidigare avdragen ingående moms enligt ML 8a kap (${asset.name})`, - }) - lines.push({ - account_number: '2641', - debit_amount: 0, - credit_amount: jamkning, - line_description: `Återförd ingående moms jämkning ${asset.name}`, - }) - } // K3 component breakdown: when the asset was depreciated per-component, // we surface the component list in the journal entry notes so auditors @@ -727,43 +837,71 @@ export async function disposeAsset( .join('; ')}` : null - let disposalEntry: JournalEntry | null = null - if (lines.length > 0) { - disposalEntry = await createJournalEntry(supabase, companyId, userId, { + let draft: JournalEntry | null = null + if (plan.lines.length > 0) { + draft = await createDraftEntry(supabase, companyId, userId, { fiscal_period_id: input.fiscal_period_id, entry_date: input.disposed_at, description: `Avyttring av tillgång: ${asset.name}`, - source_type: 'manual', - lines, + source_type: 'system', + lines: plan.lines, ...(componentNotes ? { notes: componentNotes } : {}), }) } - const { data: updated, error: updateError } = await supabase - .from('assets') - .update({ - disposed_at: input.disposed_at, - disposed_proceeds: proceedsGross, - disposed_proceeds_vat: proceedsVat, - disposed_vat_treatment: vatTreatment ?? null, - jamkning_amount: jamkning, - jamkning_remaining_months: input.jamkning_remaining_months ?? null, - jamkning_total_months: input.jamkning_total_months ?? null, - jamkning_original_input_vat: input.jamkning_original_input_vat ?? null, - }) - .eq('id', assetId) - .eq('company_id', companyId) - .select('*') - .single() + let disposalEntry: JournalEntry | null + try { + disposalEntry = await commitAssetDisposal( + supabase, + companyId, + userId, + draft?.id ?? null, + { + asset_id: assetId, + fiscal_period_id: input.fiscal_period_id, + disposal_type: input.disposal_type, + disposed_at: input.disposed_at, + disposed_proceeds: plan.proceedsGross, + proceeds_vat: plan.proceedsVat, + vat_treatment: plan.vatTreatment, + current_depreciation: plan.currentDepreciation, + jamkning_amount: plan.jamkning.amount, + jamkning_direction: plan.jamkning.direction, + jamkning_remaining_years: plan.jamkning.remainingYears ?? null, + jamkning_total_years: plan.jamkning.totalYears || null, + jamkning_original_input_vat: input.jamkning_original_input_vat ?? null, + jamkning_original_deduction_percent: + input.jamkning_original_deduction_percent ?? null, + jamkning_new_deduction_percent: plan.jamkning.newDeductionPercent, + }, + ) + } catch (error) { + if (draft) { + await supabase + .from('journal_entries') + .update({ status: 'cancelled' }) + .eq('id', draft.id) + .eq('status', 'draft') + } + throw error + } - if (updateError || !updated) { - throw new Error(`Failed to mark asset disposed: ${updateError?.message ?? 'unknown'}`) + const updated = (await getAsset(supabase, companyId, assetId)) ?? { + ...asset, + disposed_at: input.disposed_at, + disposed_proceeds: plan.proceedsGross, + disposed_proceeds_vat: plan.proceedsVat, + disposed_vat_treatment: plan.vatTreatment, + disposal_type: input.disposal_type, + disposal_journal_entry_id: disposalEntry?.id ?? null, + jamkning_amount: plan.jamkning.amount, + jamkning_direction: plan.jamkning.direction, } return { asset: updated as Asset, disposal_entry: disposalEntry, - gain_or_loss: gainOrLoss, + gain_or_loss: plan.gainOrLoss, } } @@ -784,49 +922,16 @@ function outputVatAccountFor(treatment: VatTreatment): string | null { } } -function vatRateLabel(treatment: VatTreatment): string { - switch (treatment) { - case 'standard_25': - return '25%' - case 'reduced_12': - return '12%' - case 'reduced_6': - return '6%' - default: - return '' - } -} - function round2(n: number): number { return Math.round(n * 100) / 100 } -/** - * Sum every posted depreciation_schedules row for an asset to get accumulated - * depreciation as of "now". Used by disposeAsset so the caller cannot - * influence the book-value calculation. - */ -async function sumPostedDepreciation( - supabase: SupabaseClient, - companyId: string, - assetId: string, -): Promise { - const { data, error } = await supabase - .from('depreciation_schedules') - .select('planned_depreciation') - .eq('company_id', companyId) - .eq('asset_id', assetId) - .not('journal_entry_id', 'is', null) - - if (error) { - throw new Error(`Failed to sum depreciation for asset ${assetId}: ${error.message}`) +function disposalAccounts(category: AssetCategory): { gain: string; loss: string } { + if (category === 'immaterial') return { gain: '3971', loss: '7971' } + if (category === 'building' || category === 'land_improvement') { + return { gain: '3972', loss: '7972' } } - - type Row = { planned_depreciation: number | string } - return ((data ?? []) as Row[]).reduce( - (sum, row) => sum + (Number(row.planned_depreciation) || 0), - 0, - ) + return { gain: '3973', loss: '7973' } } /** diff --git a/lib/bokslut/assets/depreciation-engine.ts b/lib/bokslut/assets/depreciation-engine.ts index eb8dca01..dd7ae530 100644 --- a/lib/bokslut/assets/depreciation-engine.ts +++ b/lib/bokslut/assets/depreciation-engine.ts @@ -1,6 +1,5 @@ import type { SupabaseClient } from '@supabase/supabase-js' import { createJournalEntry } from '@/lib/bookkeeping/engine' -import { listAssets } from './asset-service' import type { Asset, FiscalPeriod, @@ -272,6 +271,9 @@ export async function proposeAnnualPostings( companyId: string, fiscalPeriodId: string, ): Promise { + // Loaded here to keep the pure depreciation calculator reusable from the + // asset disposal service without creating a module initialization cycle. + const { listAssets } = await import('./asset-service') const [periodResult, assets, currentSchedulesResult, priorSchedulesResult] = await Promise.all([ supabase .from('fiscal_periods') diff --git a/lib/bokslut/assets/jamkning.ts b/lib/bokslut/assets/jamkning.ts index 564c5aed..05bd45c0 100644 --- a/lib/bokslut/assets/jamkning.ts +++ b/lib/bokslut/assets/jamkning.ts @@ -1,190 +1,198 @@ /** - * Jämkning helpers: input-VAT correction on disposal of investeringsvara - * within the korrigeringstid (ML 8a kap 4-7 §§). + * Pure helpers for adjustment of input VAT on investment goods under + * Mervardesskattelagen (2023:200), chapter 15. * - * When an asset that had input VAT deducted at acquisition is disposed of - * within the correction period, part of the original deducted input VAT - * must be paid back. The amount is the portion that corresponds to the - * remaining months of the correction period. - * - * Correction periods per ML 8a kap 6 §: - * - 60 months (5 years) for lös egendom / movable property - * - 120 months (10 years) for fastighet / markanläggning (real property) - * - * The two functions in this file are PURE (no I/O, no Supabase, no clock - * read) so they can be tested with simple input/output cases. - * - * Caller responsibility: - * - Decide whether a disposal event triggers jämkning. The most common - * trigger is a sale within korrigeringstid, but ML 8a kap also lists - * "ändrad användning" and "utträde ur skattskyldighet". The caller - * passes the boolean so this helper stays domain-agnostic. - * - Source `originalInputVat`. For new assets this comes from the - * supplier invoice that booked the acquisition; for legacy assets the - * user has to enter it manually. + * The acquisition year and disposal year both count in the adjustment + * period. The basis is total original input VAT, not only the amount that was + * deducted at acquisition. */ -import type { AssetCategory } from '@/types' +import type { AssetCategory, VatTreatment } from '@/types' -/** - * Inputs to compute the jämkning amount on disposal. - */ -export interface JamkningInput { - /** Original input VAT deducted at acquisition (BAS 2641 debit). */ +export type JamkningDirection = 'increase' | 'decrease' | 'none' | 'transferred' + +export interface JamkningAssessmentInput { + acquisitionDate: string + disposalDate: string + category?: AssetCategory + basAssetAccount?: string originalInputVat: number - /** - * Total correction period in months. 60 for movable property, - * 120 for fastighet / markanläggning. Caller decides which. - */ - totalCorrectionMonths: number - /** - * Months remaining in the correction period as of the disposal date. - * Caller computes this so the helper avoids any clock / calendar - * dependency. - */ - remainingMonths: number - /** - * Whether the disposal event triggers jämkning at all. Most disposals - * within the korrigeringstid trigger it, but the caller may opt out - * (e.g. the buyer continues to use the asset in a fully taxable - * verksamhet and assumes the jämkning obligation via avtal: ML 8a kap - * 12 §). - */ - disposalEvent: 'triggers_jamkning' | 'no_jamkning' + originalDeductionPercent: number + disposalType: 'sale' | 'scrap' | 'business_transfer' + vatTreatment?: VatTreatment + netProceeds?: number +} + +export interface JamkningAssessment { + isInvestmentGood: boolean + threshold: number + totalYears: number + remainingYears: number + originalDeductionPercent: number + newDeductionPercent: number | null + direction: JamkningDirection + amount: number + capped: boolean + reason: + | 'below_threshold' + | 'outside_adjustment_period' + | 'scrap' + | 'transferred' + | 'change_below_five_points' + | 'adjustment' } /** - * Compute the jämkning amount per ML 8a kap 7 §. Returns a positive number - * representing the amount to be paid back to the state (i.e. reverse the - * input-VAT deduction). When disposal happens AFTER the correction period - * (remainingMonths <= 0) the formula returns 0: caller can simply skip - * the line. - * - * Formula: (remaining / total) × originalInputVat - * - * Edge cases: - * - disposalEvent = 'no_jamkning' → 0 - * - totalCorrectionMonths <= 0 → 0 (defensive: caller bug) - * - remainingMonths <= 0 → 0 (asset is past the correction period) - * - remainingMonths > totalCorrectionMonths → caps at originalInputVat - * (sold immediately, before any correction period has elapsed) + * Assess a disposal using the one-time adjustment formula in ML 15:13-18. + * A taxable sale of movable property is capped at 25 percent of net proceeds. */ -export function computeJamkningAmount(input: JamkningInput): number { - if (input.disposalEvent === 'no_jamkning') return 0 - if (input.totalCorrectionMonths <= 0) return 0 - if (input.remainingMonths <= 0) return 0 +export function assessJamkning(input: JamkningAssessmentInput): JamkningAssessment { + const realProperty = isRealProperty(input) + const totalYears = realProperty ? 10 : 5 + const threshold = realProperty ? 100_000 : 50_000 + const remainingYears = yearsRemaining( + input.acquisitionDate, + input.disposalDate, + totalYears, + ) + const originalDeductionPercent = clampPercent(input.originalDeductionPercent) + const base = { + isInvestmentGood: input.originalInputVat >= threshold, + threshold, + totalYears, + remainingYears, + originalDeductionPercent, + } - const remaining = Math.min(input.remainingMonths, input.totalCorrectionMonths) - const raw = (remaining / input.totalCorrectionMonths) * input.originalInputVat - return Math.round(raw * 100) / 100 + if (!base.isInvestmentGood) { + return noAdjustment(base, 'below_threshold', originalDeductionPercent) + } + if (remainingYears === 0) { + return noAdjustment(base, 'outside_adjustment_period', originalDeductionPercent) + } + if (input.disposalType === 'scrap') { + return noAdjustment(base, 'scrap', originalDeductionPercent) + } + if (input.disposalType === 'business_transfer') { + return { + ...base, + newDeductionPercent: null, + direction: 'transferred', + amount: 0, + capped: false, + reason: 'transferred', + } + } + + const newDeductionPercent = treatmentRetainsDeduction(input.vatTreatment) ? 100 : 0 + const change = newDeductionPercent - originalDeductionPercent + if (Math.abs(change) < 5) { + return noAdjustment(base, 'change_below_five_points', newDeductionPercent) + } + + const rawAmount = round2( + input.originalInputVat * (Math.abs(change) / 100) * (remainingYears / totalYears), + ) + let amount = rawAmount + let capped = false + + if (!realProperty && change > 0 && treatmentRetainsDeduction(input.vatTreatment)) { + const cap = round2(Math.max(0, Number(input.netProceeds ?? 0)) * 0.25) + if (amount > cap) { + amount = cap + capped = true + } + } + + return { + ...base, + newDeductionPercent, + direction: change > 0 ? 'increase' : 'decrease', + amount, + capped, + reason: 'adjustment', + } } -/** - * Suggested eligibility check for an asset disposal. Returns the - * totalCorrectionMonths the caller should pass to computeJamkningAmount, - * along with the remainingMonths derived from acquisitionDate and - * disposalDate. - * - * The threshold lives here (not in the asset row) because it's a property - * of the asset CATEGORY / BAS account class, not user-editable per-asset: - * - * - Fastighet (BAS 1100-1199) → 120 months - * - Markanläggning (BAS 1150-1159): also 120 months - * - All other movable property → 60 months - * - * Pure: takes only dates and the asset's BAS account, returns numbers. - * Caller decides whether to surface the suggestion in the UI. - */ export interface JamkningEligibility { - /** Suggested total correction period (60 or 120 months). */ - totalCorrectionMonths: number - /** Months elapsed between acquisitionDate and disposalDate (clamped at 0). */ - elapsedMonths: number - /** Remaining months in the correction period (clamped at 0). */ - remainingMonths: number - /** - * Whether the disposal falls WITHIN the correction period. Convenience - * boolean: equivalent to `remainingMonths > 0`. Caller uses this to - * show / hide the jämkning UI. - */ - withinCorrectionPeriod: boolean + totalYears: number + elapsedYears: number + remainingYears: number + withinAdjustmentPeriod: boolean + threshold: number } export function assessJamkningEligibility(args: { - basExpenseAccount?: string basAssetAccount?: string category?: AssetCategory acquisitionDate: string disposalDate: string }): JamkningEligibility { - const totalCorrectionMonths = isRealProperty(args) ? 120 : 60 - const elapsed = monthsBetween(args.acquisitionDate, args.disposalDate) - const elapsedClamped = Math.max(0, elapsed) - const remaining = Math.max(0, totalCorrectionMonths - elapsedClamped) + const realProperty = isRealProperty(args) + const totalYears = realProperty ? 10 : 5 + const acquisitionYear = isoYear(args.acquisitionDate) + const disposalYear = isoYear(args.disposalDate) + const elapsedYears = Math.max(0, disposalYear - acquisitionYear) + const remainingYears = yearsRemaining(args.acquisitionDate, args.disposalDate, totalYears) + return { - totalCorrectionMonths, - elapsedMonths: elapsedClamped, - remainingMonths: remaining, - withinCorrectionPeriod: remaining > 0, + totalYears, + elapsedYears, + remainingYears, + withinAdjustmentPeriod: remainingYears > 0, + threshold: realProperty ? 100_000 : 50_000, } } -/** - * Real property (fastighet / markanläggning) per BAS 1100-1199 lives on - * the 10-year (120 mån) correction period. Everything else uses 5 years. - * - * The plan's contract is that this resolves off the asset's BAS account - * range, with category as a secondary signal. Two reasons we prefer - * account-driven over category-driven: - * 1. The account is what BAS reports / SIE / INK2R actually read; the - * category is just a UI label. - * 2. Users who override the BAS account to something outside the - * category's default range get a consistent answer with what their - * reports show. - */ +function noAdjustment( + base: Pick< + JamkningAssessment, + | 'isInvestmentGood' + | 'threshold' + | 'totalYears' + | 'remainingYears' + | 'originalDeductionPercent' + >, + reason: Exclude, + newDeductionPercent: number, +): JamkningAssessment { + return { + ...base, + newDeductionPercent, + direction: 'none', + amount: 0, + capped: false, + reason, + } +} + +function treatmentRetainsDeduction(treatment: VatTreatment | undefined): boolean { + return treatment !== undefined && treatment !== 'exempt' +} + function isRealProperty(args: { - basExpenseAccount?: string basAssetAccount?: string category?: AssetCategory }): boolean { - // Prefer the asset (anskaffning) account when supplied: it's the most - // direct mapping to the BAS class. - const assetAccount = args.basAssetAccount - if (assetAccount && /^1[1][0-9]{2}$/.test(assetAccount)) return true - // Expense account check: 7820-7829 = byggnader/markanläggning. - const expense = args.basExpenseAccount - if (expense && /^782[0-9]$/.test(expense)) return true - // Category fallback for callers who only have the asset row's category - // (e.g. UI that hasn't loaded the full asset yet). - if (args.category === 'building' || args.category === 'land_improvement') { - return true - } - return false + if (args.basAssetAccount && /^11\d{2}$/.test(args.basAssetAccount)) return true + return args.category === 'building' || args.category === 'land_improvement' } -/** - * Calendar months between two ISO date strings, rounded toward zero. - * Counts complete months only: partial months don't tick the clock. - * - * The Swedish tax authorities count months, not days, for jämkning - * (ML 8a kap 6 §). Example: acquired 2023-01-15, sold 2026-01-14 → - * 35 months elapsed (the 36th month hasn't completed yet). - */ -function monthsBetween(fromIso: string, toIso: string): number { - const from = parseIsoDate(fromIso) - const to = parseIsoDate(toIso) - if (!from || !to) return 0 - let months = (to.year - from.year) * 12 + (to.month - from.month) - if (to.day < from.day) months -= 1 - return months +function yearsRemaining(acquisitionDate: string, disposalDate: string, totalYears: number): number { + const acquisitionYear = isoYear(acquisitionDate) + const disposalYear = isoYear(disposalDate) + return Math.max(0, Math.min(totalYears, totalYears - (disposalYear - acquisitionYear))) } -function parseIsoDate(iso: string): { year: number; month: number; day: number } | null { - const m = /^(\d{4})-(\d{2})-(\d{2})/.exec(iso) - if (!m) return null - return { - year: Number(m[1]), - month: Number(m[2]), - day: Number(m[3]), - } +function isoYear(value: string): number { + const match = /^(\d{4})-\d{2}-\d{2}$/.exec(value) + return match ? Number(match[1]) : 0 +} + +function clampPercent(value: number): number { + return Math.min(100, Math.max(0, value)) +} + +function round2(value: number): number { + return Math.round(value * 100) / 100 } diff --git a/lib/bookkeeping/engine.ts b/lib/bookkeeping/engine.ts index 99a3aa3e..c769faef 100644 --- a/lib/bookkeeping/engine.ts +++ b/lib/bookkeeping/engine.ts @@ -29,11 +29,14 @@ import { backfillStandardBASAccounts } from '@/lib/bookkeeping/account-backfill' import { syncInvoiceStatusFromPaymentEntry, isPaymentSourceType } from '@/lib/bookkeeping/payment-sync' import { getActor } from '@/lib/bookkeeping/actor-context' import type { + AssetDisposalType, + AssetJamkningDirection, CreateJournalEntryInput, CreateJournalEntryLineInput, JournalEntry, JournalEntryLine, JournalEntrySourceType, + VatTreatment, } from '@/types' const log = createLogger('bookkeeping.engine') @@ -669,6 +672,123 @@ export async function commitEntry( return result } +export interface CommitAssetDisposalInput { + asset_id: string + fiscal_period_id: string + disposal_type: AssetDisposalType + disposed_at: string + disposed_proceeds: number + proceeds_vat: number + vat_treatment: VatTreatment | null + current_depreciation: number + jamkning_amount: number + jamkning_direction: AssetJamkningDirection + jamkning_remaining_years: number | null + jamkning_total_years: number | null + jamkning_original_input_vat: number | null + jamkning_original_deduction_percent: number | null + jamkning_new_deduction_percent: number | null +} + +/** + * Commit a prepared asset-disposal draft and update the asset register in the + * same database transaction. The dedicated RPC delegates voucher numbering to + * commit_journal_entry, so disposal cannot leave a posted voucher without the + * corresponding immutable register state. + */ +export async function commitAssetDisposal( + supabase: SupabaseClient, + companyId: string, + userId: string, + entryId: string | null, + input: CommitAssetDisposalInput, +): Promise { + const actor = getActor() + const { error } = await supabase.rpc('commit_asset_disposal', { + p_company_id: companyId, + p_asset_id: input.asset_id, + p_entry_id: entryId, + p_fiscal_period_id: input.fiscal_period_id, + p_disposal_type: input.disposal_type, + p_disposed_at: input.disposed_at, + p_disposed_proceeds: input.disposed_proceeds, + p_proceeds_vat: input.proceeds_vat, + p_vat_treatment: input.vat_treatment, + p_current_depreciation: input.current_depreciation, + p_jamkning_amount: input.jamkning_amount, + p_jamkning_direction: input.jamkning_direction, + p_jamkning_remaining_years: input.jamkning_remaining_years, + p_jamkning_total_years: input.jamkning_total_years, + p_jamkning_original_input_vat: input.jamkning_original_input_vat, + p_jamkning_original_deduction_percent: input.jamkning_original_deduction_percent, + p_jamkning_new_deduction_percent: input.jamkning_new_deduction_percent, + p_actor_type: actor?.type ?? null, + p_actor_label: actor?.label ?? null, + }) + + if (error) { + log.error('commit_asset_disposal RPC failed', error, { + operation: 'commit_asset_disposal', + companyId, + userId, + entityType: 'asset', + entityId: input.asset_id, + journalEntryId: entryId, + pgCode: (error as { code?: string }).code, + }) + throw new BookkeepingDatabaseError('commit_asset_disposal', error.message) + } + + if (!entryId) return null + + // The RPC has already committed the voucher and the register update at this + // point. A transient reload failure must not masquerade as a failed + // disposal, so retry once and log the divergence before surfacing it. + let completeEntry: JournalEntry | null = null + let lastFetchError: { message: string } | null = null + for (let attempt = 0; attempt < 2 && !completeEntry; attempt++) { + const { data, error: fetchError } = await supabase + .from('journal_entries') + .select('*, lines:journal_entry_lines(*)') + .eq('id', entryId) + .eq('company_id', companyId) + .single() + if (data && !fetchError) { + completeEntry = data as JournalEntry + } else { + lastFetchError = fetchError ?? { message: 'posted entry not found' } + } + } + + if (!completeEntry) { + log.error( + 'asset disposal committed but posted entry reload failed', + lastFetchError, + { + operation: 'commit_asset_disposal', + companyId, + userId, + entityType: 'asset', + entityId: input.asset_id, + journalEntryId: entryId, + }, + ) + throw new BookkeepingDatabaseError( + 'fetch_asset_disposal_entry', + `disposal voucher is committed but could not be reloaded: ${ + lastFetchError?.message ?? 'posted entry not found' + }`, + ) + } + + const result = completeEntry + await eventBus.emit({ + type: 'journal_entry.committed', + payload: { entry: result, userId, companyId }, + }) + return result +} + /** * Create a journal entry with lines (verifikation) * Convenience wrapper: creates draft + commits in one step. diff --git a/lib/bookkeeping/errors.ts b/lib/bookkeeping/errors.ts index 4c934ee6..48707a3f 100644 --- a/lib/bookkeeping/errors.ts +++ b/lib/bookkeeping/errors.ts @@ -289,6 +289,8 @@ export type BookkeepingOperation = | 'create_draft_entry' | 'create_entry_lines' | 'commit_entry' + | 'commit_asset_disposal' + | 'fetch_asset_disposal_entry' | 'create_reversal_entry' | 'create_reversal_lines' | 'post_reversal_entry' diff --git a/lib/errors/structured-errors.ts b/lib/errors/structured-errors.ts index 5d8d69b6..e2e38efb 100644 --- a/lib/errors/structured-errors.ts +++ b/lib/errors/structured-errors.ts @@ -3115,6 +3115,44 @@ const BOLAGSVERKET: Record = { } const ASSETS: Record = { + ASSET_NOT_FOUND: { + httpStatus: 404, + message_sv: 'Tillgången kunde inte hittas.', + message_en: 'Asset not found.', + }, + ASSET_ALREADY_DISPOSED: { + httpStatus: 409, + message_sv: 'Tillgången är redan avyttrad.', + message_en: 'The asset has already been disposed.', + }, + ASSET_DISPOSAL_BLOCKED: { + httpStatus: 409, + message_sv: + 'Avyttringen kan inte bokföras eftersom avskrivningar redan finns för samma eller en senare period. Återför den felaktiga avskrivningen med storno först.', + message_en: + 'The disposal cannot be posted because depreciation already exists for the same or a later period. Reverse the incorrect depreciation first.', + }, + ASSET_JAMKNING_DATA_REQUIRED: { + httpStatus: 422, + message_sv: + 'Ange ursprunglig ingående moms och ursprunglig avdragsprocent för att bedöma justering enligt ML 15 kap.', + message_en: + 'Enter the original input VAT and original deduction percentage to assess adjustment under ML chapter 15.', + }, + ASSET_ADJUSTMENT_DOCUMENT_REQUIRED: { + httpStatus: 422, + message_sv: + 'Bekräfta att en justeringshandling upprättas när justeringsskyldigheten överförs.', + message_en: + 'Confirm that an adjustment document is prepared when the adjustment obligation is transferred.', + }, + ASSET_BUSINESS_TRANSFER_CONFIRMATION_REQUIRED: { + httpStatus: 422, + message_sv: + 'Bekräfta att överlåtelsen omfattar en hel verksamhet eller självständig verksamhetsgren och uppfyller villkoren i ML 5 kap. 38 §.', + message_en: + 'Confirm that the transfer covers an entire business or independent branch and meets the conditions in ML chapter 5, section 38.', + }, ASSET_CORRECTION_BLOCKED: { httpStatus: 409, message_sv: diff --git a/messages/en.json b/messages/en.json index 3b739150..215abfe9 100644 --- a/messages/en.json +++ b/messages/en.json @@ -836,7 +836,62 @@ "category_vehicle": "Vehicle", "category_computer": "Computer", "category_other_tangible": "Other tangible", - "count_footer": "{count, plural, one {1 asset} other {# assets}}" + "count_footer": "{count, plural, one {1 asset} other {# assets}}", + "disposal": { + "title": "Dispose of asset", + "load_failed_title": "Could not load the disposal", + "try_again": "Please try again.", + "submit_failed_title": "Disposal failed", + "success_title": "Asset disposed", + "success_description": "Depreciation, disposal, and the asset register were posted together.", + "not_found": "The asset could not be found.", + "already_disposed": "The asset was already disposed ({date}).", + "back": "Back", + "acquisition_cost": "Acquisition cost", + "acquired": "Acquired", + "bas_accounts": "Accounts (BAS)", + "details_title": "Disposal details", + "type_label": "Event", + "type_sale": "Sale", + "type_scrap": "Scrapping", + "type_business_transfer": "Transfer of a business", + "date_label": "Disposal date", + "period_label": "Fiscal period", + "period_placeholder": "Select period", + "locked": "locked", + "period_locked": "The selected period is locked or closed. Select an open period.", + "proceeds_label": "Amount received including VAT", + "consideration_label": "Consideration for the asset", + "proceeds_account_label": "Receiving account", + "vat_title": "VAT on the sale", + "vat_treatment_label": "VAT treatment", + "vat_standard_25": "Swedish VAT 25%", + "vat_reverse_charge": "Reverse charge", + "vat_export": "Export outside the EU", + "vat_exempt": "VAT-exempt sale", + "gross": "Gross", + "vat": "Output VAT", + "net": "Net", + "adjustment_title": "Input VAT adjustment (ML chapter 15)", + "within_adjustment_period": "Within the adjustment period: {years} years remain of {total}", + "outside_adjustment_period": "Outside the adjustment period", + "original_vat_label": "Total original input VAT", + "original_vat_hint": "Enter the full VAT amount, not only the deducted part. Threshold: SEK {threshold}.", + "original_percent_label": "Original deduction right (%)", + "adjustment_direction": "Direction", + "adjustment_amount": "Calculated adjustment", + "direction_increase": "Increased deduction", + "direction_decrease": "Decreased deduction", + "direction_none": "No adjustment", + "direction_transferred": "Transferred to the acquirer", + "adjustment_capped": "The amount was capped at 25% of the sale price excluding VAT.", + "business_transfer_confirm": "I confirm that the transfer covers an entire business or independent branch and meets the conditions in ML chapter 5, section 38.", + "adjustment_document_confirm": "I confirm that an adjustment document is prepared for the acquirer.", + "adjustment_data_required": "VAT basis data is required because the asset may be an investment good.", + "cancel": "Cancel", + "submit": "Post disposal", + "write_required": "Only users with write access can dispose of assets." + } }, "employees": { "title": "Employees", diff --git a/messages/sv.json b/messages/sv.json index fc0fd410..79ceb574 100644 --- a/messages/sv.json +++ b/messages/sv.json @@ -836,7 +836,62 @@ "category_vehicle": "Fordon", "category_computer": "Dator", "category_other_tangible": "Övriga materiella", - "count_footer": "{count, plural, one {1 tillgång} other {# tillgångar}}" + "count_footer": "{count, plural, one {1 tillgång} other {# tillgångar}}", + "disposal": { + "title": "Avyttra tillgång", + "load_failed_title": "Kunde inte ladda avyttringen", + "try_again": "Försök igen.", + "submit_failed_title": "Avyttringen misslyckades", + "success_title": "Tillgången är avyttrad", + "success_description": "Avskrivning, avyttring och tillgångsregister har bokförts tillsammans.", + "not_found": "Tillgången kunde inte hittas.", + "already_disposed": "Tillgången är redan avyttrad ({date}).", + "back": "Tillbaka", + "acquisition_cost": "Anskaffningsvärde", + "acquired": "Anskaffad", + "bas_accounts": "Konton (BAS)", + "details_title": "Avyttringsuppgifter", + "type_label": "Händelse", + "type_sale": "Försäljning", + "type_scrap": "Utrangering", + "type_business_transfer": "Verksamhetsöverlåtelse", + "date_label": "Avyttringsdatum", + "period_label": "Räkenskapsperiod", + "period_placeholder": "Välj period", + "locked": "låst", + "period_locked": "Vald period är låst eller stängd. Välj en öppen period.", + "proceeds_label": "Erhållet belopp inklusive moms", + "consideration_label": "Ersättning för tillgången", + "proceeds_account_label": "Mottagarkonto", + "vat_title": "Moms vid försäljning", + "vat_treatment_label": "Momsbehandling", + "vat_standard_25": "Svensk moms 25 %", + "vat_reverse_charge": "Omvänd betalningsskyldighet", + "vat_export": "Export utanför EU", + "vat_exempt": "Momsfri försäljning", + "gross": "Brutto", + "vat": "Utgående moms", + "net": "Netto", + "adjustment_title": "Justering av ingående moms (ML 15 kap.)", + "within_adjustment_period": "Inom justeringsperioden: {years} år kvar av {total}", + "outside_adjustment_period": "Utanför justeringsperioden", + "original_vat_label": "Total ursprunglig ingående moms", + "original_vat_hint": "Ange hela momsbeloppet, inte bara avdragen del. Tröskel: {threshold} kr.", + "original_percent_label": "Ursprunglig avdragsrätt (%)", + "adjustment_direction": "Riktning", + "adjustment_amount": "Beräknad justering", + "direction_increase": "Ökat avdrag", + "direction_decrease": "Minskat avdrag", + "direction_none": "Ingen justering", + "direction_transferred": "Överförs till förvärvaren", + "adjustment_capped": "Beloppet har begränsats till 25 % av försäljningspriset exklusive moms.", + "business_transfer_confirm": "Jag bekräftar att överlåtelsen omfattar en hel verksamhet eller självständig verksamhetsgren och uppfyller villkoren i ML 5 kap. 38 §.", + "adjustment_document_confirm": "Jag bekräftar att en justeringshandling upprättas för förvärvaren.", + "adjustment_data_required": "Momsunderlaget krävs eftersom tillgången kan vara en investeringsvara.", + "cancel": "Avbryt", + "submit": "Bokför avyttring", + "write_required": "Endast användare med skrivrättigheter kan avyttra tillgångar." + } }, "employees": { "title": "Anställda", diff --git a/scripts/.skill-body-manifest.json b/scripts/.skill-body-manifest.json index 7c8eff0f..b257bd18 100644 --- a/scripts/.skill-body-manifest.json +++ b/scripts/.skill-body-manifest.json @@ -36,8 +36,8 @@ "version": 1 }, "horizontal/swedish-asset-accounting/leasing-and-disposal": { - "hash": "485d7f1d4669f718dbba8611a3644fc3b307b22fb59448af65eebce8466c5b8a", - "version": 1 + "hash": "cefd92341d2946c97ae10f456634a7cf569b7d0eab65d9ca9f8ca7017675f66e", + "version": 2 }, "horizontal/swedish-e-invoicing": { "hash": "287a9a7d4239de8db25b941345bb9b418e5fcf5b4dd65963c06b68215f54b2ce", diff --git a/supabase/migrations/20260803226000_atomic_asset_disposal.sql b/supabase/migrations/20260803226000_atomic_asset_disposal.sql new file mode 100644 index 00000000..1c9db8e1 --- /dev/null +++ b/supabase/migrations/20260803226000_atomic_asset_disposal.sql @@ -0,0 +1,343 @@ +-- Atomic fixed-asset disposal. +-- +-- A disposal voucher and the immutable asset-register update are one legal +-- event. This RPC calls commit_journal_entry for sequential voucher numbering, +-- records any disposal-date depreciation schedule, and marks the asset as +-- disposed in the same transaction. + +ALTER TABLE public.assets + ADD COLUMN IF NOT EXISTS disposal_type text, + ADD COLUMN IF NOT EXISTS disposal_journal_entry_id uuid, + ADD COLUMN IF NOT EXISTS jamkning_direction text, + ADD COLUMN IF NOT EXISTS jamkning_remaining_years integer, + ADD COLUMN IF NOT EXISTS jamkning_total_years integer, + ADD COLUMN IF NOT EXISTS jamkning_original_deduction_percent numeric(5, 2), + ADD COLUMN IF NOT EXISTS jamkning_new_deduction_percent numeric(5, 2); + +-- All constrained columns are new and NULL for existing rows, so validation +-- can never fail. Add every constraint NOT VALID and validate separately: +-- an immediate FK validation takes SHARE ROW EXCLUSIVE on journal_entries (a +-- hot table) and each plain CHECK scans assets under a blocking lock, while +-- VALIDATE CONSTRAINT only needs SHARE UPDATE EXCLUSIVE and does not block +-- writes. +ALTER TABLE public.assets + DROP CONSTRAINT IF EXISTS assets_disposal_journal_entry_id_fkey, + ADD CONSTRAINT assets_disposal_journal_entry_id_fkey + FOREIGN KEY (disposal_journal_entry_id) + REFERENCES public.journal_entries(id) ON DELETE RESTRICT + NOT VALID, + DROP CONSTRAINT IF EXISTS assets_disposal_type_check, + ADD CONSTRAINT assets_disposal_type_check CHECK ( + disposal_type IS NULL OR disposal_type IN ('sale', 'scrap', 'business_transfer') + ) NOT VALID, + DROP CONSTRAINT IF EXISTS assets_jamkning_direction_check, + ADD CONSTRAINT assets_jamkning_direction_check CHECK ( + jamkning_direction IS NULL OR jamkning_direction IN ('increase', 'decrease', 'none', 'transferred') + ) NOT VALID, + DROP CONSTRAINT IF EXISTS assets_jamkning_years_check, + ADD CONSTRAINT assets_jamkning_years_check CHECK ( + (jamkning_remaining_years IS NULL OR jamkning_remaining_years >= 0) + AND (jamkning_total_years IS NULL OR jamkning_total_years IN (5, 10)) + AND ( + jamkning_remaining_years IS NULL + OR jamkning_total_years IS NULL + OR jamkning_remaining_years <= jamkning_total_years + ) + ) NOT VALID, + DROP CONSTRAINT IF EXISTS assets_jamkning_percent_check, + ADD CONSTRAINT assets_jamkning_percent_check CHECK ( + (jamkning_original_deduction_percent IS NULL OR jamkning_original_deduction_percent BETWEEN 0 AND 100) + AND (jamkning_new_deduction_percent IS NULL OR jamkning_new_deduction_percent BETWEEN 0 AND 100) + ) NOT VALID; + +ALTER TABLE public.assets VALIDATE CONSTRAINT assets_disposal_journal_entry_id_fkey; +ALTER TABLE public.assets VALIDATE CONSTRAINT assets_disposal_type_check; +ALTER TABLE public.assets VALIDATE CONSTRAINT assets_jamkning_direction_check; +ALTER TABLE public.assets VALIDATE CONSTRAINT assets_jamkning_years_check; +ALTER TABLE public.assets VALIDATE CONSTRAINT assets_jamkning_percent_check; + +CREATE OR REPLACE FUNCTION public.enforce_asset_post_disposal_immutability() +RETURNS trigger +LANGUAGE plpgsql +SET search_path = '' +AS $function$ +BEGIN + IF OLD.disposed_at IS NOT NULL THEN + IF NEW.category IS DISTINCT FROM OLD.category + OR NEW.acquisition_cost IS DISTINCT FROM OLD.acquisition_cost + OR NEW.salvage_value IS DISTINCT FROM OLD.salvage_value + OR NEW.useful_life_months IS DISTINCT FROM OLD.useful_life_months + OR NEW.depreciation_method IS DISTINCT FROM OLD.depreciation_method + OR NEW.restvarde_target IS DISTINCT FROM OLD.restvarde_target + OR NEW.bas_asset_account IS DISTINCT FROM OLD.bas_asset_account + OR NEW.bas_accumulated_account IS DISTINCT FROM OLD.bas_accumulated_account + OR NEW.bas_expense_account IS DISTINCT FROM OLD.bas_expense_account + OR NEW.acquisition_date IS DISTINCT FROM OLD.acquisition_date + OR NEW.k3_components IS DISTINCT FROM OLD.k3_components + OR NEW.disposed_at IS DISTINCT FROM OLD.disposed_at + OR NEW.disposed_proceeds IS DISTINCT FROM OLD.disposed_proceeds + OR NEW.disposed_proceeds_vat IS DISTINCT FROM OLD.disposed_proceeds_vat + OR NEW.disposed_vat_treatment IS DISTINCT FROM OLD.disposed_vat_treatment + OR NEW.disposal_type IS DISTINCT FROM OLD.disposal_type + OR NEW.disposal_journal_entry_id IS DISTINCT FROM OLD.disposal_journal_entry_id + OR NEW.jamkning_amount IS DISTINCT FROM OLD.jamkning_amount + OR NEW.jamkning_remaining_months IS DISTINCT FROM OLD.jamkning_remaining_months + OR NEW.jamkning_total_months IS DISTINCT FROM OLD.jamkning_total_months + OR NEW.jamkning_original_input_vat IS DISTINCT FROM OLD.jamkning_original_input_vat + OR NEW.jamkning_direction IS DISTINCT FROM OLD.jamkning_direction + OR NEW.jamkning_remaining_years IS DISTINCT FROM OLD.jamkning_remaining_years + OR NEW.jamkning_total_years IS DISTINCT FROM OLD.jamkning_total_years + OR NEW.jamkning_original_deduction_percent IS DISTINCT FROM OLD.jamkning_original_deduction_percent + OR NEW.jamkning_new_deduction_percent IS DISTINCT FROM OLD.jamkning_new_deduction_percent THEN + RAISE EXCEPTION 'Cannot modify financial or disposal attributes of a disposed asset (id=%)', OLD.id + USING ERRCODE = '23514'; + END IF; + END IF; + RETURN NEW; +END; +$function$; + +CREATE OR REPLACE FUNCTION public.commit_asset_disposal( + p_company_id uuid, + p_asset_id uuid, + p_entry_id uuid, + p_fiscal_period_id uuid, + p_disposal_type text, + p_disposed_at date, + p_disposed_proceeds numeric, + p_proceeds_vat numeric, + p_vat_treatment text, + p_current_depreciation numeric, + p_jamkning_amount numeric, + p_jamkning_direction text, + p_jamkning_remaining_years integer, + p_jamkning_total_years integer, + p_jamkning_original_input_vat numeric, + p_jamkning_original_deduction_percent numeric, + p_jamkning_new_deduction_percent numeric, + p_actor_type text DEFAULT NULL, + p_actor_label text DEFAULT NULL +) +RETURNS TABLE(voucher_number integer) +LANGUAGE plpgsql +SECURITY DEFINER +SET search_path = '' +AS $function$ +DECLARE + v_asset_user_id uuid; + v_entry_user_id uuid; + v_schedule_id uuid; + v_schedule_entry_id uuid; + v_period_start date; + v_period_closed boolean; + v_period_locked_at timestamptz; + v_company_lock_date date; + v_voucher_number integer; + v_jwt_role text := coalesce( + nullif(current_setting('request.jwt.claims', true), '')::jsonb ->> 'role', + '' + ); +BEGIN + -- NULL-safe membership guard (20260703180000): never the raw + -- "NOT IN (SELECT user_company_ids())" form, which is NULL-unsafe. + IF v_jwt_role IN ('anon', 'authenticated') + AND ( + NOT public.caller_is_company_member(p_company_id) + OR NOT public.current_user_can_write() + ) THEN + RAISE EXCEPTION 'unauthorized asset disposal for company %', p_company_id + USING ERRCODE = '42501'; + END IF; + + -- Disposal metadata invariants. The values are derived server-side by the + -- same planner that builds the draft entry, but the RPC is independently + -- callable, so reject internally inconsistent register metadata here. + IF coalesce(p_disposed_proceeds, 0) < 0 OR coalesce(p_proceeds_vat, 0) < 0 THEN + RAISE EXCEPTION 'Disposal proceeds and VAT must be non-negative' + USING ERRCODE = '23514'; + END IF; + IF p_proceeds_vat > 0 AND p_vat_treatment IS NULL THEN + RAISE EXCEPTION 'Disposal VAT requires a VAT treatment' + USING ERRCODE = '23514'; + END IF; + IF p_proceeds_vat > p_disposed_proceeds THEN + RAISE EXCEPTION 'Disposal VAT cannot exceed gross proceeds' + USING ERRCODE = '23514'; + END IF; + IF p_disposal_type = 'scrap' AND coalesce(p_disposed_proceeds, 0) <> 0 THEN + RAISE EXCEPTION 'Scrapping (utrangering) cannot carry proceeds' + USING ERRCODE = '23514'; + END IF; + + SELECT a.user_id + INTO v_asset_user_id + FROM public.assets a + WHERE a.id = p_asset_id + AND a.company_id = p_company_id + AND a.disposed_at IS NULL + FOR UPDATE; + + IF NOT FOUND THEN + RAISE EXCEPTION 'Asset not found or already disposed: %', p_asset_id + USING ERRCODE = 'P0002'; + END IF; + + SELECT fp.period_start, fp.is_closed, fp.locked_at + INTO v_period_start, v_period_closed, v_period_locked_at + FROM public.fiscal_periods fp + WHERE fp.id = p_fiscal_period_id + AND fp.company_id = p_company_id + AND p_disposed_at BETWEEN fp.period_start AND fp.period_end; + + IF NOT FOUND THEN + RAISE EXCEPTION 'Fiscal period does not contain disposal date' + USING ERRCODE = '22007'; + END IF; + + IF v_period_closed OR v_period_locked_at IS NOT NULL THEN + RAISE EXCEPTION 'Cannot dispose asset in a locked or closed fiscal period' + USING ERRCODE = '23514'; + END IF; + + SELECT cs.bookkeeping_locked_through + INTO v_company_lock_date + FROM public.company_settings cs + WHERE cs.company_id = p_company_id; + + IF v_company_lock_date IS NOT NULL AND p_disposed_at <= v_company_lock_date THEN + RAISE EXCEPTION 'Bookkeeping is locked through %', v_company_lock_date + USING ERRCODE = '23514'; + END IF; + + IF EXISTS ( + SELECT 1 + FROM public.depreciation_schedules ds + JOIN public.fiscal_periods fp ON fp.id = ds.fiscal_period_id + WHERE ds.company_id = p_company_id + AND ds.asset_id = p_asset_id + AND ds.journal_entry_id IS NOT NULL + AND fp.period_start > v_period_start + ) THEN + RAISE EXCEPTION 'Later depreciation is already posted for asset %', p_asset_id + USING ERRCODE = '23514'; + END IF; + + IF p_entry_id IS NOT NULL THEN + SELECT je.user_id + INTO v_entry_user_id + FROM public.journal_entries je + WHERE je.id = p_entry_id + AND je.company_id = p_company_id + AND je.fiscal_period_id = p_fiscal_period_id + AND je.entry_date = p_disposed_at + AND je.status = 'draft' + AND je.source_type = 'system' + FOR UPDATE; + + IF NOT FOUND THEN + RAISE EXCEPTION 'Valid disposal draft not found: %', p_entry_id + USING ERRCODE = 'P0002'; + END IF; + ELSIF abs(coalesce(p_current_depreciation, 0)) > 0.005 THEN + RAISE EXCEPTION 'Current depreciation requires a disposal voucher' + USING ERRCODE = '23514'; + END IF; + + IF coalesce(p_current_depreciation, 0) > 0.005 THEN + SELECT ds.id, ds.journal_entry_id + INTO v_schedule_id, v_schedule_entry_id + FROM public.depreciation_schedules ds + WHERE ds.asset_id = p_asset_id + AND ds.fiscal_period_id = p_fiscal_period_id + FOR UPDATE; + + IF FOUND AND v_schedule_entry_id IS NOT NULL THEN + RAISE EXCEPTION 'Depreciation was posted concurrently for asset %', p_asset_id + USING ERRCODE = '23514'; + ELSIF FOUND THEN + UPDATE public.depreciation_schedules + SET planned_depreciation = p_current_depreciation, + journal_entry_id = p_entry_id, + posted_at = now() + WHERE id = v_schedule_id; + ELSE + INSERT INTO public.depreciation_schedules ( + user_id, + company_id, + asset_id, + fiscal_period_id, + planned_depreciation, + journal_entry_id, + posted_at + ) VALUES ( + coalesce(v_entry_user_id, v_asset_user_id), + p_company_id, + p_asset_id, + p_fiscal_period_id, + p_current_depreciation, + p_entry_id, + now() + ); + END IF; + END IF; + + IF p_entry_id IS NOT NULL THEN + SELECT committed.voucher_number + INTO v_voucher_number + -- commit_method must be one of journal_entries_commit_method_check's + -- allowed values; the disposal dialog is a user-accepted commit. + FROM public.commit_journal_entry( + p_company_id, + p_entry_id, + 'user_accept', + NULL, + p_actor_type, + p_actor_label + ) AS committed; + END IF; + + UPDATE public.assets + SET disposed_at = p_disposed_at, + disposed_proceeds = p_disposed_proceeds, + disposed_proceeds_vat = p_proceeds_vat, + disposed_vat_treatment = p_vat_treatment, + disposal_type = p_disposal_type, + disposal_journal_entry_id = p_entry_id, + jamkning_amount = p_jamkning_amount, + jamkning_direction = p_jamkning_direction, + jamkning_remaining_years = p_jamkning_remaining_years, + jamkning_total_years = p_jamkning_total_years, + jamkning_original_input_vat = p_jamkning_original_input_vat, + jamkning_original_deduction_percent = p_jamkning_original_deduction_percent, + jamkning_new_deduction_percent = p_jamkning_new_deduction_percent, + jamkning_remaining_months = NULL, + jamkning_total_months = NULL + WHERE id = p_asset_id + AND company_id = p_company_id + AND disposed_at IS NULL; + + IF NOT FOUND THEN + RAISE EXCEPTION 'Asset disposal lost concurrent update: %', p_asset_id + USING ERRCODE = '40001'; + END IF; + + RETURN QUERY SELECT v_voucher_number; +END; +$function$; + +REVOKE ALL ON FUNCTION public.commit_asset_disposal( + uuid, uuid, uuid, uuid, text, date, numeric, numeric, text, numeric, + numeric, text, integer, integer, numeric, numeric, numeric, text, text +) FROM PUBLIC, anon; + +GRANT EXECUTE ON FUNCTION public.commit_asset_disposal( + uuid, uuid, uuid, uuid, text, date, numeric, numeric, text, numeric, + numeric, text, integer, integer, numeric, numeric, numeric, text, text +) TO authenticated; + +COMMENT ON FUNCTION public.commit_asset_disposal( + uuid, uuid, uuid, uuid, text, date, numeric, numeric, text, numeric, + numeric, text, integer, integer, numeric, numeric, numeric, text, text +) IS 'Atomically posts a fixed-asset disposal voucher, disposal-date depreciation schedule, and immutable asset-register state.'; + +NOTIFY pgrst, 'reload schema'; diff --git a/supabase/migrations/20260803226100_seed_agent_atom_bodies.sql b/supabase/migrations/20260803226100_seed_agent_atom_bodies.sql new file mode 100644 index 00000000..f618ae35 --- /dev/null +++ b/supabase/migrations/20260803226100_seed_agent_atom_bodies.sql @@ -0,0 +1,17545 @@ +-- AUTO-GENERATED by scripts/generate-skill-bodies.ts: DO NOT EDIT BY HAND. +-- Regenerate with `npm run skills:generate` after editing any .claude/skills/**/SKILL.md. +-- +-- Seeds agent_atom_registry rows with their SKILL.md body so the MCP server and the +-- in-app agent read skill content from the DB (works on Vercel, Docker, self-hosted). +-- Idempotent: ON CONFLICT refreshes content fields but leaves is_active and +-- mcp_exposed under manual control (they take column defaults on first insert). + +INSERT INTO public.agent_atom_registry + (id, tier, title, description, sni_prefixes, trigger_signals, estimated_tokens, body_path, body, parent_atom_id, version, schema_version) +VALUES + ( + 'horizontal/swedish-accounting-compliance', + 'horizontal', + 'Swedish Accounting Compliance', + $gb$Swedish accounting law and compliance reference for developers building accounting software. Use this skill whenever working on features that touch Swedish bookkeeping rules, tax compliance, chart of accounts, financial reporting, or regulatory requirements. Triggers include any mention of BFL, BFNAR, BAS kontoplan, SIE4, K2/K3, momsdeklaration, Skatteverket integration, verifikationer, löpande bokföring, årsbokslut, årsredovisning, bokföringsskyldighet, or Swedish accounting compliance in general. Also trigger when the user is checking whether a feature, data model, or workflow complies with Swedish accounting law, or when implementing tax calculations, invoice requirements, or financial reporting for Swedish entities. Use this skill even if the user just asks "is this compliant?" or "what does the law say about X?" in a Swedish accounting context. This skill is a compliance oracle, not an end-user guide.$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1893, + '.claude\skills\swedish-accounting-compliance\SKILL.md', + $gb$--- +name: swedish-accounting-compliance +description: Swedish accounting law and compliance reference for developers building accounting software. Use this skill whenever working on features that touch Swedish bookkeeping rules, tax compliance, chart of accounts, financial reporting, or regulatory requirements. Triggers include any mention of BFL, BFNAR, BAS kontoplan, SIE4, K2/K3, momsdeklaration, Skatteverket integration, verifikationer, löpande bokföring, årsbokslut, årsredovisning, bokföringsskyldighet, or Swedish accounting compliance in general. Also trigger when the user is checking whether a feature, data model, or workflow complies with Swedish accounting law, or when implementing tax calculations, invoice requirements, or financial reporting for Swedish entities. Use this skill even if the user just asks "is this compliant?" or "what does the law say about X?" in a Swedish accounting context. This skill is a compliance oracle, not an end-user guide. +--- + +# Swedish Accounting Compliance + +Developer-facing compliance reference for building Swedish accounting software. This skill answers questions about what the law requires so you can verify your implementation is correct. + +## How to use this skill + +This skill has a router structure. The SKILL.md contains the most critical rules you need constantly. Detailed reference material lives in `references/`. Read the relevant reference file when you need depth on a specific area. + +### Reference files + +| File | When to read | +|---|---| +| `references/bfl-bfnar.md` | Questions about bokföringslagen (BFL), BFNAR, K1/K2/K3, ÅRL, bokföringsskyldighet, verifikationer, arkivering, räkenskapsår, systemdokumentation | +| `references/skatteverket.md` | Questions about moms/VAT, arbetsgivaravgifter, skattedeklaration, F-skatt, skattekonto, Skatteverket API integration, AGI | +| `references/bas-kontoplan.md` | Questions about BAS chart of accounts, account numbering, account classification, mapping transactions to accounts | +| `references/sie4.md` | Questions about SIE file format, import/export, data exchange between systems | +| `references/changes-2025-2026.md` | Questions about recent or upcoming regulatory changes, new rules, updated amounts/thresholds | + +Read multiple reference files when a question spans domains (common). + +## Core principles (always in context) + +### Bokföringsskyldighet (BFL 2 kap) +Every aktiebolag, handelsbolag, and ekonomisk förening is bokföringsskyldigt. Enskild firma with fysisk person is bokföringsskyldig. The obligation cannot be delegated: even if someone else does the bokföring, the företagare is legally responsible. + +### Löpande bokföring (BFL 5 kap) +- Affärshändelser shall be bokförda in both grundbok (journal) and huvudbok (ledger) +- Kontanta in/utbetalningar: senast nästa arbetsdag +- Övriga affärshändelser: so snart det kan ske, which in practice means within the calendar month following the month the event occurred +- Every affärshändelse requires a verifikation + +### Verifikationer (BFL 5 kap 6-7§) +A verifikation must contain: +1. Datum för affärshändelsen +2. Datum för verifikationen (if different) +3. Vad affärshändelsen avser (description) +4. Belopp +5. Motpart (when applicable) +6. References to underlag (kvitto, faktura etc.) +7. Verifikationsnummer (unique, in unbroken series per räkenskapsår) + +Verifikationer must be numbered in a systematisk serie without gaps. If a verifikation is corrected, the original must be preserved and the correction linked. + +### Rättelse (BFL 5 kap 5§) +A rättelse of a bokföringspost must be documented so that both the original and the corrected post are visible, and it must be recorded when the rättelse was made and who made it. You can never silently overwrite. BFL permits two tracks: +1. **Särskild rättelsepost** (storno + correcting verifikation referencing the original): always allowed, and the only track once the period is locked/closed or the bokföring has been relied upon (filed declarations, bokslut). +2. **Rättelse in the same verifikat** (strike-and-replace of lines, or correcting the verifikation's text/date per BFL 5 kap 9 §): allowed while the period is open and unlocked, provided the original remains readable (struck lines stay visible) and who/when is recorded immutably. Fortnox and Visma implement this track; in Accounted it is the `correct_entry_metadata` / `correct_entry_lines_inline` RPC envelope logging to `journal_entry_rattelse_log`. + +A correction path that erases the original without a trace violates the law under both tracks. + +### Arkivering (BFL 7 kap) +- Räkenskapsinformation must be preserved for 7 years after the end of the calendar year the räkenskapsår ended +- Since 1 July 2024: no requirement to keep paper originals after digitization (BFL 7 kap 6§ updated) +- Digital storage must ensure the information cannot be altered (immutability requirement) +- Must be accessible in Sweden (or within EU/EEA with Skatteverket notification) + +### Momssatser (current as of 2026) +- 25% - standard rate (most goods and services) +- 12% - food/restaurants, hotels, some cultural events +- 6% - books, newspapers, public transport, cultural/sports events, livsmedel (temporarily from 1 April 2026 to 31 Dec 2027) +- 0% - certain financial services, healthcare, education, insurance + +**IMPORTANT**: From 1 April 2026, livsmedel drops from 12% to 6% (tillfälligt, Prop. 2025/26:55). Restaurang/servering stays at 12%. Software must handle the transition date and the eventual reversion. + +### Fakturakrav (ML 17 kap) +A momsregistrerad seller's faktura must contain: +1. Utfärdandedatum +2. Löpnummer (unique, unbroken series) +3. Säljarens momsregistreringsnummer +4. Köparens momsregistreringsnummer (if reverse charge or EU) +5. Säljarens och köparens namn och adress +6. Varans/tjänstens art, omfattning, mängd +7. Datum för leverans/tillhandahållande +8. Beskattningsunderlag per skattesats +9. Tillämpad skattesats +10. Momsbelopp +11. Eventuell hänvisning till undantag + +Förenklad faktura (max 4000 SEK inkl moms) has reduced requirements. + +### Key thresholds (2026) +- Prisbasbelopp: 59 200 kr +- Inkomstbasbelopp: 83 400 kr +- Inventarier av mindre värde: halvt prisbasbelopp = 29 600 kr (exkl moms) +- Förenklat årsbokslut: omsättning normalt < 3 MSEK +- Kontantmetod: omsättning normalt < 3 MSEK +- Revisionspliktig (AB): minst 2 av 3: >3 anställda, >1.5 MSEK balansomslutning, >3 MSEK nettoomsättning (two consecutive years) + +### System documentation (BFNAR 2013:2 kap 8) +Bokföringssystem must have: +1. Systemdokumentation: describes the system, how it works, its controls +2. Behandlingshistorik: log of changes, who did what, when + +Your software must produce or support both. This is not optional. + + +--- + +## Loadable references + +The reference files named above are NOT included in this body. When a question genuinely needs that depth, load the specific one on demand with `gnubok_load_skill`, and only then: + +- `references/bas-kontoplan.md` → `gnubok_load_skill("horizontal/swedish-accounting-compliance/bas-kontoplan")`: BAS Kontoplan Reference +- `references/bfl-bfnar.md` → `gnubok_load_skill("horizontal/swedish-accounting-compliance/bfl-bfnar")`: BFL, BFNAR, and ÅRL Reference +- `references/changes-2025-2026.md` → `gnubok_load_skill("horizontal/swedish-accounting-compliance/changes-2025-2026")`: Regulatory Changes 2024-2026 +- `references/sie4.md` → `gnubok_load_skill("horizontal/swedish-accounting-compliance/sie4")`: SIE4 File Format Reference +- `references/skatteverket.md` → `gnubok_load_skill("horizontal/swedish-accounting-compliance/skatteverket")`: Skatteverket Reference +$gb$, + NULL, + 4, + 1 + ), + ( + 'horizontal/swedish-accounting-compliance/bas-kontoplan', + 'horizontal', + 'BAS Kontoplan Reference', + $gb$BAS Kontoplan Reference: reference for Swedish Accounting Compliance$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1979, + '.claude\skills\swedish-accounting-compliance\references\bas-kontoplan.md', + $gb$# BAS Kontoplan Reference + +The BAS kontoplan is the de facto standard chart of accounts for Swedish companies. Published by BAS-intressenternas förening. Not legally mandated, but universally used and expected by auditors, Skatteverket, and accounting systems. + +## Table of Contents +1. Structure overview +2. Account classes (1-8) +3. Common accounts for SMEs/startups +4. Moms accounts +5. Mapping rules and principles +6. BAS account numbering conventions + +--- + +## 1. Structure overview + +BAS uses a 4-digit account numbering system organized into 8 classes: + +| Class | Range | Name | Type | +|---|---|---|---| +| 1 | 1000-1999 | Tillgångar | Balance sheet (debit) | +| 2 | 2000-2999 | Eget kapital och skulder | Balance sheet (credit) | +| 3 | 3000-3999 | Rörelsens intäkter | Income statement (credit) | +| 4 | 4000-4999 | Kostnader för varor och material | Income statement (debit) | +| 5 | 5000-5999 | Övriga externa kostnader | Income statement (debit) | +| 6 | 6000-6999 | Övriga externa kostnader (cont.) | Income statement (debit) | +| 7 | 7000-7999 | Personal, avskrivningar, nedskrivningar | Income statement (debit) | +| 8 | 8000-8999 | Finansiella poster, bokslutsdispositioner, skatt | Income statement | + +## 2. Account classes detail + +### Klass 1: Tillgångar +- **10xx**: Immateriella anläggningstillgångar (patents, goodwill) +- **11xx**: Byggnader och mark +- **12xx**: Maskiner och inventarier +- **13xx**: Finansiella anläggningstillgångar (aktier, långfristiga fordringar) +- **14xx**: Varulager +- **15xx**: Kundfordringar +- **16xx**: Övriga kortfristiga fordringar (momsfordran, förskott) +- **17xx**: Förutbetalda kostnader och upplupna intäkter +- **18xx**: Kortfristiga placeringar +- **19xx**: Kassa och bank + +### Klass 2: Eget kapital och skulder +- **20xx**: Eget kapital (aktiekapital, balanserat resultat, årets resultat) +- **21xx**: Obeskattade reserver +- **22xx**: Avsättningar +- **23xx**: Långfristiga skulder (banklån) +- **24xx**: Kortfristiga skulder till kreditinstitut +- **25xx**: Skatteskulder +- **26xx**: Momsskulder (utgående/ingående moms) +- **27xx**: Personalens skatter och avgifter +- **28xx**: Övriga kortfristiga skulder +- **29xx**: Upplupna kostnader och förutbetalda intäkter + +### Klass 3: Rörelsens intäkter +- **30xx**: Huvudintäkter (försäljning varor/tjänster) +- **31xx-34xx**: Further breakdown of sales by type +- **35xx**: Fakturerade kostnader +- **36xx**: Rörelsens sidointäkter +- **37xx**: Intäktskorrigeringar (rabatter, returer, kursvinster) +- **38xx**: Aktiverat arbete för egen räkning +- **39xx**: Övriga rörelseintäkter + +### Klass 4: Material och varor +- **40xx**: Inköp av varor och material +- **41xx-43xx**: Inköp by category +- **44xx**: Förändring av varulager +- **45xx**: Övriga inköpskostnader (frakt, tull) +- **46xx**: Legoarbeten och underentreprenader +- **47xx-49xx**: Reduktioner, rabatter + +### Klass 5-6: Övriga externa kostnader +- **50xx**: Lokalkostnader (hyra, el, värme) +- **51xx**: Fastighetskostnader +- **52xx**: Hyra av anläggningstillgångar +- **54xx**: Förbrukningsinventarier +- **55xx**: Reparation och underhåll +- **56xx**: Transportkostnader +- **57xx**: Frakt och transporter +- **58xx**: Resekostnader +- **59xx**: Reklam och PR +- **60xx**: Övriga försäljningskostnader +- **61xx**: Kontorsmaterial +- **62xx**: Tele och post +- **63xx**: Företagsförsäkringar +- **64xx**: Förvaltningskostnader +- **65xx**: Övriga externa tjänster +- **68xx**: Inhyrd personal +- **69xx**: Övriga externa kostnader + +### Klass 7: Personal, avskrivningar +- **70xx**: Löner till kollektivanställda +- **71xx**: Fri lön? +- **72xx**: Löner till tjänstemän och företagsledare +- **73xx**: Kostnadsersättningar (traktamenten, bilersättning) +- **74xx**: Pensionskostnader +- **75xx**: Sociala avgifter (arbetsgivaravgifter) +- **76xx**: Övriga personalkostnader (utbildning, friskvård) +- **77xx**: Avskrivningar +- **78xx**: Nedskrivningar +- **79xx**: Poster av engångskaraktär + +### Klass 8: Finansiella poster, bokslutsdispositioner +- **80xx**: Resultat från andelar i koncernföretag +- **81xx**: Resultat från andelar i intresseföretag +- **82xx**: Resultat från övriga värdepapper +- **83xx**: Ränteintäkter +- **84xx**: Räntekostnader +- **85xx-86xx**: Övriga finansiella poster +- **87xx**: Extraordinära poster +- **88xx**: Bokslutsdispositioner (överavskrivningar, periodiseringsfonder) +- **89xx**: Skatter (inkomstskatt, årets skatt) +- **8999**: Årets resultat + +## 3. Common accounts for SMEs/startups + +Most small AB/enskild firma need these accounts at minimum: + +**Tillgångar:** +- 1510 Kundfordringar +- 1630 Skattekonto (avräkning Skatteverket) +- 1710 Förutbetalda hyreskostnader +- 1910 Kassa +- 1920 PlusGiro +- 1930 Företagskonto bank +- 1940 Sparkonto bank + +**Skulder & EK:** +- 2010 Eget kapital (enskild firma) or 2081 Aktiekapital +- 2091 Balanserad vinst/förlust +- 2099 Årets resultat +- 2440 Leverantörsskulder +- 2610 Utgående moms 25% +- 2611 Utgående moms 12% +- 2612 Utgående moms 6% +- 2640 Ingående moms +- 2650 Redovisningskonto för moms +- 2710 Personalskatt +- 2730 Arbetsgivaravgifter skuld +- 2920 Upplupna semesterlöner +- 2990 Övriga upplupna kostnader + +**Intäkter:** +- 3000 or 3010 Försäljning tjänster (or varor) +- 3740 Öres- och kronutjämning + +**Kostnader:** +- 4010 Inköp varor/material +- 5010 Lokalhyra +- 5410 Förbrukningsinventarier +- 6110 Kontorsmaterial +- 6212 Mobiltelefoni +- 6230 Datakommunikation +- 6250 Postbefordran +- 6530 Redovisningstjänster +- 6540 IT-tjänster +- 6570 Bankkostnader +- 7010 or 7210 Löner +- 7510 Arbetsgivaravgifter +- 7832 Avskrivning inventarier + +**Finansiellt:** +- 8310 Ränteintäkter +- 8410 Räntekostnader +- 8910 Skatt + +## 4. Moms accounts + +Standard moms account structure in BAS: + +| Konto | Beskrivning | +|---|---| +| 2610 | Utgående moms 25% | +| 2611 | Utgående moms 12% | +| 2612 | Utgående moms 6% | +| 2614 | Utgående moms omvänd skattskyldighet | +| 2615 | Utgående moms import | +| 2640 | Ingående moms | +| 2645 | Beräknad ingående moms vid förvärv EU | +| 2650 | Redovisningskonto för moms | + +Workflow: +1. During the period: book utgående on 2610/2611/2612 and ingående on 2640 +2. At declaration: netta 2610+2611+2612-2640 against 2650 +3. Payment to/from Skatteverket: 2650 <-> 1630 (skattekonto) + +**From 1 Apr 2026**: livsmedel output VAT moves from 2621 (12%) to 2631 (6%). Your system must handle the transition correctly based on leveransdatum. + +## 5. Mapping rules and principles + +### Debit and credit conventions +- Tillgångar (klass 1): increase = debit, decrease = credit +- Skulder & EK (klass 2): increase = credit, decrease = debit +- Intäkter (klass 3): increase = credit (booking revenue) +- Kostnader (klass 4-7): increase = debit +- Finansiella poster (klass 8): depends on type + +### Standard transaction patterns + +**Kundfaktura:** +- Debit 1510 (kundfordringar) full amount inkl moms +- Credit 30xx (intäkt) exkl moms +- Credit 2610/2611/2612 (utgående moms) + +**Leverantörsfaktura:** +- Debit 4xxx/5xxx/6xxx (kostnad) exkl moms +- Debit 2640 (ingående moms) +- Credit 2440 (leverantörsskulder) full amount inkl moms + +**Löneutbetalning:** +- Debit 7210 (lön) brutto +- Credit 2710 (personalskatt) +- Credit 1930 (bank) nettolön +Then separately: +- Debit 7510 (arbetsgivaravgifter) +- Credit 2730 (arbetsgivaravgifter skuld) + +**Momsredovisning (monthly/quarterly):** +- Debit 2610 (tömma utgående 25%) +- Debit 2611 (tömma utgående 12%) +- Debit 2612 (tömma utgående 6%) +- Credit 2640 (tömma ingående) +- Credit/Debit 2650 (netto: skuld if credit, fordran if debit) + +## 6. BAS numbering conventions + +- 4 digits is standard +- Companies can add sub-accounts using 5+ digits for internal reporting (e.g., 3011 for product line A, 3012 for product line B) +- The first digit determines the class +- The second digit typically groups related accounts +- Stay consistent with BAS standard numbering. Don't invent custom numbers where BAS already has a standard account +- BAS publishes yearly updates. The structure is very stable but new accounts are added occasionally +$gb$, + 'horizontal/swedish-accounting-compliance', + 2, + 1 + ), + ( + 'horizontal/swedish-accounting-compliance/bfl-bfnar', + 'horizontal', + 'BFL, BFNAR, and ÅRL Reference', + $gb$BFL, BFNAR, and ÅRL Reference: reference for Swedish Accounting Compliance$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 2629, + '.claude\skills\swedish-accounting-compliance\references\bfl-bfnar.md', + $gb$# BFL, BFNAR, and ÅRL Reference + +Detailed reference for Bokföringslagen (BFL 1999:1078), Bokföringsnämndens allmänna råd (BFNAR), and Årsredovisningslagen (ÅRL 1995:1554). + +## Table of Contents +1. BFL structure and key chapters +2. Bokföringsskyldighet (BFL 2 kap) +3. Löpande bokföring (BFL 5 kap) +4. Verifikationer in depth +5. Avslutning av bokföringen (BFL 6 kap) +6. Arkivering (BFL 7 kap) +7. BFNAR overview and K-regelverken +8. K1 (BFNAR 2006:1) +9. K2 (BFNAR 2016:10) +10. K3 (BFNAR 2012:1) +11. ÅRL key requirements +12. Systemdokumentation and behandlingshistorik + +--- + +## 1. BFL structure + +BFL has 9 chapters: +- 1 kap: Inledande bestämmelser (definitions) +- 2 kap: Bokföringsskyldighet +- 3 kap: Räkenskapsår +- 4 kap: Bokföringsskyldighetens innebörd +- 5 kap: Löpande bokföring och verifikationer +- 6 kap: Avslutande av bokföringen (årsbokslut/årsredovisning) +- 7 kap: Arkivering +- 8 kap: Utvecklande av god redovisningssed (BFN:s uppdrag) +- 9 kap: Överklagande + +## 2. Bokföringsskyldighet (BFL 2 kap) + +**Always bokföringsskyldiga:** +- Aktiebolag (from registration, even before any activity) +- Handelsbolag (including kommanditbolag) +- Ekonomiska föreningar +- Stiftelser (with some exceptions for small stiftelser) +- Ideella föreningar that meet any of: tillgångar > 1.5 MSEK, bedriver näringsverksamhet, or is modersföretag + +**Fysiska personer:** +- Bokföringsskyldiga if they bedriver näringsverksamhet (enskild firma) +- Exception: very small hobby-like activities may not qualify + +**When does skyldigheten begin?** +- AB: from Bolagsverket registration +- Enskild firma: from first affärshändelse in the näringsverksamhet +- Handelsbolag: from when bolaget begins verksamhet + +## 3. Löpande bokföring (BFL 5 kap) + +### Grundbok och huvudbok (5 kap 1§) +All affärshändelser must be recorded in both: +- **Grundbok** (journal): chronological order, each entry traceable to verifikation +- **Huvudbok** (ledger): systematic order by account (kontoplan) + +These can be in the same system but must be logically separate outputs. + +### Timing requirements (5 kap 2§) +- Kontanta transaktioner: bokföras senast påföljande arbetsdag +- Övriga affärshändelser: "så snart det kan ske" +- In practice (per BFNAR 2013:2): senast the month following the month of the affärshändelse +- Exception: om den bokföringsskyldige har ordnade verifikationer that are easily accessible, bokföring kan dröja up to 50 dagar from the transaction + +### Kontantmetod vs faktureringsmetod +- **Kontantmetod**: bokföring vid betalningstillfället (only allowed if nettoomsättning normalt < 3 MSEK) +- **Faktureringsmetod**: bokföring vid fakturadatum (required if nettoomsättning >= 3 MSEK, and for all momspliktig verksamhet above the threshold) +- A company can choose faktureringsmetod even under 3 MSEK +- Kontantmetod still requires that fordringar/skulder are booked at bokslut + +### Gemensam verifikation (5 kap 6§ st 3) +Multiple affärshändelser can share one verifikation if they are of the same slag and occurred the same dag. Example: daily kassarapport for retail. + +## 4. Verifikationer in depth + +### Required content (5 kap 7§) +1. Datum then affärshändelsen occurred +2. Datum when verifikationen upprättades (if different from #1) +3. Vad affärshändelsen avser +4. Belopp +5. Motpart (where applicable and known) +6. Verifikationsnummer (or equivalent identifier, systematiskt ordnade, löpande nummerordning, without gaps within a bokföringsserie) +7. Other information needed to identify the affärshändelse + +### Underlag +Every verifikation must have an underlag (kvitto, faktura, bankutdrag, avtal, etc.). If no external underlag exists, the bokföringsskyldige must create an egen handling as underlag (e.g., for lönebokföring based on löneberäkning, or for avskrivningar). + +### Multiple verification series +BFL allows multiple verification series (e.g., "A" for supplier invoices, "B" for customer invoices, "K" for bank). Each series must have unbroken numbering within the räkenskapsår. This is common in practice and your software should support it. + +### Rättelser (5 kap 5§ and 5 kap 9§) +- The original post must remain visible (no silent overwriting), and it must be recorded when the rättelse was made and who made it +- Two permitted tracks: + 1. **Särskild rättelsepost**: a correcting verifikation with a link/reference to the original. Always allowed; the only track once the period is locked/closed or the bokföring has been relied upon (filed declarations, bokslut) + 2. **Rättelse in the same verifikat**: strike-and-replace of lines with the struck originals kept readable, or correction of the verifikation's text/date (5 kap 9 §). Allowed in open, unlocked periods with an immutable who/when trail. This is the track Fortnox/Visma expose as "ändra verifikat" +- When rättelse happens through a särskild rättelsepost, it must be easy to become aware of the rättelse when inspecting the corrected post ("utan svårighet gå att få kännedom om rättelsen") + +## 5. Avslutning av bokföringen (BFL 6 kap) + +### Årsbokslut +- Required for enskild firma and handelsbolag with fysiska delägare +- Consists of: resultaträkning + balansräkning +- Must be upprättat within 6 months after räkenskapsårets slut +- Förenklat årsbokslut: allowed if nettoomsättning normalt < 3 MSEK (BFNAR 2006:1 / K1) + +### Årsredovisning +- Required for: aktiebolag, ekonomiska föreningar, larger handelsbolag, stiftelser above thresholds +- Consists of: förvaltningsberättelse, resultaträkning, balansräkning, noter +- Larger companies also: kassaflödesanalys +- Must be upprättat within: 6 months for AB, 7 months for ekonomisk förening +- AB must file with Bolagsverket within 7 months, or face förseningsavgift + +## 6. Arkivering (BFL 7 kap) + +### Bevarandetid +7 years after the end of the calendar year in which the räkenskapsår ended. Example: räkenskapsår ending 2026-06-30 -> save until at least 2033-12-31. + +### Form +- Must be in varaktigt läsbart skick (durable, readable form) +- Digital storage: must ensure data integrity (immutability) +- Since 1 July 2024 (SFS 2024:494): no requirement to keep paper originals after proper digitization +- The digitized version must be a faithful reproduction +- Metadata and structure must be preserved + +### Location +- Must be available in Sweden +- Can be stored in EU/EEA if Skatteverket is notified +- Must be producible to Skatteverket upon request within reasonable time + +### What must be archived +- Grundbok and huvudbok +- All verifikationer with underlag +- Årsredovisning/årsbokslut +- Systemdokumentation and behandlingshistorik +- Avtal, korrespondens, and other information important for understanding the bokföring + +## 7. BFNAR overview and K-regelverken + +BFN issues allmänna råd (BFNAR) that specify how BFL and ÅRL should be applied in practice. The K-system categorizes companies by size: + +| Regelverk | Target | Årsredovisning? | Key characteristic | +|---|---|---|---| +| K1 (BFNAR 2006:1) | Enskild firma < 3 MSEK | No (förenklat årsbokslut) | Cash-based simplifications | +| K2 (BFNAR 2016:10) | Smaller AB, HB, EF, ideella | Yes (simplified) | Schabloner, limited upprysningar | +| K3 (BFNAR 2012:1) | Default for ÅRL-companies | Yes (full) | Component depreciation, full disclosures | +| K4 (IFRS) | Listed companies | Yes (IFRS) | International standards | + +**2026 change**: BRF:er must now use K3 (no longer K2). Companies where byggnader generate >= 75% of nettoomsättning must also K3. + +## 8. K1 (BFNAR 2006:1 / 2010:1) + +Simplified rules for enskild firma and HB with fysisk delägare, omsättning < 3 MSEK. + +Key simplifications: +- Kontantmetoden allowed +- Förenklat årsbokslut (RR + BR only, no notes required beyond what law demands) +- Inventarier can use skattemässiga avskrivningar directly +- Varulager can be valued at anskaffningsvärde without individual assessment under threshold +- No requirement for accruals below 5000 kr per post + +## 9. K2 (BFNAR 2016:10) + +For smaller companies that prepare årsredovisning. + +Key characteristics: +- Schablonmässiga avskrivningar (not component-based) +- Limited tilläggsupplysningar compared to K3 +- Cannot capitalize egenupparbetade immateriella tillgångar +- Byggnader: avskrivning as one unit (not component) +- Avsättningar: only if legal obligation exists and can be reliably estimated +- Eventualförpliktelser: disclosed in notes + +**Restrictions from 2026**: BRF:er excluded from K2, companies with >= 75% revenue from buildings excluded. See changes-2025-2026.md. + +## 10. K3 (BFNAR 2012:1) + +Default regelverk for companies preparing årsredovisning. + +Key requirements: +- Component depreciation (komponentavskrivning) for materiella anläggningstillgångar +- Full tilläggsupplysningar per ÅRL +- Can capitalize egenupparbetade immateriella tillgångar (if criteria met) +- Must assess nedskrivningsbehov +- Revenue recognition per leverans/fullgjord prestation +- Leasing classification (finansiell vs operationell) +- Koncernredovisning if moderbolag (with exemptions for smaller koncerner) + +## 11. ÅRL key requirements + +### Grundläggande principer (2 kap) +- Fortlevnadsprincipen (going concern) +- Konsekvent tillämpning (consistency) +- Försiktighetsprincipen (prudence) +- Periodisering (accrual basis) +- Individuell värdering (each item valued separately) +- Bruttoredovisning (no netting of assets/liabilities or income/expenses) +- Kontinuitet (opening balance = previous year's closing balance) + +### Årsredovisningens delar (2 kap 1§) +1. Förvaltningsberättelse +2. Resultaträkning +3. Balansräkning +4. Noter +5. Kassaflödesanalys (larger companies only) + +### Larger vs smaller company (ÅRL 1 kap 3§) +A company is "större" if it exceeds at least 2 of 3 for each of the last 2 years: +- 50 anställda (average) +- 40 MSEK balansomslutning +- 80 MSEK nettoomsättning + +## 12. Systemdokumentation and behandlingshistorik + +### Systemdokumentation (BFNAR 2013:2 kap 8) +Must describe: +- The bokföringssystem and how it works +- The kontoplan used +- How verifikationer are numbered and organized +- How the system ensures traceability from verifikation to bokslut +- Access controls and authorization +- Backup routines +- Integration with other systems + +### Behandlingshistorik +Must log: +- Automated processing (batch jobs, automated bokföring) +- Changes to system settings that affect bokföring +- User actions (who booked what, when) +- Data migrations, imports, conversions + +For a software developer: your system must produce these as exportable documentation. Consider generating systemdokumentation automatically from your system's configuration, and maintaining an audit trail as behandlingshistorik. +$gb$, + 'horizontal/swedish-accounting-compliance', + 2, + 1 + ), + ( + 'horizontal/swedish-accounting-compliance/changes-2025-2026', + 'horizontal', + 'Regulatory Changes 2024-2026', + $gb$Regulatory Changes 2024-2026: reference for Swedish Accounting Compliance$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1666, + '.claude\skills\swedish-accounting-compliance\references\changes-2025-2026.md', + $gb$# 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):** +1. Grundbelopp: 4 IBB = 4 × 83 400 = 333 600 kr, divided equally among shares +2. Lönebaserat utrymme: 50% × (andel av löneunderlag - 8 IBB per delägare). Max: 50 × egen/närstående lön +3. 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. +$gb$, + 'horizontal/swedish-accounting-compliance', + 3, + 1 + ), + ( + 'horizontal/swedish-accounting-compliance/sie4', + 'horizontal', + 'SIE4 File Format Reference', + $gb$SIE4 File Format Reference: reference for Swedish Accounting Compliance$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1626, + '.claude\skills\swedish-accounting-compliance\references\sie4.md', + $gb$# SIE4 File Format Reference + +SIE (Standard Import Export) is the Swedish standard for exchanging accounting data between systems. SIE4 is the current version used in practice. + +## Table of Contents +1. SIE versions overview +2. SIE4 file structure +3. Record types (poster) +4. Mandatory vs optional fields +5. Character encoding and formatting +6. Implementation notes +7. Validation rules + +--- + +## 1. SIE versions overview + +| Version | Content | Use case | +|---|---|---| +| SIE1 | Yearly balances | Simple balance transfer | +| SIE2 | Periodic balances | Periodic balance transfer | +| SIE3 | Object balances | Dimensional balances | +| SIE4 | Full transaction data | Complete bokföring export/import | +| SIE4E | SIE4 + dimensions | Extended with kostnadsställe etc. | + +SIE4 is the workhorse. It contains the complete bokföring: kontoplan, verifikationer, and all transactions. Use SIE4 for import/export of full bokföring data. + +## 2. SIE4 file structure + +A SIE4 file is a plain text file with records, one per line. Each record starts with a # tag. + +### File layout (order matters) +``` +#FLAGGA 0 +#FORMAT PC8 +#SIETYP 4 +#PROGRAM "ProgramName" "Version" +#GEN datum sign +#FNR företagsnummer +#ORGNR organisationsnummer +#FNAMN "Företagsnamn" +#RAR 0 start slut (current räkenskapsår) +#RAR -1 start slut (previous räkenskapsår) +#KPTYP BAS2024 (kontoplantyp) +#KONTO kontonr "kontonamn" +#SRU kontonr srukod +#IB 0 kontonr belopp (ingående balans current year) +#UB 0 kontonr belopp (utgående balans current year) +#UB -1 kontonr belopp (utgående balans previous year) +#RES 0 kontonr belopp (resultat current year) +#VER serie vernr verdatum vertext regdatum sign +{ + #TRANS kontonr {} belopp transdat transtext kvantitet sign + #TRANS kontonr {} belopp transdat transtext kvantitet sign +} +``` + +## 3. Record types (poster) + +### Header records +| Tag | Description | Required | +|---|---|---| +| #FLAGGA | 0 = not read, 1 = read | Yes | +| #FORMAT | Character encoding (PC8 = CP437) | Yes | +| #SIETYP | SIE version (4 for SIE4) | Yes | +| #PROGRAM | Software name and version | Yes | +| #GEN | Generation date and user signature | Yes | +| #FNR | Company number (internal) | No | +| #ORGNR | Organisationsnummer | Yes | +| #FNAMN | Company name | Yes | +| #ADRESS | Company address | No | +| #RAR | Räkenskapsår period (0 = current, -1 = previous) | Yes | +| #TAXAR | Taxeringsår | No | +| #KPTYP | Kontoplan type (e.g., BAS2024) | Yes | +| #VALUTA | Currency (SEK default) | No | + +### Account records +| Tag | Description | +|---|---| +| #KONTO | Account number and name | +| #KTYP | Account type (T=tillgång, S=skuld, K=kostnad, I=intäkt) | +| #SRU | SRU mapping (for tax declaration) | +| #ENHET | Unit for account | + +### Balance records +| Tag | Description | +|---|---| +| #IB | Ingående balans (opening balance) | +| #UB | Utgående balans (closing balance) | +| #OIB | Object ingående balans | +| #OUB | Object utgående balans | +| #RES | Resultat (P&L account balance) | + +### Transaction records +| Tag | Description | +|---|---| +| #VER | Verifikation header | +| #TRANS | Transaction line within a verifikation | +| #RTRANS | Reversed transaction (rättelse) | +| #BTRANS | Added transaction (tillägg) | + +### Dimension records (SIE4E) +| Tag | Description | +|---|---| +| #DIM | Dimension definition | +| #UNDERDIM | Sub-dimension | +| #OBJEKT | Object within a dimension | + +## 4. Mandatory vs optional + +### Minimum valid SIE4 file must have: +1. #FLAGGA +2. #FORMAT +3. #SIETYP +4. #PROGRAM +5. #GEN +6. #ORGNR +7. #FNAMN +8. #RAR (at least current year) +9. #KPTYP +10. #KONTO (all used accounts) +11. #VER + #TRANS (all verifikationer and transactions) + +### Balance records +- #IB and #UB are expected but some systems omit them +- #RES records summarize resultaträkning accounts +- Best practice: always include IB/UB for balansräkning accounts and RES for resultaträkning accounts + +## 5. Character encoding and formatting + +### Encoding +- Traditional: PC8 (Code Page 437) declared with #FORMAT PC8 +- Modern alternative: UTF-8, no #FORMAT tag or custom declaration +- Most Swedish systems still expect PC8. If you produce UTF-8, document it clearly. +- When importing: detect encoding, handle both + +### Number format +- Decimal separator: period (.) +- Negative numbers: minus sign prefix +- No thousands separator +- Amounts in full currency units (SEK, not öre) + +### Date format +- YYYYMMDD (no separators) +- Example: 20260401 + +### String quoting +- Strings containing spaces must be enclosed in double quotes +- Empty strings: "" +- Escape double quotes inside strings with backslash: \" + +### Curly braces +- {} denotes an empty object list (used in #TRANS when no dimension objects) +- {1 "100" 2 "PROJ1"} for dimension objects + +## 6. Implementation notes + +### Producing SIE4 +1. Export all verifikationer for the räkenskapsår +2. Include all accounts in the kontoplan that have been used +3. Calculate IB (from previous year's UB or from opening balances) +4. Calculate UB and RES from transactions +5. Ensure verifikationer are complete (debits = credits within each #VER block) +6. Set #FLAGGA to 0 + +### Consuming SIE4 +1. Parse header to get company info and period +2. Build kontoplan from #KONTO records +3. Import balances from #IB/#UB/#RES +4. Import verifikationer and transactions +5. Validate: sum of all #TRANS within each #VER must be 0 (balanced) +6. Handle encoding conversion if needed + +### Common pitfalls +- Forgetting to handle PC8 encoding (Swedish characters å, ä, ö) +- Not validating that verifikationer balance (sum of TRANS = 0) +- Assuming date fields are always populated (some are optional) +- Not handling #RTRANS and #BTRANS (corrections and additions to existing verifikationer) +- Missing #SRU codes (needed for tax declaration mapping) + +## 7. Validation rules + +### Per verifikation (#VER block) +- Sum of all #TRANS debit amounts must equal sum of credit amounts (i.e., total nets to 0) +- Verifikationsnummer must be unique within its serie +- Verifikationsdatum must fall within the declared #RAR period + +### Per file +- All account numbers in #TRANS must have a corresponding #KONTO record +- #IB for year 0 should match #UB for year -1 (if both present) +- #ORGNR should be a valid Swedish organisationsnummer (10 digits, Luhn check on last digit) + +### SRU mapping +SRU (Standardiserat RäkenskapsUtdrag) codes map BAS accounts to positions in the tax declaration (INK2, INK4, etc.). Your system should maintain SRU mappings and include them in SIE exports. This enables automatic population of tax forms. +$gb$, + 'horizontal/swedish-accounting-compliance', + 1, + 1 + ), + ( + 'horizontal/swedish-accounting-compliance/skatteverket', + 'horizontal', + 'Skatteverket Reference', + $gb$Skatteverket Reference: reference for Swedish Accounting Compliance$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 2559, + '.claude\skills\swedish-accounting-compliance\references\skatteverket.md', + $gb$# Skatteverket Reference + +Tax compliance rules, reporting requirements, and API integration details relevant for Swedish accounting software. + +## Table of Contents +1. Moms (mervärdesskatt) - rules and rates +2. Skattedeklaration +3. Arbetsgivardeklaration på individnivå (AGI) +4. F-skatt and preliminär skatt +5. Skattekonto +6. Skatteverket API integration +7. Momsregistrering +8. ROT and RUT +9. Traktamente and representation +10. Digital granskning (Prop. 2025/26:107) + +--- + +## 1. Moms (mervärdesskatt) + +### Rates (as of 2026) +| Rate | Applies to | +|---|---| +| 25% | Standard: most goods and services | +| 12% | Restaurang/servering, hotell, camping, certain cultural activities | +| 6% | Books, newspapers, public transport, sport/cultural events. **From 1 Apr 2026: also livsmedel (tillfälligt till 31 Dec 2027)** | +| 0% | Export, international transports, financial services, healthcare, dental, education, insurance, social care | + +### Livsmedel transition (Prop. 2025/26:55) +- Before 1 Apr 2026: 12% +- 1 Apr 2026 - 31 Dec 2027: 6% (tillfälligt) +- After 31 Dec 2027: expected reversion to 12% +- Transition rule: the rate applies based on when the beskattningsgrundande händelse (taxable event) occurs, typically leveransdatum, NOT fakturadatum +- Restaurang/servering stays at 12% throughout. The distinction livsmedel vs restaurangtjänst becomes critical. Take-away/avhämtning = 6%, servering/förtäring på plats = 12% + +### Reporting periods for moms +| Nettoomsättning | Period | Deadline | +|---|---|---| +| > 40 MSEK | Monthly | 26th of following month (12th for Jan and Aug) | +| 1-40 MSEK | Monthly or quarterly (employer's choice, application to SKV) | Monthly: 26th. Quarterly: 12th of second month after quarter end | +| < 1 MSEK | Quarterly, or annually | Annual: latest in the inkomstdeklaration | + +### Omvänd skattskyldighet (reverse charge) +Applies in certain B2B scenarios: +- Byggtjänster (construction services) between companies in byggsektorn +- EU purchases of goods (EU-förvärv) +- EU purchases of services (huvudregel: köparens land) +- Certain precious metals and investment gold + +Software must support reverse charge entries: debit ingående moms, credit utgående moms, no net cash effect but must appear on momsdeklaration. + +### Jämkning av ingående moms +For investeringsvaror (fastighetsinvesteringar, inventarier > 200 000 kr, fastighetstjänster > 100 000 kr): if the use of the asset changes (e.g., from momspliktig to momsfri verksamhet), the previously avdragen ingående moms must be jämkad (adjusted) over a period (10 years for fastigheter, 5 years for inventarier). + +### EU-handel +- EU-försäljning av varor: momsfri if buyer has valid VAT number (verify via VIES) and goods are transported to another EU country +- EU-förvärv: reverse charge, reported in both ruta 20 (inköp) and ruta 30/31/32 (utgående moms) + ruta 48 (ingående moms) +- Periodisk sammanställning: reported monthly or quarterly to Skatteverket for EU sales + +## 2. Skattedeklaration + +### Content +The skattedeklaration covers: +- Moms (utgående and ingående, per rate) +- Arbetsgivaravgifter +- Avdragen preliminär skatt (PAYE) +- Särskild löneskatt on pensionskostnader + +### Filing +- Monthly filers: due the 12th (Jan, Aug) or 26th (other months) of the following month +- Paper deadline: 12th of following month regardless +- Electronic filing via Skatteverkets e-tjänst or via API (filöverföring) + +### Key moms rutor (boxes) +The momsdeklaration has numbered rutor: +- 05: Momspliktig försäljning (ej export) +- 06: Momspliktiga uttag +- 07: Beskattningsunderlag vid vinstmarginalbeskattning +- 08: Hyresinkomst frivillig skattskyldighet +- 20-24: EU-related acquisitions and purchases +- 30: Utgående moms 25% +- 31: Utgående moms 12% +- 32: Utgående moms 6% +- 35: Utgående moms reverse charge +- 40: Inköp med avdragsrätt +- 41: Inköp utan avdragsrätt +- 48: Ingående moms (total avdrag) +- 49: Moms att betala eller få tillbaka +- 50: Momspliktigt belopp export + +## 3. Arbetsgivardeklaration på individnivå (AGI) + +Since 2019, employers must report per individual each month. + +### Per employee, report: +- Kontant bruttolön +- Förmåner (bil, bostad, etc.) +- Avdragen preliminär skatt +- Underlag for arbetsgivaravgifter +- Kostnadsersättningar (traktamente, bilersättning) + +### Arbetsgivaravgifter (2026) +Standard rate: 31.42% on total ersättning +Breakdown: +- Ålderspensionsavgift: 10.21% +- Sjukförsäkringsavgift: 3.55% +- Föräldraförsäkringsavgift: 2.60% +- Arbetsskadeavgift: 0.20% +- Arbetsmarknadsavgift: 2.64% +- Allmän löneavgift: 11.62% +- Efterlevandepensionsavgift: 0.60% + +**Age-based reductions (2026):** +- Born 1959 or earlier (67+ at year start): only ålderspensionsavgift = 10.21% +- Born 2001-2007 (18-24): full rate 31.42% (the previous ungdomsrabatt expired 2023) + +### Filing +- Monthly, together with skattedeklaration +- Deadline: same as skattedeklaration (12th or 26th) + +### New 2025/2026: föräldraledighet/VAB reporting +Employers must now report monthly when employees take föräldraledighet or VAB to Skatteverket. + +## 4. F-skatt and preliminär skatt + +### F-skatt +- Required for näringsverksamhet +- Applied for via Skatteverket +- Shows buyer that they are NOT responsible for paying arbetsgivaravgifter on the payment +- **2026 change**: applicant can request tidsbegränsat godkännande. Skatteverket may now require documentation proving eligibility + +### FA-skatt +Combined F-skatt and A-skatt. For people who both run a business and are employed. + +### Preliminär skatt (F-skattsedel) +- Debiterad preliminär skatt based on Skatteverket's estimate or the företagare's own uppgift +- Paid monthly to skattekontot +- Can be adjusted (jämkning) during the year if income differs from forecast +- Slutlig skatt beräknas vid inkomstdeklaration + +## 5. Skattekonto + +Every company/person with Swedish tax obligations has a skattekonto. + +### How it works +- All tax payments credited (inbetalningar) +- All tax debits charged (arbetsgivaravgifter, moms, preliminärskatt, slutlig skatt) +- Interest on positive balance (intäktsränta, currently very low) +- Kostnadsränta on negative balance (higher, see Skatteverket current rates) +- Booked on the 12th or 26th each month + +### For software +- Track expected debits/credits per period +- Reconcile against skattekontoutdrag from Skatteverket +- Flag underpayments to avoid kostnadsränta + +## 6. Skatteverket API integration + +### Momsdeklaration via API +Skatteverket offers electronic filing: +- Filöverföring: submit XML-based declarations +- OAuth2/BankID authentication flows for machine-to-machine and user-delegated access +- AGI (arbetsgivardeklaration): electronic submission required for most filers + +### Authentication patterns +- BankID for user-facing authentication +- OAuth2 Authorization Code Grant (ACG) flow for delegated access +- Certificates for system-to-system (larger volumes) + +### Data formats +- Skattedeklaration: XML schema defined by Skatteverket +- SIE4: for bokföring export (see sie4.md) +- Periodisk sammanställning: separate XML format for EU trade reporting + +### Key endpoints (conceptual, verify current docs) +- Inkomstdeklaration +- Skattedeklaration (moms + AGI) +- Periodisk sammanställning (EU trade) +- Skattekontoutdrag + +Always check Skatteverket's current technical documentation. Their APIs change. The developer portal is at skatteverket.se/utvecklare. + +## 7. Momsregistrering + +### When required +- Momspliktig verksamhet > 80 000 kr per 12-month period (threshold from 2025) +- Below threshold: can choose to register voluntarily +- EU-handel: registration required regardless of threshold + +### Registration process +- Apply via Skatteverket (blankett SKV 4620 or digitally) +- Receive momsregistreringsnummer (SE + org.nr + 01) +- Software should validate format: SE followed by 10 digits followed by 01 + +## 8. ROT and RUT + +### ROT-avdrag (2026) +- 30% of arbetskostnad (not material) +- Max 50 000 kr per person per year +- Only for privatpersoner who own the bostad +- Applies to: reparation, underhåll, om- och tillbyggnad +- Filing: via Skatteverket's system, contractor submits begäran + +### RUT-avdrag (2026) +- 50% of arbetskostnad +- Max 75 000 kr per person per year +- Applies to: hushållsnära tjänster (städning, trädgård, barnpassning, etc.) +- Combined ROT+RUT: max 75 000 kr, of which max 50 000 kr ROT + +### For software +If you handle ROT/RUT, your invoices must separate arbetskostnad from materialkostnad. The ROT/RUT amount is claimed by the utförare (contractor) via Skatteverket's API, and reduces the customer's payment. You need to track: begärt belopp, godkänt belopp, utbetalt belopp. + +## 9. Traktamente and representation + +### Traktamente (2026) +- Heldag (minst en övernattning): 300 kr +- Halvdag: 150 kr +- Nattraktamente: 150 kr +- These are skattefria amounts per day. Amounts above are löneförmån. + +### Representation (2026) +- Extern representation: avdragsgillt for enklare förtäring up to viss nivå +- Intern representation: two tillfällen per year (julfest, sommarfest etc.) +- Momsavdrag on representation: limited + +## 10. Digital granskning (Prop. 2025/26:107) + +### Background +Proposed law to allow Skatteverket to access digital bokföring directly via internet during revision/kontroll. Currently (spring 2026) in riksdag processing. + +### What it means for software developers +- Skatteverket may connect to your system and access bokföring directly +- NOT unlimited access: only when legal grund for kontroll/revision already exists +- You need: proper access controls, audit logging, ability to grant read-only access +- Data must be complete, correct, and accessible in real-time +- Consider implementing a "revisionsläge" or read-only API endpoint + +### Timeline +- Lagrådsremiss: November 2025 +- Proposition: February 2026 +- Expected riksdag decision: Spring 2026 +- Proposed effective date: 1 July 2026 + +### Implications for Accounted +Your system stores bokföring in the cloud. Under the new rules, Skatteverket could request access to a customer's data directly in your system. You should: +1. Have granular access controls (per-company read access) +2. Maintain complete audit trails +3. Ensure data immutability (event-sourced architecture helps here) +4. Be able to produce standardized exports (SIE4, PDF reports) on demand +5. Document your system's compliance in the systemdokumentation +$gb$, + 'horizontal/swedish-accounting-compliance', + 3, + 1 + ), + ( + 'horizontal/swedish-asset-accounting', + 'horizontal', + 'Swedish Asset Accounting', + $gb$Swedish fixed asset accounting (anläggningsredovisning) reference. Covers planenlig avskrivning, överavskrivning (2150/8850), räkenskapsenlig (30%/20%) vs restvärdeavskrivning (25%), BAS 10xx-12xx/78xx mapping, inventarieregister per BFL, förbrukningsinventarier (half PBB), leasing K2/K3/IFRS 16, komponentavskrivning, avyttring/utrangering with VAT. Trigger on ANY Swedish avskrivning, anläggningstillgång, överavskrivning, inventarieregister, förbrukningsinventarie, BAS 10xx-12xx/78xx, leasing K2/K3, asset disposal, komponentavskrivning, or fixed-asset question. High-error-rate area; always use over training data.$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 972, + '.claude\skills\swedish-asset-accounting\SKILL.md', + $gb$--- +name: swedish-asset-accounting +description: > + Swedish fixed asset accounting (anläggningsredovisning) reference. Covers planenlig avskrivning, överavskrivning (2150/8850), + räkenskapsenlig (30%/20%) vs restvärdeavskrivning (25%), BAS 10xx-12xx/78xx mapping, inventarieregister per BFL, + förbrukningsinventarier (half PBB), leasing K2/K3/IFRS 16, komponentavskrivning, avyttring/utrangering with VAT. + Trigger on ANY Swedish avskrivning, anläggningstillgång, överavskrivning, inventarieregister, förbrukningsinventarie, + BAS 10xx-12xx/78xx, leasing K2/K3, asset disposal, komponentavskrivning, or fixed-asset question. + High-error-rate area; always use over training data. +--- + +# Swedish Asset Accounting (Anläggningsredovisning) + +Developer compliance reference for Swedish fixed asset accounting. Core laws: ÅRL (1995:1554), IL (1999:1229), BFL (1999:1078). Frameworks: K2 (BFNAR 2016:10), K3 (BFNAR 2012:1), IFRS 16, RFR 2. + +**Before answering any question, read the appropriate reference file:** + +- For depreciation methods, överavskrivning, or tax depreciation rules: `cat references/depreciation.md` +- For BAS account mapping, anläggningsregister, or förbrukningsinventarier: `cat references/accounts-and-registry.md` +- For leasing treatment or disposal/scrapping: `cat references/leasing-and-disposal.md` + +If the question spans multiple areas, read all relevant files. + +## Quick Decision Tree + +``` +Is the asset below half prisbasbelopp (29,600 kr 2026) or useful life ≤ 3 years? +├─ YES → Expense immediately via 54xx (förbrukningsinventarie) +└─ NO → Capitalize to 10xx/11xx/12xx + │ + Is it a building? + ├─ YES → IL 19 kap rates (2-5% straight-line on cost) + │ K2: no components, use SKV standard rates + │ K3: mandatory component depreciation + └─ NO → Machinery/inventory: IL 18 kap + ├─ Räkenskapsenlig: 30% declining or 20% straight-line (choose yearly) + └─ Restvärdeavskrivning: 25% declining (fallback) + │ + Book ≠ Tax? → Bridge via 2150/8850 (överavskrivning) +``` + +## Critical K2 vs K3 Differences (Assets) + +| Feature | K2 | K3 | +|---|---|---| +| Component depreciation | Forbidden | Mandatory | +| Useful life | 5-year default allowed | Individual assessment required | +| Residual value | Optional, forbidden with 5-year rule | Required, annual reassessment | +| Depreciation start | Year put into use | When available for use | +| Revaluation | Permitted for buildings/land | Permitted | +| Deferred tax | Forbidden | Required (ch. 29) | +| Leasing on BS | Never | Financial leases (but 20.29 exemption in juridisk person) | +| Development costs | Must expense | May capitalize | + +## 2026 Regulatory Change + +From fiscal years starting after 2025-12-31, entities with buildings generating ≥75% of net revenue (fastighetsbolag, BRF:er) must use K3. This forces component depreciation adoption. BFN published updated BFNAR 2016:10 and 2012:1 effective for these fiscal years. + +## Prisbasbelopp Reference (Half PBB = förbrukningsinventarie threshold) + +| Year | PBB | Threshold | +|---|---|---| +| 2024 | 57,300 | 28,650 | +| 2025 | 58,800 | 29,400 | +| 2026 | 59,200 | 29,600 | + +--- + +## Loadable references + +The reference files named above are NOT included in this body. When a question genuinely needs that depth, load the specific one on demand with `gnubok_load_skill`, and only then: + +- `references/accounts-and-registry.md` → `gnubok_load_skill("horizontal/swedish-asset-accounting/accounts-and-registry")`: BAS Account Mapping & Anläggningsregister +- `references/depreciation.md` → `gnubok_load_skill("horizontal/swedish-asset-accounting/depreciation")`: Depreciation Methods & Tax Rules +- `references/leasing-and-disposal.md` → `gnubok_load_skill("horizontal/swedish-asset-accounting/leasing-and-disposal")`: Leasing Treatment & Asset Disposal +$gb$, + NULL, + 4, + 1 + ), + ( + 'horizontal/swedish-asset-accounting/accounts-and-registry', + 'horizontal', + 'BAS Account Mapping & Anläggningsregister', + $gb$BAS Account Mapping & Anläggningsregister: reference for Swedish Asset Accounting$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1702, + '.claude\skills\swedish-asset-accounting\references\accounts-and-registry.md', + $gb$# BAS Account Mapping & Anläggningsregister + +## BAS Account Structure for Fixed Assets + +Pattern: xx0 = asset, xx8 = accumulated impairment (nedskrivning), xx9 = accumulated depreciation. + +### Intangible Assets (Kontogrupp 10) + +| Account | Description | Notes | +|---|---|---| +| 1010 | Utvecklingsutgifter | Ej K2 (must expense under K2) | +| 1019 | Ack. avskr. utvecklingsutgifter | | +| 1020 | Koncessioner | | +| 1029 | Ack. avskr. koncessioner | | +| 1030 | Patent | | +| 1039 | Ack. avskr. patent | | +| 1040 | Licenser | | +| 1049 | Ack. avskr. licenser | | +| 1050 | Varumärken | | +| 1059 | Ack. avskr. varumärken | | +| 1060 | Hyresrätter och tomträtter | | +| 1069 | Ack. avskr. hyresrätter | | +| 1070 | Goodwill | | +| 1079 | Ack. avskr. goodwill | | +| 1080 | Pågående projekt/förskott immateriella | | +| 1088 | Ack. nedskrivningar immateriella | | + +### Buildings and Land (Kontogrupp 11) + +| Account | Description | Notes | +|---|---|---| +| 1110 | Byggnader | 1111 egen mark, 1112 annans mark | +| 1118 | Ack. nedskr. byggnader | | +| 1119 | Ack. avskr. byggnader | | +| 1120 | Förbättringsutgifter annans fastighet | | +| 1129 | Ack. avskr. förbättringsutgifter | | +| 1130 | Mark | Never depreciated | +| 1140 | Tomter och obebyggda markområden | | +| 1150 | Markanläggningar | | +| 1159 | Ack. avskr. markanläggningar | | +| 1180 | Pågående nyanläggningar/förskott | | + +### Machinery and Inventory (Kontogrupp 12) + +| Account | Description | Notes | +|---|---|---| +| 1210 | Maskiner och andra tekniska anläggningar | | +| 1211 | Maskiner | | +| 1213 | Övriga tekniska anläggningar | | +| 1218 | Ack. nedskr. maskiner | | +| 1219 | Ack. avskr. maskiner | | +| 1220 | Inventarier och verktyg | | +| 1221 | Inventarier | | +| 1222 | Byggnadsinventarier | Tax: follows IL 18 kap, not building rates | +| 1223 | Markinventarier | Tax: follows IL 18 kap | +| 1228 | Ack. nedskr. inventarier | | +| 1229 | Ack. avskr. inventarier | | +| 1230 | Installationer | | +| 1239 | Ack. avskr. installationer | | +| 1240 | Bilar och andra transportmedel | | +| 1241 | Personbilar | | +| 1242 | Lastbilar | | +| 1243 | Truckar | | +| 1244 | Arbetsmaskiner | | +| 1245 | Traktorer | | +| 1246 | Övriga transportmedel | | +| 1249 | Ack. avskr. bilar/transport | | +| 1250 | Datorer | | +| 1259 | Ack. avskr. datorer | | +| 1260 | Leasade tillgångar | Ej K2. K3 financial leases, IFRS 16 ROU. | +| 1269 | Ack. avskr. leasade tillgångar | | +| 1280 | Pågående nyanläggningar/förskott | | +| 1290 | Övriga materiella anläggningstillgångar | | +| 1291 | Konst och liknande tillgångar | Not depreciated | +| 1299 | Ack. avskr. övriga materiella | | + +### Impairment Expense (Kontogrupp 77) + +| Account | Description | +|---|---| +| 7710 | Nedskrivningar immateriella | +| 7720 | Nedskrivningar byggnader/mark | +| 7730 | Nedskrivningar maskiner/inventarier | +| 7760 | Återföring nedskrivning immateriella | +| 7770 | Återföring nedskrivning byggnader/mark | +| 7780 | Återföring nedskrivning maskiner/inventarier | + +### Överavskrivningar (Kontogrupp 21/88) + +| Account | Description | +|---|---| +| 2150 | Ackumulerade överavskrivningar | +| 2151 | ...immateriella tillgångar | +| 2152 | ...byggnader | +| 2153 | ...maskiner och inventarier | +| 8850 | Förändring av överavskrivningar | +| 8851 | ...immateriella | +| 8852 | ...byggnader | +| 8853 | ...maskiner och inventarier | + +### Disposal Accounts (Kontogrupp 39/79) + +| Account | Type | Description | +|---|---|---| +| 3970 | Intäkt | Vinst vid avyttring (övergripande) | +| 3971 | Intäkt | ...immateriella | +| 3972 | Intäkt | ...byggnader/mark | +| 3973 | Intäkt | ...maskiner/inventarier | +| 7970 | Kostnad | Förlust vid avyttring (övergripande) | +| 7971 | Kostnad | ...immateriella | +| 7972 | Kostnad | ...byggnader/mark | +| 7973 | Kostnad | ...maskiner/inventarier | + +--- + +## Anläggningsregister (Fixed Asset Register) + +### Legal Basis + +BFL 5 kap. 4 § requires subsidiary accounting (sidoordnad bokföring) for fixed assets when needed for satisfactory control. Detailed requirements in **BFNAR 2013:2 chapter 4**. + +### Required Data per Asset (BFNAR 2013:2 punkt 4.5) + +1. **Identifieringsuppgifter** (serial number, model, description) +2. **Anskaffningsvärde** (acquisition cost) +3. **Anskaffningstidpunkt** (acquisition date) +4. **Beräknat restvärde** (estimated residual value) +5. **Tillämpad avskrivningsmetod** (if non-linear, or note that asset is not depreciated) +6. **Nyttjandeperiod** (useful life) +7. **Ackumulerade avskrivningar** (accumulated depreciation) +8. **Ackumulerade nedskrivningar** (accumulated impairment) +9. **Korrigeringar** (corrections of prior years' depreciation/impairment) +10. **Omklassificeringar** (reclassifications) + +### Additional Requirements + +- **AB/EF (punkt 4.6):** Must also track uppskrivningar (revaluations) +- **K3 (punkt 4.8):** Must record information per component +- **Grouping (punkt 4.9):** Similar low-value assets acquired simultaneously may be grouped as one entry +- **Disposals (punkt 4.7):** Must note date and proceeds of disposals/scrappings +- **Theft-attractive items (punkt 4.11):** Items expensed as förbrukningsinventarier but stöldbegärliga should still be tracked + +### Note Disclosure (ÅRL 5 kap. 8 §, 25 §) + +Larger companies must disclose per asset category: +- Opening and closing acquisition values +- Period depreciation, impairment, revaluation +- Acquisitions and disposals during period + +--- + +## Förbrukningsinventarier + +### Legal Basis: IL 18 kap. 4 § + +Immediate expensing permitted for: + +**1. Inventarier av mindre värde** (below half prisbasbelopp): + +| Year | Prisbasbelopp | Threshold (half PBB) | +|---|---|---| +| 2024 | 57,300 kr | **28,650 kr** | +| 2025 | 58,800 kr | **29,400 kr** | +| 2026 | 59,200 kr | **29,600 kr** | + +Measured excluding deductible VAT. + +**2. Korttidsinventarier** (useful life ≤ 3 years, regardless of value). + +### Grouping Rule (IL 18 kap. 4 § st. 2) + +Items with **naturligt samband** (functional connection) acquired for use together must have combined cost measured against threshold. Example: conference table + chairs = one unit. Items in a larger procurement for similar purposes (e.g., all office computers replaced) evaluated on total cost. + +### BAS Accounts for Förbrukningsinventarier (54xx) + +| Account | Description | +|---|---| +| 5410 | Förbrukningsinventarier | +| 5411 | Förbrukningsinventarier med > 1 år livslängd | +| 5412 | Förbrukningsinventarier med ≤ 1 år livslängd | +| 5420 | Programvaror | +| 5430 | Transportinventarier | +| 5440 | Förbrukningsemballage | + +### Classification Decision + +``` +Cost < half PBB (excl. deductible VAT)? +├─ YES → Expense to 54xx +└─ NO + └─ Useful life ≤ 3 years? + ├─ YES → Expense to 54xx (korttidsinventarie) + └─ NO → Capitalize to 12xx, depreciate via 78xx +``` + +**Exception for non-VAT entities:** Threshold effectively rises by the non-deductible VAT amount since cost includes it.$gb$, + 'horizontal/swedish-asset-accounting', + 1, + 1 + ), + ( + 'horizontal/swedish-asset-accounting/depreciation', + 'horizontal', + 'Depreciation Methods & Tax Rules', + $gb$Depreciation Methods & Tax Rules: reference for Swedish Asset Accounting$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1365, + '.claude\skills\swedish-asset-accounting\references\depreciation.md', + $gb$# Depreciation Methods & Tax Rules + +## Planenlig avskrivning (Book Depreciation) + +ÅRL 4 kap. 4 § requires systematic depreciation of all fixed assets with limited useful life. + +### Methods + +**Linjär (straight-line):** `(anskaffningsvärde − restvärde) / nyttjandeperiod`. Most common. + +**Degressiv (declining balance):** Fixed % of remaining book value. Higher charges early. Suitable for vehicles, tech. + +**Produktionsberoende (units-of-production):** `(cost − residual) × (units produced / total expected)`. K2 additionally allows progressiv for machinery (never buildings). + +### Useful Life + +- **K3 (17.16):** Individual assessment per asset. Mandatory reassessment on indicators of change. +- **K2 (10.27):** Permits standardized **5-year useful life** for machinery, inventory, intangibles. Buildings may follow SKV standard rates (industrial 4-5%, offices 2-4%, residential 2%). +- **Goodwill/dev costs:** Default 5 years when life cannot be reliably determined (ÅRL 4 kap. 4 §). + +### Residual Value + +- **K3 (17.14):** Must estimate and reassess annually. +- **K2 (10.25):** Optional. Forbidden with 5-year rule or for buildings. + +### Depreciation Start + +- **K2 (10.23):** From year asset is *put into use* (tas i bruk). Full annual amount regardless of partial year. +- **K3 (17.19):** From when asset *can* be used (available for use). Buildings under K2 depreciate even before use. + +### Component Depreciation (Komponentavskrivning) + +- **K3 (17.4-17.5):** MANDATORY. Decompose into components with materially different useful lives. +- **K2 (10.2):** FORBIDDEN. + +Typical building components and lives: + +| Component | Years | +|---|---| +| Stomme (structure) | 80-160 | +| Stammar (plumbing) | 40-60 | +| Tak (roof) | 30-50 | +| Fasad (facade) | 30-60 | +| Fönster (windows) | 25-40 | +| Hissar (elevators) | 25-40 | +| VVS/ventilation | 20-30 | +| Styr & övervakning | 10-20 | + +When a component is replaced under K3 (17.21-17.22): derecognize old component's remaining book value, capitalize new component separately. + +### BAS Expense Accounts (78xx) + +- 7810: Avskrivningar immateriella tillgångar +- 7820: Avskrivningar byggnader/markanläggningar (7821 byggnader, 7824 markanläggningar) +- 7830: Avskrivningar maskiner/inventarier (7831-7835 specific types) +- 7836: Avskrivningar leasade tillgångar +- 7840: Avskrivningar förbättringsutgifter annans fastighet + +--- + +## Överavskrivning (Excess Tax Depreciation) + +When skattemässig avskrivning > planenlig avskrivning, the difference is an **obeskattad reserv** (untaxed reserve). + +### BAS Accounts + +**Balance sheet:** 2150 Ackumulerade överavskrivningar +- 2151: Immateriella tillgångar +- 2152: Byggnader +- 2153: Maskiner och inventarier + +**Income statement (bokslutsdisposition):** 8850 Förändring av överavskrivningar +- 8851-8853: Matching sub-accounts + +### Booking Pattern + +- Increase överavskrivning: **Debit 8850 / Credit 2150** +- Decrease överavskrivning: **Debit 2150 / Credit 8850** + +### Constraint + +Book value must NEVER fall below tax value: +`skattemässigt restvärde = konto 12xx − (konto 12x9 + konto 2150)` + +### K2 vs K3 + +- **K2:** Often eliminates need for överavskrivning entirely. 5-year rule (20%) matches kompletteringsregeln. Building rates can match SKV. No deferred tax permitted. +- **K3:** Strict separation required. Book depreciation must reflect economic consumption. Deferred tax required (ch. 29). In juridisk person, K3 29.37 permits obeskattade reserver at gross. In consolidated accounts: split into equity (79.4%) and uppskjuten skatteskuld (20.6% at current corporate tax rate). + +--- + +## Skattemässig avskrivning (Tax Depreciation) + +### Inventarier (IL 18 kap.) + +One method for ALL inventory. No mixing. + +#### Räkenskapsenlig avskrivning (IL 18 kap. 13-17 §§) + +Requirements: ordnad bokföring + årsbokslut + tax depreciation = book depreciation. + +**Huvudregeln (30% declining balance):** +- Deduct up to 30% of avskrivningsunderlag annually +- Underlag = book value at year start + acquisitions − sale proceeds for items owned at year start +- Minimum book value = 70% of underlag +- Rate adjusts proportionally for fiscal years ≠ 12 months + +**Kompletteringsregeln (20% straight-line):** +- Full depreciation over exactly 5 years at 20%/year on original acquisition cost +- Requires tracking each asset's acquisition year and cost for prior 4 fiscal years +- Can switch between rules each year + +**Practical:** Huvudregeln better years 1-2. Kompletteringsregeln superior from year 3 onward. + +#### Restvärdeavskrivning (IL 18 kap. 13 § st. 3) + +- Max **25% declining balance** on skattemässigt restvärde +- No book/tax match required +- Fallback method when räkenskapsenlig requirements cannot be met +- No supplementary rule: assets theoretically never fully depreciated + +| Feature | Räkenskapsenlig | Restvärdeavskrivning | +|---|---|---| +| Legal basis | IL 18:13-17 | IL 18:13 st.3 | +| Max rate | 30% declining / 20% SL | 25% declining | +| Book = tax | Required | Not required | +| Full depr. | Yes (5yr komplettering) | No (asymptotic) | +| Ordnad bokföring | Required | Not required | + +### Byggnader (IL 19 kap.) + +Straight-line on acquisition cost. SKV standard rates (SKV A 2005:5): + +| Building type | Rate | +|---|---| +| Industrial (industri) | 4% | +| Office/residential | 2% | +| Hotel/parking | 3% | +| Kiosk | 5% | + +**Primäravdrag (since 2019):** Additional 2%/year for first 6 years on new construction of hyreshus. + +**Mark (land):** Never depreciated. + +**Missed year:** Cannot be recovered later.$gb$, + 'horizontal/swedish-asset-accounting', + 1, + 1 + ), + ( + 'horizontal/swedish-asset-accounting/leasing-and-disposal', + 'horizontal', + 'Leasing Treatment & Asset Disposal', + $gb$Leasing Treatment & Asset Disposal: reference for Swedish Asset Accounting$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1852, + '.claude\skills\swedish-asset-accounting\references\leasing-and-disposal.md', + $gb$# Leasing Treatment & Asset Disposal + +## Leasing Across Frameworks + +### K2 (BFNAR 2016:10) + +ALL leases treated as operating. No exceptions. + +**Booking:** Expense directly: +- 5210: Hyra av anläggningstillgångar +- 5220: Hyra av inventarier och verktyg +- 5615: Leasing av personbilar + +**Förhöjd förstagångshyra (first enhanced payment):** Prepaid via **1720 Förutbetalda leasingavgifter**, allocated linearly over lease term. + +No assets or liabilities appear on balance sheet. + +### K3 (BFNAR 2012:1, Chapter 20) + +Classifies leases as **financial** or **operating** using IAS 17 criteria: +1. Transfer of ownership at end of term +2. Bargain purchase option +3. Lease covers major part of economic life +4. Present value of payments ≈ fair value +5. Specialized asset + +**Financial leases are capitalized:** +- Asset: **1260 Leasade tillgångar** (depreciated via 7836 / 1269) +- Liability: **2391** (short-term) / **2350** (long-term leasingskuld) +- Payments split: interest (8410) + amortization via effective interest method + +**K3 point 20.29 exemption:** In the **juridisk person** (legal entity), financial leases MAY be accounted for as operating. This preserves the tax connection. In **consolidated accounts**, financial leases MUST go on balance sheet. + +**Operating leases under K3:** Same as K2 treatment, expensed directly. + +### IFRS 16 + +All leases on balance sheet via right-of-use model: + +**Recognition:** +- **Nyttjanderättstillgång (ROU asset):** 1260, at PV of lease payments +- **Leasingskuld:** 2350 (long-term) / 2391 (short-term) +- Discount rate: implicit rate in lease, or marginal borrowing rate + +**Two exemptions only:** +1. Short-term leases (≤ 12 months) - expense directly +2. Low-value assets (< ~USD 5,000 when new) - expense directly + +**RFR 2 exemption:** In the juridisk person, IFRS 16 need NOT be applied. Lease payments recorded as straight-line expense, preserving tax connection. + +### Tax Treatment of Leasing + +Swedish tax law follows **legal form**, not accounting classification: +- **Lessee:** Deducts lease payments +- **Lessor:** Claims depreciation as legal owner + +Regardless of whether the lease is capitalized in accounting. + +**Key 2024 ruling:** Capitalizing financial leases does NOT forfeit the right to räkenskapsenlig avskrivning on owned assets, provided adjustments are made in the tax return (INK2/INK4). + +**VAT on financial leasing (2024 Skatteverket ställningstagande):** Financial leases may be classified as supply of goods rather than services. For **personbilar** this triggers the **full VAT deduction prohibition** on purchases, instead of the usual 50% deduction available for lease services. + +### Leasing Summary Table + +| Feature | K2 | K3 (juridisk person) | K3 (koncern) | IFRS 16 (koncern) | IFRS 16 (JP via RFR 2) | +|---|---|---|---|---|---| +| Financial on BS | Never | Optional (20.29) | Mandatory | Mandatory | Not required | +| Operating treatment | All leases | All (if 20.29 used) | Operating only | Short-term + low-value only | All (expense) | +| Asset account | N/A | 1260 | 1260 | 1260 | N/A | +| Depreciation account | N/A | 7836 | 7836 | 7836 | N/A | + +--- + +## Avyttring (Disposal/Sale) + +### Book Value at Disposal + +`Bokfört värde = Anskaffningsvärde − Ackumulerade avskrivningar` + +Asset must be depreciated up to the disposal date before calculating gain/loss. + +### Booking Pattern + +Use one balanced entry after depreciation through the disposal date. The gain +or loss equals `försäljningspris ex moms − bokfört restvärde`. + +``` +Debit 1510 Kundfordran [gross proceeds] +Debit 1229 Ack. avskr. inventarier [accumulated depreciation] +Debit 7973 Förlust vid avyttring [only for a loss] +Credit 1221 Inventarier [original acquisition cost] +Credit 2611 Utgående moms 25% [output VAT] +Credit 3973 Vinst vid avyttring [only for a gain] +``` + +### Gain/Loss Accounts + +| Account | Direction | Description | +|---|---|---| +| 3971 | Credit (gain) | Vinst avyttring immateriella | +| 3972 | Credit (gain) | Vinst avyttring byggnader/mark | +| 3973 | Credit (gain) | Vinst avyttring maskiner/inventarier | +| 7971 | Debit (loss) | Förlust avyttring immateriella | +| 7972 | Debit (loss) | Förlust avyttring byggnader/mark | +| 7973 | Debit (loss) | Förlust avyttring maskiner/inventarier | + +### Practical Example: Sale at Profit + +Asset: anskaffningsvärde 50,000 kr, ack. avskr. 10,000 kr (book value 40,000 kr). +Sold for 56,000 kr ex VAT. + +``` +Debit 1510 70,000 (gross proceeds) +Debit 1229 10,000 (remove accumulated depreciation) +Credit 1221 50,000 (remove asset at cost) +Credit 2611 14,000 (25% output VAT) +Credit 3973 16,000 (gain: 56,000 − 40,000) +``` + +Debits and credits are both 80,000. The 16,000 credit is the complete income +statement effect of the disposal. + +--- + +## Utrangering (Scrapping) + +Same as disposal with zero sale proceeds. Remaining book value written off entirely. + +**K2 (7.14):** Recognized when asset can no longer be used AND company does not intend to repair or sell. + +### Booking Pattern + +``` +Debit 1229 Ack. avskr. [accumulated depreciation] +Debit 7973 Förlust [remaining book value] +Credit 1221 Inventarier [original acquisition cost] +``` + +**Fully depreciated assets:** No income statement effect. +``` +Debit 1229 [full amount] +Credit 1221 [full amount] +``` + +--- + +## VAT on Asset Disposal + +**General rule:** 25% moms on sale of movable business assets. + +### Exceptions + +1. **Verksamhetsöverlåtelse (business transfer, ML 5 kap. 38 §):** No VAT when transferring entire business or independent branch. +2. **No original input VAT deduction (ML 10 kap. 37 §):** The exemption applies only when no part of the input VAT was deductible, including VAT on significant later additions to the asset. +3. **Real property (fastighet):** Generally VAT-exempt sales. + +### Jämkning (VAT Adjustment Rules, ML 15 kap.) + +Applies to investment goods based on total original input VAT, whether or not +the full amount was deducted: + +| Asset type | Adjustment period | Threshold (input VAT) | +|---|---|---| +| Byggnader | 10 years | ≥ 100,000 kr | +| Maskiner/inventarier | 5 years | ≥ 50,000 kr | + +The acquisition or completion tax year counts as year 1. The disposal tax year +also counts. A one-time adjustment uses: + +`original input VAT × change in deduction percentage × remaining years / total years` + +No adjustment is made when the change is less than 5 percentage points. A +positive adjustment on a taxable sale of movable property is capped at 25% of +the sale price excluding VAT. In a qualifying business transfer under ML 5 +kap. 38 §, the acquirer takes over the adjustment rights and obligations when +the statutory conditions are met. An adjustment document with the information +required by ML 15 kap. 28-31 §§ must be prepared and retained. + +--- + +## Tax Treatment of Disposal (IL) + +### Räkenskapsenlig avskrivning - Huvudregeln (IL 18 kap. 15 §) + +A **särskilt avdrag** equal to sale proceeds offsets income, reducing the avskrivningsunderlag. The sold asset's cost is removed from the pool. + +### Kompletteringsregeln + +No särskilt avdrag. The disposed asset's cost is simply removed from the lowest-permitted-value calculation. + +### Buildings (IL 26 kap. 2 §) + +Disposal triggers reversal of prior värdeminskningsavdrag. Difference between sale price and tax book value is taxable. + +### Restvärdeavskrivning + +Sale proceeds reduce the skattemässigt restvärde directly. +$gb$, + 'horizontal/swedish-asset-accounting', + 2, + 1 + ), + ( + 'horizontal/swedish-e-invoicing', + 'horizontal', + 'Swedish E Invoicing', + $gb$Swedish e-invoicing (e-fakturering) reference. Covers Lag 2018:1277 B2G mandate, Peppol BIS Billing 3.0, EN 16931, UBL 2.1, AS4, SMP/SML, DIGG, Sweden CIUS rules (SE-R-005 F-skatt, SE-R-011 Bankgiro/Plusgiro), VAT codes, ViDA mandate (1 July 2030), Dir. 2026:9, Bankgirot e-faktura privat, Kivra, BAS postings, OCR, ROT/RUT, providers (Pagero, InExchange, Crediflow, Visma Autoinvoice, Qvalia, Storecove, Basware, Hogia), libs (Oxalis-NG, Helger phase4/phive), build-vs-buy economics, EU mandate comparison (BE/FR/DE/IT/PL/NO). Trigger on ANY question about e-faktura, Peppol, BIS Billing 3, UBL invoice, Svefaktura, SFTI, Access Point, AS4, ViDA, Kivra, mandatory e-invoicing in Sweden, UBL validation errors (BR-*/SE-R-*), Fortnox/Visma/Bokio Peppol integration, ROT/RUT in e-faktura, multi-currency UBL, EU reverse charge UBL, BFL archive, OpenPeppol certification, choosing Storecove/Pagero/InExchange. Always use over training data, specs change biannually.$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 2668, + '.claude\skills\swedish-e-invoicing\SKILL.md', + $gb$--- +name: swedish-e-invoicing +description: > + Swedish e-invoicing (e-fakturering) reference. Covers Lag 2018:1277 B2G mandate, Peppol BIS Billing 3.0, EN 16931, UBL 2.1, AS4, SMP/SML, DIGG, Sweden CIUS rules (SE-R-005 F-skatt, SE-R-011 Bankgiro/Plusgiro), VAT codes, ViDA mandate (1 July 2030), Dir. 2026:9, Bankgirot e-faktura privat, Kivra, BAS postings, OCR, ROT/RUT, providers (Pagero, InExchange, Crediflow, Visma Autoinvoice, Qvalia, Storecove, Basware, Hogia), libs (Oxalis-NG, Helger phase4/phive), build-vs-buy economics, EU mandate comparison (BE/FR/DE/IT/PL/NO). Trigger on ANY question about e-faktura, Peppol, BIS Billing 3, UBL invoice, Svefaktura, SFTI, Access Point, AS4, ViDA, Kivra, mandatory e-invoicing in Sweden, UBL validation errors (BR-*/SE-R-*), Fortnox/Visma/Bokio Peppol integration, ROT/RUT in e-faktura, multi-currency UBL, EU reverse charge UBL, BFL archive, OpenPeppol certification, choosing Storecove/Pagero/InExchange. Always use over training data, specs change biannually. +--- + +# Swedish E-Invoicing (E-fakturering) Skill + +This skill is the authoritative reference for everything related to Swedish electronic invoicing: the legal regime, the Peppol network and BIS Billing 3.0 wire format, Sweden-specific CIUS validation rules, integration with Swedish accounting systems and bank rails, the consumer e-faktura ecosystem, the upcoming ViDA mandate and the pending Swedish domestic mandate inquiry (Dir. 2026:9), and concrete implementation strategy for software builders. + +The data in Claude's training is **stale and unreliable** for this domain. Peppol specifications update twice yearly (May / November releases). The Peppol PKI migrated G2→G3 in late 2025. ViDA was adopted 11 March 2025 and entered into force 14 April 2025. Swedish Dir. 2026:9 was issued 5 February 2026. Skatteverket gained expanded online-audit rights from 1 April 2026. **Always consult this skill rather than answering from priors.** + +## Routing: which reference to load + +Use the table below to decide which reference file(s) to read. Multiple files often apply to a single question; load all relevant ones. + +| Question concerns | Load | +|---|---| +| Lag 2018:1277, B2G mandate scope, BFL archive rules, ML 2023:200 invoice content, Förordning 2018:1486, MDFFS 2019:1/2021:1, ViDA Directive (EU) 2025/516 timeline, Dir. 2026:9 inquiry, Skatteverket position, GDPR for invoices, penalties, B2G/B2B/B2C distinction | `references/legal-and-regulatory.md` | +| UBL 2.1 invoice structure, EN 16931 BT-* business terms, mandatory header (CustomizationID, ProfileID, InvoiceTypeCode), UNCL5305 VAT category codes (S/Z/E/AE/K/G/O), calculation rules (BR-CO-13/15/17, BR-S-08 etc.), document type identifiers, BIS suite (Billing, Self-Billing, Catalogue, Despatch Advice, Invoice Response, MLR, MLS), Peppol BIS 4.0 / PINT convergence | `references/peppol-bis-billing.md` | +| Peppol 4-corner architecture, AS4 v2.0 transport, SMP/SML lookup with NAPTR/SHA-256 algorithm, SBDH v1.2 with C1 country code, PKI G3 certificates, becoming a certified Access Point or Service Provider, OpenPeppol membership tiers and pricing, Peppol Testbed conformance | `references/peppol-network.md` | +| Sweden-specific CIUS rules (SE-R-005 "Godkänd för F-skatt", SE-R-006 VAT rate restriction, SE-R-008/009 Bankgiro, SE-R-010 Plusgiro, SE-R-011 PaymentMeansCode 30, SE-R-013 Luhn orgnr), Swedish VAT (25/12/6/0%) encoding, OCR reference (BT-83), Bankgiro/Plusgiro PaymentMeans encoding, ROT/RUT and grön teknik handling, BAS-kontoplan postings for AR/AP, faktureringsmetoden vs kontantmetoden, multi-currency with TaxCurrencyCode, BT-10 BuyerReference per-buyer formats, Peppol identifier schemes (0007/0088/0192/0184/0037/0208/0204), F-skatt registration | `references/swedish-cius-and-specifics.md` | +| Choosing between Pagero/InExchange/Crediflow/Visma Autoinvoice/Maventa/Qvalia/Tietoevry/Basware/OpusCapita/Hogia/Ropo Capital/Storecove, market shares, pricing benchmarks (per-document, monthly minimums), DIGG Peppol traffic statistics, how Fortnox/Bokio/SpeedLedger/Björn Lundén white-label their Peppol layer, API capabilities of major providers | `references/market-provider-pricing.md` | +| Consumer e-faktura: Bankgirot e-faktura privat, EFA / e-giro format, Anslutningsärende/Anmälningsärende, bank participants, Kivra digital mailbox (volumes, pricing, ownership, Tink/Swish integration), Min Myndighetspost, distinction between consumer rails and Peppol | `references/consumer-and-b2c.md` | +| Comparing Sweden to Belgium (2026 decentralised Peppol mandate), France (PA/PPF 2026-2027), Germany (XRechnung phased 2025-2028), Italy (SDI clearance), Poland (KSeF Feb/Apr 2026), Romania (e-Factura), Norway (proposed 2028), Spain, ViDA cross-border 1 July 2030 mandate, ViDA 2035 alignment deadline for legacy CTC regimes, predicting Sweden's likely model | `references/european-mandates.md` | +| Implementing e-invoicing in software: open-source libraries (Oxalis-NG, Oxalis-AS4, Helger phase4 / phoss-smp / peppol-commons / phive / ph-ubl), test environments, common rejection patterns (BR-CO-15 rounding, BT-10 missing, encoding bugs), build-vs-buy economics, when to use Storecove vs own AP, validation stack in CI, the recommended Accounted phased plan, strategic positioning vs Crediflow/InExchange-dependent incumbents | `references/implementation-guide.md` | + +## Core facts that govern every answer + +These are short enough to inline; the references expand each. + +**Legal status (April 2026):** B2G mandatory since **1 April 2019** (Lag 2018:1277). B2B **voluntary**. B2C uses bank rails / Kivra, not Peppol. ViDA cross-border B2B mandate hard date: **1 July 2030**. Domestic mandate inquiry: **Dir. 2026:9 issued 5 Feb 2026, final report 30 Nov 2027**. Realistic Swedish domestic mandate window: **2029-2031** on a Belgium-style decentralised Peppol model. + +**Wire format:** Peppol BIS Billing 3.0, UBL 2.1 syntax, EN 16931 semantic. CustomizationID = `urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0`. ProfileID = `urn:fdc:peppol.eu:2017:poacc:billing:01:1.0`. Current release: **Billing 3.0.20 (November 2025)**. BIS 4.0 / PINT convergence in late 2025 / early 2026. + +**Network:** Peppol four-corner (C1 sender → C2 sending AP → C3 receiving AP → C4 receiver). AS4 v2.0 over HTTPS. SMP discovery via NAPTR/SHA-256 (migrated from CNAME/MD5 in 2025). PKI: G3 only after end-2025. SMP servers must run on port 443 from **1 February 2026**. + +**Authority:** DIGG is Sweden's Peppol Authority, regulator under Lag 2018:1277. **DIGG's Peppol-ID: `0007:2021006883`. Skatteverket: `0007:2021005448`.** Per regeringsbeslut Fi2025/01826, Peppol functions transfer to **Upphandlingsmyndigheten on 1 July 2026**; DIGG merges into PTS by 1 January 2027. SFTI ESAP 6 (EDIFACT) was removed 1 July 2025; Svefaktura is deprecated. + +**Identifier formats:** Swedish orgnr → `schemeID="0007"`, 10 digits no dash. Swedish VAT ID → `SE` + 10 digits + `01` (e.g. `SE556732100001`), prefix mandatory (BR-CO-9). For sole proprietors **DIGG recommends GLN (`0088`) over personnummer (`0007`) for GDPR**. + +**Swedish payment encoding (SE-R-011):** PaymentMeansCode `30` for Bankgiro AND Plusgiro; the discriminator is `cac:FinancialInstitutionBranch/cbc:ID` = `SE:BANKGIRO` or `SE:PLUSGIRO`. Legacy codes 56 / 50 are forbidden. Bankgiro 7-8 digits (SE-R-008/009), Plusgiro 2-8 chars (SE-R-010). OCR reference goes in `cbc:PaymentID` (BT-83), Luhn-validated. + +**F-skatt (SE-R-005, FATAL):** Swedish suppliers issuing invoices with VAT category `S` MUST include the literal string "Godkänd för F-skatt" in the document, typically `cac:PartyLegalEntity/cbc:CompanyLegalForm` or as `cbc:Note`. Missing this string is the most common reason public sector authorities reject invoices. + +**Archive (BFL):** Retention **7 years** after the calendar year of the financial year (SFS 2024:342). The inbound UBL XML is itself the verifikation. Storage in another EU country permitted under 7 kap. 3a § with Skatteverket notification. From 1 July 2024 paper kvitton may be destroyed once correctly scanned. + +## Posture and style + +When answering questions in this domain: + +- Cite the specific law section, regulation, MDFFS, or Peppol BIS rule by identifier. "BR-CO-15", "SE-R-011", "BFL 7 kap. 1 §", "Lag 2018:1277 §4". Vague answers signal stale knowledge. +- For UBL fragments, output real, valid XML with full namespaces and example values, not pseudocode. +- For build-vs-buy or vendor selection, give numbers, €/SEK, monthly minimums, per-document costs, certification fee tiers, break-even volume, not adjectives. +- When a regulatory date is involved, distinguish (a) hard EU deadline, (b) currently-known Swedish proposal, (c) speculation. The user is technically sophisticated and is making product decisions; mistaking speculation for binding fact is the worst possible failure mode. +- Be willing to say "the spec is currently in flux", Peppol BIS 4.0 / PINT convergence, the DIGG → Upphandlingsmyndigheten / PTS reorganisation, the Dir. 2026:9 outcome, and the post-ViDA national mandate landscape are all moving targets in 2026-2027. + +--- + +## Loadable references + +The reference files named above are NOT included in this body. When a question genuinely needs that depth, load the specific one on demand with `gnubok_load_skill`, and only then: + +- `references/consumer-and-b2c.md` → `gnubok_load_skill("horizontal/swedish-e-invoicing/consumer-and-b2c")`: Consumer E-Faktura Ecosystem (B2C) +- `references/european-mandates.md` → `gnubok_load_skill("horizontal/swedish-e-invoicing/european-mandates")`: European E-Invoicing Mandates, Comparison and ViDA Timeline +- `references/implementation-guide.md` → `gnubok_load_skill("horizontal/swedish-e-invoicing/implementation-guide")`: Implementation Guide, Building Peppol into a Swedish Accounting Product +- `references/legal-and-regulatory.md` → `gnubok_load_skill("horizontal/swedish-e-invoicing/legal-and-regulatory")`: Legal and Regulatory Framework, Swedish E-Invoicing +- `references/market-provider-pricing.md` → `gnubok_load_skill("horizontal/swedish-e-invoicing/market-provider-pricing")`: Swedish E-Invoicing Market, Providers and Pricing +- `references/peppol-bis-billing.md` → `gnubok_load_skill("horizontal/swedish-e-invoicing/peppol-bis-billing")`: Peppol BIS Billing 3.0, Wire Format Reference +- `references/peppol-network.md` → `gnubok_load_skill("horizontal/swedish-e-invoicing/peppol-network")`: Peppol Network Architecture, AS4, SMP, SML, PKI +- `references/swedish-cius-and-specifics.md` → `gnubok_load_skill("horizontal/swedish-e-invoicing/swedish-cius-and-specifics")`: Sweden CIUS Rules and Accounting Integration +$gb$, + NULL, + 6, + 1 + ), + ( + 'horizontal/swedish-e-invoicing/consumer-and-b2c', + 'horizontal', + 'Consumer E-Faktura Ecosystem (B2C)', + $gb$Consumer E-Faktura Ecosystem (B2C): reference for Swedish E Invoicing$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1239, + '.claude\skills\swedish-e-invoicing\references\consumer-and-b2c.md', + $gb$# 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 + +- Bankföreningen e-faktura statistics: https://www.bankforeningen.se +- Kivra business/sender info: https://kivra.se/foretag +- Bankgirot e-faktura privat: https://www.bankgirot.se/tjanster/e-faktura-privat/ +- Min Myndighetspost: https://www.minmyndighetspost.se +- Visma Autoinvoice B2CSE flag: https://documentation.autoinvoice.visma.com/integration-guide/invoice-sending/invoice-routing/$gb$, + 'horizontal/swedish-e-invoicing', + 2, + 1 + ), + ( + 'horizontal/swedish-e-invoicing/european-mandates', + 'horizontal', + 'European E-Invoicing Mandates, Comparison and ViDA Timeline', + $gb$European E-Invoicing Mandates, Comparison and ViDA Timeline: reference for Swedish E Invoicing$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1884, + '.claude\skills\swedish-e-invoicing\references\european-mandates.md', + $gb$# European E-Invoicing Mandates, Comparison and ViDA Timeline + +This reference compares Sweden's likely trajectory to the mandates already enacted or pending in other EU member states, and lays out the binding ViDA cross-border timeline. + +## ViDA, the binding EU floor + +**VAT in the Digital Age** package adopted by ECOFIN on 11 March 2025; in force 14 April 2025; transposition deadline 31 December 2026. + +| Date | Obligation | +|---|---| +| **14 Apr 2025** | Member states may mandate domestic B2B e-invoicing without Article 395 derogation, provided EN 16931-based; recipient consent abolished | +| **1 Jul 2030** | **Mandatory structured e-invoicing + Digital Reporting Requirements (DRR) for cross-border intra-EU B2B**; recapitulative VIES statements abolished; invoice issuance ≤10 days after chargeable event | +| **1 Jan 2035** | Pre-existing national clearance regimes (IT/FR/PL/RO/HU/ES) must align to the EU DRR standard | + +**Sweden has no pre-existing CTC, so Sweden does NOT get the 2035 grandfather clause.** Any new domestic mandate must be EN 16931-compliant by design. + +## Country-by-country mandate status (April 2026) + +### Italy, centralised CTC clearance + +- **Sistema di Interscambio (SDI)**, government clearance hub. +- Format: **FatturaPA**. +- Live for B2B since 1 January 2019. Cross-border via SDI from 1 July 2022. Forfettari fully included in 2024. +- Pre-clearance: every invoice routed through SDI before reaching the buyer. +- **EU derogation extended to 31 December 2027.** +- Penalties: 90-180% of VAT. +- Archive: 10 years. +- The "old" model that ViDA's 2035 alignment deadline forces to harmonise. + +### France, Y-model (Plateforme Agréée + PPF directory) + +- Plateforme Agréée (ex-PDP, "Partenaire de Dématérialisation Privée") + Portail Public de Facturation (PPF) as central directory. +- Formats: **Factur-X**, UBL, CII (multi-format permitted). +- **1 September 2026** receive obligation for all + send obligation for large enterprises and ETI (mid-cap). +- **1 September 2027** SMEs and micro-enterprises. +- National Assembly rejected further postponement in April 2025. +- DGFiP became France's Peppol Authority in 2025. +- Hybrid: PA processes the invoice, PPF receives reporting data. + +### Germany, decentralised, no clearance hub + +- Format: **XRechnung** (UBL or CII profile) or **ZUGFeRD ≥2.0.1** (hybrid PDF/A-3 + XML). +- **Receive obligation already live since 1 January 2025**, every German business must be able to receive an e-invoice. +- **1 January 2027** send obligation for businesses with annual turnover >€800k. +- **1 January 2028** all businesses send. +- Archive period reduced 10 → 8 years (from 2025). +- Decentralised: no government hub, no clearance. + +### Belgium, the ViDA template + +- **Decentralised 4-corner Peppol mandate, live 1 January 2026.** +- Format: **Peppol BIS Billing 3.0 / UBL** (peppol-only). +- Tolerance period through Q1 2026 (no penalties). +- 5-corner e-reporting layer added from 2028. +- Penalties: €1,500 first violation / €3,000 second / €5,000 third. +- **This is the model Sweden will most likely mirror.** + +### Poland, KSeF centralised clearance + +- **Krajowy System e-Faktur (KSeF)**, government clearance. +- Format: **FA(3) XML**. +- **Phase 1 live 1 February 2026** for ~4,200 entities with turnover >PLN 200M. +- **1 April 2026** all VAT-registered. +- **1 January 2027** micro-enterprises. +- Penalty-free through 2026. +- Like Italy, a CTC model that ViDA 2035 forces to align to EU DRR. + +### Spain, decentralised: AEAT public + private platforms + +- Format: **UBL / Facturae / CII / EDIFACT** (multi-format). +- **RD 238/2026 published 31 March 2026.** +- **+12 months (July 2027)** for businesses with turnover >€8M. +- **+24 months (July 2028)** all. +- Parallel **VeriFactu** invoicing software certification, January/July 2027. + +### Romania, CTC (RO e-Factura) + +- Format: **UBL 2.1 + RO-CIUS, ANAF seal**. +- **B2B mandatory 1 July 2024.** +- **B2C added 1 January 2025.** +- Pre-clearance to be removed January 2026 to align with ViDA. + +### Norway, proposed mandatory 2028 + +- Format: **Peppol BIS 3 / EHF**. +- **Mandatory B2B 1 January 2028 (proposed).** +- The Nordic peer pressure factor: a 2028 Norwegian mandate makes it implausible that Sweden would wait beyond 2030. + +## Sweden's likely trajectory + +Sweden has **20+ years of Peppol/SFTI infrastructure**, B2G mandatory since 2019, and DIGG already accredited as Peppol Authority. There is **zero political appetite** for an Italian-style centralised clearance hub, the existing decentralised infrastructure works, has proven low-friction, and aligns with EU peer countries (Belgium, Norway, Germany). + +**Realistic trajectory:** + +1. **Now → 30 November 2027**, Dir. 2026:9 inquiry runs. Skatteverket's preferred model (decentralised Peppol + DRR layer) is articulated. +2. **2028**, Lagrådsremiss and proposition. Likely model: Belgium-style Peppol 4-corner B2B, plus a 5-corner DRR layer where Skatteverket becomes Corner 5. +3. **2029-2030**, First domestic obligations. Likely: receive obligation first (all VAT-registered), then send obligation phased by entity size mirroring Germany's 2025→2027→2028 rollout. +4. **1 July 2030**, ViDA cross-border B2B obligation kicks in regardless of domestic timeline. Sweden is bound. +5. **2031-2032**, Full domestic mandate live including DRR layer. + +The single most important date to monitor is **30 November 2027** (Dir. 2026:9 final report). Architectural decisions made before then should preserve optionality between (a) pure Peppol 4-corner with no central reporting, (b) Peppol + DRR 5-corner, and (c) the unlikely-but-possible centralised clearance fallback. + +## Cross-border invoicing through Peppol, practical implications + +For a Swedish supplier invoicing into a mandate country today: + +| Destination | Current method | After 1 July 2030 | +|---|---|---| +| **Belgium** (since Jan 2026) | Peppol BIS Billing 3 | Same (Peppol is the format) | +| **Italy** | Peppol→SDI bridge via service provider, or direct SDI submission | Aligned to EU DRR by 2035 | +| **France** | Peppol→PA bridge after 1 Sep 2026 | DRR via PA / PPF | +| **Germany** | XRechnung via Peppol or direct | XRechnung continues, DRR added | +| **Poland** | Peppol→KSeF bridge | Aligned to EU DRR by 2035 | +| **Romania** | Peppol→RO e-Factura bridge | Aligned to EU DRR by 2035 | + +**Operational implication for a Swedish accounting product:** by 2027, customers will increasingly expect "send invoice anywhere in EU" to just work. Multi-mandate routing is a hard capability, not an enterprise add-on. **Storecove or Pagero are the realistic outsourcing options** for multi-mandate send; building per-country yourself is uneconomic until very high volume. + +## Authoritative source list + +- ViDA package adoption: https://taxation-customs.ec.europa.eu/news/adoption-vat-digital-age-package-2025-03-11_en +- ViDA Wikipedia summary (kept current): https://en.wikipedia.org/wiki/VAT_in_the_Digital_Age +- Belgium 2026 mandate: https://edicomgroup.com/blog/belgium-will-make-b2b-electronic-invoice-mandatory +- France PA/PPF model: https://www.impots.gouv.fr (DGFiP) +- Germany BMF ordinance: https://www.bundesfinanzministerium.de +- Italy SDI: https://www.fatturapa.gov.it +- Poland KSeF: https://www.podatki.gov.pl/ksef +- Norway 2028 proposal: https://www.regjeringen.no +- Comarch country trackers: https://www.comarch.com/trade-and-services/data-management/legal-regulation-changes/ +- EC eInvoicing Country Sheets: https://ec.europa.eu/digital-building-blocks/sites/spaces/DIGITAL/pages/467108902/eInvoicing+in+Sweden$gb$, + 'horizontal/swedish-e-invoicing', + 2, + 1 + ), + ( + 'horizontal/swedish-e-invoicing/implementation-guide', + 'horizontal', + 'Implementation Guide, Building Peppol into a Swedish Accounting Product', + $gb$Implementation Guide, Building Peppol into a Swedish Accounting Product: reference for Swedish E Invoicing$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 2952, + '.claude\skills\swedish-e-invoicing\references\implementation-guide.md', + $gb$# Implementation Guide, Building Peppol into a Swedish Accounting Product + +This reference is the practical builder's guide. Open-source library landscape, common rejection patterns, build-vs-buy economics, validation in CI, and a concrete phased plan for a new Swedish accounting platform. + +## Open-source library landscape + +The **Java ecosystem dominates Peppol**. Most production stacks are JVM. + +### Java, the canonical stack + +- **Oxalis** (https://github.com/OxalisCommunity/oxalis), originally Norwegian. **Oxalis 6.x is end-of-life Dec 2025.** +- **Oxalis-NG** (https://github.com/OxalisCommunity/oxalis-ng), successor, Apache 2.0. Build on this. +- **Oxalis-AS4 7.x** (https://github.com/OxalisCommunity/oxalis-as4). +- **Helger phase4** (https://github.com/phax/phase4), Apache 2.0 AS4 client + server. Most comprehensive alternative to Oxalis. +- **Helger phoss-smp**, production-grade SMP server. +- **Helger peppol-commons**, identifiers, codelists, SBDH, SMP/SML clients. +- **Helger phive + phive-rules**, validation engine and pre-built rules (Schematron compiled to fast XSLT). +- **Helger ph-ubl, ph-cii, ph-sbdh**, JAXB models for UBL 2.1, UN/CEFACT CII, SBDH v1.2. +- **phase4-peppol-standalone**, Spring Boot 3 reference implementation. Template, not turn-key. + +Trust stores updated to **G3-only late 2025**. Verify version when integrating. + +### Python + +- **invoice-x**, UBL/CII generation. +- **drafthorse**, Factur-X (relevant for German/French cross-border). +- **lxml** + Schematron-via-saxon-HE for validation. +- **No production-grade AS4**, bridge to Java via subprocess, container, or REST microservice. + +### JavaScript / TypeScript + +- **No mature library.** Generate types from UBL 2.1 XSDs (`xsdata`, `xsd2ts`, `xmlbuilder2`) and validate via Schematron-as-WASM or call out to Java. Most TS shops use Storecove or another reseller for this reason. + +### .NET + +- **`UblLib.Bis3`**, UBL Peppol BIS 3 generation/parsing. +- Several commercial SDKs (Storecove, Pagero). +- Microsoft Dynamics has built-in BIS 3.0 support. + +## Common rejection patterns, the high-yield checklist + +The seven failure modes that cause **80% of production rejections**: + +1. **BR-CO-15 rounding mismatches** between line totals and tax-inclusive totals. Always use BigDecimal/Decimal with explicit scale; round at the boundary, never in intermediate steps. +2. **VAT category code rule violations**, mixing `S` lines with a `Z` summary, or `AE` without `VATEX-EU-AE` reason code. +3. **Missing or malformed BT-10 BuyerReference** for Swedish public sector, each authority has its own format. Maintain a per-buyer-Peppol-ID regex map and validate at compose time. +4. **EndpointID `schemeID` mismatch** with what's published in the receiver's SMP. Verify via Peppol Lookup Service before sending. +5. **Date format errors**, UBL requires `YYYY-MM-DD` xs:date. +6. **Decimal separator and locale serialisation bugs**, period only, no thousand separators, `Locale.ROOT` / `InvariantCulture`. +7. **Swedish character encoding**, UTF-8 throughout. Many ERPs still serialise å/ä/ö with Windows-1252. + +Plus: + +- **SBDH C1 country code mandatory since January 2024.** +- **Attachments via `cbc:EmbeddedDocumentBinaryObject` should stay under 10 MB** despite the formal 100 MB AS4 ceiling. +- **Multi-currency requires `TaxCurrencyCode` plus a SEK-equivalent BT-111** in a second `TaxTotal`. +- **Missing F-skatt declaration (SE-R-005)** is the single most common Swedish rejection. +- **Forbidden PaymentMeansCode 56 / 50** instead of 30 with `SE:BANKGIRO` / `SE:PLUSGIRO`. + +## Validation in CI + +Three-layer validation, in this order: + +``` +[XSD] → [EN 16931 Schematron] → [PEPPOL-EN16931-UBL.sch with SE-R-* overlay] +``` + +**Run all three on every UBL artifact in CI.** Use Helger phive-rules or run Schematron via Saxon-HE. + +```bash +# Example: Helger CLI +java -jar phive-rules-peppol-billing-3-cli.jar \ + --rule "urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0" \ + invoice.xml +``` + +**Validate at three points** in your pipeline: +1. Immediately after UBL generation locally, fail fast. +2. Before handoff to the Access Point, last chance before AS4 transmission. +3. On receive in your inbound flow before bookkeeping, catches malformed inbound from less-strict APs. + +Many AP rejections happen post-send when the receiver's MLR comes back hours later, front-load validation aggressively. + +### Test environments + +- **Peppol Test Network**, `acc.edelivery.tech.ec.europa.eu` SML zone. Free for OpenPeppol members. +- **Helger Peppol Practical**, https://peppol.helger.com, REST + UI validator. +- **Storecove peppolvalidator.com**, error code lookup. +- **EC DG GROW eInvoicing validator**, https://itb.ec.europa.eu/invoice +- **Norwegian validator**, https://anskaffelser.no/verktoy/validator (also useful for Sweden). +- **DIGG testbädd**, https://www.digg.se/digitala-tjanster/peppol/peppol-testbadd + +## Build vs buy, the economic break-even + +**Reseller cost** ~€0.10/invoice (mid-volume Storecove) vs. **own-AP fixed cost** ~€30k/year (membership + cert + ops + staff time). + +``` +break-even = €30,000 / €0.10 = 300,000 invoices/year + ≈ 3,000-5,000 active SME customers × 50-100 invoices/month +``` + +**For receive there is no economic case to build initially**, Storecove free receive or own Oxalis-NG on a small VPS dominate. + +**For send, only build above ~25k invoices/month sustained** (i.e. ~300k/year). Below that, reseller is cheaper, faster, multi-mandate, and lower ops burden. + +## The reseller landscape compared + +| Reseller | Per-doc | Multi-mandate | DX | Sandbox | Best for | +|---|---|---|---|---|---| +| **Storecove** | €0.05-€0.30 | Excellent (Peppol + IT SDI + FR PA + BE + DE + PL KSeF + DBNAlliance) | Single REST API, OpenAPI spec | Free 30-day | Embedding in ERP/SaaS | +| **Pagero (TR)** | EUR 0.20-0.80 + €5-20k/yr | Excellent | Multiple APIs, enterprise-flavoured | Yes | Large enterprise | +| **InExchange** | SEK 1-5 + 200-400/mo | Nordic | REST | Yes | SE-only SME, Visma ecosystem | +| **Maventa (Visma)** | SEK 0.50-3 | Nordic+ | REST + SOAP | Yes | Visma ecosystem | +| **Galaxy Gateway, Babelway, SBSCon, Comarch, Edicom, Sovos, Avalara, Tradeshift, Basware, Seeburger, Esker** | Various | Excellent | Enterprise-tier | Varies | Multi-mandate enterprise | + +## Recommended stack for a new Swedish accounting platform + +``` +Application core (bookkeeping engine, UI, API) + → typed UBL/EN 16931 generator (ph-ubl JAXB / xsdata-Python / UblLib.Bis3) + → local Schematron validator (peppol-bis-invoice-3 + phive-rules) + → split path: + RECEIVE: own Oxalis-NG AP (€100/mo Hetzner + €4,400 yr-1 OpenPeppol fees) + SEND: Storecove API (until ~25k invoices/month, then own phase4 AP) +``` + +This hybrid is the dominant strategy: + +- **Oxalis-NG receive on day one** is open-source-friendly, scales linearly without per-doc fees, and gives genuine "native Peppol receive" differentiation that incumbents (white-labelling Crediflow/InExchange) cannot match without rebuilding their stack. +- **Storecove send** handles Belgium 2026, France 2026 PA flow, Italy SDI, Germany XRechnung, Poland KSeF in one API, you don't want to be re-implementing FatturaPA. +- **Migrate send to own AP only when volume justifies it**, likely 2028-2029 at the earliest for an early-stage product. + +## Critical UX features + +1. **Per-buyer BT-10 BuyerReference regex map** for the top 200 Swedish public buyers. Validate at compose time. Prevents 30-day public-sector payment delays. +2. **Free Peppol address out of the box** for every customer, major customer-acquisition lever in a market where competitors charge for Peppol setup. +3. **Inbound triage UI**, parse incoming UBL, show structured fields, propose BAS posting based on supplier history and item descriptions, await user approval. +4. **Multi-mandate send routing**, automatically route based on recipient country (`cbc:Country/cbc:IdentificationCode`) and recipient identifier scheme. + +## Phased plan for a new product (12 months) + +### Phase 0, today (Month 0) + +- Join OpenPeppol as End User (€650 sign-up + €1,250/yr) for forum access and early-warning on spec changes. +- Register a Peppol participant ID for the company itself for dogfooding. +- Set up CI with Helger phive-rules. + +### Phase 1, Months 1-3 + +- UBL generator with full Peppol BIS Billing 3 + Sweden CIUS rules (SE-R-* including F-skatt). +- Storecove sandbox for outbound test. +- Oxalis-NG TEST environment for inbound test. +- Schematron in CI on every UBL output. +- BT-10 regex map for top 100 Swedish myndigheter. + +### Phase 2, Months 4-6 + +- Become Candidate Service Provider (AP-only) with OpenPeppol (~€4,400 one-off + €3,350/year ongoing). +- Pass Conformance Test Suite. +- Sign Service Provider Agreement with DIGG (free). +- Migrate to native Oxalis-NG receive. +- Marketing message: "your customers email PDFs, your suppliers send Peppol e-invoices, both arrive in your inbox." + +### Phase 3, Months 7-12 + +- Multi-mandate readiness for BE/DE/FR/PL/RO destinations through Storecove. +- Per-customer compliance dashboard. +- Begin SMP work (€2,200 + €5,000/yr SMP-only or upgrade to AP+SMP S1). + +### Phase 4, Year 2+ + +- Switch send to own phase4 AP when monthly volume crosses ~25,000. +- Pre-build Skatteverket DRR ingestion behind feature flag for July 2030 activation. +- Pivot on SOU 2027 (due 30 November 2027), adjust architecture if Sweden chooses non-Peppol model. + +**Total go-live cost** for a credible, differentiated, open-source native-Peppol Swedish bookkeeping product: **approximately €10-15k plus 3 months engineering**. + +## Strategic positioning vs incumbents + +The competitive landscape has a hole. + +- **Visma eEkonomi, Fortnox, Bokio, SpeedLedger, Björn Lundén** all outsource their Peppol layer to Crediflow or InExchange/Maventa. None differentiate on Peppol-native architecture. +- **The 3.00-3.50 SEK per outbound markup** these vendors charge has a baked-in reseller cost, building native eliminates that markup AND removes dependency risk now visible after the Pagero→Thomson Reuters acquisition. +- **Native Peppol receive as a free out-of-the-box feature**, every customer gets a Peppol address by default, every supplier can send them invoices for free, is a brutal customer acquisition anchor in a market where the SMB end is underserved. +- **The open-source angle is force multiplier**: publishing the UBL generator on GitHub under BSD/MIT earns trust with bookkeeping/Linux-friendly customers without surrendering the moat, which lives in the bookkeeping engine and UX, not the XML serialiser. + +Three forces converge to make this strategically valuable: + +1. **B2G compliance has been mandatory since April 2019**, any customer with public-sector revenue is a non-starter without native Peppol. +2. **Large-enterprise customers** (Volvo, Ericsson, IKEA-supply, ICA, plus all Belgian/German/French subsidiaries hitting Swedish suppliers from 2026) increasingly require Peppol from suppliers. +3. **ViDA cross-border B2B mandate of 1 July 2030 is non-negotiable**, plus the plausible domestic mandate window of 2029-2031. + +The window to build with this advantage is the next **18-24 months** before incumbents finish their own native-Peppol projects. + +## Authoritative source list + +- Oxalis-NG: https://github.com/OxalisCommunity/oxalis-ng +- Helger phase4: https://github.com/phax/phase4 +- peppol-commons: https://github.com/phax/peppol-commons +- Phive-rules: https://github.com/phax/phive-rules +- peppol-bis-invoice-3: https://github.com/OpenPEPPOL/peppol-bis-invoice-3 +- Storecove docs: https://www.storecove.com/docs/ +- DIGG Peppol testbädd: https://www.digg.se/digitala-tjanster/peppol/peppol-testbadd +- Peppol Testbed: https://peppol.org/tools-support/testbed/ +- OpenPeppol membership: https://peppol.eu/who-is-who/openpeppol-membership/$gb$, + 'horizontal/swedish-e-invoicing', + 2, + 1 + ), + ( + 'horizontal/swedish-e-invoicing/legal-and-regulatory', + 'horizontal', + 'Legal and Regulatory Framework, Swedish E-Invoicing', + $gb$Legal and Regulatory Framework, Swedish E-Invoicing: reference for Swedish E Invoicing$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 2946, + '.claude\skills\swedish-e-invoicing\references\legal-and-regulatory.md', + $gb$# Legal and Regulatory Framework, Swedish E-Invoicing + +## Swedish primary legislation + +### Lag (2018:1277) om elektroniska fakturor till följd av offentlig upphandling + +The operative statute. SFS 2018:1277, in force **1 April 2019**, amended SFS 2023:212 to update VAT-law cross-references to ML 2023:200. + +- **§1 Scope.** Covers all invoices issued as a consequence of procurement under LOU 2016:1145, LUF 2016:1146, LUK 2016:1147 and LUFS 2011:1029. The trigger is "consequence of public procurement", not the identity of buyer or seller. +- **§2 Definition.** An e-invoice is an invoice issued, sent and received in a *structured electronic format that allows automatic and electronic processing*. **PDF and scanned paper are explicitly excluded.** Image-based formats fail the definition regardless of how they are transmitted. +- **§4 Standard.** EN 16931 conformance via Commission Implementing Decision (EU) 2017/1870. Parties may bilaterally agree on alternative standards. +- **§5 Reception duty.** Contracting authorities must receive and process EN 16931 invoices. +- **§7 Sanctions.** **DIGG can issue *vitesföreläggande* (penalty injunctions)** against non-compliant suppliers. The amount is set discretionarily. +- **§8 Appeals.** Appeals go to allmän förvaltningsdomstol; prövningstillstånd required for kammarrätten. + +Source: https://www.riksdagen.se/sv/dokument-och-lagar/dokument/svensk-forfattningssamling/lag-20181277-om-elektroniska-fakturor-till_sfs-2018-1277/ + +### Förordning (2018:1486) + +Designates **DIGG (Myndigheten för digital förvaltning)** as supervising authority and Sweden's Peppol Authority. Source: https://www.digg.se/kunskap-och-stod/e-handel/lag-forordning-och-foreskrifter-for-e-handel + +### MDFFS 2019:1 (Föreskrift om registrering i PEPPOL) + +In force **1 December 2019**. Requires all contracting authorities to publish themselves in Peppol's SMP (Service Metadata Publisher) registry. + +### MDFFS 2021:1 + +§§12-20 require state agencies to: +- use Peppol BIS Billing 3 for outbound invoices to other state agencies; +- send e-invoices to non-state recipients that have consented; +- handle inbound e-invoices in EN 16931 conformance. + +### Förordning (2000:606) §21f and Förordning (2003:770) + +Have required state agencies to handle invoices and orders electronically since 2008/2014. Per **SFS 2025:1201, regulatory authority over Förordning 2000:606 transfers from ESV to Statskontoret on 1 January 2026**. + +### Bokföringslag (1999:1078), archive rules + +Most recent consolidation: SFS 2024:342, in force **1 July 2024**. Modernised the archive regime for digital räkenskapsinformation. + +- **7 kap. 1 § / 7 kap. 2 §.** Räkenskapsinformation must be stored in the form in which it was created or received. **The inbound UBL XML is itself the verifikation; a printout is not.** +- **7 kap. 2 § (post-2024).** Retention is **7 years** after the calendar year in which the financial year ended. (Reduced from the historical 10 years.) +- **7 kap. 3 §.** Equipment to read electronic data must remain available *in Sweden* throughout retention. +- **7 kap. 3a §.** Electronic storage in another EU country is permitted if (a) Skatteverket is notified, (b) immediate online access is granted, and (c) printouts can be produced in Sweden upon request. +- **5 kap. 5 §.** Immutable bookkeeping, corrections are new posts, never overwrites. +- **4 kap. 4 §.** Language: Swedish, Danish, Norwegian or English. +- **Post-2024-07-01 change:** the prior requirement to retain paper originals for 3 years post-digitisation has been **abolished**. Paper kvitton may be destroyed once correctly scanned. + +### Mervärdesskattelag (2023:200), invoice content + +Replaces ML 1994:200 since 1 July 2023. + +- **2 kap. 9-10 §§.** Defines the e-invoice consistent with Article 217 of Directive 2006/112/EC. +- **17 kap.** Mandatory invoice content, implements Article 226 of the VAT Directive. +- **SKVFS 2024:16.** Simplified invoices (förenklad faktura). +- **No qualified electronic signature is required.** Authenticity and integrity are ensured via "business controls creating a reliable audit trail" per Article 233 of Directive 2006/112/EC. The Peppol AS4 message-level signing between Access Points is sufficient. + +### Skatteverket online audit rights, 1 April 2026 + +Pending legislation removed the historical ban on remote audit access. **From 1 April 2026, Skatteverket has expanded "online audit" rights**, direct read access to taxpayers' digital accounting/VAT records during audit. **This is access-rights legislation, not a SAF-T submission mandate.** Sweden does not yet require periodic SAF-T submission. + +## EU framework + +### Directive 2014/55/EU and EN 16931 + +- Directive 2014/55/EU, transposition deadline 27 November 2018. +- Commission Implementing Decision (EU) 2017/1870 anchors EN 16931 as the European e-invoicing semantic. +- **EN 16931-1**: syntax-agnostic semantic data model, BT-1…BT-150+ business terms, BG-1…BG-25 business groups. +- **EN 16931-2**: binds two normative syntaxes: **UBL 2.1** (ISO/IEC 19845:2015) and **UN/CEFACT CII** (D16B). +- Peppol BIS Billing 3.0 is a **CIUS** (Core Invoice Usage Specification) of EN 16931 in UBL syntax only. CII is permitted at the Peppol layer but not in BIS Billing 3.0. + +### ViDA, VAT in the Digital Age + +Adopted by ECOFIN on **11 March 2025** as three legal acts: +- **Council Directive (EU) 2025/516** +- **Regulation (EU) 2025/517** +- **Implementing Regulation (EU) 2025/518** + +Published in OJEU 25 March 2025, in force **14 April 2025**, transposition deadline **31 December 2026**. + +Binding dates relevant for Sweden: + +| Date | Obligation | +|---|---| +| 14 Apr 2025 | Member states may mandate domestic B2B e-invoicing without Article 395 derogation, provided EN 16931-based; recipient consent abolished | +| 1 Jul 2030 | **Mandatory structured e-invoicing + Digital Reporting Requirements (DRR) for cross-border intra-EU B2B**; recapitulative VIES statements abolished; invoice issuance ≤10 days after chargeable event | +| 1 Jan 2035 | Pre-existing national clearance regimes (IT/FR/PL/RO/HU/ES) must align to the EU DRR standard | + +**Sweden has no pre-existing CTC, so Sweden does NOT get the 2035 grandfather clause.** Any new domestic mandate Sweden builds post-2025 must already be EN 16931-compliant by design. + +## Swedish authorities + +### DIGG (Myndigheten för digital förvaltning) + +- Sweden's Peppol Authority. +- Regulator under §7 of Lag 2018:1277. +- Issues binding föreskrifter MDFFS 2019:1 and MDFFS 2021:1. +- DIGG's own Peppol-ID: `0007:2021006883`. +- **Reorganisation alert:** Per regeringsbeslut Fi2025/01826, DIGG's e-handel/Peppol functions transfer to **Upphandlingsmyndigheten on 1 July 2026**. DIGG itself is to be merged into PTS by 1 January 2027 forming a new digitalisation agency. Adjust regulatory monitoring accordingly. + +### Skatteverket + +- Receives e-invoices via Peppol at `0007:2021005448`. +- Publicly **in favour** of mandatory domestic B2B e-invoicing and transaction-based reporting. +- Ran a public consultation June-July 2025 on three models (SAF-T, clearance, post-audit-with-real-time-reporting). +- Estimates **SEK 10-20 billion/year** in business savings if Sweden mandates domestic e-invoicing. +- Sektionschef Björn Erling has explicitly endorsed Peppol as the future Swedish standard. + +### ESV (Ekonomistyrningsverket) and Statskontoret + +- ESV historically drove state e-invoicing since 2008 (Förordn. 2000:606 §21f). +- Per SFS 2025:1201, regulatory authority transfers to **Statskontoret on 1 January 2026**. + +### SFTI (Single Face To Industry) + +- Collaboration between SKR (Sveriges Kommuner och Regioner), DIGG, Upphandlingsmyndigheten and Kammarkollegiet. +- Sets the recommended Swedish standards. +- **From 1 July 2025: SFTI ESAP 6 (EDIFACT) was removed; Svefaktura 1.0/2.0 and SFTI Fulltextfaktura are formally deprecated; Peppol BIS Billing 3 is the only strategic format.** + +### Government inquiry Dir. 2026:9, the single most important date + +**Kommittédirektiv Dir. 2026:9** "Moderniserad och brottsförebyggande hantering av mervärdesskatt" was issued **5 February 2026** with a final report deadline of **30 November 2027**. + +The inquiry will determine: +- whether Sweden mandates domestic B2B e-invoicing; +- whether Sweden adopts transaction-based reporting (DRR-style or otherwise); +- the architectural model (decentralised Peppol vs. centralised clearance vs. post-audit with real-time reporting). + +**Realistic Swedish trajectory:** SOU report 30 November 2027 → lagrådsremiss/proposition 2028 → first domestic obligations **2029-2030** (likely receive obligation first, send obligation phased by entity size, mirroring Germany's 2025/2027/2028 rollout). The reference design Sweden will mirror is **Belgium's 2026 decentralised Peppol 4-corner model**, eventually augmented with a 5-corner DRR layer where Skatteverket becomes Corner 5. + +## Penalties and the B2G/B2B/B2C distinction + +| Segment | Status (April 2026) | Format | Penalty | +|---|---|---|---| +| **B2G** (consequence of public procurement) | Mandatory since 1 April 2019 | EN 16931 / Peppol BIS Billing 3 | DIGG vitesföreläggande, discretionary fine; practical risk also: lost public-sector business | +| **B2G** (state-to-state, state-to-private with consent) | Mandatory | Peppol BIS Billing 3 | Internal compliance | +| **B2B** | **Voluntary** | Free choice (Peppol BIS dominant; legacy Svefaktura tolerated bilaterally) | None | +| **B2C** | Voluntary | Bank rails / Kivra (not Peppol) | None | + +## GDPR for e-invoicing + +- Invoices to natural persons and sole proprietors contain personal data. +- **DIGG recommends sole proprietors use a GLN identifier (ICD `0088`) rather than a personnummer-based Peppol-ID (`0007`)** to minimise exposure of the personnummer in routing metadata visible across the network. +- Lawful basis is Article 6(1)(c) (legal obligation under BFL/ML/Lag 2018:1277). +- The 7-year BFL retention overrides Article 5(1)(e) storage limitation. +- **Access points act as Article 28 processors.** DPAs are required between sending business and its AP, and between recipient and its AP. +- Cross-border Peppol routing within EEA is not a Chapter V transfer; care is needed if an AP routes via non-EEA infrastructure (some APs use US/UK clouds). +- From 1 April 2026, the Skatteverket online-audit power requires architecting a "tax-auditor" role with secure read-only API access on the accounting system itself. + +## Authoritative source list + +- Lag (2018:1277): https://www.riksdagen.se/sv/dokument-och-lagar/dokument/svensk-forfattningssamling/lag-20181277-om-elektroniska-fakturor-till_sfs-2018-1277/ +- Bokföringslag (1999:1078): https://www.riksdagen.se/sv/dokument-och-lagar/dokument/svensk-forfattningssamling/bokforingslag-19991078_sfs-1999-1078/ +- DIGG e-handel laws and regs: https://www.digg.se/kunskap-och-stod/e-handel/lag-forordning-och-foreskrifter-for-e-handel +- DIGG Peppol statistics: https://www.digg.se/digitala-tjanster/peppol/statistik-fran-peppolnatverket- +- SFTI standards: https://sfti.se/sfti/standarder/peppolbisehandel/peppolbisbilling3.49021.html +- Skatteverket e-faktura: https://skatteverket.se/omoss/varverksamhet/forleverantorer/efakturortillskatteverket.4.b1014b415f3321c0de2680.html +- Skatteverket on transaction-based reporting: https://www.skatteverket.se/foretag/internationellt/transaktionsbaseradrapporteringochefakturering.4.386bd4b919276cc86c42b3f.html +- Dir. 2026:9: https://www.regeringen.se/pressmeddelanden/2026/02/ny-utredning-om-modernare-momsregler-och-battre-verktyg-mot-momsbedragerier/ +- ViDA package: https://taxation-customs.ec.europa.eu/news/adoption-vat-digital-age-package-2025-03-11_en +- EC eInvoicing Country Sheet for Sweden: https://ec.europa.eu/digital-building-blocks/sites/spaces/DIGITAL/pages/467108902/eInvoicing+in+Sweden$gb$, + 'horizontal/swedish-e-invoicing', + 2, + 1 + ), + ( + 'horizontal/swedish-e-invoicing/market-provider-pricing', + 'horizontal', + 'Swedish E-Invoicing Market, Providers and Pricing', + $gb$Swedish E-Invoicing Market, Providers and Pricing: reference for Swedish E Invoicing$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 2370, + '.claude\skills\swedish-e-invoicing\references\market-provider-pricing.md', + $gb$# Swedish E-Invoicing Market, Providers and Pricing + +This reference covers (a) which Access Points and service providers operate in Sweden, (b) how the dominant Swedish accounting platforms (Fortnox, Visma, Bokio, SpeedLedger, Björn Lundén, Hogia) wire their Peppol layers, almost all white-label, (c) per-document pricing benchmarks, (d) the post-2022 industry consolidation pattern. + +## Major Swedish Access Points and service providers + +| Provider | Status (Apr 2026) | Segment | Reach (claimed) | Notes | +|---|---|---|---|---| +| **Pagero** | Acquired by **Thomson Reuters Feb 2024** (~SEK 8.1B / USD 800M); now branded "ONESOURCE Pagero" | Large enterprise / global multinationals + free SME tier | 90,000 customers, 14M-company network, 75+ countries | Net sales 2023 SEK 795M (+33%); EBITA −SEK 17.4M. REST APIs (Document/Network/Signup/File/User). Quote-based pricing. Strong in global tax compliance. | +| **InExchange (Factorum AB)** | **Visma group since ~2020**, Skövde HQ | SME / mid-market dominant | ~80M tx/yr, 60,000 customers, 800,000+ orgs | Underlying operator for **Visma Autoinvoice** and Hantverksdata Entré. 12 invoices/yr free tier. Heaviest installed Swedish SME base. | +| **Crediflow AB** | PE-backed by **VIA Equity (2024)**; group includes OptoSweden, DocUp | Mid-market, ERP/system partner | 300,000+ companies monthly via 60+ ERPs | **Underlying AP for Fortnox, Bokio, SpeedLedger.** Group revenue ~SEK 100M. Most Swedish SaaS accounting depends on Crediflow. | +| **Visma Autoinvoice / Maventa** | Visma Group (KKR/HG/Cinven) | Captive Visma ecosystem | Routes through Maventa AP + InExchange | Cross-border via Peppol BIS 3; converts Svefaktura 1.0, TEAPPSXML, Finvoice 3.0, VismaXML, LiinosXML, SI-UBL. **API documentation:** https://documentation.autoinvoice.visma.com/ | +| **Tietoevry (BIX)** | Listed Finnish-Swedish | Banks, large enterprise, public sector | Certified Peppol AP since 2012 | White-labels to two of the largest Swedish banks. Strong B2C (Multichannel/Live Invoice). | +| **Basware** | **Take-private 2022** by Accel-KKR + Long Path + Briarwood (€620M, 94.7% premium) | Large global enterprise AP automation | 700+ global customers, 170M invoices/yr | HQ Helsinki/Espoo. Strong with Hogia. | +| **OpusCapita** | Acquired by **GEP (US) 1 July 2024** from PSG Equity | Mid/large enterprise, Nordics | 600 clients | Operates Skatteverket's free supplier portal. | +| **Ropo Capital** | Adelis Equity-backed; acquired Colligent Inkasso (2019), Posti Messaging Scandinavia (2020) | Large invoice volumes (energy, real estate, telco) | 11,000+ Nordic customers, 170M+ docs/yr | Combines invoicing + collections. | +| **Qvalia** | Swedish, Stockholm | SME, developer-friendly | 30+ countries, ISO 27001 | **Public, transparent EUR pricing** (see below). Best DX choice for an open-source integration. | +| **Hogia** | Swedish | Enterprise | Own Peppol AP | **Only major SE accounting vendor with its own Peppol AP** (others white-label). Uses Basware fakturaadresser for some units. | +| **Compello, Edicom, TrueCommerce, Tungsten Automation** | Various | Niche / enterprise / EDI |, | Minor Sweden footprint relative to top tier. | +| **Storecove** | Dutch | Developer-first, multi-mandate API | 30+ countries | Single REST API spans Peppol + DBNAlliance + local mandates (FR, IT SDI, BE, DE, PL KSeF, etc.). 30-day free sandbox. Strong fit for ERP/SaaS embedding. | + +## Qvalia public pricing (EUR, as of April 2026) + +| Tier | Monthly EUR | Messages/mo | +|---|---|---| +| Free | €0 | 1 | +| Small | €9 | 25 | +| Medium | €39 | 100 | +| Plus | €99 | 1,000 | +| Plus | €249 | 2,500 | +| Plus | €499 | 5,000 | +| Plus | €899 | 10,000+ | + +Setup fee 0. Includes inbound + outbound Peppol BIS Billing 3 + EHF + multi-mandate routing. **Most transparent commercial pricing in the Swedish market**, useful as a benchmark. + +## SME pricing benchmarks (April 2026) + +| Item | Typical SME price (SEK) | +|---|---| +| Outbound e-invoice (sender) | **3.00-3.50** (Bokio, SpeedLedger, BL); 0-3.40 (InExchange) | +| Inbound e-invoice | Often free; 3.50 (BL) | +| Monthly minimum (SME platform) | 0-199 | +| Setup/onboarding | 0 | +| Postal fallback | 8.25-20 | +| Kivra to consumer | ~5 | +| Enterprise (Pagero/Basware) per-doc | Negotiated, EUR 0.10-0.50 | + +## How Swedish accounting platforms wire Peppol + +**The dominant SME accounting platforms in Sweden all white-label two intermediaries.** Fortnox, Bokio and SpeedLedger funnel through **Crediflow**. Visma eEkonomi/SPCS/Administration/Business funnel through **Visma Autoinvoice (Maventa)**, which is itself a certified Peppol AP. None operate their own Peppol AP, except Hogia. + +This concentration is a strategic opening for any new platform: **building native Peppol disintermediates the entire value chain** and removes a markup baked into incumbent pricing. + +### Fortnox + +- Sweden's largest cloud ERP (~500,000+ customers). +- REST API at `https://api.fortnox.se/3/` (XML or JSON). +- Rate limit 25 req/5s/token. +- OAuth2 via `https://apps.fortnox.se/oauth-v1/`. +- Key endpoints: `/3/invoices`, `/3/supplierinvoices`, `/3/supplierinvoicepayments`, `/3/invoicepayments`, `/3/supplierinvoicefileconnections` (attach UBL/PDF), `/3/supplierinvoiceaccruals`, `/3/customers`, `/3/suppliers`, `/3/articles`, `/3/vouchers`, `/3/accounts`, `/3/financialyears`, `/3/taxreductions` (ROT/RUT), `/3/noxfinansinvoices` (factoring). +- WebSocket push API delivers `Invoices`/`SupplierInvoices`/`Vouchers`/`Customers` topics. +- Peppol-ID auto-published in Peppol Directory for AB customers. +- ROT/RUT housework supported natively (`HouseWork=true`, `HouseWorkType`, `HouseWorkHoursToReport`). + +### Visma Autoinvoice / Maventa + +- Cleanest Peppol developer story among Swedish platforms. +- API docs: https://documentation.autoinvoice.visma.com/ +- REST and legacy SOAP, OAuth2 client-credentials. +- Operator routing flags: `PEPPOL`, `INEXCHANGE`, `NEMHANDEL`, `SCAN`, `BANK`, `B2CSE`, `VISMASCANNER`. +- The `lookup`/`finder` endpoint exposes SMP discovery. +- `POST /v1/services/b2cse/agreement` registers a sender on the Swedish bank-based B2C rail (e-faktura privat). + +### Bokio + +- Outbound UBL Peppol BIS Billing 3 at **3 SEK per invoice** via Crediflow. +- **B2B only** for outbound Peppol. +- Auto-flags year-end-crossing invoices. +- Provides "Konvertera till fakturametoden" UX, useful template for any Swedish bookkeeping product. + +### Björn Lundén (BL Total / Lundify) + +- **3.50 SEK per outbound and inbound** e-invoice. + +### SpeedLedger + +- Bank-feed centric. +- **3 SEK per sent**. + +### Hogia + +- The only major SE accounting vendor with its own Peppol AP. +- Owns relationships with several mid-market customers. + +## Industry consolidation post-2022 + +Pattern: **bigger players are bundling tax + invoicing + AP automation + compliance reporting for enterprise**, leaving the Swedish SME and redovisningsbyrå segment as fertile ground. + +| Year | Event | +|---|---| +| 2022 | Basware take-private by Accel-KKR + Long Path + Briarwood, €620M, 94.7% premium | +| Feb 2024 | Thomson Reuters acquires Pagero, ~SEK 8.1B / USD 800M | +| 2024 | VIA Equity acquires Crediflow group | +| 1 Jul 2024 | GEP (US) acquires OpusCapita from PSG Equity | +| ~2020 | Visma Group acquires InExchange (Factorum AB) | +| 2019-2020 | Ropo Capital acquires Colligent Inkasso, Posti Messaging Scandinavia | + +**Reseller dependency risk is now real**, Pagero is a TR division, Basware is PE-owned, both will eventually re-price upward. Build optionality into the stack via a clean `SendClient` abstraction with dual-vendor capability. + +## Choosing an Access Point partner, decision framework + +For a new Swedish accounting/fintech product, the practical menu: + +1. **Storecove**, best DX, single API across Peppol + IT SDI + FR PA + PL KSeF + BE + DE. Free 30-day sandbox. Effective rate €0.05-€0.30/invoice. **Best fit when multi-mandate is needed.** +2. **Qvalia**, transparent EUR pricing, ISO 27001, Swedish-headquartered. Good fit for SME-only Swedish flows. +3. **InExchange**, heaviest Swedish installed base, but partial vendor lock-in via Visma Group ownership. +4. **Visma Autoinvoice / Maventa**, only worth it if already integrating Visma ecosystem. +5. **Pagero / Basware**, enterprise-only, not SME-friendly post-acquisition. +6. **Own Oxalis-NG AP**, only for receive at low volume (€100/mo Hetzner + €4,400 yr-1 OpenPeppol fees). For send, only economic above ~25k invoices/month. + +**Build vs buy break-even:** reseller cost of ~€0.10/invoice (mid-volume Storecove) versus own-AP fixed cost of ~€30k/year (membership + cert + ops) breaks even at **~300,000 invoices/year sent through your customers**, equivalent to ~3,000-5,000 active SME customers each sending 50-100 invoices/month. **For receive there is no economic case to build initially**, Storecove free receive or own Oxalis on a small VPS dominate. + +## Authoritative source list + +- DIGG Peppol traffic stats: https://www.digg.se/digitala-tjanster/peppol/statistik-fran-peppolnatverket- +- Visma Autoinvoice docs: https://documentation.autoinvoice.visma.com/ +- Fortnox API: https://developer.fortnox.se/ +- Pagero compliance pages: https://www.pagero.com/compliance/regulatory-updates/sweden +- Storecove blog/docs: https://www.storecove.com +- Qvalia pricing: https://qvalia.com/pricing/ +- InExchange knowledge base: https://inexchange.com/en/discover +- Skatteverket on B2G e-faktura: https://skatteverket.se/omoss/varverksamhet/forleverantorer/efakturortillskatteverket.4.b1014b415f3321c0de2680.html$gb$, + 'horizontal/swedish-e-invoicing', + 2, + 1 + ), + ( + 'horizontal/swedish-e-invoicing/peppol-bis-billing', + 'horizontal', + 'Peppol BIS Billing 3.0, Wire Format Reference', + $gb$Peppol BIS Billing 3.0, Wire Format Reference: reference for Swedish E Invoicing$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 2943, + '.claude\skills\swedish-e-invoicing\references\peppol-bis-billing.md', + $gb$# Peppol BIS Billing 3.0, Wire Format Reference + +## The BIS suite and document identifiers + +Peppol BIS Billing 3.0 is identified by: + +``` +cbc:CustomizationID = urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0 +cbc:ProfileID = urn:fdc:peppol.eu:2017:poacc:billing:01:1.0 +``` + +UBL roots are `Invoice` (`urn:oasis:names:specification:ubl:schema:xsd:Invoice-2`) and `CreditNote` (`urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2`). The current Peppol POACC release is **Billing 3.0.20 (November 2025)**. + +The wider BIS 3.0 suite (Peppol Post-Award and adjacent profiles): + +| Profile | Process ID suffix | Purpose | +|---|---|---| +| Billing 3 | `billing:01:1.0` | Standard B2B/B2G invoice + credit note | +| Self-Billing 3 | `selfbilling:01:1.0` | Buyer issues invoice on supplier's behalf | +| Order Only / Ordering / Advanced Ordering / Order Agreement | `ordering:*` | Procurement order flows | +| Despatch Advice 3 | `despatchadvice:01:1.0` | Shipment notification | +| Catalogue 3 | `catalogue:01:1.0` | Product catalogue exchange | +| Invoice Response (IMR, T111) | `invoiceresponse:01:1.0` | Buyer accepts/rejects invoice | +| Message Level Response (MLR, T71) | `mlr:01:1.0` | Technical receipt confirmation | +| **Message Level Status (MLS)** | `urn:peppol:edec:mls:1.0` | New: machine-readable processing status | + +**Peppol BIS 4.0 / PINT convergence** is announced for late 2025 / early 2026, track release notes at https://docs.peppol.eu/poacc/billing/3.0/bis/ before locking long-lived schemas. + +InvoiceTypeCode (BT-3) restricted set: `380` commercial invoice, `381` credit note (Invoice), `384` corrected invoice, `389` self-billed. CreditNoteTypeCode: `381` credit note, `396` factored credit note, `261` self-billed credit note. + +## Mandatory header + +```xml + + urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0 + urn:fdc:peppol.eu:2017:poacc:billing:01:1.0 + INV-2026-00001 + 2026-04-27 + 2026-05-27 + 380 + SEK + SE-DEPT-42 + ... + +``` + +## Party blocks + +`AccountingSupplierParty` and `AccountingCustomerParty` carry: + +- `cbc:EndpointID` (BT-34, mandatory `schemeID`), the Peppol routing address. +- `cac:PartyIdentification/cbc:ID`, additional business identifiers (GLN, etc.). +- `cac:PartyName/cbc:Name`. +- `cac:PostalAddress`, `StreetName`, `CityName`, `PostalZone`, `Country/IdentificationCode`. +- `cac:PartyTaxScheme/cbc:CompanyID`, VAT identifier. +- `cac:PartyLegalEntity/cbc:RegistrationName` and `cbc:CompanyID`. +- `cac:Contact`. + +For Swedish entities see `swedish-cius-and-specifics.md` for the F-skatt rule, orgnr formats, and VAT prefix requirements. + +## VAT category codes (UNCL5305) + +Used in `cac:ClassifiedTaxCategory/cbc:ID` per line and `cac:TaxCategory/cbc:ID` in summary blocks. + +| Code | Meaning | Rate | TaxExemptionReason | +|---|---|---|---| +| **S** | Standard rate | >0 | No | +| **Z** | Zero rated | 0 | No | +| **E** | Exempt from VAT | 0 | Yes (BT-120/BT-121) | +| **AE** | Reverse charge | 0 | Yes (`VATEX-EU-AE`) | +| **K** | Intra-EU supply of goods/services | 0 | Yes (`VATEX-EU-IC`) | +| **G** | Export outside EU | 0 | Yes (`VATEX-EU-G`) | +| **O** | Outside scope of VAT | n/a | Yes (`VATEX-EU-O`) | +| **L** | IGIC (Canary Islands) | various | Spanish use | +| **M** | IPSI (Ceuta/Melilla) | various | Spanish use | + +Reverse charge example (Sweden→EU customer): + +```xml + + AE + 0 + VAT + +``` + +In the summary `TaxSubtotal`: + +```xml + + 10000.00 + 0.00 + + AE + 0 + VATEX-EU-AE + Reverse charge + VAT + + +``` + +## Multi-currency handling + +`DocumentCurrencyCode` (BT-5) drives all amounts. If it differs from the seller's VAT accounting currency: +- Add `cbc:TaxCurrencyCode` (BT-6). +- Add a second `cac:TaxTotal` carrying only the SEK-equivalent total tax (BT-111). + +```xml +EUR +SEK +... + + 2500.00 + ... + + + 28750.00 + +``` + +## Calculation rules, the failure surface + +These are the rules that cause the majority of production rejections. + +| Rule | Constraint | +|---|---| +| **BR-CO-15** | `BT-112 = BT-109 + BT-110` (TaxInclusiveAmount = TaxExclusive + Tax). Canonical rounding bug. | +| **BR-CO-13** | `BT-109 = BT-106 − BT-107 + BT-108` (TaxExclusive = LineTotal − Allowances + Charges) | +| **BR-CO-17** | `BT-117 = round2(BT-116 × BT-119 / 100)` (per category tax = taxable × rate) | +| **BR-S-08, BR-Z-08, BR-E-08, BR-AE-08, BR-IC-08, BR-G-08, BR-O-08** | Per-category taxable amount must reconcile to corresponding line totals + charges − allowances | +| **BR-CO-9** | VAT identifier must start with country code prefix | +| **BR-S-01 / BR-Z-01 / etc.** | At least one line, allowance or charge per used VAT category | +| **PEPPOL-EN16931-R053** | Only one tax total without currency suffix | + +**Always do arithmetic in BigDecimal/Decimal with explicit scale.** Round at the boundary, never in intermediate steps. Force `Locale.ROOT` / `InvariantCulture` for serialisation. Document totals must be exactly 2 decimals; price amounts (BT-146/BT-148) are unbounded. + +Belgium's 2026 mandate disallows line-by-line VAT rounding; Sweden currently allows it but may not for long. + +## Allowances and charges + +Document level via `cac:AllowanceCharge`: + +```xml + + false + 95 + Volume rebate + 100.00 + + S + 25 + VAT + + +``` + +UNCL5189 reason codes (allowance) include: 41 Bonus for works ahead of schedule, 60 Manufacturer's consumer discount, 95 Discount, 100 Special rebate, 102 Fixed long term, 103 Temporary, 104 Standard. UNCL7161 reason codes (charge) include: AA Advertising, AAA Telecommunication, ABK Miscellaneous, FC Freight charge, IN Insurance, SH Shipping and handling. + +## Line items + +```xml + + 1 + 10 + 5000.00 + + Consulting hours + + S + 25 + VAT + + + + 500.00 + + +``` + +`unitCode` follows UN/ECE Recommendation 20 (`EA` each, `HUR` hour, `KGM` kilogram, `MTR` metre, `LTR` litre, `DAY` day, `MON` month, `C62` "one", used for dimensionless services). + +## Document totals + +```xml + + 10000.00 + 9900.00 + 12375.00 + 100.00 + 0.00 + 0.00 + 0.00 + 12375.00 + +``` + +## Attachments + +Via `cac:AdditionalDocumentReference` with `cac:Attachment/cbc:EmbeddedDocumentBinaryObject` (base64) or `cac:ExternalReference/cbc:URI`. Inline attachments should stay under 10 MB despite the formal 100 MB AS4 ceiling, many access points reject larger payloads in practice. + +```xml + + timesheet-april-2026.pdf + Detailed timesheet + + JVBERi0xLjQK... + + +``` + +## Validation stack + +Three layers in this order: + +1. **XSD**, UBL 2.1 schemas. Catches structural errors. Source: https://docs.oasis-open.org/ubl/os-UBL-2.1/UBL-2.1.html +2. **EN 16931 Schematron**, CEN/TC 434 official artefacts (`EN16931-UBL-validation.sch`). Catches BR-* business rules and BR-CO-* calculation rules. +3. **`PEPPOL-EN16931-UBL.sch`**, Peppol overlay with country-specific rules. SE-R-* (Sweden), NO-R-* (Norway), IT-R-* (Italy), DE-R-* (Germany), NL-R-* (Netherlands), DK-R-* (Denmark). + +Authoritative GitHub repo: **https://github.com/OpenPEPPOL/peppol-bis-invoice-3** with releases on a May/November cadence. + +Validators to integrate: +- **Helger Peppol Practical**, https://peppol.helger.com, REST + UI, runs phive-rules. +- **Storecove peppolvalidator.com**, https://peppolvalidator.com, error code lookup. +- **EC DG GROW eInvoicing validator**, https://itb.ec.europa.eu/invoice, official EC validator. +- **Norwegian validator**, https://anskaffelser.no/verktoy/validator (also useful for Sweden). +- **DIGG testbädd**, https://www.digg.se/digitala-tjanster/peppol/peppol-testbadd + +Validate at **three points** in your pipeline: (1) immediately after UBL generation locally; (2) before handoff to the Access Point; (3) on receive in your inbound flow before bookkeeping. Many AP rejections happen post-send when the receiver's MLR comes back hours later. + +## Authoritative source list + +- Peppol BIS Billing 3.0 specification: https://docs.peppol.eu/poacc/billing/3.0/bis/ +- UBL 2.1 syntax tree: https://docs.peppol.eu/poacc/billing/3.0/syntax/ubl-invoice/ +- Self-billing: https://docs.peppol.eu/poacc/self-billing/3.0/bis-sb/ +- Peppol document types index: https://www.peppol.nu/knowledge-base/peppol-document-types-standards/ +- OpenPEPPOL repo: https://github.com/OpenPEPPOL/peppol-bis-invoice-3 +- Validator with error code lookup: https://peppolvalidator.com/peppol-validation-errors$gb$, + 'horizontal/swedish-e-invoicing', + 1, + 1 + ), + ( + 'horizontal/swedish-e-invoicing/peppol-network', + 'horizontal', + 'Peppol Network Architecture, AS4, SMP, SML, PKI', + $gb$Peppol Network Architecture, AS4, SMP, SML, PKI: reference for Swedish E Invoicing$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 2280, + '.claude\skills\swedish-e-invoicing\references\peppol-network.md', + $gb$# Peppol Network Architecture, AS4, SMP, SML, PKI + +## The four-corner model + +Standard Peppol routing: + +``` +[C1 Sender] → [C2 Sending AP] → [C3 Receiving AP] → [C4 Receiver] + ERP ERP + ─── Peppol network ─── +``` + +Only **C2↔C3** is on-network. C1↔C2 and C3↔C4 are local integrations (REST API, SFTP, file watcher, ERP plugin) chosen by each AP. Sending and receiving APs may belong to different organisations or to the same provider; they may also be the same AP (intra-network delivery). + +ViDA introduces the **five-corner model** for cross-border B2B reporting from 1 July 2030: the tax administration becomes Corner 5 receiving DRR data in parallel with C3. + +## SML, Service Metadata Locator + +The SML is the centralised DNS service. Operated by **OpenPeppol AISBL** (insourced from EC DG DIGIT during 2024-2025). + +Lookup algorithm (migrated from CNAME/MD5 to **NAPTR/SHA-256** during 2025): + +``` +domain = base32(sha-256(lowercase(::))).iso6523-actorid-upis. +``` + +Production zone: `edelivery.tech.ec.europa.eu` +Test zone: `acc.edelivery.tech.ec.europa.eu` + +DNS NAPTR record returns the SMP base URL. + +Example for DIGG (`0007:2021006883`): + +``` +sha256("iso6523-actorid-upis::0007:2021006883") = ... +base32(hash) = b-eepvcndgxw5tjr... +NAPTR query: b-eepvcndgxw5tjr....iso6523-actorid-upis.edelivery.tech.ec.europa.eu +``` + +## SMP, Service Metadata Publisher + +The SMP is queried per **Peppol SMP specification v1.3.0 (February 2025)** for `ServiceGroup` (lists of supported document types) and `SignedServiceMetadata` (specific endpoint metadata, signed XML-DSIG). Endpoints expose: + +- `GET /`, ServiceGroup (list of document types). +- `GET //services/`, SignedServiceMetadata (endpoint URL, AP certificate, transport profile, validity period). + +Transport profile is now **`peppol-transport-as4-v2_0`** for production (replaced the v1 profile in 2020). + +A given participant can be registered with **only one SMP at a time**. Migrating between APs requires the new AP to register the participant in its SMP and the old AP to deregister. + +## AS4 transport + +**Peppol AS4 Profile v2.0.x** is a profile of CEF eDelivery AS4 v1.14, which is itself a profile of OASIS ebMS3. + +Wire characteristics: +- HTTPS, TLS 1.2+ (TLS 1.3 supported). +- MIME multipart with single encrypted payload. +- WS-Security message-level signing (RSA-SHA256) using the sender's AP certificate. +- Encryption (AES-128-GCM or AES-256-GCM) using the recipient AP's certificate fetched from the SMP. +- Single payload per AS4 message wrapping the **SBDH (Standard Business Document Header) v1.2** / **Peppol Business Message Envelope 2.0** which itself wraps the UBL document. + +**SBDH C1 country code mandatory since January 2024.** Oxalis 6.2.0+, Helger phase4 latest, and other compliant stacks enforce this. The SBDH carries `Sender`, `Receiver`, `DocumentIdentification` (standard, type version, instance ID), `BusinessScope` (process ID, document type ID, **C1 country code**). + +**From 1 February 2026**, SMP servers must run HTTPS on port 443 under the Peppol Policy for Transport Security. + +Authoritative spec: https://docs.peppol.eu/edelivery/as4/specification/ + +## PKI, G2 to G3 migration + +The Peppol PKI migrated from **G2 (issued by IHC) to G3 (DigiCert One Trust Lifecycle)** during H2 2025. **G3-only after end-2025**, any test/production cert issued from 2026 onwards is G3. + +Two certificate types per Access Point: +- **AP cert**, used for AS4 message signing and encryption. +- **SMP cert**, used to sign `SignedServiceMetadata` responses. + +Cert validity is typically 1-2 years. Renewal is automated via DigiCert's portal; trust store updates flow via OpenPeppol member announcements. + +Trust store libraries (Helger `peppol-commons`, Oxalis) ship the bundled Peppol root and intermediate certs; update at least quarterly to track CA rotation. + +Issuance and enrolment process: https://openpeppol.atlassian.net/wiki/spaces/OPMA/pages/4439080961/Peppol+PKI+2025+-+Issuing+and+Enrolment+Process + +## Identifier schemes (ICD / EAS codes) + +Used as `schemeID` on `cbc:EndpointID`, `cac:PartyIdentification/cbc:ID`, etc. + +| Code | Authority | Use | +|---|---|---| +| **0007** | Bolagsverket organisationsnummer | Swedish primary | +| **0088** | GS1 GLN | Swedish large orgs; recommended for sole proprietors (GDPR) | +| **0192** | Norwegian Enhetsregisteret | Replaces deprecated `9908` | +| **0184** | Danish CVR | Danish primary | +| **0037** | Finnish LY-tunnus | Finnish primary | +| **0208** | Belgian KBO/BCE | Belgian primary | +| **0204** | German Leitweg-ID | German B2G mandatory | +| **9930** | German VAT-ID | German B2B | +| **0009** | French SIRET | French primary | +| **0211** | Italian CodiceIPA | Italian B2G | +| **0213** | Italian CodiceFiscale | Italian B2C | +| **0096** | Dutch OIN | Dutch government | + +Authoritative live list: https://docs.peppol.eu/edelivery/codelists/ and https://docs.peppol.eu/poacc/billing/3.0/codelist/eas/. + +GitHub: https://github.com/OpenPEPPOL/peppol-bis-invoice-3/blob/master/structure/codelist/eas.xml + +## Becoming a Peppol Access Point, the operational path + +### OpenPeppol membership fees (effective 1 July 2025 for new members) + +For a small Swedish fintech (S1 size, 1-10 employees): + +| Path | Sign-up | Annual | Certification | Year-1 total | +|---|---|---|---|---| +| **AP + SMP S1** | €1,800 | €2,750 | €2,500 | **≈ €7,050** | +| **AP-only S1+S2** | €1,050 | €1,850 | €1,500 | **≈ €4,400** | +| **End User S1+S2** | €650 | €1,250 | n/a | **≈ €1,900** | + +Add infrastructure cost: 24/7 redundant AS4 hosting (€3-10k/yr), monitoring/on-call (€5-20k fully loaded), DigiCert G3 certs (bundled into OpenPeppol annual). DIGG charges no additional Peppol-Authority fee for Swedish service providers but requires signing the **Peppol Service Provider Agreement**. + +**Realistic minimum to operate an own AP: €20-40k/year direct cost plus 0.5-1 FTE engineering and 3-6 months upfront build.** Twice-yearly spec updates with a 7-day implementation window and mandatory monthly volume reporting are non-trivial recurring costs. + +### Onboarding steps + +1. Submit candidate application to `membership@peppol.eu`. +2. Sign the **Peppol Member Agreement** with OpenPeppol AISBL. +3. Sign the **Peppol Service Provider Agreement** (formerly Transport Infrastructure Agreement, TIA) with **DIGG** as Sweden's Peppol Authority. +4. Implement AS4 + SMP lookup + SBDH handling. Deploy in test environment. +5. Request DigiCert One G3 test certificate. +6. Pass the **Peppol Testbed conformance suite**, refactored 2025 with country-specific payload tests. https://peppol.org/tools-support/testbed/ +7. Pay the Certification Fee. +8. Production certificate issued. +9. Register SMP in production SML via DIGG. +10. Commit to monthly volume reporting. + +**Total elapsed time: 3-6 months.** + +### Open-source AS4 / SMP stacks + +- **Oxalis-NG** (https://github.com/OxalisCommunity/oxalis-ng), replaces Oxalis 6.x which is end-of-life Dec 2025. Java, Apache 2.0. +- **Oxalis-AS4 7.x** (https://github.com/OxalisCommunity/oxalis-as4). +- **Helger phase4** (https://github.com/phax/phase4), Apache 2.0 AS4 client + server. +- **Helger phoss-smp**, production-grade SMP server. +- **Helger peppol-commons**, identifiers, codelists, SBDH, SMP/SML clients. +- **Helger phive + phive-rules**, validation engine and pre-built rules. +- **Helger ph-ubl, ph-cii, ph-sbdh**, JAXB models. +- **phase4-peppol-standalone**, Spring Boot 3 reference implementation (template, not turn-key). + +Trust stores updated to G3-only late 2025. Verify version when integrating. + +## DIGG Peppol traffic statistics (Q4 2025) + +- October 2025: record **5,668,209 Peppol messages** to Sweden. +- November 2025: 4,810,015. +- December 2025: 5,190,513. +- Volume growth Sept 2024 → Sept 2025: **+30%**. +- **25,000+ Swedish Peppol receivers** registered. +- DIGG public sector survey (March 2025): 82% of public sector inbound invoices are e-invoices, 50% of outbound (up from 24%), 85% of public sector orgs use Peppol fully/largely for inbound. +- Bankföreningen reports 168.9M e-invoices to consumers in 2024. +- Total Swedish e-invoice volume estimate: **~250M/year** combining bank rails, Peppol B2G/B2B, and residual non-Peppol flows. + +Live stats: https://www.digg.se/digitala-tjanster/peppol/statistik-fran-peppolnatverket- + +## Authoritative source list + +- Peppol AS4 spec: https://docs.peppol.eu/edelivery/as4/specification/ +- Peppol SMP spec: https://docs.peppol.eu/edelivery/smp/specification/ +- SMP/SML interplay (Helger): https://peppol.helger.com/public/menuitem-docs-smp-sml-interplay +- Setup AP guide: https://peppol.helger.com/public/menuitem-docs-setup-ap +- Setup phoss SMP: https://peppol.helger.com/public/menuitem-docs-setup-smp-ph +- Peppol Testbed: https://peppol.org/tools-support/testbed/ +- OpenPeppol membership: https://peppol.eu/who-is-who/openpeppol-membership/ +- DIGG how Peppol works: https://www.digg.se/digitala-tjanster/peppol/sa-fungerar-peppol- +- Identifier policy: https://docs.peppol.eu/edelivery/codelists/$gb$, + 'horizontal/swedish-e-invoicing', + 2, + 1 + ), + ( + 'horizontal/swedish-e-invoicing/swedish-cius-and-specifics', + 'horizontal', + 'Sweden CIUS Rules and Accounting Integration', + $gb$Sweden CIUS Rules and Accounting Integration: reference for Swedish E Invoicing$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 3150, + '.claude\skills\swedish-e-invoicing\references\swedish-cius-and-specifics.md', + $gb$# Sweden CIUS Rules and Accounting Integration + +This reference covers everything that is **specifically Swedish** in a Peppol BIS Billing 3 invoice: identifier formats, the SE-R-* validation rules, VAT rate handling, payment encoding for Bankgiro/Plusgiro/OCR, ROT/RUT and grön teknik handling, BAS-kontoplan postings, faktureringsmetoden vs kontantmetoden, and per-buyer BT-10 BuyerReference formats. + +## Swedish identifier formats + +### EndpointID (BT-34) + +```xml +5567321000 +``` + +- **Swedish orgnr** → `schemeID="0007"`, **10 digits, no dash**. Example: `5567321000` (not `556732-1000`). +- **GLN** → `schemeID="0088"`, 13 digits. Used by larger organisations and DIGG-recommended for sole proprietors to avoid exposing personnummer. +- **Sole proprietor with personnummer** → `schemeID="0007"` with the personnummer as a 10-digit orgnr (since personnummer IS the firma's orgnr). **GDPR concern**: routing metadata is visible across the Peppol network. DIGG recommends switching to GLN. + +### VAT identifier + +`cac:PartyTaxScheme/cbc:CompanyID` for a Swedish entity: + +```xml + + SE556732100001 + VAT + +``` + +Format: **`SE` + 10 digits (orgnr) + `01`** (the trailing `01` is the legal sequence number, almost always `01`). The country prefix is mandatory under **BR-CO-9**. + +### Legal entity registration + +```xml + + Arcim Technology AB + 5567321000 + Godkänd för F-skatt + +``` + +## SE-R-*, the Sweden CIUS rules + +### SE-R-005 (FATAL), F-skatt declaration + +If a Swedish supplier issues an invoice with VAT category `S`, **the literal string "Godkänd för F-skatt" must appear somewhere in the invoice**. Standard placements: + +- `cac:PartyLegalEntity/cbc:CompanyLegalForm` (preferred) +- A document-level `cbc:Note` +- An invoice-line `cbc:Note` + +This is the **single most common reason public sector authorities reject Swedish invoices**. Hard-code the string into the UBL template; do not derive it from a database flag (the F-skatt status of an active Swedish AB is universal). + +### SE-R-006, Swedish VAT rate restriction + +If supplier VAT country is `SE` and category is `S`, the rate must be **6, 12, or 25**. Any other rate must use category `E` (exempt) with an exemption reason, typically used for the rare zero-rate cases that are technically exempt rather than zero-rated. + +### SE-R-008 / SE-R-009, Bankgiro + +Bankgiro account numbers must be **7-8 numeric digits**. + +### SE-R-010, Plusgiro + +Plusgiro account numbers must be **2-8 characters**. + +### SE-R-011, Swedish payment methods + +PaymentMeansCode `30` (Credit transfer) is mandatory for both Bankgiro and Plusgiro. **Legacy codes 56 and 50 are explicitly forbidden.** The discriminator between Bankgiro and Plusgiro is `cac:FinancialInstitutionBranch/cbc:ID`: + +- `SE:BANKGIRO` for Bankgiro +- `SE:PLUSGIRO` for Plusgiro + +### SE-R-013, Luhn validity on orgnr + +Swedish organisationsnummer must pass the modulus-10 (Luhn) check. Implementation note: the check digit is computed over the first 9 digits. + +## Swedish payment encoding (full example) + +Bankgiro payment with OCR reference: + +```xml + + 30 + 1234567890123 + + 5555-1234 + Arcim Technology AB + + SE:BANKGIRO + + + +``` + +Plusgiro: + +```xml + + 30 + 1234567890123 + + 123456-7 + + SE:PLUSGIRO + + + +``` + +For non-Swedish EU payments use code `58` (SEPA credit transfer) with country-checked IBAN in `cbc:ID`. + +## OCR references + +Swedish OCR is numeric, **2-25 digits, last digit modulus-10 (Luhn) check**. Optional length digit at position n−1 encodes total length. + +Four control levels at Bankgirot: +- **OCR1**, soft (mjuk), Luhn only. +- **OCR2**, hard (hård), Luhn + reference exists in BG receiver's reference register. +- **OCR3**, fixed length via length digit. +- **OCR4**, fixed length, up to 3 lengths allowed. + +Hård kontroll causes internet-banks to reject mismatched OCR, test thoroughly before going live. Encode in `cbc:PaymentID` (BT-83). + +## Bankgirot integration mechanics + +### Inbound payment file (kundreskontra) + +Bankgirot's daily inbound file uses fixed-format records with TK (transaction code): + +| TK | Meaning | +|---|---| +| 05 | Inbetalning | +| 15 | Avdrag/return | +| 25 | Inbetalning utan referens | +| 27 / 28 / 29 | Bg/Pg variations | +| 70 | Justering | + +The OCR (BT-83 / `cbc:PaymentID`) is the match key driving automatic invoice closure in 1510 Kundfordringar. + +### Outbound LB-rutin (leverantörsbetalningar) + +Outbound payment file uses TK 11/14/16/17/25/26/27/29/49 records, supports Girering, Kontoinsättning (clearing+kontonr), Kontantutbetalning and Avräkning av kreditfaktura. Signed and submitted via the company's bank (BgCom / BankgiroLink). The återredovisningsfil drives AP closure in 2440 Leverantörsskulder. + +**P27 was abandoned in 2023.** Banks have introduced bank-specific ISO 20022 PAIN.001/.002 flows. **Plan for LB-rutin and ISO 20022 to coexist for the foreseeable future.** + +## VAT (moms) rates and category encoding + +Swedish rates: **25% standard, 12% (food, hotel, restaurant), 6% (books, transport, culture, sport), 0%**. + +Standard 25% line example: + +```xml + + S + 25 + VAT + +``` + +Reverse charge for byggtjänster (omvänd skattskyldighet bygg, ML 2 kap. 1 § p. 4) within Sweden, uses `AE`: + +```xml + + AE + 0 + VAT + +``` + +Buyer's bookkeeping must post 2647 Ingående moms omvänd skattskyldighet (DR) and 2614 Utgående moms omvänd skattskyldighet (CR) when receiving such an invoice. + +Intra-EU service to a B2B EU customer, uses `K` (sometimes `AE` depending on supply rule): + +```xml + + K + 0 + VAT + +``` + +With `VATEX-EU-IC` exemption reason in the summary `TaxCategory`. + +## BAS-kontoplan postings + +The de-facto chart is **BAS-kontoplanen** (https://www.bas.se), updated yearly. Key accounts for e-invoice flows: + +### Customer-side (kundfakturor) + +- **1510** Kundfordringar (AR control, primary) +- **1513** Kundfordringar i delbetalning (used for ROT/RUT split) +- **1515** Osäkra kundfordringar +- **1518** Ej reskontraförda kundfordringar +- **1519** Värdereglering kundfordringar +- **3001/3002/3003/3004** Försäljning by VAT rate (25/12/6/0%) +- **3308** Försäljning tjänst utanför EU +- **3573** Försäljning tjänst EU (för uppgift i periodisk sammanställning) + +### Supplier-side (leverantörsfakturor) + +- **2440** Leverantörsskulder (AP control, primary) +- **2445** Tvistiga leverantörsskulder +- **2448** Ej reskontraförda leverantörsskulder +- **4010** Inköp varor +- **4515** Inköp tjänster +- **4xxx** General cost-of-goods accounts + +### VAT control + +- **2611** Utgående moms 25% +- **2621** Utgående moms 12% +- **2631** Utgående moms 6% +- **2614** Utgående moms omvänd skattskyldighet +- **2615** Utgående moms 25% EU varuinköp +- **2641** Ingående moms (inland) +- **2645** Ingående moms utländska leverantörer +- **2647** Ingående moms omvänd skattskyldighet (e.g. byggmoms) +- **2650** Redovisningskonto för moms (clearing to Skatteverket) + +### Cash and bank + +- **1910** Kassa +- **1920** Plusgiro +- **1930** Företagskonto / Bank + +## Standard postings + +**Outbound invoice 1,000 SEK net + 25% VAT to Swedish customer (faktureringsmetoden):** + +``` +DR 1510 Kundfordringar 1 250 + CR 3001 Försäljning 25% 1 000 + CR 2611 Utgående moms 25% 250 +``` + +**Inbound supplier invoice 1,000 SEK net + 25% VAT (faktureringsmetoden):** + +``` +DR 4010 Inköp 1 000 +DR 2641 Ingående moms 25% 250 + CR 2440 Leverantörsskulder 1 250 +``` + +**Inbound construction reverse-charge supplier invoice 1,000 SEK:** + +``` +DR 4xxx Inköp byggtjänst 1 000 +DR 2647 Ingående moms omvänd 250 (reclaimable) + CR 2440 Leverantörsskulder 1 000 + CR 2614 Utgående moms omvänd 250 (collected) +``` + +Net effect on moms is zero, but both legs must be reported in momsdeklarationen. + +## Faktureringsmetoden vs kontantmetoden + +- **Faktureringsmetoden**, mandatory if turnover > **SEK 3 million**, default for AB. Books invoices on issuance against 1510/2440. Moms recognised on invoice date. +- **Kontantmetoden**, books only on payment, against 1930/1910. Year-end conversion mandatory: any outstanding kund-/leverantörsfaktura must be booked over to 1510/2440 and the underlying intäkt/kostnad recognised, then reversed on 1 Jan. + +The bookkeeping engine must carry a `bookkeeping_method` flag driving posting timing and a year-end converter routine. + +## ROT/RUT and grön teknik + +**Peppol BIS Billing 3 has no standardised ROT/RUT extension.** Production practice in Swedish ERPs: + +1. **On the invoice**: show a reduced "Att betala" amount (after Skatteverket's portion). +2. **Surface the deduction** as an `cac:AllowanceCharge` with informative reason (no standardised reason code, use `cbc:AllowanceChargeReason` text). +3. **Persist housework metadata** locally against Skatteverket's typkoder: + - **ROT-bygg**: Bygg, El, Glas/Plåt, Mark/Dränering, Murning, Målning/Tapetsering, VVS. + - **RUT**: Städning, Trädgård, Barnpassning, Övriga (incl. flytt, IT-arbete, snöskottning). + - **Grön teknik**: värmepump-schablon, solceller, lagring, laddpunkt. +4. **After payment**, generate Skatteverket's separate "Begäran om utbetalning" XML (`HUSXML`) and upload via Skatteverket's e-tjänst. + +Bookkeeping splits the customer receivable into customer-paid and Skatteverket-receivable portions: + +``` +DR 1510 Kundfordringar (kund) 500 (kund's net to pay) +DR 1684 Skatteverket ROT-fordran 500 (or 1513 / 1689) + CR 3001 Försäljning 25% 1 000 + CR 2611 Utgående moms 25% ... +``` + +The 1684/1513/1689 receivable is closed when Skatteverket disburses to the company's bank. + +## BT-10 BuyerReference per-buyer formats + +Each Swedish public sector buyer specifies its own BT-10 / BuyerReference format. Examples: + +| Buyer | Format | +|---|---| +| Skatteverket | 4-letter code | +| Svenska Kraftnät | 3 digits + 3 letters | +| Försäkringskassan | 5-10 digits starting with `4` | +| Many universities | cost-centre + name | + +**Maintain a per-buyer-Peppol-ID regex map** and validate at invoice compose time. This prevents 30-day public-sector payment delays. Scrape SFTI / docplayer reference and update quarterly. + +## Multi-currency (Swedish supplier invoicing in EUR) + +Swedish supplier issuing in EUR to an EU customer; book the SEK equivalent for VAT. + +```xml +EUR +SEK +``` + +Bookkeeping uses the **monthly average ECB rate** for the previous month (Skatteverket-accepted), or the day's spot rate if the contract specifies. Both rate sources are valid; document the policy. + +## Authoritative source list + +- BAS-kontoplan: https://www.bas.se +- SFTI Peppol BIS Billing 3: https://sfti.se/sfti/standarder/peppolbisehandel/peppolbisbilling3.49021.html +- Swedish payment methods in BIS 3: https://support.inexchange.com/hc/en-us/articles/360001888178-Swedish-Payment-Methods-in-PEPPOL-BIS-3 +- DIGG Peppol-ID instructions: https://www.digg.se/digitala-tjanster/peppol/instruktion-for-val-av-peppol-id- +- SE-R-005: https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-peppol/SE-R-005/ +- SE-R-011: https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-peppol/SE-R-011/ +- Skatteverket ROT/RUT XML: https://www.skatteverket.se/foretag/rotochrutarbete (HUSXML schema)$gb$, + 'horizontal/swedish-e-invoicing', + 2, + 1 + ), + ( + 'horizontal/swedish-financial-reporting', + 'horizontal', + 'Swedish Financial Reporting', + $gb$Swedish financial reporting: årsredovisning structure (K2/K3 uppställningsform, noter, förvaltningsberättelse, underskrifter), Bolagsverket filing (deadlines, förseningsavgifter, iXBRL, revisionsplikt, tvångslikvidation), INK2 form logic (INK2R/INK2S field mappings, skattemässiga justeringar, periodiseringsfond/överavskrivningar/koncernbidrag). Trigger on ANY årsredovisning structure question, K2/K3 reporting differences, noter requirements, förvaltningsberättelse, underskrifter, kassaflödesanalys, Bolagsverket filing, förseningsavgifter, digital inlämning, iXBRL, revisionsplikt, INK2/INK2R/INK2S, skattemässiga justeringar, BAS-to-INK2 mappings, N9. Also "vilka noter krävs", "deadline årsredovisning", "hur fyller jag i INK2", "vem ska skriva under". Not for bokslut/closing mechanics (use swedish-year-end-closing). Always use over training data.$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 965, + '.claude\skills\swedish-financial-reporting\SKILL.md', + $gb$--- +name: swedish-financial-reporting +description: > + Swedish financial reporting: årsredovisning structure (K2/K3 uppställningsform, noter, förvaltningsberättelse, underskrifter), Bolagsverket filing (deadlines, förseningsavgifter, iXBRL, revisionsplikt, tvångslikvidation), INK2 form logic (INK2R/INK2S field mappings, skattemässiga justeringar, periodiseringsfond/överavskrivningar/koncernbidrag). Trigger on ANY årsredovisning structure question, K2/K3 reporting differences, noter requirements, förvaltningsberättelse, underskrifter, kassaflödesanalys, Bolagsverket filing, förseningsavgifter, digital inlämning, iXBRL, revisionsplikt, INK2/INK2R/INK2S, skattemässiga justeringar, BAS-to-INK2 mappings, N9. Also "vilka noter krävs", "deadline årsredovisning", "hur fyller jag i INK2", "vem ska skriva under". Not for bokslut/closing mechanics (use swedish-year-end-closing). Always use over training data. +--- + +# Swedish Financial Reporting + +Authoritative reference for årsredovisning document structure, Bolagsverket filing, and INK2 form logic. This skill covers the **reporting and filing** layer; for closing entries and bokslutstransaktioner, use `swedish-year-end-closing`. For VAT declarations, use `swedish-vat`. For tax planning, use `swedish-tax-planning`. + +## How to use this skill + +This skill has three reference files. Read the one(s) relevant to the query: + +| Query about | Read | +|---|---| +| Årsredovisning structure, K2/K3 document format, noter, förvaltningsberättelse, underskrifter, kassaflödesanalys, flerårsöversikt | `references/arsredovisning-structure.md` | +| Bolagsverket filing, deadlines, förseningsavgifter, digital filing, iXBRL, revisionsplikt, tvångslikvidation | `references/bolagsverket-filing.md` | +| INK2 form, INK2R/INK2S fields, skattemässiga justeringar, BAS-to-INK2 mapping, periodiseringsfond/överavskrivningar/koncernbidrag in declaration, common errors | `references/ink2-form-logic.md` | + +For questions spanning multiple areas (e.g. "what's the full timeline from bokslut to filing?"), read all relevant files. + +## Quick-reference: critical thresholds + +### Större företag (ÅRL 1:3 § p.4) -- 2 of 3 over 2 years +- Anställda > 50 +- Balansomslutning > 40 MSEK +- Nettoomsättning > 80 MSEK + +### Revisionsplikt exemption (ABL 9:1 §) -- must NOT exceed 2 of 3 +- Anställda > 3 +- Balansomslutning > 1.5 MSEK +- Nettoomsättning > 3 MSEK + +### Key deadlines (calendar year AB, FY ending Dec 31) +- Årsredovisning to Bolagsverket: **7 months** (July 31) +- INK2 to Skatteverket: **~7 months** (August 1, or next weekday) +- Förseningsavgift 1: day 1 after deadline +- Förseningsavgift 2: +2 months +- Förseningsavgift 3 + likvidationshotbrev: +2 more months (11 months total) + +### Förseningsavgifter (FY beginning 2025-01-01+) +- Privat AB: 7,500 + 7,500 + 15,000 = **30,000 SEK** +- Publikt AB: 15,000 + 15,000 + 30,000 = **60,000 SEK** + +## Key law references + +| Statute | Area | +|---|---| +| ÅRL (1995:1554) | Document structure, notes, filing | +| ABL (2005:551) | Revision, signatures, liquidation | +| IL (1999:1229) | All tax adjustments (INK2) | +| SFL (2011:1244) | Declaration duties, deadlines, penalties | +| BFNAR 2016:10 | K2 | +| BFNAR 2012:1 | K3 | + +--- + +## Loadable references + +The reference files named above are NOT included in this body. When a question genuinely needs that depth, load the specific one on demand with `gnubok_load_skill`, and only then: + +- `references/arsredovisning-structure.md` → `gnubok_load_skill("horizontal/swedish-financial-reporting/arsredovisning-structure")`: Årsredovisning Document Structure (K2/K3) +- `references/bolagsverket-filing.md` → `gnubok_load_skill("horizontal/swedish-financial-reporting/bolagsverket-filing")`: Bolagsverket Filing Requirements +- `references/ink2-form-logic.md` → `gnubok_load_skill("horizontal/swedish-financial-reporting/ink2-form-logic")`: INK2 Form Logic +$gb$, + NULL, + 3, + 1 + ), + ( + 'horizontal/swedish-financial-reporting/arsredovisning-structure', + 'horizontal', + 'Årsredovisning Document Structure (K2/K3)', + $gb$Årsredovisning Document Structure (K2/K3): reference for Swedish Financial Reporting$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 2451, + '.claude\skills\swedish-financial-reporting\references\arsredovisning-structure.md', + $gb$# Årsredovisning Document Structure (K2/K3) + +## Table of Contents +1. Document ordering +2. Uppställningsform -- resultaträkning +3. Uppställningsform -- balansräkning +4. Noter requirements (K2 vs K3) +5. Förvaltningsberättelse +6. Underskrifter +7. Kassaflödesanalys +8. Flerårsöversikt +9. K2 vs K3 key differences + +--- + +## 1. Document ordering + +**K2 (BFNAR 2016:10 punkt 3.2)**: +Förvaltningsberättelse → Resultaträkning → Balansräkning → (Kassaflödesanalys) → Noter + +**K3 (BFNAR 2012:1 punkt 3.4, 3.10)**: +Same base order, plus optional Rapport över förändringar i eget kapital as separate statement between balansräkning and kassaflödesanalys. + +--- + +## 2. Uppställningsform -- resultaträkning + +Governed by ÅRL 3 kap. 1-4 §§, templates in ÅRL Bilaga 2 (kostnadsslagsindelad) and Bilaga 3 (funktionsindelad). + +### K2: Only kostnadsslagsindelad (punkt 3.4) +Funktionsindelad is explicitly prohibited. Fixed rubriker/poster/summeringsrader. No additional rows or headings may be added, no merging beyond what K2 permits. + +Förkortad (abbreviated) form allowed for mindre företag per ÅRL 3:4 § and 3:11 §. If used, nettoomsättning must be disclosed in a note (punkt 18.8A). + +### K3: Both formats allowed +Both kostnadsslagsindelad and funktionsindelad permitted. Additional rows may be added or merged per ÅRL 3:4 §. Switching formats requires särskilda skäl (ÅRL 3:3 §). + +### Kostnadsslagsindelad line items (ÅRL Bilaga 2) +Nettoomsättning → Förändring av varulager → Aktiverat arbete för egen räkning → Övriga rörelseintäkter → Råvaror och förnödenheter → Handelsvaror → Övriga externa kostnader → Personalkostnader → Avskrivningar/nedskrivningar → Övriga rörelsekostnader → **Rörelseresultat** → Finansiella poster → **Resultat efter finansiella poster** → Bokslutsdispositioner → Skatt på årets resultat → **Årets resultat** + +### Funktionsindelad line items (ÅRL Bilaga 3, K3 only) +Nettoomsättning → Kostnad för sålda varor → **Bruttoresultat** → Försäljningskostnader → Administrationskostnader → Övriga rörelseintäkter/kostnader → Rörelseresultat → then same financial items as above. + +--- + +## 3. Uppställningsform -- balansräkning + +Both K2 and K3 follow ÅRL Bilaga 1. + +Under K2: strict adherence to prescribed posts (punkt 4.7-4.8), no extra posts. Eget kapital split into bundet/fritt per ÅRL 3:10a-10b §§. + +Under K3: additional posts may be added per ÅRL 3:4 §. + +--- + +## 4. Noter requirements + +Notes governed by ÅRL 5 kap. §§ 4-24 (all companies) and §§ 25-49 (större företag only). Notes must appear in same order as related balance/income statement posts (ÅRL 5:3 §). + +### K2 mandatory notes (BFNAR 2016:10 kap. 18-19) + +- **Redovisnings- och värderingsprinciper** (ÅRL 5:4 §, punkt 18.3-18.4): statement that K2 is applied plus depreciation grounds +- **Avskrivningsgrunder** per asset category (ÅRL 5:8 § andra stycket) +- **Goodwill avskrivningstid** if goodwill recognized (ÅRL 5:9 §) +- **Tjänste-/entreprenaduppdrag** method (punkt 18.5) +- **Indirekta utgifter i pågående arbeten** if indirect costs capitalized (punkt 18.6) +- **Indirekta tillverkningskostnader** if included in inventory (punkt 18.7) +- **Nettoomsättning** if förkortad resultaträkning used (ÅRL 3:11 §, punkt 18.8A) +- **Medelantalet anställda** (ÅRL 5:20 §, punkt 18.9) +- **Anläggningstillgångar** -- anskaffningsvärde, årets avskrivningar per post (ÅRL 5:8 §) +- **Uppskrivningsfond** changes during year (ÅRL 5:11 §) +- **Långfristiga skulder** due after >5 years (ÅRL 5:13 §) +- **Ställda säkerheter** (ÅRL 5:14 §) +- **Eventualförpliktelser** (ÅRL 5:15 §) +- **Exceptionella intäkter/kostnader** if material (ÅRL 5:19 §) +- **Koncernförhållanden** (kap. 19): ränteintäkter/kostnader avseende koncernföretag, moderföretag (namn, org.nr, säte) +- **Väsentliga händelser efter räkenskapsårets slut** (ÅRL 5:22 §) +- **Lån till ledande befattningshavare** if applicable (ÅRL 5:12 §) +- **Övergångsupplysning** first year applying K2 (punkt 18.1) + +**NOT required under K2**: jämförelsetal in notes (though permitted), specifikation of shares in dotterföretag/intresseföretag, uppskjuten skatt (prohibited in K2), könsfördelning, salary details. + +### K3 mandatory notes (BFNAR 2012:1 kap. 8 + ÅRL) + +All K2 base notes from ÅRL 5:4-24 §§, plus: +- Detailed **redovisningsprinciper** (punkt 8.3): all policies relevant for understanding (intäktsredovisning, leasing, materiella/immateriella anläggningstillgångar, financial instruments, inventory, uppskjuten skatt, etc.) +- **Uppskjuten skatt** mandatory recognition (K3 kap. 29); större företag must disclose amounts and changes (ÅRL 5:36 §) +- **Ändrade uppskattningar och bedömningar** if material (punkt 10.6, 10.12) +- **Rättelse av fel** (punkt 10.12) + +### Additional notes for större företag (both K2 and K3, ÅRL 5:25-49 §§) +Könsfördelning (5:37-38 §§), löner/ersättningar/pensioner to board/CEO (5:39-44 §§), antal aktier/kvotvärde (5:34 §), koncerntransaktioner (5:26 §), dotterföretag/intresseföretag specifikation (5:27-30 §§), jämförelsetal required in all notes under K3 (punkt 3.5). + +--- + +## 5. Förvaltningsberättelse + +Governed by ÅRL 6 kap. 1-4 §§. + +### All companies must include: +- Rättvisande översikt over verksamhet, ställning, resultat +- Förhållanden important for assessing position/results not reported elsewhere +- Väsentliga händelser during räkenskapsår + +### Större företag must additionally cover: +- Förväntad framtida utveckling (including väsentliga risker och osäkerhetsfaktorer) +- Forskning och utveckling +- Utländska filialer +- Miljöinformation for tillstånds-/anmälningspliktig verksamhet + +### K2 mandatory rubriker for AB (punkt 4.9): +- Verksamheten (art och inriktning, säte) +- Väsentliga händelser under räkenskapsåret +- Väsentliga händelser efter räkenskapsårets slut (note: in K2 this goes in förvaltningsberättelsen, not as a separate note) +- Flerårsöversikt +- Förändring av eget kapital (always in förvaltningsberättelsen under K2) +- Förslag till resultatdisposition (per ABL 18:4 §, ÅRL 6:2 §) + +Also required: disclosure if kontrollbalansräkning prepared/should be (ABL 25:13 §), name changes, important external dependencies. + +### K3 additions (punkt 3.7-3.14): +- Ägare with >10% of shares/votes must be disclosed +- More detailed framtida utveckling och risker +- Forsknings- och utvecklingspolicy (punkt 3.9) +- Kontrollbalansräkning disclosure (punkt 3.11) +- Miljöinformation for larger companies (punkt 3.12) +- Option to place förändring av eget kapital as separate statement (punkt 3.10) + +### Resultatdisposition +ÅRL 6:2 § requires AB and ekonomisk förening to include förslag till resultatdisposition in förvaltningsberättelsen. + +--- + +## 6. Underskrifter + +### Who signs (ÅRL 2:7 §) +ALL ordinarie styrelseledamöter registered at Bolagsverket at signing time PLUS VD (if appointed). + +### Order +1. VD and all styrelseledamöter sign årsredovisning +2. Revisor signs revisionsberättelse and påteckningsmening + +### Digital signatures +ÅRL 2:7 § allows elektronisk form with avancerad elektronisk underskrift per EU eIDAS-förordningen (EU nr 910/2014). BankID is standard in Sweden. Physical and digital signatures CANNOT be mixed on the same document. + +### Dating requirement (FY starting 2024-07-01+) +Årsredovisning must be dated the day signatories determined final content. Each signer must indicate their signature date. + +### Legal consequences +Signatories take personal responsibility for ÅRL compliance. False/misleading årsredovisning can trigger liability under BrB (svindleri, bokföringsbrott). + +--- + +## 7. Kassaflödesanalys + +### When mandatory +- Större företag: always (ÅRL 2:1 § andra stycket) +- Koncernredovisning: always (ÅRL 7:4 §) +- Bostadsrättsföreningar: FY starting after 2022-12-31 (SFS 2022:1028) + +### K2 (kap. 21): voluntary +If prepared, only indirekt metod permitted (punkt 21.9). Placed between balansräkning and noter (punkt 21.2). + +### K3 (kap. 7): mandatory for större, voluntary for mindre +Both direkt and indirekt metod permitted (punkt 7.9-7.10). + +### Required categories (ÅRL 6:5 §) +Löpande verksamhet, investeringsverksamhet, finansieringsverksamhet. + +--- + +## 8. Flerårsöversikt + +### K2 (punkt 5.5, 4.9) +Mandatory in förvaltningsberättelsen. Minimum 4 years (current + 3 preceding). Three obligatoriska nyckeltal: +- Nettoomsättning (or bruttoresultat if förkortad) +- Resultat efter finansiella poster +- Soliditet (justerat eget kapital / balansomslutning x 100%) + +If nettoomsättning varies >30% between any two years, must be commented. + +### K3 (punkt 3.7) +Rättvisande översikt over longer period, normally 4-5 years. No specific mandatory nyckeltal prescribed; company decides which KPIs best describe development. + +--- + +## 9. K2 vs K3 key differences in reporting + +| Area | K2 | K3 | +|---|---|---| +| Resultaträkning format | Only kostnadsslagsindelad | Both formats | +| Egenupparbetade immateriella | Forbidden to capitalize | Allowed | +| Komponentavskrivning | Forbidden | Required when components differ | +| Uppskjuten skatt | Forbidden | Required | +| Verkligt värde | Not allowed | Allowed per ÅRL | +| Nyttjandeperiod inventarier | May use 5-year schablon | Must assess actual | +| Periodiseringsregler | Simplified (<20% variation, <5,000 kr) | Case-by-case | +| Uppskrivningar | Only byggnader & mark (to taxeringsvärde) | All fixed assets per ÅRL | +| Leasing | All operating | Financial recognized on BS (koncern) | + +### Who can use K2 +Mindre företag (not exceeding 50 employees / 40 MSEK balansomslutning / 80 MSEK nettoomsättning), excluding publika AB and moderföretag preparing koncernredovisning. + +**New from FY starting after 2025-12-31**: bostadsrättsföreningar, companies with kryptotillgångar, filialer utomlands, incitamentsprogram, or emitterade konvertibla skuldebrev may NOT use K2. + +### Who must use K3 +All större företag not applying IFRS. K3 is huvudregelverk (default) for all companies preparing årsredovisning.$gb$, + 'horizontal/swedish-financial-reporting', + 1, + 1 + ), + ( + 'horizontal/swedish-financial-reporting/bolagsverket-filing', + 'horizontal', + 'Bolagsverket Filing Requirements', + $gb$Bolagsverket Filing Requirements: reference for Swedish Financial Reporting$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1412, + '.claude\skills\swedish-financial-reporting\references\bolagsverket-filing.md', + $gb$# Bolagsverket Filing Requirements + +## Table of Contents +1. What must be filed +2. Filing deadlines +3. Förseningsavgifter +4. Escalation and tvångslikvidation +5. Digital filing and iXBRL +6. Revisionsplikt gränsvärden +7. Filing by entity type + +--- + +## 1. What must be filed + +### Aktiebolag +- Årsredovisning (förvaltningsberättelse, resultaträkning, balansräkning, noter, kassaflödesanalys if required) +- Revisionsberättelse (if revisor exists) +- **Fastställelseintyg**: certification that RR and BR were adopted at årsstämma, with date and resolution on resultatdisposition +- Koncernredovisning and koncernrevisionsberättelse if obligated parent company + +### Ekonomisk förening (FY beginning 2025-01-01+) +ALL ekonomiska föreningar must file årsredovisning and revisionsberättelse with Bolagsverket. Previously only larger ones were required to. + +### Handelsbolag with juridisk person as partner +Årsredovisning filed within **6 months** (not 7) from FY end. + +### Stiftelser +Filed with **Länsstyrelsen** (not Bolagsverket) within **6 months**. + +--- + +## 2. Filing deadlines + +Core rule (ÅRL 8:3 §): årsredovisning must reach Bolagsverket **within 7 months** from räkenskapsårets slut. Bolagsverket has **no legal authority to grant extensions**. + +### Calendar year AB (Dec 31 FY end) +Deadline: **July 31** of following year. + +### Brutet räkenskapsår +7-month rule applies from whatever date FY ends: +- FY ending Jun 30 → deadline Jan 31 +- FY ending Aug 31 → deadline Mar 31 + +### Internal timeline +- Prepare årsredovisning within ~4.5 months +- If revisor: ready at least 6 weeks before AGM for audit +- AGM within 6 months from FY end +- File within 1 month after AGM +- Total max 7 months + +### Continued AGM (fortsatt bolagsstämma) +If properly reported, filing deadline extends to **9 months**. + +--- + +## 3. Förseningsavgifter + +Legal reference: ÅRL 8:5-6 §§. Three fees at escalating intervals. + +### FY beginning 2025-01-01 or later (current regime) + +| | Privat AB & ekon. förening | Publikt AB | +|---|---|---| +| Avgift 1 (day 1 late) | 7,500 SEK | 15,000 SEK | +| Avgift 2 (+2 months) | 7,500 SEK | 15,000 SEK | +| Avgift 3 (+2 more months) | 15,000 SEK | 30,000 SEK | +| **Total max** | **30,000 SEK** | **60,000 SEK** | + +### Legacy amounts (FY beginning before 2025-01-01) +- Privat AB: 5,000 + 5,000 + 10,000 = 20,000 SEK +- Publikt AB: 10,000 + 10,000 + 20,000 = 40,000 SEK + +Förseningsavgifter are **ej skattemässigt avdragsgilla**. Unpaid amounts sent to Kronofogden. + +--- + +## 4. Escalation and tvångslikvidation + +Timeline from FY end: + +| Time | Event | +|---|---| +| 7 months + 1 day | Förseningsavgift 1 | +| 9 months | Förseningsavgift 2 | +| 11 months | Förseningsavgift 3 AND Bolagsverket can issue **föreläggande om likvidation** (ABL 25:11 §) | +| After föreläggande | Company must rectify within set deadline or Bolagsverket decides on **tvångslikvidation** and appoints likvidator | +| 15 months | Board members and VD risk **personligt betalningsansvar** for company debts | + +Additionally: +- Failure to prepare årsredovisning within 6 months can constitute **bokföringsbrott** (BrB) regardless of filing +- Bolagsverket can issue **vitesförelägganden** against individual board members and VD (ÅRL 8:13 §) + +--- + +## 5. Digital filing and iXBRL + +### Availability +Digital filing available since 2018 (K2 AB) and 2019 (K3 AB). Remains **voluntary**; paper filing still accepted (post to Bolagsverket Årsredovisningar, SE-851 98 Sundsvall). + +Currently supported only for **aktiebolag using K2 or K3**. Not yet available for: handelsbolag, ekonomiska föreningar, stiftelser. + +### iXBRL technical requirements +- Format: **Inline XBRL (iXBRL) version 1.1** +- Files must be valid XHTML with embedded XBRL tags +- Extension: **.xhtml** +- Encoding: **UTF-8** +- Max size: **5 MB** +- Images: JPEG, SVG, GIF, PNG only +- No scripts allowed + +### Taxonomy +Developed by BFN, Skatteverket, Finansinspektionen, SCB, Bolagsverket, FAR. Published at **taxonomier.se**. +- K2 taxonomy: BFNAR 2016:10 K2 ÅR (published 2017-09-30) +- K3 taxonomy: BFNAR 2012:1 K3 (updated 2021-10-31) + +### Filing process +1. Software generates iXBRL file and uploads to Bolagsverket's "Eget utrymme" +2. Styrelseledamot or VD logs in with **BankID** to digitally sign fastställelseintyg +3. Årsredovisning not considered filed until fastställelseintyg is signed +4. Bolagsverket validates company name, signatory registration, etc. automatically + +--- + +## 6. Revisionsplikt gränsvärden + +Per ABL 9:1 §, a private AB may opt out of audit if it does NOT exceed **2 of 3** thresholds during **each of the two most recent FY**: + +| Criterion | Threshold | +|---|---| +| Medelantal anställda | > 3 | +| Balansomslutning | > 1,500,000 SEK | +| Nettoomsättning | > 3,000,000 SEK | + +Opt-out must be registered in bolagsordning. For parent companies, assessed at GROUP level. + +### Always-audited entities +Publika AB, börsnoterade, banks, insurance companies, SVB-bolag, advokataktiebolag, municipally owned AB. + +Thresholds unchanged since 2010. SOU 2021:60 recommended raising them but no legislative change as of April 2026. + +--- + +## 7. Filing by entity type + +| Entity type | Must file ÅR? | Filed with | Deadline | Revisionsberättelse? | Digital? | +|---|---|---|---|---|---| +| Privat AB | Always | Bolagsverket | 7 months | If revisor exists | Yes (K2/K3) | +| Publikt AB | Always | Bolagsverket | 7 months | Always | Yes (K2/K3) | +| Ekon. förening (FY 2025+) | All | Bolagsverket | 7 months | Yes (always has revisor) | Not yet | +| HB (jur. person partner) | Yes | Bolagsverket | **6 months** | If revisionsplikt | Not yet | +| Stiftelse | Yes | **Länsstyrelsen** | **6 months** | Most have revisionsplikt | Not yet |$gb$, + 'horizontal/swedish-financial-reporting', + 1, + 1 + ), + ( + 'horizontal/swedish-financial-reporting/ink2-form-logic', + 'horizontal', + 'INK2 Form Logic', + $gb$INK2 Form Logic: reference for Swedish Financial Reporting$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 2847, + '.claude\skills\swedish-financial-reporting\references\ink2-form-logic.md', + $gb$# INK2 Form Logic + +## Table of Contents +1. INK2 form structure +2. Data flow +3. INK2R field mappings (BAS → SRU → INK2) +4. INK2S skattemässiga justeringar +5. Periodiseringsfond in INK2 +6. Överavskrivningar in INK2 +7. Koncernbidrag in INK2 +8. Ränteavdragsbegränsningar (N9) +9. Common errors and traps +10. Filing deadlines + +--- + +## 1. INK2 form structure + +INK2 (Inkomstdeklaration 2, SKV 2002) has three core parts plus optional bilagor: + +### INK2 -- Huvudblanketten (main form) +Summary of taxable income. Fields 1.1-1.15. +- **1.1** Överskott of näringsverksamhet (from INK2S 4.15) +- **1.2** Underskott of näringsverksamhet (from INK2S 4.16) +- **1.4** Särskild löneskatt på pensionskostnader (rate **24.26%**) +- **1.6a** Avkastningsskatt (rate **15%**) +- **1.7-1.15** Fastighetsskatt/avgift + +### INK2R -- Räkenskapsschema +Balansräkning (fields 2.1-2.50) and resultaträkning (fields 3.1-3.27). Mirrors ÅRL structure. Auto-populated from BAS accounts via SRU coupling tables when importing SIE files. + +### INK2S -- Skattemässiga justeringar +Fields 4.1-4.22. Transforms bokfört resultat into skattemässigt resultat. These fields are **NOT auto-coupled** to BAS accounts; they require manual entry or program-specific logic. + +### Bilagor +- **N3B** -- andel i handelsbolag +- **N4** -- andelsbyte/uppskov +- **N7** -- nedsättning avkastningsskatt +- **N8** (SKV 2155) -- skogsavdrag/substansminskningsavdrag +- **N9** (SKV 2158) -- begränsning av ränteavdrag (required if deducting under EBITDA rule or transferring/receiving net interest within a group) + +--- + +## 2. Data flow + +``` +Bokföring (BAS accounts) + ↓ SRU coupling +INK2R (fields 2.x, 3.x) -- accounting figures + ↓ 3.26/3.27 (Årets resultat) +INK2S (fields 4.x) -- tax adjustments + ↓ 4.15/4.16 (Överskott/Underskott) +INK2 (fields 1.x) -- final taxable result +``` + +Specifically: INK2R 3.26/3.27 → INK2S 4.1/4.2 → adjustments → INK2S 4.15/4.16 → INK2 1.1/1.2. + +--- + +## 3. INK2R field mappings + +### Resultaträkning (key fields) + +| INK2R | Description | BAS accounts | Fältkod | +|---|---|---|---| +| 3.1 | Nettoomsättning | 30xx-37xx | 7410 | +| 3.5 | Råvaror och förnödenheter | 40xx-47xx, 4910-4929 | 7511 | +| 3.7 | Övriga externa kostnader | 50xx-69xx | 7513 | +| 3.8 | Personalkostnader | 70xx-76xx | 7514 | +| 3.9 | Av-/nedskrivningar materiella & immateriella | 77xx-78xx (exkl. 774x, 779x) | 7515 | +| 3.16 | Övriga ränteintäkter | 83xx (exkl. 837x, 838x) | 7417 | +| 3.18 | Räntekostnader | 84xx | 7522 | +| 3.19 | Lämnade koncernbidrag | 883x | 7524 | +| 3.20 | Mottagna koncernbidrag | 882x | 7419 | +| 3.21 | Återföring periodiseringsfond | 8810, 8819 | 7420 | +| 3.22 | Avsättning periodiseringsfond | 8810, 8811 | 7525 | +| 3.23 | Förändring av överavskrivningar | 885x | 7421(+)/7526(-) | +| 3.25 | Skatt på årets resultat | 89xx (exkl. 899x) | 7450 | +| 3.26 | Årets resultat, vinst → p. 4.1 | +899x | 7550 | + +### Balansräkning (key fields) + +| INK2R | Description | BAS accounts | Fältkod | +|---|---|---|---| +| 2.1 | Immateriella anläggningstillgångar | 10xx | 7201 | +| 2.3 | Byggnader och mark | 11xx | 7214 | +| 2.4 | Maskiner/inventarier | 12xx | 7215 | +| 2.7 | Andelar i koncernföretag | 131x | 7230 | +| 2.26 | Kassa/bank | 19xx | 7281 | +| 2.29 | Periodiseringsfonder | 211x-213x | 7321 | +| 2.30 | Ackumulerade överavskrivningar | 215x | 7322 | + +--- + +## 4. INK2S skattemässiga justeringar + +### The adjustment formula + +``` +Bokfört resultat (4.1 vinst / 4.2 förlust) ++ 4.3 Ej avdragsgilla kostnader +- 4.4 Avdragsgilla ej bokförda kostnader +- 4.5 Ej skattepliktiga intäkter ++ 4.6 Skattepliktiga ej bokförda intäkter +± 4.7 Avyttring av delägarrätter +± 4.8 Andel i handelsbolag +± 4.9 Skattemässig justering avskrivning byggnader/inventarier +± 4.10 Fastighetsförsäljning +± 4.11 Skogsavdrag +± 4.12 Återföring värdeminskningsavdrag +± 4.13 Övriga justeringar +- 4.14 Underskott från tidigare år += 4.15 Överskott OR 4.16 Underskott +``` + +### Punkt 4.3 -- Ej avdragsgilla kostnader (additions) +- **4.3a** = skatt på årets resultat (auto from p. 3.25, BAS 7651) +- **4.3b** = nedskrivning av finansiella tillgångar (from p. 3.17, BAS 7652). **HIGH ERROR RATE** -- almost never tax-deductible but frequently missed. +- **4.3c** = andra ej avdragsgilla (böter, skattetillägg, förseningsavgifter, gåvor, ej avdragsgill representation, BAS 7653) + +### Punkt 4.4 -- Avdragsgilla ej bokförda kostnader (deductions) +- **4.4a** = lämnade koncernbidrag not booked through P&L (e.g. via equity under K3/RFR 2, BAS 7751) +- **4.4b** = andra ej bokförda avdragsgilla kostnader (BAS 7764) + +### Punkt 4.5 -- Ej skattepliktiga intäkter (deductions) +- **4.5a** = skattefria ackordsvinster (BAS 7752) +- **4.5b** = skattefri utdelning on näringsbetingade andelar per IL 24 kap. (BAS 7753) +- **4.5c** = andra skattefria intäkter (BAS 7754) + +### Punkt 4.6 -- Skattepliktiga ej bokförda intäkter (additions) +- **4.6a** = schablonintäkt på periodiseringsfonder (statslåneräntan x summa fonder, floor 0.5%, BAS 7654). **COMMONLY FORGOTTEN** -- pure tax item, not booked. +- **4.6b** = schablonintäkt på fondandelar (0.4% of ingående värde, BAS 7668) +- **4.6c** = mottagna koncernbidrag ej bokförda via resultat (BAS 7655) +- **4.6d** = uppräknat belopp vid återföring av periodiseringsfond (106% pre-2019, 104% 2019-2020, 100% from 2021, BAS 7667) + +### Punkt 4.7 -- Avyttring delägarrätter +- **4.7a** = bokförd vinst (deducted, BAS 7755) +- **4.7b** = bokförd förlust (added, BAS 7656) +- **4.7e** = skattemässig kapitalvinst (BAS 7658) +- **4.7f** = skattemässig kapitalförlust -- the **aktiefållan** (only offsetable against future aktievinster, BAS 7757) + +### Punkt 4.14 -- Underskott från tidigare år +- **4.14a** = outnyttjat underskott from prior year (BAS 7763) +- **4.14b** = reduktion due to beloppsspärr, ackord, konkurs (BAS 7664) +- **4.14c** = koncernbidragsspärrat/fusionsspärrat underskott (BAS 7670) + +### Tilläggsupplysningar (4.17-4.22) +Värdeminskningsavdrag on byggnader/markanläggningar remaining at year-end, restvärdesavskrivning inventarier, skulder till närstående, pensionskostnader, koncernbidrags-/fusionsspärrat underskott. + +--- + +## 5. Periodiseringsfond in INK2 + +Legal reference: IL 30 kap. + +- Max avsättning: **25%** of skattemässigt överskott (30:5 §) +- Must be reversed by **6th tax year** after avsättning (30:7 §) +- Requires corresponding booking in räkenskaperna (obeskattade reserver) +- Annual schablonintäkt: statslåneräntan (30 Nov) x total fonder at year start (30:6a §), floor **0.5%** +- SLR 30 Nov 2024 = 1.96%, SLR 30 Nov 2025 = 2.55% +- Up to 6 concurrent funds +- Not available for privatbostadsföretag or investmentföretag + +### INK2 placement +- Avsättning: INK2R p. 3.22 (konto 8810/8811) +- Återföring: INK2R p. 3.21 (konto 8810/8819) +- Schablonintäkt: INK2S p. 4.6a (pure tax item, NOT booked in accounting) +- Balance: INK2R p. 2.29 (konto 211x-213x) + +--- + +## 6. Överavskrivningar in INK2 + +Legal reference: IL 18 kap. + +### Räkenskapsenlig avskrivning (requires skattemässig = bokförd, 18:14 §) +- **Huvudregeln / 30-regeln (18:13 §)**: max 30% of avskrivningsunderlag +- **Kompletteringsregeln / 20-regeln (18:17 §)**: 20% annual on anskaffningsvärde = full write-off in 5 years +- Methods combinable for different asset categories, not on same category in one year + +### Restvärdesavskrivning (alternative) +- Max **25%** of avskrivningsunderlag +- Does NOT require matching between bokförda and skattemässiga values + +### INK2 placement +- Förändring: INK2R p. 3.23 (konto 885x) +- Accumulated: INK2R p. 2.30 (konto 215x) + +--- + +## 7. Koncernbidrag in INK2 + +Legal reference: IL 35 kap. + +### Requirements (35:2-3 §§) +- >90% ownership +- Both parties skattskyldiga in Sweden +- For entire beskattningsår + +### K2 treatment (booked through resultaträkning) +- Lämnade: INK2R p. 3.19 (konto 883x) +- Mottagna: INK2R p. 3.20 (konto 882x) + +### K3/RFR 2 treatment (may be booked via equity) +- Lämnade: INK2S p. 4.4a +- Mottagna: INK2S p. 4.6c + +**TRAP**: K2/K3 difference in booking method leads to double-reporting or missing amounts if INK2R/INK2S split is handled incorrectly. + +--- + +## 8. Ränteavdragsbegränsningar (N9) + +Legal reference: IL 24:24-29 §§. + +- **EBITDA rule**: negative räntenetto limited to **30% of tax-EBITDA** (24:24 §) +- **Förenklingsregel**: **5 MSEK** negative net interest deductible without limitation +- Filing **N9** (SKV 2158) required if deducting under EBITDA rule or transferring/receiving räntenetto in a group +- Complex rules for koncernutjämning of negative räntenetto + +--- + +## 9. Common errors and traps + +### Critical errors (high risk for skattetillägg) + +1. **Nedskrivning av finansiella anläggningstillgångar not reversed at p. 4.3b.** Nedskrivningar at p. 3.17 are almost never tax-deductible but frequently missed in skattemässig justering. Often large amounts. Skatteverket ställningstagande 2022-10-27 on befrielse from skattetillägg for this error. + +2. **Aktiefållan at p. 4.7f.** Kapitalförluster on kapitalplaceringsaktier can only offset gains on similar instruments. Cannot be deducted against other income. Proper separation critical. + +3. **Glömd schablonintäkt på periodiseringsfond at p. 4.6a.** Pure tax item, no bookkeeping entry. Frequently forgotten. Must be reported annually. + +4. **Koncernbidrag K2/K3 inconsistency.** K2 flows through income statement; K3 may flow through equity. Leads to double-reporting or missing amounts if INK2R/INK2S split is wrong. + +5. **Missing SLP underlag at INK2 p. 1.4.** Companies with pension costs frequently forget to calculate and report särskild löneskatt base (24.26% rate). + +### Other common errors +- INK2R figures not matching årsredovisningen (rounding) +- Missing bilagor (INK2 without INK2R/INK2S makes declaration incomplete) +- Negative amounts in SRU files causing upload failures +- Ej avdragsgill representation not identified and added back at 4.3c +- Incorrect rollforward of underskott from prior years at 4.14 + +--- + +## 10. Filing deadlines + +### General rule +Approximately 7 months after FY end. + +### Calendar year companies (Dec 31 FY end) +Deadline: **1 augusti** (moved to next weekday if weekend/holiday). +- FY 2025: 3 augusti 2026 (1 Aug is Saturday) + +### Other FY endings + +| FY ending | Deadline | +|---|---| +| Jan-Apr 2025 | 1 december 2025 | +| May-Jun 2025 | 15 januari 2026 | +| Jul-Aug 2025 | 1 april 2026 | +| Sep-Dec 2025 | 3 augusti 2026 | + +### Consequences of late filing +- Förseningsavgift: **6,250 SEK** per instance (up to 3, max **18,750 SEK** within 1 year) +- No declaration: Skatteverket may impose **skönstaxering** + **skattetillägg** +- F-skatt godkännande may be revoked +- Kostnadsränta accrues on unpaid tax + +### Anstånd +Companies can apply for anstånd or **byråanstånd** through authorized redovisningsbyråer before deadline. + +--- + +## IL chapter reference for INK2 + +| Area | IL chapter | Key provisions | +|---|---|---| +| Periodiseringsfond | 30 kap. | 30:3 (who), 30:5 (25%), 30:6a (schablonintäkt), 30:7 (6-year reversal) | +| Räkenskapsenlig avskrivning | 18 kap. | 18:13 (30-regeln), 18:17 (20-regeln), 18:14 (bokföringsöverensstämmelse) | +| Koncernbidrag | 35 kap. | 35:2-3 (förutsättningar, >90% ägande) | +| Ränteavdragsbegränsningar | 24 kap. | 24:24 (30% EBITDA / 5 MSEK förenklingsregel) | +| Ej avdragsgilla kostnader | 9 + 16 kap. | 9:2 (gåvor), 16:1 (avdragsrätt) | +| Underskottsavdrag | 40 kap. | 40:2 (huvudregel), 40:16 (beloppsspärr) | +| Näringsbetingade andelar | 24 + 25a kap. | Skattefri utdelning och kapitalvinst |$gb$, + 'horizontal/swedish-financial-reporting', + 1, + 1 + ), + ( + 'horizontal/swedish-invoice-compliance', + 'horizontal', + 'Swedish Invoice Compliance', + $gb$Swedish invoice compliance (fakturering) reference. Covers mandatory invoice fields per ML 17 kap 24§ (2023:200), förenklad faktura, kreditfaktura/ändringsfaktura, självfakturering, Peppol BIS 3.0 e-faktura for B2G/B2B, ROT/RUT-avdrag invoicing with fakturamodellen and BAS accounts (1513, 3740), reverse charge notation per scenario (byggtjänster, EU, electronics), currency/VAT conversion, OCR/Bankgirot, autogiro, skattetillägg, and BAS mapping for AR/revenue/VAT/bad debts. Trigger on ANY Swedish invoice question, faktura validation, kreditfaktura, självfakturering, Peppol, e-faktura, ROT/RUT fakturering, omvänd betalningsskyldighet, faktureringsvaluta, OCR-nummer, ML 17 kap, fakturamodellen, or creating/validating/booking Swedish invoices. Always use over training data -- ML 2023:200 replaced ML 1994:200 on 1 July 2023, moving invoice rules from old Chapter 11 to Chapter 17.$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 2438, + '.claude\skills\swedish-invoice-compliance\SKILL.md', + $gb$--- +name: swedish-invoice-compliance +description: "Swedish invoice compliance (fakturering) reference. Covers mandatory invoice fields per ML 17 kap 24§ (2023:200), förenklad faktura, kreditfaktura/ändringsfaktura, självfakturering, Peppol BIS 3.0 e-faktura for B2G/B2B, ROT/RUT-avdrag invoicing with fakturamodellen and BAS accounts (1513, 3740), reverse charge notation per scenario (byggtjänster, EU, electronics), currency/VAT conversion, OCR/Bankgirot, autogiro, skattetillägg, and BAS mapping for AR/revenue/VAT/bad debts. Trigger on ANY Swedish invoice question, faktura validation, kreditfaktura, självfakturering, Peppol, e-faktura, ROT/RUT fakturering, omvänd betalningsskyldighet, faktureringsvaluta, OCR-nummer, ML 17 kap, fakturamodellen, or creating/validating/booking Swedish invoices. Always use over training data -- ML 2023:200 replaced ML 1994:200 on 1 July 2023, moving invoice rules from old Chapter 11 to Chapter 17." +--- + +# Swedish Invoice Compliance (Fakturering) + +## Critical: ML chapter renumbering + +**Invoicing rules moved from Chapter 11 (ML 1994:200) to Chapter 17 (ML 2023:200) on 1 July 2023.** +Every legacy reference to "ML 11 kap" maps to ML 17 kap in current law. Always cite ML (2023:200). + +## How to use this skill + +This SKILL.md contains the decision logic, quick-reference tables, and common error patterns. +For deep detail on any topic, read the corresponding section in: + +→ `references/invoice-rules.md`: Full reference (~600 lines) with all law paragraphs, BAS accounts, Peppol field mappings, ROT/RUT thresholds, reverse charge scenarios, currency conversion rules, OCR format specs, and penalty rates. + +**Table of contents for references/invoice-rules.md:** +1. Mandatory invoice fields (ML 17 kap 24§): 16 required fields table +2. Förenklad faktura: SEK 4,000 threshold, SKVFS 2024:16 +3. Time limits for issuing invoices +4. Electronic vs paper equivalence +5. Kreditfaktura / ändringsfaktura: ML 17 kap 22-23§, BAS entries +6. Självfakturering: ML 17 kap 15§, three conditions +7. Peppol / e-faktura: Lag 2018:1277, BIS 3.0 format, ML→UBL mapping, SE-R rules +8. ROT/RUT invoicing: fakturamodellen, deduction rates 2024-2026, BAS 1513 +9. Reverse charge notation: all scenarios with ML refs and momsdeklaration boxes +10. Currency handling: ML 8 kap 21-23§, exchange rate sources, BAS 3960/7960 +11. OCR / Bankgirot: format, Luhn check digit, control levels +12. Autogiro: mandate process, repayment rights +13. Penalties: skattetillägg rates, denied deductions, bokföringsbrott +14. BAS kontoplan mapping: AR, revenue, VAT, bad debts, fees, rounding + +--- + +## Quick decision trees + +### Is this invoice valid? + +``` +1. Has fakturadatum? → ML 17:24 p.1 +2. Has unique löpnummer from a series? → ML 17:24 p.2 +3. Seller's momsreg.nr (SE+10+01)? → ML 17:24 p.3 +4. Buyer's momsreg.nr (if RC or intra-EU)? → ML 17:24 p.4 +5. Full name+address, both parties? → ML 17:24 p.5 +6. Description: quantity+nature of goods/svc? → ML 17:24 p.6 +7. Delivery date (if ≠ invoice date)? → ML 17:24 p.7 +8. Tax base per rate, unit price excl VAT? → ML 17:24 p.8 +9. VAT rate stated (25/12/6%)? → ML 17:24 p.9 +10. VAT amount in SEK? → ML 17:24 p.10 +11. Special notations where required? + - Reverse charge → "Omvänd betalningsskyldighet" + - Self-billing → "Självfakturering" + - Exempt → ML/Directive reference + - Margin scheme → Scheme notation +``` + +Missing any of 1-10 = non-compliant. Missing 11 when applicable = non-compliant. + +### Can a simplified invoice be used? + +``` +Total incl. VAT ≤ SEK 4,000? + AND NOT intra-EU / distance sale / cross-border RC? + → Yes: förenklad faktura per ML 17:26-28, SKVFS 2024:16 + → No: full invoice required +``` + +### Which reverse charge scenario? + +``` +Domestic byggtjänster? + → ML 16:13, seller Box 41, buyer Box 24/30/48, accounts 3231/2614/2647 + +EU services (B2B main rule)? + → ML 16:6 + 6:33-37, buyer Box 21/30-32/48, accounts 4545/2614/2645 + +Intra-EU goods? + → ML 10:42, buyer Box 20/30-32/48, accounts 4535/2614/2645 + +Electronics >100k SEK/invoice? + → ML 16:17, same treatment as byggtjänster +``` + +### ROT or RUT invoice? + +``` +1. Company has F-skatt? → Required +2. Invoice shows arbetskostnad separately? → Required +3. Customer personnummer on invoice? → Required +4. ROT: fastighetsbeteckning included? → Required +5. Skattereduktion amount calculated correctly? + ROT: 30% of labor incl. moms (50% May-Dec 2025) + RUT: 50% of labor incl. moms +6. Combined max per person/year: + Standard: ROT 50k + RUT 75k, combined cap 75k + 2024 H2 temporary: ROT 75k + RUT 75k, separate caps +7. Customer paying electronically? → Required since 2020 +8. AR split: 1511 (customer) + 1513 (SKV) → Required +``` + +### Credit note checklist + +``` +1. Own unique fakturanummer + fakturadatum? → Required +2. Reference to original invoice number? → Required (ML 17:22-23) +3. Negative amounts with VAT per original rate? → Required +4. "Er tillgodo" instead of "Att betala"? → Convention +5. Seller reduces utgående moms this period? → Required +6. Buyer reduces ingående moms this period? → Required +``` + +--- + +## Common error patterns (high-frequency in Accounted validation) + +| Error | Consequence | Fix | +|---|---|---| +| Missing delivery date when ≠ invoice date | Buyer's VAT deduction at risk | Always populate if dates differ | +| Löpnummer gaps or duplicates | BFL 5:6 violation, audit red flag | Enforce sequential numbering in DB | +| No "Omvänd betalningsskyldighet" text on RC invoice | Buyer cannot self-assess VAT | Add text + buyer VAT ID, charge 0% VAT | +| Seller charges VAT when RC applies | Buyer CANNOT deduct the incorrectly charged VAT | Credit note required, then reissue without VAT | +| Kreditfaktura missing reference to original | Invalid credit note per ML 17:22 | Include original löpnummer | +| ROT invoice missing fastighetsbeteckning | SKV will deny claim | Require field when ROT flag is set | +| ROT/RUT not separating labor from materials | Deduction calculated on wrong base | Separate line items: arbetskostnad vs material | +| Foreign currency invoice without SEK VAT | Non-compliant per ML 17:29 | Always show VAT amount in SEK | +| VAT amount only, no tax base per rate | Incomplete per ML 17:24 p.8 | Show beskattningsunderlag per skattesats | +| Self-billing without "Självfakturering" text | Invoice invalid per ML 17:15 | Add notation | + +--- + +## BAS account quick reference + +### Accounts receivable +- **1510** Kundfordringar (main) +- **1513** Kundfordringar, delad faktura (ROT/RUT SKV portion) +- **1515** Osäkra kundfordringar +- **1519** Nedskrivning av kundfordringar (contra) + +### Revenue +- **3001/3002/3003/3004** Domestic sales 25%/12%/6%/exempt +- **3105** Export goods, **3108** EU goods +- **3231** Byggsektorn omvänd betalningsskyldighet +- **3305** Export services, **3308** EU services + +### VAT +- **2610-2615** Utgående moms 25% (domestic/RC/import) +- **2620-2624** Utgående moms 12% +- **2630-2634** Utgående moms 6% +- **2640** Ingående moms, **2645** Beräknad ingående moms utlandet +- **2647** Ingående moms omvänd betalningsskyldighet Sverige + +### Currency differences +- **3960** Valutakursvinster rörelsefordringar/-skulder +- **7960** Valutakursförluster rörelsefordringar/-skulder + +### Invoice extras +- **3540** Faktureringsavgift (25% VAT) +- **3740** Öresavrundning (no VAT) +- **3930** Påminnelseavgift (no VAT) +- **8313** Dröjsmålsränta (no VAT, financial income) + +--- + +## Peppol essentials (for Accounted e-invoice generation) + +Format: UBL 2.1 XML, profile Peppol BIS Billing 3.0. +TypeCodes: **380** = invoice, **381** = credit note, **389** = self-billing. +Swedish org ID scheme: **0007** + 10-digit orgnr. +SE validation rules: SE-R-001 (VAT ID 14 chars), SE-R-005 (F-skatt text), SE-R-006 (valid rates), SE-R-009 (Bankgiro 7-8 chars). + +Required header: `CustomizationID` + `ProfileID` (exact URNs in reference file). +Required: either `BuyerReference` (BT-10) or `OrderReference` (BT-13). + +**B2G mandatory since April 2019.** B2B voluntary; formal inquiry launched Feb 2026, report due Nov 2027. ViDA mandates cross-border B2B e-invoicing by July 2030. + +--- + +## Key law references + +| Topic | Current law | Old law | +|---|---|---| +| Invoice content | ML 17 kap 24§ (2023:200) | ML 11 kap 8§ (1994:200) | +| Simplified invoice | ML 17 kap 26-28§ | ML 11 kap 9§ | +| Credit note | ML 17 kap 22-23§ | ML 11 kap 10§ | +| Self-billing | ML 17 kap 15§ | ML 11 kap 4§ | +| Reverse charge | ML 16 kap 6-22§§ | ML 1 kap 2§ st.4 | +| Currency conversion | ML 8 kap 21-23§ | ML 7 kap 7a§ | +| E-invoice B2G | Lag (2018:1277) | - | +| ROT/RUT | HUSFL (2009:194) 6-9§§ | - | +| Invoice archiving | BFL 7 kap | - | +| Skattetillägg | SFL 49 kap | - | + +--- + +## Time-dependent parameters + +These values change. Always verify against the reference file or search current rates: + +- Förenklad faktura threshold: **SEK 4,000** (SKVFS 2024:16) +- ROT deduction %: 30% standard, 50% May-Dec 2025 +- RUT deduction %: 50% +- ROT max/person/year: 50,000 SEK (75,000 in 2024 H2) +- RUT max/person/year: 75,000 SEK +- Combined max: 75,000 SEK (separated in 2024 H2) +- Electronics RC threshold: 100,000 SEK excl. VAT per invoice +- Skattetillägg VAT: 20% (periodization: 2-5%) +- Archive retention: 7 years (BFL 7 kap) + +--- + +## Loadable references + +The reference files named above are NOT included in this body. When a question genuinely needs that depth, load the specific one on demand with `gnubok_load_skill`, and only then: + +- `references/invoice-rules.md` → `gnubok_load_skill("horizontal/swedish-invoice-compliance/invoice-rules")`: Swedish Invoice Compliance: Full Reference +$gb$, + NULL, + 5, + 1 + ), + ( + 'horizontal/swedish-invoice-compliance/invoice-rules', + 'horizontal', + 'Swedish Invoice Compliance: Full Reference', + $gb$Swedish Invoice Compliance: Full Reference: reference for Swedish Invoice Compliance$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 9048, + '.claude\skills\swedish-invoice-compliance\references\invoice-rules.md', + $gb$# Swedish Invoice Compliance: Full Reference + +## 1. Mandatory invoice fields (ML 17 kap 24§) + +A fullständig faktura must contain all fields per **17 kap 24§ ML (2023:200)**, implementing EU VAT Directive Article 226. + +| # | Field (Swedish) | Field (English) | ML ref | +|---|---|---|---| +| 1 | Fakturadatum | Invoice issue date | 17:24 p.1 | +| 2 | Löpnummer (unique sequential from one or more series) | Invoice number | 17:24 p.2 | +| 3 | Säljarens momsregistreringsnummer (SE + 10 digits + 01) | Seller VAT ID | 17:24 p.3 | +| 4 | Köparens momsregistreringsnummer (when RC or intra-EU) | Buyer VAT ID | 17:24 p.4 | +| 5 | Fullständigt namn och adress, säljare och köpare | Names and addresses | 17:24 p.5 | +| 6 | Varornas mängd och art / tjänsternas omfattning och art | Quantity and nature | 17:24 p.6 | +| 7 | Leveransdatum eller tillhandahållandedatum (if ≠ invoice date) | Delivery date | 17:24 p.7 | +| 8 | Beskattningsunderlag per skattesats, enhetspris exkl. moms, rabatter | Tax base per rate | 17:24 p.8 | +| 9 | Mervärdesskattesats (25%, 12%, or 6%) | VAT rate | 17:24 p.9 | +| 10 | Mervärdesskattebelopp | VAT amount | 17:24 p.10 | +| 11 | "Omvänd betalningsskyldighet" (if reverse charge) | RC notation | 17:24 | +| 12 | ML/Directive reference (if VAT-exempt) | Exemption ref | 17:24 | +| 13 | "Självfakturering" (if self-billing) | Self-billing text | 17:24 | +| 14 | Margin scheme notation (if applicable) | Margin scheme | 17:24 | +| 15 | Transport media details (new vehicles to EU) | Vehicle specifics | 17:24 | +| 16 | Förskottsbetalning amount (advance payment) | Advance payment | 17:17 | + +**Löpnummerserie:** Must enable detection of missing invoices. Multiple series permitted (per unit, POS, etc.). Also required by BFL 5 kap 6§. Gaps or duplicates are a compliance red flag. + +## 2. Förenklad faktura (simplified invoice) + +**ML 17 kap 26-28§**, **SKVFS 2024:16**. + +Threshold: total **≤ SEK 4,000 including VAT**. + +Also permitted when trade/technical conditions make full invoicing impractical (vending machines, fuel pumps, parking meters). + +Reduced content: date, seller ID (VAT/org number), description of goods/services, VAT amount or data to calculate it. + +**Cannot** be used for: intra-EU transactions, distance sales, cross-border reverse charge. + +## 3. Time limits for issuing invoices + +- Domestic: no hard statutory deadline; "without undue delay" per god affärssed. +- Intra-EU goods/services (main rule): **15th of month following delivery/performance** (17 kap 19§). +- Construction services: **end of second month after performance**. + +## 4. Electronic vs paper equivalence + +Electronic invoices = identical legal standing (2 kap 9-10§ ML). E-invoicing requires buyer consent (17 kap 20§). PDF by email is a legal faktura but not a structured e-faktura. Archive for **7 years** (BFL 7 kap). Since July 2024, paper originals may be destroyed immediately after digital transfer (amended 7 kap 6§ BFL). + +No specific language requirement in ML. VAT amounts must be in SEK if accounting currency is SEK. Skatteverket may request translations. + +## 5. Kreditfaktura / ändringsfaktura + +Term in ML (2023:200): **ändringsfaktura**. Business terms "kreditfaktura" and "kreditnota" remain in use. + +### When to issue + +Incorrect original, goods returned, price reduction post-invoicing, partial/full cancellation, erroneous VAT correction. + +### Governing law + +**17 kap 22-23§ ML (2023:200)**. + +### Mandatory content + +1. The specific change to the original invoice +2. Specific and unambiguous reference to the original invoice (typically löpnummer) +3. What has been changed +4. Own unique fakturanummer and fakturadatum +5. Amounts shown as negative values +6. VAT specified per momssats from the original + +Notation: "Er tillgodo" replaces "Att betala". + +When citing specific original is impractical (volume rebates): customer number + date range + description is accepted. + +### Partial credits + +Fully permitted. Must specify which items credited, partial negative amount, proportional VAT per skattesats. + +### VAT adjustment mechanics + +Seller reduces utgående moms in the credit note period. Buyer must reduce ingående moms in the same period. For felaktigt debiterad mervärdesskatt, a valid kreditfaktura is a prerequisite before seller can adjust VAT return. + +### BAS journal entries + +**Seller issuing credit note (25% example):** + +| Account | Debit | Credit | +|---|---|---| +| 3011 Försäljning tjänster 25% | X | | +| 2611 Utgående moms 25% | X | | +| 1510 Kundfordringar | | X | + +12%: 3002/2621. 6%: 3003/2631. Mirror reversal of original. + +**Buyer receiving credit note:** +Debit 2440 Leverantörsskulder, Credit purchase account (40xx), Credit 2641 Ingående moms. + +## 6. Självfakturering (self-billing) + +**ML 17 kap 15§** (old 11 kap 4§). + +### Three cumulative conditions + +1. **Pre-existing agreement (avtal i förväg).** Written recommended, oral technically sufficient. Should specify scope, transactions, format, approval, duration, termination. +2. **Approval procedure (godkännandeförfarande).** Passive approval accepted: silence within agreed timeframe = approval, provided seller can review and object. +3. **"Självfakturering" notation** on every invoice. + +Seller remains responsible for VAT reporting. Both parties archive 7 years per BFL 5 kap 11§. + +Peppol: `InvoiceTypeCode` **389**. + +## 7. Peppol / e-faktura + +### Legal framework + +**Lag (2018:1277) om elektroniska fakturor till följd av offentlig upphandling** transposed EU Directive 2014/55/EU. Mandatory for B2G since **1 April 2019**. Format: **EN 16931**, Swedish implementation = **Peppol BIS Billing 3.0**. DIGG is Sweden's Peppol Authority. Over 95% of Swedish public entities registered. + +**MDFFS 2019:1** mandates public entities to register as Peppol receivers. SFTI phased out EDIFACT ESAP 6 from recommended formats (July 2025). + +### BIS Billing 3.0 format + +UBL 2.1 XML. Current version: 3.0.20. + +Required identification strings: +```xml +urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0 +urn:fdc:peppol.eu:2017:poacc:billing:01:1.0 +``` + +Mandatory header: `cbc:ID`, `cbc:IssueDate`, `cbc:InvoiceTypeCode` (380/381/389), `cbc:DocumentCurrencyCode`, `cac:AccountingSupplierParty`, `cac:AccountingCustomerParty`, `cac:TaxTotal`, `cac:LegalMonetaryTotal`, ≥1 `cac:InvoiceLine`. Either `BuyerReference` (BT-10) or `OrderReference` (BT-13) required. + +### Sweden-specific validation rules + +| Rule | Requirement | +|---|---| +| SE-R-001 | Swedish VAT numbers must be 14 characters (SE + 10 digits + 01) | +| SE-R-005 | SE sellers must include "Godkänd för F-skatt" | +| SE-R-006 | Valid VAT rates for SE sellers: 6%, 12%, 25% with category S | +| SE-R-009 | Bankgiro Account ID: 7-8 characters | +| SE-R-011 | Bankgiro uses PaymentMeansCode=30 | +| SE-R-012 | Plusgiro uses PaymentMeansCode=30 | + +### Identifiers + +Swedish orgs: prefix **0007** + 10-digit organisationsnummer (e.g., `0007:5567321707`). +GLN: prefix **0088** + 13 digits. +VAT in UBL: `cac:PartyTaxScheme/cbc:CompanyID` = `SE556732170701`. + +### ML 17 kap → Peppol UBL field mapping + +| ML requirement | EN 16931 BT | UBL element | +|---|---|---| +| Fakturadatum | BT-2 | `cbc:IssueDate` | +| Löpnummer | BT-1 | `cbc:ID` | +| Säljarens moms-nr | BT-31 | `cac:AccountingSupplierParty/.../cbc:CompanyID` | +| Köparens moms-nr | BT-48 | `cac:AccountingCustomerParty/.../cbc:CompanyID` | +| Namn+adress (säljare) | BT-27, BT-35-39 | `cac:AccountingSupplierParty` | +| Varornas mängd+art | BT-129, BT-153 | `cac:InvoiceLine/cbc:InvoicedQuantity` + `cac:Item/cbc:Name` | +| Leveransdatum | BT-72 | `cac:InvoicePeriod/cbc:StartDate` or `cbc:TaxPointDate` (BT-7) | +| Beskattningsunderlag per skattesats | BT-116 | `cac:TaxSubtotal/cbc:TaxableAmount` | +| Momssats | BT-119 | `cac:TaxCategory/cbc:Percent` | +| Momsbelopp | BT-110 | `cac:TaxTotal/cbc:TaxAmount` | +| "Omvänd betalningsskyldighet" | BT-121 | `cbc:TaxExemptionReason` + TaxCategory code AE | +| "Självfakturering" | BT-3 | `cbc:InvoiceTypeCode` = 389 | + +### B2B e-invoicing timeline + +B2B voluntary as of April 2026. Ministry of Finance launched formal inquiry **5 February 2026**, report due **30 November 2027**. EU ViDA directive (adopted 11 March 2025) allows member states to mandate domestic B2B e-invoicing without EU approval. Mandatory cross-border B2B e-invoicing by **1 July 2030**. + +## 8. ROT/RUT invoicing + +### Fakturamodellen + +Company invoices full amount, shows ROT/RUT deduction, reduces "att betala." Customer pays reduced amount **electronically** (cash disqualified since 1 Jan 2020). Company applies to Skatteverket via "Rot och rut - företag." SKV pays company directly (~10 days). **F-skatt required** per HUSFL 6-9§§. + +### Required invoice fields + +1. Company name + F-skatt statement +2. Customer personnummer (ÅÅÅÅMMDD-XXXX) +3. Type of work performed +4. Where and when work performed +5. ROT: fastighetsbeteckning or BRF orgnr + lägenhetsnummer +6. Separate line items: arbetskostnad, materialkostnad, övriga kostnader +7. Total excl/incl moms with moms amount +8. Calculated skattereduktion amount + +### Deduction rates and caps (2024-2026) + +| Parameter | ROT | RUT | +|---|---|---| +| Standard % | 30% of labor incl. moms | 50% of labor incl. moms | +| Standard max/person/year | 50,000 SEK | 75,000 SEK | +| Standard combined max | 75,000 SEK (ROT capped at 50k within) | | +| 2024 H2 (Jul-Dec) | Max raised to 75k, caps separated, total possible 150k | | +| 2025 (12 May-31 Dec) | ROT % raised to **50%** (Betänkande 2024/25:FiU32) | 50% unchanged | +| 2026 | Standard 30%/50% rules resume | | + +### BAS journal entries + +Example: 18,000 SEK arbetskostnad = 22,500 inkl. moms (25%), ROT 30% = 6,750 SEK. + +**Invoice issued:** + +| Account | Debit | Credit | +|---|---|---| +| 1511 Kundfordringar (customer portion) | 23,875 | | +| 1513 Kundfordringar, delad faktura (SKV) | 6,750 | | +| 3010 Försäljning | | 24,500 | +| 2610 Utgående moms 25% | | 6,125 | + +Customer pays: Debit 1930, Credit 1511. +SKV pays: Debit 1930, Credit 1513. +SKV denies: Debit 1510, Credit 1513 (re-invoice customer). + +Account 1513 exists in BAS Kontoplan 1 but not Kontoplan 2. Alternative: 1600 Övriga kortfristiga fordringar. + +### Application deadline + +**31 January of the year following the payment year.** Payment date (not invoice or work date) determines tax year. + +## 9. Reverse charge notation + +### Invoice requirements + +Per **17 kap 28§ punkt 14 ML**: when buyer is liable for VAT, invoice must include notation. Three accepted forms: +- Swedish: "Omvänd betalningsskyldighet" +- English: "Reverse charge" +- Reference to ML paragraph or EU Directive article + +Invoice must include buyer's VAT number and charge **no VAT**. + +### Scenario reference + +**Domestic construction (byggtjänster), ML 16 kap 13§:** +Applies when buyer is taxable person who not only temporarily provides construction services. +Seller: Box 41. Buyer: Box 24, output VAT Box 30, input VAT Box 48. + +**EU services (B2B main rule), ML 16 kap 6§ + 6 kap 33-37§§:** +Swedish business buys services from EU seller under main rule. +Buyer: Box 21, output VAT Box 30-32, input VAT Box 48. Seller: Box 39 + periodisk sammanställning. + +**Intra-EU goods, ML 10 kap 42§:** +Text: "Unionsintern leverans" or ref to Article 138 Directive 2006/112/EC. Both VAT numbers required. +Seller: Box 35 + periodisk sammanställning. Buyer: Box 20, output VAT Box 30-32, input VAT Box 48. + +**Electronics >100k SEK, ML 16 kap 17§:** +Mobile phones, integrated circuits, game consoles, tablets, laptops when invoice excl. VAT > SEK 100,000. In effect since 1 April 2021. + +**Other:** Scrap metal/waste (16:14), CO₂ allowances (16:15), gold (16:16). Full scope: 16 kap 6-22§§. + +### BAS accounts for reverse charge + +| Account | Purpose | +|---|---| +| 2614 | Utgående moms, omvänd betalningsskyldighet 25% | +| 2624 | Utgående moms, omvänd betalningsskyldighet 12% | +| 2634 | Utgående moms, omvänd betalningsskyldighet 6% | +| 2644/2647 | Ingående moms, omvänd momsskyldighet (domestic) | +| 2645 | Beräknad ingående moms på förvärv från utlandet | +| 4610 | Byggtjänster (cost account) | +| 4535 | Varuförvärv från EU | +| 4545 | Tjänsteförvärv från EU | +| 3231 | Försäljning byggsektorn, omvänd betalningsskyldighet | +| 3048 | EU-försäljning tjänster 0% | + +## 10. Currency handling + +### Rules + +Invoicing in any currency is permitted. Per **ML 17 kap 29§**: VAT amount must be in the company's redovisningsvaluta. For SEK companies: VAT in **both invoice currency and SEK**. + +### Exchange rate sources (ML 8 kap 21-23§) + +Two permitted sources (choose one consistently): +1. Mid-rate (mittkurs) from **Nasdaq OMX Stockholm AB** (published on Riksbanken's website) +2. Latest published **ECB rate** + +Rate to use: **at time of taxable event** (delivery/supply date or advance payment date, not invoice date unless same). Continuous supplies: last delivery day of invoiced period. Two non-euro currencies via ECB: route through EUR (8 kap 22§). + +### Exchange rate differences + +No VAT impact. VAT locked at original transaction rate. Differences are P&L items only. Revalue monetary items to balance sheet date per 4 kap 13§ ÅRL and K2/K3. + +### BAS accounts + +| Account | Purpose | +|---|---| +| 3960 | Valutakursvinster, rörelsefordringar/-skulder | +| 7960 | Valutakursförluster, rörelsefordringar/-skulder | +| 8230 | Valutakursdifferenser, långfristiga fordringar | +| 8330 | Valutakursdifferenser, kortfristiga fordringar/placeringar | +| 8430 | Valutakursdifferenser, skulder (long-term loans) | + +Decision: customer receivables (1510) and supplier payables (2440) → 3960/7960. Financial instruments/loans → 8230/8330/8430. Per K3 Ch. 30: recognize in income statement in the period they arise. + +## 11. OCR / Bankgirot + +### OCR format + +2-25 digit numeric reference. Last digit = check digit via **Luhn algorithm (Modulus 10)**. Recommended length: 5-15 digits. Typically encodes invoice number and/or customer number. + +### Control levels + +| Level | Behavior | +|---|---| +| OCR 1 | Soft: warning only | +| OCR 2 | Hard: payment rejected if wrong | +| OCR 3 | Hard + variable length control | +| OCR 4 | Hard + fixed length | + +Hard control → ~100% auto-match rate. Requires bank agreement for "Bankgiro Inbetalningar" with OCR-referenskontroll. Sweden transitioning to ISO 20022 in 2026; file-initiated payments with incorrect OCR will be rejected. + +## 12. Autogiro + +Direct debit via Bankgirot. Business signs agreement with bank linking Bankgiro number. Customer grants **medgivande** (mandate) via BG600P/BG600F, internet bank, or BankID. Activation: up to 2 banking days. + +Business submits payment files to Bankgirot. Customer right to request repayment within **8 weeks** per Betaltjänstlagen if amount unknown or unreasonably high. Business must notify customers in advance of amounts and dates. + +## 13. Penalties + +### Denied VAT deductions + +Skatteverket can deny avdragsrätt when invoices lack mandatory fields per 17 kap 24-28§. Per EU case law (C-272/13): purely formal defects are correctable ("healable"). Material requirements (goods/services in VAT-liable business) are primary; formal are secondary but necessary. Missing VAT amount entirely → new corrected invoice required, deduction only from corrected invoice period. + +### Skattetillägg (SFL 49 kap) + +| Situation | Rate | +|---|---| +| Oriktig uppgift: income tax | 40% | +| Oriktig uppgift: VAT/employer contributions | 20% | +| Periodization error: income tax | 10% | +| Periodization error: VAT (≤4 months, ≤3-month periods) | 2% | +| Periodization error: VAT (annual or >4 months) | 5% | + +Deducting ingående moms on non-compliant invoices: **20% skattetillägg**. Felaktigt debiterad moms: buyer gets no deduction; 20% reduced to 1/4 if seller reported and paid. Voluntary correction before investigation normally avoids skattetillägg. + +### Criminal consequences + +BFL: all transactions require verifikationer (5 kap 7§), archived 7 years (7 kap). +Bokföringsbrott (11 kap 5§ BrB): up to 2 years, grovt 6 months-6 years. +False invoices: skattebrott (Skattebrottslagen) up to 2 years, grovt 6 months-6 years, plus potential penningtvättsbrott. + +## 14. BAS kontoplan mapping + +### Accounts receivable (15xx) + +| Account | Name | +|---|---| +| 1510 | Kundfordringar (main/group) | +| 1511 | Kundfordringar (sub / customer portion split) | +| 1512 | Belånade kundfordringar (factoring) | +| 1513 | Kundfordringar, delad faktura (ROT/RUT SKV) | +| 1515 | Osäkra kundfordringar | +| 1516 | Tvistiga kundfordringar | +| 1518 | Ej reskontraförda kundfordringar | +| 1519 | Nedskrivning av kundfordringar (contra, credit balance) | + +### Revenue (30xx-34xx) + +| Account | Name | +|---|---| +| 3001 | Försäljning Sverige 25% | +| 3002 | Försäljning Sverige 12% | +| 3003 | Försäljning Sverige 6% | +| 3004 | Försäljning Sverige momsfri | +| 3105 | Export varor utanför EU | +| 3108 | Varor till annat EU-land, momsfri | +| 3231 | Byggsektorn omvänd betalningsskyldighet | +| 3305 | Tjänster utanför EU | +| 3308 | Tjänster till annat EU-land | +| 3950 | Återvunna avskrivna kundfordringar | + +### VAT (26xx) + +| Account | Name | +|---|---| +| 2610/2611 | Utgående moms 25% | +| 2612 | Utgående moms egna uttag 25% | +| 2614 | Utgående moms omvänd skattskyldighet 25% | +| 2615 | Utgående moms import varor 25% | +| 2620/2621 | Utgående moms 12% | +| 2630/2631 | Utgående moms 6% | +| 2640 | Ingående moms (group) | +| 2645 | Beräknad ingående moms utlandet | +| 2647 | Ingående moms omvänd betalningsskyldighet Sverige | +| 2650 | Redovisningskonto moms (settlement) | + +### Bad debts flow + +1. Transfer doubtful: Debit 1515, Credit 1510 +2. Provision: Debit 6352 (befarade förluster), Credit 1519 +3. Loss confirmed: Debit 6351 (konstaterade förluster), Credit 1515; reverse provision Debit 1519 Credit 6352; recover VAT by debiting 2610/2620/2630 + +VAT recovery on bad debts permitted under **ML 7 kap 43§** when loss is konstaterad (bankruptcy, failed enforcement, acknowledged insolvency). + +### Invoice extras + +| Item | Account | VAT | +|---|---|---| +| Faktureringsavgift | 3540 | 25% VAT | +| Öresavrundning | 3740 | No VAT | +| Påminnelseavgift | 3930 | No VAT | +| Dröjsmålsränta | 8313/8310 | No VAT (financial income) |# Swedish Invoice Compliance: Full Reference + +## 1. Mandatory invoice fields (ML 17 kap 24§) + +A fullständig faktura must contain all fields per **17 kap 24§ ML (2023:200)**, implementing EU VAT Directive Article 226. + +| # | Field (Swedish) | Field (English) | ML ref | +|---|---|---|---| +| 1 | Fakturadatum | Invoice issue date | 17:24 p.1 | +| 2 | Löpnummer (unique sequential from one or more series) | Invoice number | 17:24 p.2 | +| 3 | Säljarens momsregistreringsnummer (SE + 10 digits + 01) | Seller VAT ID | 17:24 p.3 | +| 4 | Köparens momsregistreringsnummer (when RC or intra-EU) | Buyer VAT ID | 17:24 p.4 | +| 5 | Fullständigt namn och adress, säljare och köpare | Names and addresses | 17:24 p.5 | +| 6 | Varornas mängd och art / tjänsternas omfattning och art | Quantity and nature | 17:24 p.6 | +| 7 | Leveransdatum eller tillhandahållandedatum (if ≠ invoice date) | Delivery date | 17:24 p.7 | +| 8 | Beskattningsunderlag per skattesats, enhetspris exkl. moms, rabatter | Tax base per rate | 17:24 p.8 | +| 9 | Mervärdesskattesats (25%, 12%, or 6%) | VAT rate | 17:24 p.9 | +| 10 | Mervärdesskattebelopp | VAT amount | 17:24 p.10 | +| 11 | "Omvänd betalningsskyldighet" (if reverse charge) | RC notation | 17:24 | +| 12 | ML/Directive reference (if VAT-exempt) | Exemption ref | 17:24 | +| 13 | "Självfakturering" (if self-billing) | Self-billing text | 17:24 | +| 14 | Margin scheme notation (if applicable) | Margin scheme | 17:24 | +| 15 | Transport media details (new vehicles to EU) | Vehicle specifics | 17:24 | +| 16 | Förskottsbetalning amount (advance payment) | Advance payment | 17:17 | + +**Löpnummerserie:** Must enable detection of missing invoices. Multiple series permitted (per unit, POS, etc.). Also required by BFL 5 kap 6§. Gaps or duplicates are a compliance red flag. + +## 2. Förenklad faktura (simplified invoice) + +**ML 17 kap 26-28§**, **SKVFS 2024:16**. + +Threshold: total **≤ SEK 4,000 including VAT**. + +Also permitted when trade/technical conditions make full invoicing impractical (vending machines, fuel pumps, parking meters). + +Reduced content: date, seller ID (VAT/org number), description of goods/services, VAT amount or data to calculate it. + +**Cannot** be used for: intra-EU transactions, distance sales, cross-border reverse charge. + +## 3. Time limits for issuing invoices + +- Domestic: no hard statutory deadline; "without undue delay" per god affärssed. +- Intra-EU goods/services (main rule): **15th of month following delivery/performance** (17 kap 19§). +- Construction services: **end of second month after performance**. + +## 4. Electronic vs paper equivalence + +Electronic invoices = identical legal standing (2 kap 9-10§ ML). E-invoicing requires buyer consent (17 kap 20§). PDF by email is a legal faktura but not a structured e-faktura. Archive for **7 years** (BFL 7 kap). Since July 2024, paper originals may be destroyed immediately after digital transfer (amended 7 kap 6§ BFL). + +No specific language requirement in ML. VAT amounts must be in SEK if accounting currency is SEK. Skatteverket may request translations. + +## 5. Kreditfaktura / ändringsfaktura + +Term in ML (2023:200): **ändringsfaktura**. Business terms "kreditfaktura" and "kreditnota" remain in use. + +### When to issue + +Incorrect original, goods returned, price reduction post-invoicing, partial/full cancellation, erroneous VAT correction. + +### Governing law + +**17 kap 22-23§ ML (2023:200)**. + +### Mandatory content + +1. The specific change to the original invoice +2. Specific and unambiguous reference to the original invoice (typically löpnummer) +3. What has been changed +4. Own unique fakturanummer and fakturadatum +5. Amounts shown as negative values +6. VAT specified per momssats from the original + +Notation: "Er tillgodo" replaces "Att betala". + +When citing specific original is impractical (volume rebates): customer number + date range + description is accepted. + +### Partial credits + +Fully permitted. Must specify which items credited, partial negative amount, proportional VAT per skattesats. + +### VAT adjustment mechanics + +Seller reduces utgående moms in the credit note period. Buyer must reduce ingående moms in the same period. For felaktigt debiterad mervärdesskatt, a valid kreditfaktura is a prerequisite before seller can adjust VAT return. + +### BAS journal entries + +**Seller issuing credit note (25% example):** + +| Account | Debit | Credit | +|---|---|---| +| 3011 Försäljning tjänster 25% | X | | +| 2611 Utgående moms 25% | X | | +| 1510 Kundfordringar | | X | + +12%: 3002/2621. 6%: 3003/2631. Mirror reversal of original. + +**Buyer receiving credit note:** +Debit 2440 Leverantörsskulder, Credit purchase account (40xx), Credit 2641 Ingående moms. + +## 6. Självfakturering (self-billing) + +**ML 17 kap 15§** (old 11 kap 4§). + +### Three cumulative conditions + +1. **Pre-existing agreement (avtal i förväg).** Written recommended, oral technically sufficient. Should specify scope, transactions, format, approval, duration, termination. +2. **Approval procedure (godkännandeförfarande).** Passive approval accepted: silence within agreed timeframe = approval, provided seller can review and object. +3. **"Självfakturering" notation** on every invoice. + +Seller remains responsible for VAT reporting. Both parties archive 7 years per BFL 5 kap 11§. + +Peppol: `InvoiceTypeCode` **389**. + +## 7. Peppol / e-faktura + +### Legal framework + +**Lag (2018:1277) om elektroniska fakturor till följd av offentlig upphandling** transposed EU Directive 2014/55/EU. Mandatory for B2G since **1 April 2019**. Format: **EN 16931**, Swedish implementation = **Peppol BIS Billing 3.0**. DIGG is Sweden's Peppol Authority. Over 95% of Swedish public entities registered. + +**MDFFS 2019:1** mandates public entities to register as Peppol receivers. SFTI phased out EDIFACT ESAP 6 from recommended formats (July 2025). + +### BIS Billing 3.0 format + +UBL 2.1 XML. Current version: 3.0.20. + +Required identification strings: +```xml +urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0 +urn:fdc:peppol.eu:2017:poacc:billing:01:1.0 +``` + +Mandatory header: `cbc:ID`, `cbc:IssueDate`, `cbc:InvoiceTypeCode` (380/381/389), `cbc:DocumentCurrencyCode`, `cac:AccountingSupplierParty`, `cac:AccountingCustomerParty`, `cac:TaxTotal`, `cac:LegalMonetaryTotal`, ≥1 `cac:InvoiceLine`. Either `BuyerReference` (BT-10) or `OrderReference` (BT-13) required. + +### Sweden-specific validation rules + +| Rule | Requirement | +|---|---| +| SE-R-001 | Swedish VAT numbers must be 14 characters (SE + 10 digits + 01) | +| SE-R-005 | SE sellers must include "Godkänd för F-skatt" | +| SE-R-006 | Valid VAT rates for SE sellers: 6%, 12%, 25% with category S | +| SE-R-009 | Bankgiro Account ID: 7-8 characters | +| SE-R-011 | Bankgiro uses PaymentMeansCode=30 | +| SE-R-012 | Plusgiro uses PaymentMeansCode=30 | + +### Identifiers + +Swedish orgs: prefix **0007** + 10-digit organisationsnummer (e.g., `0007:5567321707`). +GLN: prefix **0088** + 13 digits. +VAT in UBL: `cac:PartyTaxScheme/cbc:CompanyID` = `SE556732170701`. + +### ML 17 kap → Peppol UBL field mapping + +| ML requirement | EN 16931 BT | UBL element | +|---|---|---| +| Fakturadatum | BT-2 | `cbc:IssueDate` | +| Löpnummer | BT-1 | `cbc:ID` | +| Säljarens moms-nr | BT-31 | `cac:AccountingSupplierParty/.../cbc:CompanyID` | +| Köparens moms-nr | BT-48 | `cac:AccountingCustomerParty/.../cbc:CompanyID` | +| Namn+adress (säljare) | BT-27, BT-35-39 | `cac:AccountingSupplierParty` | +| Varornas mängd+art | BT-129, BT-153 | `cac:InvoiceLine/cbc:InvoicedQuantity` + `cac:Item/cbc:Name` | +| Leveransdatum | BT-72 | `cac:InvoicePeriod/cbc:StartDate` or `cbc:TaxPointDate` (BT-7) | +| Beskattningsunderlag per skattesats | BT-116 | `cac:TaxSubtotal/cbc:TaxableAmount` | +| Momssats | BT-119 | `cac:TaxCategory/cbc:Percent` | +| Momsbelopp | BT-110 | `cac:TaxTotal/cbc:TaxAmount` | +| "Omvänd betalningsskyldighet" | BT-121 | `cbc:TaxExemptionReason` + TaxCategory code AE | +| "Självfakturering" | BT-3 | `cbc:InvoiceTypeCode` = 389 | + +### B2B e-invoicing timeline + +B2B voluntary as of April 2026. Ministry of Finance launched formal inquiry **5 February 2026**, report due **30 November 2027**. EU ViDA directive (adopted 11 March 2025) allows member states to mandate domestic B2B e-invoicing without EU approval. Mandatory cross-border B2B e-invoicing by **1 July 2030**. + +## 8. ROT/RUT invoicing + +### Fakturamodellen + +Company invoices full amount, shows ROT/RUT deduction, reduces "att betala." Customer pays reduced amount **electronically** (cash disqualified since 1 Jan 2020). Company applies to Skatteverket via "Rot och rut - företag." SKV pays company directly (~10 days). **F-skatt required** per HUSFL 6-9§§. + +### Required invoice fields + +1. Company name + F-skatt statement +2. Customer personnummer (ÅÅÅÅMMDD-XXXX) +3. Type of work performed +4. Where and when work performed +5. ROT: fastighetsbeteckning or BRF orgnr + lägenhetsnummer +6. Separate line items: arbetskostnad, materialkostnad, övriga kostnader +7. Total excl/incl moms with moms amount +8. Calculated skattereduktion amount + +### Deduction rates and caps (2024-2026) + +| Parameter | ROT | RUT | +|---|---|---| +| Standard % | 30% of labor incl. moms | 50% of labor incl. moms | +| Standard max/person/year | 50,000 SEK | 75,000 SEK | +| Standard combined max | 75,000 SEK (ROT capped at 50k within) | | +| 2024 H2 (Jul-Dec) | Max raised to 75k, caps separated, total possible 150k | | +| 2025 (12 May-31 Dec) | ROT % raised to **50%** (Betänkande 2024/25:FiU32) | 50% unchanged | +| 2026 | Standard 30%/50% rules resume | | + +### BAS journal entries + +Example: 18,000 SEK arbetskostnad = 22,500 inkl. moms (25%), ROT 30% = 6,750 SEK. + +**Invoice issued:** + +| Account | Debit | Credit | +|---|---|---| +| 1511 Kundfordringar (customer portion) | 23,875 | | +| 1513 Kundfordringar, delad faktura (SKV) | 6,750 | | +| 3010 Försäljning | | 24,500 | +| 2610 Utgående moms 25% | | 6,125 | + +Customer pays: Debit 1930, Credit 1511. +SKV pays: Debit 1930, Credit 1513. +SKV denies: Debit 1510, Credit 1513 (re-invoice customer). + +Account 1513 exists in BAS Kontoplan 1 but not Kontoplan 2. Alternative: 1600 Övriga kortfristiga fordringar. + +### Application deadline + +**31 January of the year following the payment year.** Payment date (not invoice or work date) determines tax year. + +## 9. Reverse charge notation + +### Invoice requirements + +Per **17 kap 28§ punkt 14 ML**: when buyer is liable for VAT, invoice must include notation. Three accepted forms: +- Swedish: "Omvänd betalningsskyldighet" +- English: "Reverse charge" +- Reference to ML paragraph or EU Directive article + +Invoice must include buyer's VAT number and charge **no VAT**. + +### Scenario reference + +**Domestic construction (byggtjänster), ML 16 kap 13§:** +Applies when buyer is taxable person who not only temporarily provides construction services. +Seller: Box 41. Buyer: Box 24, output VAT Box 30, input VAT Box 48. + +**EU services (B2B main rule), ML 16 kap 6§ + 6 kap 33-37§§:** +Swedish business buys services from EU seller under main rule. +Buyer: Box 21, output VAT Box 30-32, input VAT Box 48. Seller: Box 39 + periodisk sammanställning. + +**Intra-EU goods, ML 10 kap 42§:** +Text: "Unionsintern leverans" or ref to Article 138 Directive 2006/112/EC. Both VAT numbers required. +Seller: Box 35 + periodisk sammanställning. Buyer: Box 20, output VAT Box 30-32, input VAT Box 48. + +**Electronics >100k SEK, ML 16 kap 17§:** +Mobile phones, integrated circuits, game consoles, tablets, laptops when invoice excl. VAT > SEK 100,000. In effect since 1 April 2021. + +**Other:** Scrap metal/waste (16:14), CO₂ allowances (16:15), gold (16:16). Full scope: 16 kap 6-22§§. + +### BAS accounts for reverse charge + +| Account | Purpose | +|---|---| +| 2614 | Utgående moms, omvänd betalningsskyldighet 25% | +| 2624 | Utgående moms, omvänd betalningsskyldighet 12% | +| 2634 | Utgående moms, omvänd betalningsskyldighet 6% | +| 2644/2647 | Ingående moms, omvänd momsskyldighet (domestic) | +| 2645 | Beräknad ingående moms på förvärv från utlandet | +| 4610 | Byggtjänster (cost account) | +| 4535 | Varuförvärv från EU | +| 4545 | Tjänsteförvärv från EU | +| 3231 | Försäljning byggsektorn, omvänd betalningsskyldighet | +| 3048 | EU-försäljning tjänster 0% | + +## 10. Currency handling + +### Rules + +Invoicing in any currency is permitted. Per **ML 17 kap 29§**: VAT amount must be in the company's redovisningsvaluta. For SEK companies: VAT in **both invoice currency and SEK**. + +### Exchange rate sources (ML 8 kap 21-23§) + +Two permitted sources (choose one consistently): +1. Mid-rate (mittkurs) from **Nasdaq OMX Stockholm AB** (published on Riksbanken's website) +2. Latest published **ECB rate** + +Rate to use: **at time of taxable event** (delivery/supply date or advance payment date, not invoice date unless same). Continuous supplies: last delivery day of invoiced period. Two non-euro currencies via ECB: route through EUR (8 kap 22§). + +### Exchange rate differences + +No VAT impact. VAT locked at original transaction rate. Differences are P&L items only. Revalue monetary items to balance sheet date per 4 kap 13§ ÅRL and K2/K3. + +### BAS accounts + +| Account | Purpose | +|---|---| +| 3960 | Valutakursvinster, rörelsefordringar/-skulder | +| 7960 | Valutakursförluster, rörelsefordringar/-skulder | +| 8230 | Valutakursdifferenser, långfristiga fordringar | +| 8330 | Valutakursdifferenser, kortfristiga fordringar/placeringar | +| 8430 | Valutakursdifferenser, skulder (long-term loans) | + +Decision: customer receivables (1510) and supplier payables (2440) → 3960/7960. Financial instruments/loans → 8230/8330/8430. Per K3 Ch. 30: recognize in income statement in the period they arise. + +## 11. OCR / Bankgirot + +### OCR format + +2-25 digit numeric reference. Last digit = check digit via **Luhn algorithm (Modulus 10)**. Recommended length: 5-15 digits. Typically encodes invoice number and/or customer number. + +### Control levels + +| Level | Behavior | +|---|---| +| OCR 1 | Soft: warning only | +| OCR 2 | Hard: payment rejected if wrong | +| OCR 3 | Hard + variable length control | +| OCR 4 | Hard + fixed length | + +Hard control → ~100% auto-match rate. Requires bank agreement for "Bankgiro Inbetalningar" with OCR-referenskontroll. Sweden transitioning to ISO 20022 in 2026; file-initiated payments with incorrect OCR will be rejected. + +## 12. Autogiro + +Direct debit via Bankgirot. Business signs agreement with bank linking Bankgiro number. Customer grants **medgivande** (mandate) via BG600P/BG600F, internet bank, or BankID. Activation: up to 2 banking days. + +Business submits payment files to Bankgirot. Customer right to request repayment within **8 weeks** per Betaltjänstlagen if amount unknown or unreasonably high. Business must notify customers in advance of amounts and dates. + +## 13. Penalties + +### Denied VAT deductions + +Skatteverket can deny avdragsrätt when invoices lack mandatory fields per 17 kap 24-28§. Per EU case law (C-272/13): purely formal defects are correctable ("healable"). Material requirements (goods/services in VAT-liable business) are primary; formal are secondary but necessary. Missing VAT amount entirely → new corrected invoice required, deduction only from corrected invoice period. + +### Skattetillägg (SFL 49 kap) + +| Situation | Rate | +|---|---| +| Oriktig uppgift: income tax | 40% | +| Oriktig uppgift: VAT/employer contributions | 20% | +| Periodization error: income tax | 10% | +| Periodization error: VAT (≤4 months, ≤3-month periods) | 2% | +| Periodization error: VAT (annual or >4 months) | 5% | + +Deducting ingående moms on non-compliant invoices: **20% skattetillägg**. Felaktigt debiterad moms: buyer gets no deduction; 20% reduced to 1/4 if seller reported and paid. Voluntary correction before investigation normally avoids skattetillägg. + +### Criminal consequences + +BFL: all transactions require verifikationer (5 kap 7§), archived 7 years (7 kap). +Bokföringsbrott (11 kap 5§ BrB): up to 2 years, grovt 6 months-6 years. +False invoices: skattebrott (Skattebrottslagen) up to 2 years, grovt 6 months-6 years, plus potential penningtvättsbrott. + +## 14. BAS kontoplan mapping + +### Accounts receivable (15xx) + +| Account | Name | +|---|---| +| 1510 | Kundfordringar (main/group) | +| 1511 | Kundfordringar (sub / customer portion split) | +| 1512 | Belånade kundfordringar (factoring) | +| 1513 | Kundfordringar, delad faktura (ROT/RUT SKV) | +| 1515 | Osäkra kundfordringar | +| 1516 | Tvistiga kundfordringar | +| 1518 | Ej reskontraförda kundfordringar | +| 1519 | Nedskrivning av kundfordringar (contra, credit balance) | + +### Revenue (30xx-34xx) + +| Account | Name | +|---|---| +| 3001 | Försäljning Sverige 25% | +| 3002 | Försäljning Sverige 12% | +| 3003 | Försäljning Sverige 6% | +| 3004 | Försäljning Sverige momsfri | +| 3105 | Export varor utanför EU | +| 3108 | Varor till annat EU-land, momsfri | +| 3231 | Byggsektorn omvänd betalningsskyldighet | +| 3305 | Tjänster utanför EU | +| 3308 | Tjänster till annat EU-land | +| 3950 | Återvunna avskrivna kundfordringar | + +### VAT (26xx) + +| Account | Name | +|---|---| +| 2610/2611 | Utgående moms 25% | +| 2612 | Utgående moms egna uttag 25% | +| 2614 | Utgående moms omvänd skattskyldighet 25% | +| 2615 | Utgående moms import varor 25% | +| 2620/2621 | Utgående moms 12% | +| 2630/2631 | Utgående moms 6% | +| 2640 | Ingående moms (group) | +| 2645 | Beräknad ingående moms utlandet | +| 2647 | Ingående moms omvänd betalningsskyldighet Sverige | +| 2650 | Redovisningskonto moms (settlement) | + +### Bad debts flow + +1. Transfer doubtful: Debit 1515, Credit 1510 +2. Provision: Debit 6352 (befarade förluster), Credit 1519 +3. Loss confirmed: Debit 6351 (konstaterade förluster), Credit 1515; reverse provision Debit 1519 Credit 6352; recover VAT by debiting 2610/2620/2630 + +VAT recovery on bad debts permitted under **ML 7 kap 43§** when loss is konstaterad (bankruptcy, failed enforcement, acknowledged insolvency). + +### Invoice extras + +| Item | Account | VAT | +|---|---|---| +| Faktureringsavgift | 3540 | 25% VAT | +| Öresavrundning | 3740 | No VAT | +| Påminnelseavgift | 3930 | No VAT | +| Dröjsmålsränta | 8313/8310 | No VAT (financial income) |$gb$, + 'horizontal/swedish-invoice-compliance', + 2, + 1 + ), + ( + 'horizontal/swedish-payroll', + 'horizontal', + 'Swedish Payroll', + $gb$Swedish payroll (lön & arbetsgivaravgifter) compliance reference for developers building payroll or accounting software. Covers arbetsgivardeklaration (AGI) filing, sociala avgifter (31.42% breakdown and age reductions), skatteavdrag (tax table lookup, column system, jämkning), förmånsbeskattning (bilförmån calculation, kostförmån, friskvård, KPO), semesterlöneskuld (procentregeln 12%, sammalöneregeln, BAS 2920/7090), OB-tillägg and övertid (Arbetstidslagen limits, CBA divisors), traktamente (domestic/international rates, tremånadersregeln, meal reductions), utlägg vs kostnadsersättning (milersättning, körjournal), F-skatt vs A-skatt distinction and verification, BAS 7xxx series account mapping (7010-7699 wages, 7510 avgifter, 7321-7332 traktamente/resor), nettolöneavdrag vs bruttolöneavdrag processing order, löneväxling (1.058 factor, pension cap), and sjuklön (karensavdrag, day 2-14 at 80%, Försäkringskassan day 15+). Trigger on any mention of lön, lönehantering, payroll, arbetsgivardeklaration, AGI, arbetsgivaravgifter, skatteavdrag, skattetabell, förmånsbeskattning, bilförmån, kostförmån, friskvårdsbidrag, semesterlön, semesterlöneskuld, OB-tillägg, övertidsersättning, traktamente, milersättning, utlägg, F-skatt, A-skatt, FA-skatt, sjuklön, karensavdrag, löneväxling, bruttolöneavdrag, nettolöneavdrag, BAS 7xxx accounts, or any Swedish payroll compliance question. Also trigger when the user asks how to book salary, employer contributions, vacation pay, or sick pay in a Swedish context, or when implementing payroll calculations, AGI XML generation, or tax table lookups. This skill is a developer compliance oracle, not an end-user payroll guide.$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 2420, + '.claude\skills\swedish-payroll\SKILL.md', + $gb$--- +name: swedish-payroll +description: Swedish payroll (lön & arbetsgivaravgifter) compliance reference for developers building payroll or accounting software. Covers arbetsgivardeklaration (AGI) filing, sociala avgifter (31.42% breakdown and age reductions), skatteavdrag (tax table lookup, column system, jämkning), förmånsbeskattning (bilförmån calculation, kostförmån, friskvård, KPO), semesterlöneskuld (procentregeln 12%, sammalöneregeln, BAS 2920/7090), OB-tillägg and övertid (Arbetstidslagen limits, CBA divisors), traktamente (domestic/international rates, tremånadersregeln, meal reductions), utlägg vs kostnadsersättning (milersättning, körjournal), F-skatt vs A-skatt distinction and verification, BAS 7xxx series account mapping (7010-7699 wages, 7510 avgifter, 7321-7332 traktamente/resor), nettolöneavdrag vs bruttolöneavdrag processing order, löneväxling (1.058 factor, pension cap), and sjuklön (karensavdrag, day 2-14 at 80%, Försäkringskassan day 15+). Trigger on any mention of lön, lönehantering, payroll, arbetsgivardeklaration, AGI, arbetsgivaravgifter, skatteavdrag, skattetabell, förmånsbeskattning, bilförmån, kostförmån, friskvårdsbidrag, semesterlön, semesterlöneskuld, OB-tillägg, övertidsersättning, traktamente, milersättning, utlägg, F-skatt, A-skatt, FA-skatt, sjuklön, karensavdrag, löneväxling, bruttolöneavdrag, nettolöneavdrag, BAS 7xxx accounts, or any Swedish payroll compliance question. Also trigger when the user asks how to book salary, employer contributions, vacation pay, or sick pay in a Swedish context, or when implementing payroll calculations, AGI XML generation, or tax table lookups. This skill is a developer compliance oracle, not an end-user payroll guide. +--- + +# Swedish Payroll Compliance + +Developer-facing compliance reference for building Swedish payroll software. This skill answers questions about statutory rates, filing obligations, benefit valuations, BAS account mappings, and calculation logic so you can verify your implementation is correct. + +## How to use this skill + +This skill has a router structure. The SKILL.md contains the most critical rules and rates you need constantly. Detailed reference material lives in `references/`. Read the relevant reference file when you need depth on a specific area. + +### Reference files + +| File | When to read | +|---|---| +| `references/agi-filing.md` | Questions about arbetsgivardeklaration (AGI), XML schema, field codes (fältkoder), filing deadlines, corrections, penalties, Skatteverket API submission | +| `references/social-charges.md` | Questions about arbetsgivaravgifter component breakdown, age-based reductions, egenavgifter, växa-stöd, forskningsavdrag, youth discount, thresholds (PBB/IBB/SGI) | +| `references/tax-tables.md` | Questions about skatteavdrag, skattetabeller, column system, jämkning, sidoinkomst, statlig inkomstskatt brytpunkt, Skatteverket tax table data format | +| `references/benefits.md` | Questions about förmånsbeskattning: bilförmån (all 3 formula generations, miljöbil reductions), kostförmån, friskvård, KPO, telefon/internet, bostadsförmån | +| `references/vacation-pay.md` | Questions about semesterlön, semesterlöneskuld, procentregeln, sammalöneregeln, semestertillägg, sparade dagar, intjänandeår, BAS 2920/7090 accounting | +| `references/ob-overtime.md` | Questions about OB-tillägg, övertid, Arbetstidslagen limits, CBA divisors, mertid, kompensationsledighet | +| `references/travel-expenses.md` | Questions about traktamente (domestic/international), tremånadersregeln, meal reductions, utlägg vs kostnadsersättning, milersättning, körjournal | +| `references/f-skatt.md` | Questions about F-skatt vs A-skatt vs FA-skatt, verification workflow, employer liability, Skatteverket Företagsuppgifter API | +| `references/bas-7xxx.md` | Questions about BAS kontoplan 7xxx salary accounts, balance sheet accounts (2710/2730/2920), standard monthly journal entry flow | +| `references/deductions-lonevaxling.md` | Questions about nettolöneavdrag vs bruttolöneavdrag processing order, löneväxling (1.058 factor), pension deductibility caps | +| `references/sick-pay.md` | Questions about sjuklön, karensavdrag calculation, day 2-14 at 80%, läkarintyg, återinsjuknande, Försäkringskassan day 15+, högkostnadsskydd | + +Read multiple reference files when a question spans domains (common). + +## Core rates and rules (always in context) + +### Arbetsgivaravgifter: 31.42% + +Total rate unchanged since 2009. Calculated on full gross salary + taxable benefits with no cap. Age tiers: + +| Birth year condition | Rate | +|---|---| +| Born 1937 or earlier | 0% | +| Turned 66+ at year start (67+ from 2026) | 10.21% (only ålderspensionsavgift) | +| Standard (all others) | 31.42% | +| Temporary youth (Apr 2026 to Sep 2027) | 20.81% on salary up to 25,000 SEK/month. Eligible: vid årets ingång fyllt 18, inte 23 (i.e. age 18-22 at Jan 1; born 2003-2007 in 2026, 2004-2008 in 2027). NOT during-year age: Skatteverket rejects 23-year-olds at year start. Source: Prop. 2025/26:66 | + +No avgifter required if total annual compensation from one employer < 1,000 SEK. + +### AGI filing deadline + +12th of month following pay period (17th in Jan/Aug for turnover ≤40 MSEK). Late = 625 SEK first offense, 1,250 SEK if repeated. + +### Skatteavdrag lookup chain + +kommun → total skattesats → round to table number (29-42) → select column (1-6 by employee category) → look up gross salary bracket → withholding amount. Sidoinkomst: flat 30%. + +### Semesterlön + +Procentregeln: 12% of semesterlönegrundande income. Sammalöneregeln: regular pay + 0.43% semestertillägg per day (many CBAs use 0.8%). Intjänandeår: Apr 1 - Mar 31 by law (often calendar year via CBA). + +### Sjuklön (day 1-14) + +Karensavdrag = 20% of one week's sjuklön (80% of weekly pay). Day 2-14: 80% of lost pay. Läkarintyg from day 8. Återinsjuknande within 5 days = same period continues. + +### Traktamente (domestic) + +2024-2025: 290 SEK/hel dag. 2026: 300 SEK/hel dag. Halv dag = 50%. After 3 months same location: 70%. After 2 years: 50%. + +### Key thresholds 2025 + +| Parameter | Value | +|---|---| +| Prisbasbelopp (PBB) | 58,800 SEK | +| Inkomstbasbelopp (IBB) | 80,600 SEK | +| Max PGI (7.5 × IBB) | 604,500 SEK | +| SGI ceiling (10 × PBB) | 588,000 SEK | +| Friskvård tax-free cap | 5,000 SEK/year | +| Milersättning (own car) | 25 SEK/mil | +| Statlig skatt brytpunkt | 660,400 SEK/year (2026) | + +### BAS 7xxx quick reference + +| Range | Category | +|---|---| +| 7010-7090 | Löner kollektivanställda + semester | +| 7210-7290 | Löner tjänstemän/företagsledare + semester | +| 7321-7332 | Traktamente + bilersättningar | +| 7381-7385 | Förmåner (bostad, kost, bil) | +| 7410-7460 | Pensionskostnader | +| 7510-7533 | Arbetsgivaravgifter + SLP | +| 7571-7699 | Försäkringar + övriga personalkostnader | + +### Standard monthly journal entries + +1. Gross salary: Debit 7210 / Credit 2710 (tax) + Credit 1930 (net pay) +2. Employer avgifter: Debit 7510 / Credit 2730 +3. Vacation accrual: Debit 7290 / Credit 2920 +4. Avgifter on accrual: Debit 7519 / Credit 2940 +5. Pension premiums: Debit 7410 / Credit 2440/2740 +6. SLP on pensions: Debit 7533 / Credit 2514 + +### Processing order for gross-to-net + +bruttolöneavdrag → förmånsvärden (reduced by nettolöneavdrag) → tax base → skattetabell lookup → net pay → nettolöneavdrag → utbetalat belopp. Arbetsgivaravgifter calculated on gross after bruttolöneavdrag but before nettolöneavdrag. + +### Löneväxling factor + +For every 1 SEK salary reduction: pension contribution = 1.058 SEK. Flag if post-reduction salary drops below ~54,204 SEK/month (8.07 × IBB / 12 for 2025). + +### F-skatt verification + +A-skatt: withhold tax + pay avgifter. F-skatt: neither. FA-skatt: split. No F-skatt stated: withhold 30% + full avgifter. Verify via Skatteverket before first payment. + +## Rate update schedule + +Rates shift annually with PBB, IBB, and SLR. Subscribe to Skatteverket's annual publications each December. Bilförmån formulas use SLR from November 30 of prior year (floor 0.50%). Kostförmån tied to PBB. Traktamente normalbelopp published annually. + +--- + +## Loadable references + +The reference files named above are NOT included in this body. When a question genuinely needs that depth, load the specific one on demand with `gnubok_load_skill`, and only then: + +- `references/agi-filing.md` → `gnubok_load_skill("horizontal/swedish-payroll/agi-filing")`: Arbetsgivardeklaration (AGI) Filing +- `references/bas-7xxx.md` → `gnubok_load_skill("horizontal/swedish-payroll/bas-7xxx")`: BAS Kontoplan 7xxx: Salary Account Mapping +- `references/benefits.md` → `gnubok_load_skill("horizontal/swedish-payroll/benefits")`: Förmånsbeskattning (Benefit Taxation) +- `references/deductions-lonevaxling.md` → `gnubok_load_skill("horizontal/swedish-payroll/deductions-lonevaxling")`: Nettolöneavdrag vs Bruttolöneavdrag and Löneväxling +- `references/f-skatt.md` → `gnubok_load_skill("horizontal/swedish-payroll/f-skatt")`: F-skatt vs A-skatt +- `references/ob-overtime.md` → `gnubok_load_skill("horizontal/swedish-payroll/ob-overtime")`: OB-tillägg and Övertid (Unsocial Hours and Overtime) +- `references/sick-pay.md` → `gnubok_load_skill("horizontal/swedish-payroll/sick-pay")`: Sjuklön (Sick Pay) +- `references/social-charges.md` → `gnubok_load_skill("horizontal/swedish-payroll/social-charges")`: Sociala avgifter (Arbetsgivaravgifter) +- `references/tax-tables.md` → `gnubok_load_skill("horizontal/swedish-payroll/tax-tables")`: Skatteavdrag (Tax Tables) +- `references/travel-expenses.md` → `gnubok_load_skill("horizontal/swedish-payroll/travel-expenses")`: Traktamente and Utlägg +- `references/vacation-pay.md` → `gnubok_load_skill("horizontal/swedish-payroll/vacation-pay")`: Semesterlöneskuld (Vacation Pay) +$gb$, + NULL, + 4, + 1 + ), + ( + 'horizontal/swedish-payroll/agi-filing', + 'horizontal', + 'Arbetsgivardeklaration (AGI) Filing', + $gb$Arbetsgivardeklaration (AGI) Filing: reference for Swedish Payroll$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 641, + '.claude\skills\swedish-payroll\references\agi-filing.md', + $gb$# Arbetsgivardeklaration (AGI) Filing + +## Overview + +Since January 2019, every Swedish employer must file a monthly AGI reporting gross pay, withheld tax, benefits, and employer contributions per individual employee (individuppgift) to Skatteverket. + +The declaration has two parts: a huvuduppgift (aggregate employer-level totals) and one individuppgift per compensated person. + +From January 2025, AGI also includes frånvarouppgifter (parental leave absence data forwarded to Försäkringskassan). + +## Filing deadlines + +Standard deadline: 12th of the month following the pay period. If the 12th falls on a weekend or holiday, the deadline shifts to the next business day. + +Exceptions: +- January and August: deadline shifts to the 17th for companies with turnover ≤40 MSEK +- Companies with turnover >40 MSEK: file by the 26th (payment still due by the 12th/17th) + +## Key field codes per employee (individuppgift) + +| Field code | Content | +|---|---| +| FK215 | Employee's personnummer/samordningsnummer | +| FK570 | Specifikationsnummer (unique per employee per period, must stay consistent for corrections) | +| Ruta 011 | Kontant bruttolön (gross cash salary) | +| Ruta 001 | Avdragen skatt (withheld preliminary tax) | +| Rutor 012-019 | Benefit values by type (bil, bostad, kost, drivmedel, etc.) | +| Ruta 020 | Underlag för arbetsgivaravgifter | +| Ruta 131 | Payments to F-skatt holders not subject to social charges | +| FK821-FK827 | Absence reporting fields (from 2025) | + +## XML schema and electronic submission + +Skatteverket publishes a Teknisk beskrivning (currently v1.1.18.1) defining the XML file structure, validation rules, and field codes. + +Three submission paths: +1. Manual entry in Skatteverket's e-tjänst +2. XML file upload via the same portal +3. API integration through Skatteverket's Utvecklarportal using OAuth2/REST with signed agreements and API keys + +A testtjänst (sandbox) is available for XML validation without e-legitimation. + +## Corrections + +Corrections require resubmitting a complete AGI for the same period with the same specifikationsnummer. If you use a different specifikationsnummer, Skatteverket treats it as an additional record rather than a replacement. This is the most common developer mistake. + +## Penalties for late filing + +| Situation | Förseningsavgift | +|---|---| +| First late filing | 625 SEK | +| After föreläggande, or late ≥1 of last 3 periods | 1,250 SEK | + +Persistent non-filing triggers skönsbeskattning (estimated assessment) and potential F-skatt revocation. Penalties are not tax-deductible (book to account 6992).$gb$, + 'horizontal/swedish-payroll', + 1, + 1 + ), + ( + 'horizontal/swedish-payroll/bas-7xxx', + 'horizontal', + 'BAS Kontoplan 7xxx: Salary Account Mapping', + $gb$BAS Kontoplan 7xxx: Salary Account Mapping: reference for Swedish Payroll$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 824, + '.claude\skills\swedish-payroll\references\bas-7xxx.md', + $gb$# BAS Kontoplan 7xxx: Salary Account Mapping + +## 70xx: Löner till kollektivanställda + +| Account | Name | +|---|---| +| 7010 | Löner till kollektivanställda | +| 7012 | Vinstandelar till kollektivanställda | +| 7013 | Lön växa-stöd kollektivanställda 10,21% | +| 7017 | Avgångsvederlag till kollektivanställda | +| 7018 | Bruttolöneavdrag, kollektivanställda | +| 7081 | Sjuklöner till kollektivanställda | +| 7082 | Semesterlöner till kollektivanställda | +| 7083 | Föräldraersättning till kollektivanställda | +| 7090 | Förändring av semesterlöneskuld | + +## 72xx: Löner till tjänstemän och företagsledare + +| Account | Name | +|---|---| +| 7210 | Löner till tjänstemän | +| 7213 | Lön växa-stöd tjänstemän 10,21% | +| 7218 | Bruttolöneavdrag, tjänstemän | +| 7220 | Löner till företagsledare | +| 7222 | Tantiem till företagsledare | +| 7240 | Styrelsearvoden | +| 7281 | Sjuklöner till tjänstemän | +| 7285 | Semesterlöner till tjänstemän | +| 7290 | Förändring av semesterlöneskuld (tjänstemän) | + +## 73xx: Kostnadsersättningar och förmåner + +| Account | Name | +|---|---| +| 7321 | Skattefria traktamenten, Sverige | +| 7322 | Skattepliktiga traktamenten, Sverige | +| 7323 | Skattefria traktamenten, utlandet | +| 7324 | Skattepliktiga traktamenten, utlandet | +| 7331 | Skattefria bilersättningar | +| 7332 | Skattepliktiga bilersättningar | +| 7381 | Kostnader för fri bostad | +| 7382 | Kostnader för fria eller subventionerade måltider | +| 7385 | Kostnader för fri bil | + +## 74xx: Pensionskostnader + +| Account | Name | +|---|---| +| 7410 | Pensionsförsäkringspremier | +| 7411 | Premier för kollektiva pensionsförsäkringar (ITP, SAF-LO) | +| 7412 | Premier för individuella pensionsförsäkringar | +| 7460 | Pensionsutbetalningar | + +## 75xx: Sociala avgifter + +| Account | Name | +|---|---| +| 7510 | Arbetsgivaravgifter 31,42% | +| 7511 | Arbetsgivaravgifter för löner och ersättningar | +| 7512 | Arbetsgivaravgifter för förmånsvärden | +| 7518 | Arbetsgivaravgifter på bruttolöneavdrag | +| 7519 | Arbetsgivaravgifter för semester- och löneskulder | +| 7533 | Särskild löneskatt pensionskostnader (24,26%) | +| 7571 | Arbetsmarknadsförsäkringar (FORA/AFA) | +| 7581 | Grupplivförsäkringspremier (TGL) | + +## 76xx: Övriga personalkostnader + +| Account | Name | +|---|---| +| 7610 | Utbildning | +| 7621 | Sjuk- och hälsovård, avdragsgill | +| 7631 | Personalrepresentation, avdragsgill | +| 7650 | Sjuklöneförsäkring | +| 7699 | Övriga personalkostnader (friskvårdsbidrag booked here) | + +## Critical balance sheet accounts + +| Account | Name | Purpose | +|---|---|---| +| 2710 | Personalskatt | Tax withholding liability | +| 2730 | Lagstadgade sociala avgifter | Employer contribution liability | +| 2820/2821 | Löneskulder | Net pay liability | +| 2920 | Upplupna semesterlöner | Vacation pay liability | +| 2940/2941 | Upplupna lagstadgade sociala avgifter | Social charges on vacation liability | +| 1630 | Avräkning skatter och avgifter | Tax account at Skatteverket | + +## Standard monthly journal entry flow + +1. Gross salary: Debit 7210 / Credit 2710 (tax withheld) + Credit 1930 (net pay) +2. Employer social charges: Debit 7510 / Credit 2730 +3. Vacation accrual: Debit 7290 / Credit 2920 +4. Social charges on accrual: Debit 7519 / Credit 2940 +5. Pension premiums: Debit 7410 / Credit 2440 or 2740 +6. SLP on pensions: Debit 7533 / Credit 2514$gb$, + 'horizontal/swedish-payroll', + 1, + 1 + ), + ( + 'horizontal/swedish-payroll/benefits', + 'horizontal', + 'Förmånsbeskattning (Benefit Taxation)', + $gb$Förmånsbeskattning (Benefit Taxation): reference for Swedish Payroll$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 715, + '.claude\skills\swedish-payroll\references\benefits.md', + $gb$# Förmånsbeskattning (Benefit Taxation) + +## Bilförmån: three formula generations + +The company car benefit formula depends on when the car became taxable (skattepliktigt per vägtrafikskattelagen). + +### Generation 3 (cars taxable ≥ July 1, 2021) + +``` +Förmånsvärde = (0.29 × PBB) + (nybilspris × (70% × SLR + 1%)) + (13% × nybilspris) + fordonsskatt +``` + +### Generation 2 (July 2018 - June 2021) + +Same structure but uses 75% × SLR instead of 70%, and the prisrelaterat belopp is 9% up to 7.5 × PBB, then 20% above that threshold. + +### Generation 1 (before July 2018) + +Uses 0.317 × PBB for the prisbasbeloppsdel, same 75% × SLR factor, same two-tier prisrelaterat belopp, and fordonsskatt is not a separate component. + +### SLR (statslåneränta) + +Read on November 30 of the prior year (floor 0.50%): +- 2024: 2.62% +- 2025: 1.96% +- 2026: 2.55% + +### Nybilspris + +Set per model in Skatteverket's billistor, not the actual purchase price. For cars ≥6 years old, minimum nybilspris = 4 × PBB. + +### 3,000-mil rule + +Reduces the fixed portion by 25% if the employee drives ≥30,000 km/year for work. + +### Miljöbil reductions (cars taxable ≥ July 2022) + +| Type | Reduction | Cap | +|---|---|---| +| Elbil/vätgas | 350,000 SEK off nybilspris | 50% of nybilspris | +| Laddhybrid | 140,000 SEK off nybilspris | 50% of nybilspris | +| Gasbil | 100,000 SEK off nybilspris | 50% of nybilspris | + +## Kostförmån + +Schablonvärden tied to PBB: hel dag = 0.52% × PBB (rounded to nearest 5 SEK), lunch/middag = 40% of hel dag, frukost = 20%. + +| Year | Hel dag | Lunch/Middag | Frukost | +|---|---|---|---| +| 2024 | 300 SEK | 120 SEK | 60 SEK | +| 2025 | 305 SEK | 122 SEK | 61 SEK | +| 2026 | 310 SEK | 124 SEK | 62 SEK | + +If the employee pays ≥ schablonvärde via nettolöneavdrag, no taxable benefit arises. + +## Friskvårdsbidrag + +Tax-free up to 5,000 SEK per employee per year (including moms). If exceeded, the entire amount becomes taxable (not just the excess). Must be offered to all employees on equal terms. Non-motion activities (massage, acupuncture) qualify only if ≤1,000 SEK per occasion. Unchanged for 2024-2026. + +Book to account 7699. + +## Kvalificerade personaloptioner (KPO) + +Under the qualified employee stock option regime (11a kap. IL): no tax at grant or exercise, no arbetsgivaravgifter. Tax deferred to share disposal as capital gains at 30%. + +Requirements: +- Company ≤10 years old +- <150 employees +- ≤280 MSEK revenue/balance +- Intjänandetid ≥3 years +- Employee works ≥30 hrs/week +- Compensation ≥13 IBB during vesting period + +## Telefon/internet + +No fixed schablonvärde. Private use of employer-provided phone/internet is tax-free if: +- The subscription has a flat fee (cannot separate private use) +- Is of väsentlig betydelse for the employee's work +- The private benefit is of limited value + +Extra per-use charges (international calls, premium services) are always taxable.$gb$, + 'horizontal/swedish-payroll', + 1, + 1 + ), + ( + 'horizontal/swedish-payroll/deductions-lonevaxling', + 'horizontal', + 'Nettolöneavdrag vs Bruttolöneavdrag and Löneväxling', + $gb$Nettolöneavdrag vs Bruttolöneavdrag and Löneväxling: reference for Swedish Payroll$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 524, + '.claude\skills\swedish-payroll\references\deductions-lonevaxling.md', + $gb$# Nettolöneavdrag vs Bruttolöneavdrag and Löneväxling + +## Bruttolöneavdrag + +Reduces gross salary before tax. Effects: +- Lowers taxable income +- Lowers arbetsgivaravgifter +- Lowers preliminary tax +- Lowers PGI (future pension) +- Lowers SGI (sickness benefit base) +- Does NOT reduce any förmånsvärde + +Primary use case: löneväxling till pension. Can only apply to future earnings (never retroactive). + +## Nettolöneavdrag + +Deducts from net salary after tax has been calculated. Effects: +- Does NOT affect taxable income, arbetsgivaravgifter, PGI, or SGI +- DOES reduce the taxable förmånsvärde if the deduction constitutes payment for a specific benefit + +Common uses: bilförmån co-payment, parking, lunch subsidies, benefit platform selections. + +## Processing order (critical) + +1. Apply bruttolöneavdrag +2. Calculate förmånsvärden (reduced by nettolöneavdrag if applicable) +3. Determine tax base +4. Look up tax via skattetabell +5. Compute net pay +6. Apply nettolöneavdrag +7. Arrive at utbetalat belopp + +Arbetsgivaravgifter are calculated on gross after bruttolöneavdrag but before any nettolöneavdrag. + +## Löneväxling till pension + +Employee reduces gross salary; employer pays equivalent plus bonus into tjänstepension. The bonus derives from the tax differential: arbetsgivaravgifter at 31.42% on salary vs SLP at 24.26% on pension contributions. + +### The 1.058 factor + +For every 1 SEK salary reduction, standard pension contribution = 1.058 SEK (5.8% bonus = employer's saving passed to employee). + +``` +pension_contribution = löneväxling_amount × 1.058 +new_gross = original_gross - löneväxling_amount +employer_cost_on_salary = new_gross × 0.3142 +SLP_on_pension = pension_contribution × 0.2426 +``` + +### Thresholds to flag + +If post-löneväxling salary drops below 8.07 × IBB / 12 (2025: ~54,204 SEK/month), the employee loses pension accrual in allmänna pensionssystemet. Löneväxling also reduces SGI. Software should flag when post-reduction salary approaches this floor. + +### Employer pension deductibility cap + +35% of pensionsmedförande lön or 10 × PBB/year (2025: 588,000 SEK), whichever is lower.$gb$, + 'horizontal/swedish-payroll', + 1, + 1 + ), + ( + 'horizontal/swedish-payroll/f-skatt', + 'horizontal', + 'F-skatt vs A-skatt', + $gb$F-skatt vs A-skatt: reference for Swedish Payroll$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 304, + '.claude\skills\swedish-payroll\references\f-skatt.md', + $gb$# F-skatt vs A-skatt + +## Employer obligations by recipient status + +| Recipient status | Withhold tax? | Pay arbetsgivaravgifter? | +|---|---|---| +| A-skatt (employee) | Yes, per skattetabell | Yes, 31.42% | +| F-skatt (contractor) | No | No | +| FA-skatt (employment portion) | Yes, on salary | Yes, on salary | +| No F-skatt stated | Yes, must withhold 30% | Yes, full contributions | + +## Liability + +If an employer pays someone without F-skatt and fails to withhold tax, the employer becomes personally liable for both the missing tax and arbetsgivaravgifter. + +## Verification + +Currently via Skatteverket's "Hämta företagsinformation" e-tjänst (manual lookup by organisationsnummer). A programmatic Företagsuppgifter API is under development on the Utvecklarportal but not yet fully launched. + +### Implementation requirements +- Mandatory verification workflow before first payment to any contractor +- Store verification date and result +- Re-verify periodically + +## FA-skatt + +Applies to individuals with both employment and business income. The employer handles A-skatt + avgifter on the salary portion; the individual handles F-skatt + egenavgifter on business income. Juridiska personer (AB, HB) cannot have FA-skatt.$gb$, + 'horizontal/swedish-payroll', + 1, + 1 + ), + ( + 'horizontal/swedish-payroll/ob-overtime', + 'horizontal', + 'OB-tillägg and Övertid (Unsocial Hours and Overtime)', + $gb$OB-tillägg and Övertid (Unsocial Hours and Overtime): reference for Swedish Payroll$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1286, + '.claude\skills\swedish-payroll\references\ob-overtime.md', + $gb$# OB-tillägg and Övertid (Unsocial Hours and Overtime) + +## OB-tillägg is contractual, not statutory + +No Swedish law sets OB rates. OB-tillägg (obekväm arbetstid) comes from kollektivavtal or the individual employment contract. Arbetstidslagen (1982:673) limits WHEN and HOW MUCH people may work; it says nothing about premium pay. A company without a CBA has no OB obligation unless its contracts create one, so payroll software must treat every rate, window, and divisor as configuration, never as a statutory constant. + +### Common CBA window shapes (examples, always agreement-specific) + +| Window | Typical span | Item type | +|---|---|---| +| Vardag kväll | weekday 18:00-22:00 (some CBAs 19:00-22:00) | ob_weekday_evening | +| Natt | 22:00-06:00 (wraps midnight) | ob_night | +| Helg | Fri/Sat evening through Sun 24:00 | ob_weekend | +| Helgdag/storhelg | actual public holidays, highest rates | ob_holiday | + +### Common CBA formula shapes + +Two families, both agreement-specific: + +- Percent of hourly wage: OB hour paid at base hourly rate × premium percent (e.g. 20%, 50%, 70%, 100%). +- Monthly-salary divisors: OB hour paid at månadslön / divisor. Divisors like 600, 400, 300, 150 appear in white-collar CBAs, with smaller divisors (higher pay) for nights, weekends, and storhelg. These are CBA figures, not law: never hard-code them. + +## Övertid vs mertid + +- Övertid: time beyond ordinary full-time hours. CBAs commonly distinguish enkel övertid (weekday daytime, often ~50% premium or månadslön/94 per hour) from kvalificerad övertid (nights/weekends/holidays, often ~100% premium or månadslön/72 per hour). Divisor values vary by agreement. +- Mertid: a part-time employee's hours up to the full-time ordinary schedule. Usually plain hourly pay, sometimes a small premium; becomes övertid only past full-time hours. +- Kompensationsledighet: CBAs may allow overtime to be compensated as time off (commonly 1.5 or 2 hours per overtime hour) instead of pay. +- Contracted-away overtime: managers and salaried staff often trade övertidsersättning for higher salary and/or extra vacation days; then no overtime lines are generated at all. + +## Arbetstidslagen (1982:673) limits + +Limits govern hours, not pay; exceeding them is a sanction issue (sanktionsavgift via Arbetsmiljöverket), but payroll should be able to surface them: + +- Ordinary working time: max 40 h/week on average (5 §). +- Allmän övertid: max 200 h/calendar year, and max 48 h per 4-week period or 50 h per calendar month (8 §). +- Extra övertid: up to 150 h/year more when special reasons exist (8 a §). +- Allmän mertid: max 200 h/calendar year for part-time employees (10 §). +- Dygnsvila: 11 consecutive hours per 24-hour period; night rest should include 24:00-05:00 (13 §). +- Veckovila: 36 consecutive hours per 7-day period (14 §). +- EU Working Time Directive backstop: max 48 h/week average over 4 months, total time including overtime. + +ATL is semi-dispositive: CBAs may deviate from most limits, but only within the EU directive's frame. + +## How this codebase's engine models premiums + +`lib/salary/shift-premium-engine.ts` turns worked days plus configured rules into salary line items: + +- A rule = day_of_week set + start/end time window + premium_percent + item_type + priority. Windows with end <= start wrap past midnight (22:00-06:00 covers both halves). +- Item types: `overtime_50`, `overtime_100`, `ob_weekday_evening`, `ob_weekend`, `ob_night`, `ob_holiday`. +- `ob_holiday` rules fire only when the worked date is an actual Swedish public holiday (calendar-driven via `isSwedishHolidayISO`); a regular Sunday is not a helgdag, a midweek Midsommarafton is. +- Every worked minute is awarded to exactly one rule: highest priority wins, ties broken by higher premium_percent, so totals never double-count. +- Amount per line = base hourly rate × hours × premium_percent / 100, rounded per the monetary rule (`Math.round(x * 100) / 100`). +- Worked-day rows without explicit start_time/end_time fall back to an assumed 08:00-17:00 shift, so pure-night or pure-weekend rules never match legacy hours-only rows. Exact shift windows are required for correct night/weekend OB. + +## Payroll treatment + +OB-tillägg and övertidsersättning are ordinary kontant bruttolön: + +- Subject to skatteavdrag (part of the tax-table lookup base) and arbetsgivaravgifter. +- Semesterlönegrundande (raises semesterlön under procentregeln) and sjuklönegrundande (day 2-14 sjuklön includes lost shift premiums). +- PGI-grundande like any cash wage. +- AGI: reported inside kontant bruttolön (FK011) on the individual statement; there is no separate fältkod for OB or övertid. + +## BAS accounts + +Booked on the same wage account as base salary and differentiated by line text on the verifikat and payslip (this codebase maps all premium item types to the base wage account): + +| Account | Purpose | +|---|---| +| 7010 | Löner kollektivanställda (incl. OB and overtime premiums) | +| 7210 | Löner tjänstemän (incl. OB and overtime premiums, engine default) | +| 2710 | Personalskatt (withholding on the full gross incl. premiums) | +| 2730 | Lagstadgade sociala avgifter (on the full gross incl. premiums) | +$gb$, + 'horizontal/swedish-payroll', + 2, + 1 + ), + ( + 'horizontal/swedish-payroll/sick-pay', + 'horizontal', + 'Sjuklön (Sick Pay)', + $gb$Sjuklön (Sick Pay): reference for Swedish Payroll$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 477, + '.claude\skills\swedish-payroll\references\sick-pay.md', + $gb$# Sjuklön (Sick Pay) + +## The 14-day employer obligation + +Under Sjuklönelagen, the employer pays sick pay for the first 14 calendar days of each sjuklöneperiod. + +## Karensavdrag (day 1) + +Replaces the old karensdag system (since 2019). Equals 20% of one average week's sjuklön: + +``` +average_weekly_pay = (monthly_salary × 12) / 52 +weekly_sjuklön = average_weekly_pay × 0.80 +karensavdrag = weekly_sjuklön × 0.20 +``` + +For a 30,000 SEK/month employee at 40 hrs/week: karensavdrag ≈ 1,108 SEK. + +Only one karensavdrag per sjuklöneperiod. The allmänt högriskskydd limits karensavdrag to maximum 10 per rolling 12-month period. After 10, no further deductions. + +## Day 2-14: 80% of lost pay + +Sjuklön = 80% of the salary and anställningsförmåner the employee loses due to sickness, calculated per scheduled work hour. Includes regular salary, shift supplements, and scheduled overtime premiums. + +### Läkarintyg (medical certificate) + +Required from day 8. The employer may require it from day 1 (förstadagsintyg) with written, time-limited justification. + +## Återinsjuknande + +If the employee falls sick again within 5 calendar days, the same sjuklöneperiod continues (no new karensavdrag). The remaining days of the original 14-day period are used. + +## Day 15+: Försäkringskassan + +The employer must report to Försäkringskassan within 7 calendar days after the sjuklöneperiod ends. + +Sjukpenning rates: +- ~80% of SGI up to ceiling (10 × PBB, max ~1,284 SEK/day in 2025) +- Up to 364 days within a 450-day frame +- Then 75% (fortsättningsnivå) + +## Högkostnadsskydd + +Abolished July 1, 2024 for general employers. Särskilt högriskskydd (for chronically ill employees) remains: Försäkringskassan reimburses the employer's sjuklönekostnader plus arbetsgivaravgifter. + +## BAS accounts + +| Account | Purpose | +|---|---| +| 7081 | Sjuklöner till kollektivanställda | +| 7281 | Sjuklöner till tjänstemän | +| 7650 | Sjuklöneförsäkring |$gb$, + 'horizontal/swedish-payroll', + 1, + 1 + ), + ( + 'horizontal/swedish-payroll/social-charges', + 'horizontal', + 'Sociala avgifter (Arbetsgivaravgifter)', + $gb$Sociala avgifter (Arbetsgivaravgifter): reference for Swedish Payroll$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 705, + '.claude\skills\swedish-payroll\references\social-charges.md', + $gb$# Sociala avgifter (Arbetsgivaravgifter) + +## Component breakdown + +Total: 31.42% (unchanged since 2009). Calculated on full gross with no cap. + +| Component | 2024-2025 | 2026 | +|---|---|---| +| Ålderspensionsavgift | 10.21% | 10.21% | +| Sjukförsäkringsavgift | 3.55% | 3.55% | +| Föräldraförsäkringsavgift | 2.60% | 2.00% | +| Efterlevandepensionsavgift | 0.60% | 0.30% | +| Arbetsmarknadsavgift | 2.64% | 2.64% | +| Arbetsskadeavgift | 0.20% | 0.10% | +| Allmän löneavgift | 11.62% | 12.62% | +| **Total** | **31.42%** | **31.42%** | + +## Age-based reductions + +Check each employee's birth year against calendar year: + +- Born 1937 or earlier: 0% (no avgifter) +- Turned 66 at year's start (born ≤1958 for 2024, ≤1959 for 2025; threshold rises to 67 in 2026): only ålderspensionsavgift = 10.21% +- Youth discount: abolished January 1, 2024 +- New temporary reduction (Apr 1, 2026 to Sep 30, 2027): 20.81% on salary up to 25,000 SEK/month per individual per calendar month. Eligibility: at årets ingång (1 Jan) the employee must have **turned 18 but NOT turned 23**: i.e. ages 18-22 at year start (born 2003-2007 for tax year 2026, 2004-2008 for 2027). Statutory wording: *"personer som vid årets ingång har fyllt 18 men inte 23 år"* (Prop. 2025/26:66 / Lag om särskild beräkning av arbetsgivaravgifter och allmän löneavgift för personer som vid årets ingång har fyllt 18 men inte 23 år). The Riksdag betänkande title "19-23-åringar" describes the during-year age and is NOT the eligibility test: Skatteverket's AGI validator rejects 23-year-olds at year start. + +No avgifter required if total annual compensation from a single employer < 1,000 SEK. + +## Egenavgifter for sole proprietors + +Sole proprietors (enskild firma) pay egenavgifter of 28.97% on business surplus instead of arbetsgivaravgifter. + +Key differences from arbetsgivaravgifter: +- Arbetsmarknadsavgift drops to 0.10% (from 2.64%) +- Sjukförsäkringsavgift varies by chosen karens days (default 7 days = 3.64%) + +7.5% reduction applies on income up to 200,000 SEK/year (max 15,000 SEK saving) for active businesses with surplus >40,000 SEK. + +Passive businesses pay särskild löneskatt at 24.26% instead. + +## Key thresholds + +| Parameter | 2024 | 2025 | +|---|---|---| +| Prisbasbelopp (PBB) | 57,300 | 58,800 | +| Inkomstbasbelopp (IBB) | 76,200 | 80,600 | +| Max PGI (7.5 × IBB) | 571,500 | 604,500 | +| Effective pension ceiling (8.07 × IBB) | 614,934 | 650,442 | +| SGI ceiling (10 × PBB) | 573,000 | 588,000 | + +## Special reductions + +### Växa-stöd (first-employee discount) +Only 10.21% on wages up to 25,000 SEK/month (35,000 from 2025) for up to 24 months. Applies to enskild firma or AB hiring their first employee. + +### Forskningsavdrag (R&D) +20% total reduction on qualifying R&D salaries, max 3 MSEK per group per month. Requires systematic research or development work.$gb$, + 'horizontal/swedish-payroll', + 2, + 1 + ), + ( + 'horizontal/swedish-payroll/tax-tables', + 'horizontal', + 'Skatteavdrag (Tax Tables)', + $gb$Skatteavdrag (Tax Tables): reference for Swedish Payroll$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 522, + '.claude\skills\swedish-payroll\references\tax-tables.md', + $gb$# Skatteavdrag (Tax Tables) + +## Tax table lookup system + +Employers withhold preliminary tax using skattetabeller published annually by Skatteverket. Each table is numbered 29-42, corresponding to the employee's total municipal tax rate (kommunalskatt + regionskatt + begravningsavgift ± kyrkoavgift). + +Rounding rule: fractional part ≤0.50 rounds down, ≥0.51 rounds up to determine the table number. + +## Column system + +Each table contains 6 columns for different employee categories: + +| Column | Applies to | +|---|---| +| 1 | Standard employees under 66 (most common) | +| 2 | Pensioners 66+ | +| 3 | Workers 66+ with förhöjt jobbskatteavdrag | +| 4 | Sjuk-/aktivitetsersättning recipients under 66 | +| 5 | Varies by year per SKVFS | +| 6 | Pre-65 retirement pensions for born 1951+ | + +## Implementation workflow + +1. Download Skatteverket's annual skattesatser file (XLSX/TXT) mapping each kommun to its total rate +2. Determine the employee's folkbokföringskommun from November 1 of the prior year +3. Apply the rounding rule to get the table number +4. Select the correct column based on age and income type +5. Look up the monthly gross salary bracket to find the withholding amount + +Skatteverket publishes tables as XLSX, TXT, and PDF, plus open data via the Utvecklarportal. The TXT files follow a fixed-format record structure described in a separate postbeskrivning document. + +## Jämkning + +Jämkning is a Skatteverket decision adjusting withholding up or down from the table amount. The employee provides a jämkningsbeslut to the employer, who must apply it instead of the table. + +## Sidoinkomst + +For secondary income (all employers other than the main one), withhold a flat 30% regardless of salary level. + +Employees may request förhöjt skatteavdrag (higher withholding) from their main employer without any Skatteverket decision. Lower withholding always requires a jämkning. + +## State income tax + +The brytpunkt is 660,400 SEK/year (~55,033 SEK/month) for 2026 at 20% above the threshold. This is already built into the published tax tables, so no separate employer calculation is needed.$gb$, + 'horizontal/swedish-payroll', + 1, + 1 + ), + ( + 'horizontal/swedish-payroll/travel-expenses', + 'horizontal', + 'Traktamente and Utlägg', + $gb$Traktamente and Utlägg: reference for Swedish Payroll$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 644, + '.claude\skills\swedish-payroll\references\travel-expenses.md', + $gb$# Traktamente and Utlägg + +## Domestic traktamente + +Tax-free domestic traktamente requires a tjänsteresa with overnight stay, destination ≥50 km from both home and workplace, with documented reseräkning. + +| Period | Hel dag | Halv dag | Nattraktamente | +|---|---|---|---| +| 2024-2025 | 290 SEK | 145 SEK | 145 SEK | +| 2026 | 300 SEK | 150 SEK | 150 SEK | + +### Day type rules + +Departure before 12:00 or return after 19:00 = hel dag. Otherwise halv dag. Intermediate days are always hela dagar. + +### Tremånadersregeln + +After 3 consecutive months at the same location: rate drops to 70% of maximibelopp. After 2 years: drops to 50%. A break of ≥4 weeks resets the counter. + +### Meal reductions (2025, traktamente = 290 SEK) + +| Meals provided | Reduction | Remaining | +|---|---|---| +| Frukost only | 58 SEK (20%) | 232 SEK | +| Lunch or middag | 102 SEK (35.2%) | 188 SEK | +| Lunch and middag | 203 SEK (70%) | 87 SEK | +| All three meals | 261 SEK (90%) | 29 SEK | + +When meals are provided and traktamente reduced, a kostförmån for the free meal is also triggered (both apply simultaneously). Meals included in transport tickets do not trigger a reduction. + +### International traktamente + +Uses country-specific normalbelopp published annually by Skatteverket. Same 3-month, 2-year, and meal reduction percentage rules apply. + +## Utlägg vs kostnadsersättning + +| Characteristic | Utlägg (employer's expense) | Kostnadsersättning (employee's cost) | +|---|---|---| +| Receipt belongs to | The company | The employee | +| Taxable income? | No | No, if within skattefria schabloner | +| Arbetsgivaravgifter? | No | No, if within schabloner | +| On lönespec? | No (or info only) | Yes, listed separately | +| Example | Office supplies, client lunch | Milersättning, traktamente | + +For purchases >4,000 SEK including moms, the employer's name must appear on the receipt for VAT deduction. + +## Milersättning + +Unchanged 2024-2026: +- Own car: 25 SEK/mil (2.50 SEK/km) +- Förmånsbil (petrol/diesel): 12 SEK/mil +- Förmånsbil (electric/hybrid): 9.50 SEK/mil + +Amounts exceeding schabloner are taxed as salary with full arbetsgivaravgifter. All reimbursements require a körjournal with dates, mileage readings, destinations, and business purpose. Retention: 7 years per bokföringslagen. + +## BAS accounts + +| Account | Purpose | +|---|---| +| 7321 | Skattefria traktamenten, Sverige | +| 7322 | Skattepliktiga traktamenten, Sverige | +| 7323 | Skattefria traktamenten, utlandet | +| 7324 | Skattepliktiga traktamenten, utlandet | +| 7331 | Skattefria bilersättningar | +| 7332 | Skattepliktiga bilersättningar |$gb$, + 'horizontal/swedish-payroll', + 1, + 1 + ), + ( + 'horizontal/swedish-payroll/vacation-pay', + 'horizontal', + 'Semesterlöneskuld (Vacation Pay)', + $gb$Semesterlöneskuld (Vacation Pay): reference for Swedish Payroll$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 564, + '.claude\skills\swedish-payroll\references\vacation-pay.md', + $gb$# Semesterlöneskuld (Vacation Pay) + +## Two calculation methods + +### Sammalöneregeln (§16a Semesterlagen) + +Default for monthly-salaried employees. Regular salary continues during vacation, plus a semestertillägg of minimum 0.43% of monthly salary per vacation day (many CBAs use 0.8%). An additional 12% of variable pay (OB, overtime, bonuses) earned during the intjänandeår is divided by earned days and paid per taken day. + +### Procentregeln (§16) + +Applies to hourly employees, those with >10% variable pay, or when sammalöneregeln cannot be used. Semesterlön = 12% of total semesterlönegrundande income during the intjänandeår. For entitlements beyond 25 days, add 0.48 percentage points per extra day (e.g., 30 days = 14.4%). + +## Intjänandeår + +Runs April 1 - March 31 by law, but many collective agreements use sammanfallande (concurrent) calendar-year periods. Developers must make this configurable. + +## Accounting entries (BAS accounts) + +| Account | Purpose | +|---|---| +| 2920 | Upplupna semesterlöner (vacation pay liability, balance sheet) | +| 2940/2941 | Upplupna sociala avgifter på semesterlöner | +| 7090 | Förändring av semesterlöneskuld, kollektivanställda (P&L) | +| 7290/7291/7292 | Förändring av semesterlöneskuld, tjänstemän/företagsledare (P&L) | +| 7519 | Arbetsgivaravgifter för semester- och löneskulder (P&L) | + +### Monthly accrual + +Debit 7090/7290 and credit 2920 for new vacation pay earned. Debit 7519 and credit 2940 for social charges on the accrual (31.42% for standard employees, 10.21% for 67+). + +### Vacation taken + +Reverse: debit 2920 / credit 7090 or 7290. + +### Liability calculation + +Must be calculated individually per employee under BFNAR 2016:10. + +## Sparade semesterdagar + +Employees with >20 paid days may save the excess (max 5 from a 25-day entitlement), up to 5 years. Saved days are valued using the most recent intjänandeår's calculation. + +Upon termination, all untaken days must be paid as semesterersättning within 1 month. + +## Semesterlönegrundande frånvaro + +Certain absences count as if worked for vacation accrual purposes: sjukfrånvaro (first 180 days), föräldraledighet (first 120 days for first child, 60 for additional), studieledighet with stipend, and more. See Semesterlagen §17-17b for complete list.$gb$, + 'horizontal/swedish-payroll', + 1, + 1 + ), + ( + 'horizontal/swedish-project-accounting', + 'horizontal', + 'Swedish Project Accounting', + $gb$Swedish project accounting (projektredovisning) covering dimensional tagging of bokföringsposter with project codes, WIP accounting (pågående arbeten), revenue recognition under K2 and K3 (successiv vinstavräkning, färdigställandemetoden), construction contracts (entreprenadavtal), BAS account patterns for project tracking (1470, 1620, 2420, 2450, 4970), SIE4 dimension encoding (#DIM 6, #OBJEKT, #TRANS object lists), project profitability reporting, overhead allocation (fördelningsnycklar), and the tax-accounting divergence for löpande räkning contracts. Trigger on ANY Swedish project accounting question including "projektredovisning", "pågående arbeten", "successiv vinstavräkning", "färdigställandegrad", "upparbetad ej fakturerad intäkt", "fakturerad ej upparbetad intäkt", "konto 1620", "konto 1470", "konto 2450", "entreprenaduppdrag", "projekt dimension SIE", "kostnadsställe vs projekt", "projektlönsamhet", "WIP accounting Sweden", "K3 kapitel 23", "befarad förlust projekt", "fördelningsnyckel", questions about how Fortnox/Visma/Bokio handle project dimensions, or any question about tracking intäkter/kostnader per project in Swedish bookkeeping. Also trigger when building software features for project accounting, designing data models for project dimensions, implementing revenue recognition logic, or handling SIE4 import/export of project-tagged transactions. Always use this skill over training data for project accounting topics.$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 2570, + '.claude\skills\swedish-project-accounting\SKILL.md', + $gb$--- +name: swedish-project-accounting +description: Swedish project accounting (projektredovisning) covering dimensional tagging of bokföringsposter with project codes, WIP accounting (pågående arbeten), revenue recognition under K2 and K3 (successiv vinstavräkning, färdigställandemetoden), construction contracts (entreprenadavtal), BAS account patterns for project tracking (1470, 1620, 2420, 2450, 4970), SIE4 dimension encoding (#DIM 6, #OBJEKT, #TRANS object lists), project profitability reporting, overhead allocation (fördelningsnycklar), and the tax-accounting divergence for löpande räkning contracts. Trigger on ANY Swedish project accounting question including "projektredovisning", "pågående arbeten", "successiv vinstavräkning", "färdigställandegrad", "upparbetad ej fakturerad intäkt", "fakturerad ej upparbetad intäkt", "konto 1620", "konto 1470", "konto 2450", "entreprenaduppdrag", "projekt dimension SIE", "kostnadsställe vs projekt", "projektlönsamhet", "WIP accounting Sweden", "K3 kapitel 23", "befarad förlust projekt", "fördelningsnyckel", questions about how Fortnox/Visma/Bokio handle project dimensions, or any question about tracking intäkter/kostnader per project in Swedish bookkeeping. Also trigger when building software features for project accounting, designing data models for project dimensions, implementing revenue recognition logic, or handling SIE4 import/export of project-tagged transactions. Always use this skill over training data for project accounting topics. +--- + +# Swedish Project Accounting (Projektredovisning) + +This skill covers the full technical, regulatory, and implementation landscape of project accounting in Swedish bookkeeping. It is designed for both answering compliance questions and building software that handles project dimensions. + +## How to use this skill + +1. Identify the user's context: are they asking a compliance question, building software, or troubleshooting bookkeeping entries? +2. Determine the applicable regulatory framework: K2 (BFNAR 2016:10) or K3 (BFNAR 2012:1). This choice fundamentally shapes available revenue recognition methods. +3. For detailed BAS account patterns, SIE4 encoding, or implementation data models, read the appropriate reference file before answering. + +## Reference files + +Read these before answering questions in the corresponding area: + +| File | When to read | +|------|-------------| +| `references/accounts-and-entries.md` | Questions about specific BAS accounts (1470, 1620, 2450, 4970, etc.), booking patterns, journal entries for WIP adjustments, or pågående arbeten entries | +| `references/k2-k3-revenue-recognition.md` | Questions about successiv vinstavräkning, färdigställandemetoden, K3 Chapter 23, K2 Chapter 6, construction contracts, befarade förluster, or choosing between K2/K3 for project-intensive companies | +| `references/sie4-project-dimensions.md` | Questions about SIE4 encoding of project dimensions, #DIM/#OBJEKT/#TRANS records, import/export of project-tagged data, or how dimensions map to Fortnox/Visma/Bokio | +| `references/tax-and-grants.md` | Questions about tax treatment of pågående arbeten, materiellt samband, löpande räkning tax divergence, forskningsavdrag, aktivering av utvecklingsutgifter, or EU grant accounting | +| `references/implementation-patterns.md` | Questions about data models, project lifecycle, WIP calculation logic, overhead allocation, profitability reporting, time tracking integration, or software architecture for project accounting | + +## Core concepts (always available in context) + +### What is projektredovisning? + +Projektredovisning tags individual transaction lines (bokföringsposter) with project codes alongside BAS account numbers. Same ledger, extra dimension. It enables tracking intäkter och kostnader per project rather than only per account. + +Projects are never encoded in the account number itself. They exist as a separate dimensional layer called objektredovisning. The 4-digit BAS account captures the *what* (cost/revenue type); the project dimension captures the *where/for whom*. + +### Projekt vs kostnadsställe + +These are distinct concepts that complement each other: + +- **Kostnadsställe** (cost center): permanent organizational unit (department, branch). No end date. SIE dimension 1. +- **Projekt**: time-limited initiative with start/end dates and accumulated multi-year balances. SIE dimension 6. + +A project typically belongs to one kostnadsställe. Reports can cross-reference both dimensions. + +### When is project accounting required? + +BFL does not mandate project accounting. However: + +- **K3 Chapter 23** requires successiv vinstavräkning for fixed-price contracts in koncernredovisning. Calculating färdigställandegrad is impossible without project-level cost tracking, making it effectively mandatory. +- **K2 Chapter 6** offers a choice between huvudregeln and alternativregeln for fixed-price contracts. Both require per-project cost accumulation. +- **Any company doing consulting, construction, R&D, or grant-funded work** needs project accounting for management purposes even without a regulatory mandate. + +### Key BAS accounts (summary) + +| Account | Name | Purpose | +|---------|------|---------| +| 1470 | Pågående arbeten | WIP asset under alternativregeln (completed contract) | +| 1620 | Upparbetad men ej fakturerad intäkt | WIP receivable under successiv vinstavräkning | +| 2420 | Förskott från kunder | Customer advance payments | +| 2450 | Fakturerad men ej upparbetad intäkt | Deferred revenue (invoiced > earned) | +| 4970 | Förändring pågående arbeten | P&L counterpart for 1470 adjustments | +| 3041 | Försäljning tjänster 25% | Typical project revenue account | +| 3980 | Erhållna offentliga bidrag | Grant revenue | + +### Revenue recognition decision tree + +``` +Is the contract fixed-price or time-and-materials? + +├─ Time-and-materials (löpande räkning) +│ └─ Both K2 and K3: recognize revenue as work is performed +│ Tax: may diverge from accounting (HFD 2011 ref. 20) +│ +└─ Fixed-price (fast pris) + ├─ K3 (koncernredovisning): successiv vinstavräkning MANDATORY + │ └─ Recognize revenue × färdigställandegrad at each balance date + │ Can outcome be reliably estimated? All four conditions met? + │ ├─ Yes: revenue = total contract × completion % + │ └─ No: revenue = costs incurred (zero profit recognized) + │ + ├─ K3 (juridisk person): successiv vinstavräkning OR + │ alternativregeln (per punkt 23.31, requires 17 kap. 23 § IL) + │ + └─ K2: huvudregeln (completion %) OR alternativregeln + └─ Alternativregeln: recognize when "väsentligen fullgjort" + (Srf U 15: assessed from customer acceptance perspective) +``` + +### Befarade förluster + +K3 punkt 23.32: if total estimated costs exceed total contract revenue, the expected loss must be recognized as a cost IMMEDIATELY, regardless of completion percentage. This is mandatory and overrides normal recognition logic. The engine must flag projects where cumulative actual + estimated remaining costs exceed contract revenue. + +### Moms timing mismatch + +This is the highest-error-rate area in project accounting: + +- **Upparbetad ej fakturerad intäkt (1620)**: pure periodisering, NO moms impact. VAT is only triggered when an actual invoice is issued. +- **Fakturerad ej upparbetad intäkt (2450)**: moms on those invoices must be reported AT TIME OF INVOICING even though accounting books revenue as liability. +- **Omvänd skattskyldighet** in construction: seller invoices without VAT when buyer "more than temporarily" sells byggtjänster. Per-project tracking of reverse charge status required. + +The engine must track moms reporting independently from revenue recognition on every project. + +### Gross reporting requirement + +Per Srf U 14, pågående arbeten must be reported GROSS per project in the balance sheet. Netting across projects is prohibited (ÅRL kvittningsförbud). A project with 1620 balance and another with 2450 balance must show both, not net them. + +### Software vendor comparison + +| System | Dimension model | SIE compatibility | +|--------|----------------|-------------------| +| Fortnox | Project + CostCenter (flat, independent) | Direct mapping to dim 1+6 | +| Visma | Objekt 1 + 2 (renamable), Flerårigt flag for multi-year | Flerårigt maps to projekt, non-flerårigt to KS | +| Bokio | Unlimited Tag Groups | Tags don't export as SIE dimensions | + +### Common error patterns + +1. **Incorrect färdigställandegrad**: over/under-recognition of revenue. Flag projects where completion % diverges >20% from time-elapsed or budget-consumed ratios. +2. **Missing project tags**: orphaned costs. Enforce MANDATORY project code on accounts flagged in dimension settings. +3. **Mixing recognition methods**: without disclosure violates consistency. Lock method per project type at company config level. +4. **Unrecognized befarade förluster**: automatic detection required per K3 23.32. +5. **Incomplete project closings**: residual balances on 1620/2450/1470. Enforce zero-balance check before CLOSED status. +6. **Missing garantiavsättningar**: common audit finding for construction. Prompt at project close. +7. **VAT-revenue timing mismatch**: booking 1620 entries with moms, or failing to report moms on advance invoices. + +--- + +## Loadable references + +The reference files named above are NOT included in this body. When a question genuinely needs that depth, load the specific one on demand with `gnubok_load_skill`, and only then: + +- `references/accounts-and-entries.md` → `gnubok_load_skill("horizontal/swedish-project-accounting/accounts-and-entries")`: BAS Accounts and Journal Entries for Project Accounting +- `references/implementation-patterns.md` → `gnubok_load_skill("horizontal/swedish-project-accounting/implementation-patterns")`: Implementation Patterns for Project Accounting +- `references/k2-k3-revenue-recognition.md` → `gnubok_load_skill("horizontal/swedish-project-accounting/k2-k3-revenue-recognition")`: K2/K3 Revenue Recognition for Project Accounting +- `references/sie4-project-dimensions.md` → `gnubok_load_skill("horizontal/swedish-project-accounting/sie4-project-dimensions")`: SIE4 Project Dimensions +- `references/tax-and-grants.md` → `gnubok_load_skill("horizontal/swedish-project-accounting/tax-and-grants")`: Tax Implications and Grant Accounting for Projects +$gb$, + NULL, + 3, + 1 + ), + ( + 'horizontal/swedish-project-accounting/accounts-and-entries', + 'horizontal', + 'BAS Accounts and Journal Entries for Project Accounting', + $gb$BAS Accounts and Journal Entries for Project Accounting: reference for Swedish Project Accounting$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 2338, + '.claude\skills\swedish-project-accounting\references\accounts-and-entries.md', + $gb$# BAS Accounts and Journal Entries for Project Accounting + +## Table of contents + +1. Which account classes get project-tagged +2. Core WIP accounts in detail +3. Journal entry patterns by scenario +4. Gemensamma kostnader and fördelningsnycklar +5. Project closing entries + +--- + +## 1. Which account classes get project-tagged + +Project dimensions apply primarily to P&L accounts but extend to specific balance sheet accounts that are inherently project-related. + +**Class 3xxx (intäkter)** -- ALWAYS project-tagged. Core for tracking project revenue. +- 3010 Försäljning varor +- 3040/3041 Försäljning av tjänster (6%/25%) +- 3310 Upparbetad intäkt adjustments (used by some systems) +- 3980/3981 Erhållna offentliga bidrag + +**Class 4xxx (varor/material)** -- ALWAYS project-tagged as direct project costs. +- 4010 Varuinköp +- 4970 Förändring av pågående arbeten (P&L counterpart for 1470) + +**Class 5xxx-6xxx (övriga kostnader)** -- COMMONLY tagged when directly attributable. +- 5010 Lokalhyra (if project-specific premises) +- 6110 Kontorsmaterial +- 6210 Telekommunikation +- 6530 Redovisningstjänster (if project-specific) +- Shared costs allocated via fördelningsnycklar (see section 4) + +**Class 7xxx (personalkostnader)** -- COMMONLY tagged via employee time reports. +- 7010/7210 Löner till tjänstemän/kollektivanställda +- 7510 Arbetsgivaravgifter +- 7090/7290 Förändring semesterlöneskuld (should follow wage distribution) + +**Class 1xxx/2xxx (balance sheet)** -- SELECTIVELY tagged. Only inherently project-related accounts: +- 1470 Pågående arbeten för annans räkning +- 1620 Upparbetad men ej fakturerad intäkt +- 2420 Förskott från kunder +- 2450 Fakturerad men ej upparbetad intäkt +- 1510 Kundfordringar (sometimes, for project-level receivables tracking) + +**Class 8xxx (finansiella poster)** -- RARELY project-tagged. + +**Class 9xxx (internredovisning)** -- Used for internal allocation between projects/cost centers. Debit and credit must balance within internal transfers. Never mixed with external accounts in the same report. + +--- + +## 2. Core WIP accounts in detail + +### 1470 Pågående arbeten för annans räkning + +- Balance sheet: Omsättningstillgångar > Varulager +- Used under: alternativregeln (completed contract method) +- Purpose: capitalize project costs as inventory until assignment is substantially complete +- Normal balance: Debet +- Booking: Debet 1470 / Kredit 4970 + +Sub-accounts in practice: +- 1471 Pågående arbeten, nedlagda kostnader +- 1478 Pågående arbeten, fakturerat (contra, kredit) + +Under K2 (alternativregeln), 1470 is valued at anskaffningsvärde (direct costs only). Under K3, the alternativregeln in juridisk person also uses 1470 but with a broader cost base. + +### 1620 Upparbetad men ej fakturerad intäkt + +- Balance sheet: Omsättningstillgångar > Kortfristiga fordringar +- Used under: successiv vinstavräkning (percentage of completion) +- Purpose: when recognized revenue exceeds invoiced amounts, carry difference as receivable +- Normal balance: Debet +- Booking: Debet 1620 / Kredit 3xxx (revenue account) +- CRITICAL: this entry carries NO MOMS. It is a pure periodisering. + +Sub-accounts: +- 1620F Upparbetad ej fakturerad intäkt, fastpris +- 1620L Upparbetad ej fakturerad intäkt, löpande räkning + +### 2450 Fakturerad men ej upparbetad intäkt + +- Balance sheet: Kortfristiga skulder +- Used under: successiv vinstavräkning +- Purpose: when invoiced amounts exceed recognized revenue, carry difference as liability +- Normal balance: Kredit +- Booking: Debet 3xxx / Kredit 2450 +- CRITICAL: moms on the underlying invoices must be reported at time of invoicing even though revenue is deferred + +### 2420 Förskott från kunder + +- Records customer advance payments before work begins +- Similar to 2450 but used for payments received before any invoicing/work + +### 4970 Förändring av pågående arbeten + +- P&L counterpart for 1470 adjustments +- Purpose: neutralize cost impact during project execution under alternativregeln +- Normal balance: Kredit (increases 1470 asset) or Debet (decreases 1470 at project completion) + +### 38xx Aktiverat arbete för egen räkning + +- 3800/3840 Aktiverat arbete för egen räkning +- Used when a company capitalizes internally generated assets (software, R&D) +- Project collects costs; at period end, capitalization entry: Debet 10xx (tillgång) / Kredit 38xx +- Only permitted under K3 aktiveringsmodellen. Prohibited under K2 (punkt 10.4). + +--- + +## 3. Journal entry patterns by scenario + +### Scenario A: Successiv vinstavräkning, upparbetad > fakturerad + +Project X: total contract 1,000,000 SEK. Estimated total cost 800,000. At balance date: 400,000 costs incurred, 300,000 invoiced. + +Färdigställandegrad = 400,000 / 800,000 = 50% +Upparbetad intäkt = 1,000,000 × 50% = 500,000 +Difference = 500,000 - 300,000 = 200,000 (upparbetad > fakturerad) + +``` +Debet 1620 {6 "X"} 200,000 +Kredit 3041 {6 "X"} 200,000 +``` + +No moms on this entry. Moms was reported on the 300,000 invoice when issued. + +### Scenario B: Successiv vinstavräkning, fakturerad > upparbetad + +Project Y: total contract 500,000 SEK. Estimated total cost 350,000. At balance date: 70,000 costs incurred, 200,000 invoiced (advance billing). + +Färdigställandegrad = 70,000 / 350,000 = 20% +Upparbetad intäkt = 500,000 × 20% = 100,000 +Difference = 200,000 - 100,000 = 100,000 (fakturerad > upparbetad) + +``` +Debet 3041 {6 "Y"} 100,000 +Kredit 2450 {6 "Y"} 100,000 +``` + +The moms on the 200,000 invoice was already reported. This entry is a pure revenue deferral. + +### Scenario C: Alternativregeln (completed contract), costs during project + +Project Z ongoing. This month: 50,000 in direct costs (materials + labor). + +Record costs normally: +``` +Debet 4010 {6 "Z"} 30,000 -- materials +Debet 7010 {6 "Z"} 20,000 -- labor +Kredit 2440 30,000 -- supplier invoice +Kredit 1930 20,000 -- bank (salary) +``` + +At period end, capitalize to WIP: +``` +Debet 1470 {6 "Z"} 50,000 +Kredit 4970 {6 "Z"} 50,000 +``` + +This neutralizes the P&L impact until the project is substantially complete. + +### Scenario D: Project completion under alternativregeln + +Project Z is väsentligen fullgjort. Total accumulated 1470 balance: 300,000. Final invoice: 450,000. + +Reverse the WIP capitalization: +``` +Debet 4970 {6 "Z"} 300,000 +Kredit 1470 {6 "Z"} 300,000 +``` + +Revenue is now recognized and costs hit the P&L. The invoice creates the normal revenue/receivable/moms entries. + +### Scenario E: Befarad förlust + +Project W: total contract 200,000. Estimated total cost now revised to 250,000. Incurred so far: 120,000. + +Expected loss = 250,000 - 200,000 = 50,000. Must be recognized IMMEDIATELY. + +Under successiv vinstavräkning: +``` +Debet 4970 {6 "W"} 50,000 +Kredit 2290 {6 "W"} 50,000 -- avsättning befarad förlust +``` + +The loss provision is booked even though only 120,000/250,000 of costs have been incurred. + +### Scenario F: Overhead allocation + +Shared office rent 100,000/month. Three active projects consuming 40%, 35%, 25% based on headcount allocation key. + +``` +Kredit 5010 {1 "ADMIN"} 100,000 -- reverse from admin cost center +Debet 5010 {6 "P1"} 40,000 +Debet 5010 {6 "P2"} 35,000 +Debet 5010 {6 "P3"} 25,000 +``` + +Or using internal accounts (kontoklass 9): +``` +Kredit 9510 {1 "ADMIN"} 100,000 +Debet 9510 {6 "P1"} 40,000 +Debet 9510 {6 "P2"} 35,000 +Debet 9510 {6 "P3"} 25,000 +``` + +--- + +## 4. Gemensamma kostnader and fördelningsnycklar + +Shared costs that cannot be directly attributed to a single project must be allocated using fördelningsnycklar (allocation keys). + +### Common allocation bases + +| Allocation key | Best for | Calculation | +|---------------|----------|-------------| +| Direkta lönekostnader | Service/consulting firms | Project salary / Total salary | +| Antal timmar | Time-based work | Project hours / Total hours | +| Omsättning | Revenue-proportional costs | Project revenue / Total revenue | +| Kvadratmeter | Facility costs | Project space / Total space | +| Antal anställda/FTE | HR overheads | Project FTE / Total FTE | + +### The SUHF model + +Widely adopted beyond universities. Applies a full markup (OH-påslag) on the salary base covering both overhead and premises. The markup is calculated annually as: (total indirect costs) / (total direct salary costs) × 100%. + +### Rules for internal allocation + +- External cost accounts (class 5-8) must not be mixed with internal allocation accounts (class 9) in the same report +- Debit and credit must balance within internal transfers +- Allocation frequency: monthly for management reporting, at minimum at year-end for statutory +- Document the allocation key and its basis in the accounting policy + +--- + +## 5. Project closing entries + +When a project transitions to CLOSED status, these entries must be verified: + +1. **All costs booked**: no outstanding supplier invoices, accruals complete +2. **Final WIP adjustment**: + - Successiv vinstavräkning: clear 1620/2450 to zero for this project + - Alternativregeln: reverse 1470 via 4970 +3. **Garantiavsättning** (construction projects): Debet 6320 / Kredit 2290, typically 2-5% of contract value +4. **Final invoice issued**: all revenue recognized, moms reported +5. **Interimsposter cleared**: no residual periodiseringar on 17xx/29xx for this project +6. **Balance verification**: run project trial balance, confirm all project-tagged accounts net to zero (P&L is allowed to have residual; balance sheet accounts must be zero)$gb$, + 'horizontal/swedish-project-accounting', + 1, + 1 + ), + ( + 'horizontal/swedish-project-accounting/implementation-patterns', + 'horizontal', + 'Implementation Patterns for Project Accounting', + $gb$Implementation Patterns for Project Accounting: reference for Swedish Project Accounting$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 4529, + '.claude\skills\swedish-project-accounting\references\implementation-patterns.md', + $gb$# Implementation Patterns for Project Accounting + +## Table of contents + +1. Data model +2. Project lifecycle state machine +3. WIP calculation logic +4. Overhead allocation engine +5. Profitability reporting +6. Time tracking integration +7. Payroll distribution +8. Asset register integration +9. Period-end procedures +10. Validation and error detection + +--- + +## 1. Data model + +### Core tables + +```sql +-- Project master +CREATE TABLE projects ( + id UUID PRIMARY KEY, + project_number VARCHAR(20) UNIQUE NOT NULL, -- matches SIE object_no + name VARCHAR(200) NOT NULL, + description TEXT, + status TEXT CHECK (status IN ('SETUP','ACTIVE','CLOSED','ARCHIVED')) DEFAULT 'SETUP', + project_type TEXT CHECK (project_type IN ( + 'FIXED_PRICE','TIME_MATERIALS','TIME_LIMITED','ONGOING' + )) NOT NULL, + revenue_method TEXT CHECK (revenue_method IN ( + 'SUCCESSIV_VINSTAVRAKNING','FARDIGSTALLANDEMETODEN','LOPANDE_RAKNING' + )), + customer_id UUID REFERENCES customers(id), + cost_center_id UUID REFERENCES cost_centers(id), + start_date DATE, + end_date DATE, + contract_revenue DECIMAL(15,2), -- total contract amount (fixed-price) + budgeted_total_cost DECIMAL(15,2), -- estimated total cost + budgeted_hours DECIMAL(10,2), + is_rd_project BOOLEAN DEFAULT FALSE, -- for forskningsavdrag tracking + grant_funded BOOLEAN DEFAULT FALSE, + reverse_charge_default BOOLEAN DEFAULT FALSE, -- omvänd skattskyldighet + created_at TIMESTAMPTZ DEFAULT NOW(), + closed_at TIMESTAMPTZ, + sie_dimension INTEGER DEFAULT 6 -- SIE dimension number +); + +-- Cost centers +CREATE TABLE cost_centers ( + id UUID PRIMARY KEY, + code VARCHAR(20) UNIQUE NOT NULL, + name VARCHAR(200) NOT NULL, + is_active BOOLEAN DEFAULT TRUE, + sie_dimension INTEGER DEFAULT 1 +); + +-- Per-account dimension enforcement +CREATE TABLE account_dimension_settings ( + account_number INTEGER NOT NULL, + dimension_type TEXT CHECK (dimension_type IN ('PROJECT','COST_CENTER')), + setting TEXT CHECK (setting IN ('ALLOWED','MANDATORY','NOT_ALLOWED')) DEFAULT 'ALLOWED', + PRIMARY KEY (account_number, dimension_type) +); + +-- Journal entry lines with project/cost center +CREATE TABLE journal_entry_lines ( + id UUID PRIMARY KEY, + journal_entry_id UUID NOT NULL REFERENCES journal_entries(id), + account_number INTEGER NOT NULL, + debit DECIMAL(15,2) DEFAULT 0, + credit DECIMAL(15,2) DEFAULT 0, + description TEXT, + project_id UUID REFERENCES projects(id), -- nullable + cost_center_id UUID REFERENCES cost_centers(id), -- nullable + quantity DECIMAL(10,2), -- for SIE quantity field + CONSTRAINT valid_amount CHECK ( + (debit > 0 AND credit = 0) OR (credit > 0 AND debit = 0) OR (debit = 0 AND credit = 0) + ) +); + +-- Project budget lines (per account, per period) +CREATE TABLE project_budgets ( + id UUID PRIMARY KEY, + project_id UUID NOT NULL REFERENCES projects(id), + account_number INTEGER NOT NULL, + period VARCHAR(6) NOT NULL, -- YYYYMM + amount DECIMAL(15,2) NOT NULL +); + +-- WIP snapshots (calculated at each period close) +CREATE TABLE project_wip_snapshots ( + id UUID PRIMARY KEY, + project_id UUID NOT NULL REFERENCES projects(id), + snapshot_date DATE NOT NULL, + actual_costs_to_date DECIMAL(15,2), + estimated_remaining_costs DECIMAL(15,2), + estimated_total_cost DECIMAL(15,2), + fardigstallandegrad DECIMAL(5,4), -- 0.0000 to 1.0000 + contract_revenue DECIMAL(15,2), + upparbetad_intakt DECIMAL(15,2), + fakturerat_belopp DECIMAL(15,2), + wip_balance DECIMAL(15,2), -- 1620 or 2450 amount + wip_account INTEGER, -- 1620 or 2450 + befarad_forlust DECIMAL(15,2), + tax_basis_revenue DECIMAL(15,2), -- for löpande räkning divergence + UNIQUE (project_id, snapshot_date) +); + +-- Time entries (for integration with time tracking) +CREATE TABLE project_time_entries ( + id UUID PRIMARY KEY, + project_id UUID NOT NULL REFERENCES projects(id), + employee_id UUID NOT NULL, + entry_date DATE NOT NULL, + hours DECIMAL(6,2) NOT NULL, + activity_type VARCHAR(50), + internal_rate DECIMAL(10,2), -- cost rate + external_rate DECIMAL(10,2), -- billing rate + is_billable BOOLEAN DEFAULT TRUE, + is_rd_activity BOOLEAN DEFAULT FALSE, -- for forskningsavdrag + invoiced BOOLEAN DEFAULT FALSE +); +``` + +### Indexes for project reporting + +```sql +CREATE INDEX idx_jel_project ON journal_entry_lines(project_id) WHERE project_id IS NOT NULL; +CREATE INDEX idx_jel_cost_center ON journal_entry_lines(cost_center_id) WHERE cost_center_id IS NOT NULL; +CREATE INDEX idx_jel_account_project ON journal_entry_lines(account_number, project_id); +CREATE INDEX idx_time_project_date ON project_time_entries(project_id, entry_date); +CREATE INDEX idx_wip_project_date ON project_wip_snapshots(project_id, snapshot_date); +``` + +--- + +## 2. Project lifecycle state machine + +``` +SETUP ──────► ACTIVE ──────► CLOSED ──────► ARCHIVED + │ │ + │ └──► ACTIVE (reopen with elevated permissions) + │ + └──► CLOSED (skip if zero transactions) +``` + +### State transitions and validations + +**SETUP → ACTIVE** +- Requires: project_number, name, project_type, revenue_method set +- For fixed-price: contract_revenue and budgeted_total_cost must be set +- Enables: transaction booking, time entry, invoicing + +**ACTIVE → CLOSED** +- Pre-close checklist (all must pass): + 1. No pending supplier invoices (kontrollera leverantörsskuld per project) + 2. All time entries invoiced or written off + 3. Final WIP adjustment posted (1620/2450/1470 cleared to zero) + 4. Final invoice issued + 5. Moms reported for all invoices + 6. Garantiavsättning booked (if construction project) + 7. Project trial balance: all balance sheet accounts net to zero + 8. Residual periodiseringar cleared (17xx/29xx) +- On transition: record closed_at timestamp, freeze project from new transactions +- Resultatföring: project's accumulated P&L becomes part of company P&L + +**CLOSED → ACTIVE (reopen)** +- Requires elevated permissions (admin/revisor role) +- Audit trail entry documenting reason for reopening +- Common reasons: late supplier invoice, warranty claim, grant audit adjustment + +**CLOSED → ARCHIVED** +- Read-only, no modifications permitted +- Can be triggered after retention period (typically 7 years per BFL) + +--- + +## 3. WIP calculation logic + +### Successiv vinstavräkning (percentage of completion) + +```python +def calculate_wip_successiv(project, period_date): + actual_costs = sum_project_costs(project.id, up_to=period_date) + estimated_total = project.budgeted_total_cost # or latest revised estimate + + if estimated_total <= 0: + return None # cannot calculate + + fardigstallandegrad = actual_costs / estimated_total + fardigstallandegrad = min(fardigstallandegrad, 1.0) # cap at 100% + + upparbetad_intakt = project.contract_revenue * fardigstallandegrad + fakturerat = sum_project_invoiced(project.id, up_to=period_date) + + wip_balance = upparbetad_intakt - fakturerat + + # Check for befarad förlust + befarad_forlust = 0 + if estimated_total > project.contract_revenue: + befarad_forlust = estimated_total - project.contract_revenue + + if wip_balance > 0: + # Upparbetad > fakturerad: asset on 1620 + return WIPResult( + account=1620, amount=wip_balance, + revenue_account=3041, + fardigstallandegrad=fardigstallandegrad, + befarad_forlust=befarad_forlust + ) + else: + # Fakturerad > upparbetad: liability on 2450 + return WIPResult( + account=2450, amount=abs(wip_balance), + revenue_account=3041, + fardigstallandegrad=fardigstallandegrad, + befarad_forlust=befarad_forlust + ) +``` + +### Alternativregeln (completed contract) + +```python +def calculate_wip_alternativ(project, period_date): + actual_costs = sum_project_costs(project.id, up_to=period_date) + fakturerat = sum_project_invoiced(project.id, up_to=period_date) + + # Capitalize costs as inventory + # Net position determines balance sheet presentation + if actual_costs >= fakturerat: + # Asset: more costs than invoiced + return WIPResult( + account=1470, amount=actual_costs, + contra_account=4970, + fakturerat_offset=fakturerat # netted in disclosure + ) + else: + # Liability: more invoiced than costs + net_liability = fakturerat - actual_costs + return WIPResult( + account=2430, amount=net_liability, + asset_account=1470, asset_amount=actual_costs, + contra_account=4970 + ) +``` + +### Löpande räkning + +```python +def calculate_wip_lopande(project, period_date): + # Revenue = work performed at agreed rates + time_entries = get_unbilled_time(project.id, up_to=period_date) + upparbetad = sum(e.hours * e.external_rate for e in time_entries) + fakturerat = sum_project_invoiced(project.id, up_to=period_date) + + wip_balance = upparbetad - fakturerat + + # Tax basis: only invoiced amounts (HFD 2011 ref. 20) + tax_revenue = fakturerat + accounting_revenue = upparbetad + + return WIPResult( + account=1620 if wip_balance > 0 else 2450, + amount=abs(wip_balance), + tax_basis_revenue=tax_revenue, + accounting_revenue=accounting_revenue, + tax_difference=accounting_revenue - tax_revenue + ) +``` + +--- + +## 4. Overhead allocation engine + +```python +def allocate_overhead(period, allocation_key_type, source_cost_center, target_projects): + """ + Allocate shared costs from a cost center to projects. + + allocation_key_type: 'SALARY', 'HOURS', 'REVENUE', 'HEADCOUNT', 'SQMETERS' + """ + total_overhead = sum_costs(source_cost_center, period, account_range=(5000, 6999)) + + if allocation_key_type == 'SALARY': + denominators = {p: sum_salary_costs(p, period) for p in target_projects} + elif allocation_key_type == 'HOURS': + denominators = {p: sum_hours(p, period) for p in target_projects} + elif allocation_key_type == 'REVENUE': + denominators = {p: sum_revenue(p, period) for p in target_projects} + + total_denominator = sum(denominators.values()) + if total_denominator == 0: + return [] # no basis for allocation + + allocations = [] + for project, value in denominators.items(): + share = value / total_denominator + amount = round(total_overhead * share, 2) + allocations.append(AllocationEntry( + source=source_cost_center, + target_project=project, + amount=amount, + key_type=allocation_key_type, + key_value=value, + share_pct=share + )) + + # Rounding adjustment: assign remainder to largest project + allocated_total = sum(a.amount for a in allocations) + if allocated_total != total_overhead: + diff = total_overhead - allocated_total + largest = max(allocations, key=lambda a: a.amount) + largest.amount += diff + + return allocations +``` + +--- + +## 5. Profitability reporting + +### Projektresultaträkning structure + +``` +Intäkter + Fakturerad intäkt (3xxx) + + Upparbetad ej fakturerad (1620 change) + - Fakturerad ej upparbetad (2450 change) + = Nettointäkt + +Direkta kostnader + Personalkostnader (7xxx tagged to project) + Materialkostnader (4xxx tagged to project) + Underleverantörer (tagged subcontractor costs) + Övriga direkta kostnader (5xxx/6xxx tagged to project) + = Summa direkta kostnader + +Täckningsbidrag 1 = Nettointäkt - Direkta kostnader + +Indirekta kostnader (allocated overhead) + OH-påslag personal + OH-påslag lokaler + OH-påslag administration + = Summa indirekta kostnader + +Täckningsbidrag 2 = TB1 - Indirekta kostnader + +Projektresultat = TB2 +``` + +### Key KPIs + +| KPI | Formula | Target | +|-----|---------|--------| +| Debiteringsgrad | Billable hours / Total hours | 65-85% (consulting) | +| Faktisk timpris | Project revenue / Billable hours | > Internal rate × 2.5 | +| Täckningsgrad | TB1 / Nettointäkt | > 50% (consulting), > 15% (construction) | +| Budget adherence | Actual cost / Budgeted cost | < 1.0 | +| Färdigställandegrad | Actual cost / Est. total cost | Should track time-elapsed | +| WIP days | WIP balance / (Revenue / 365) | < 30 days | + +### Multi-project dashboard + +The engine should support a project overview showing: +- All active projects with status indicators (on track, at risk, over budget) +- Aggregate WIP position (total 1620, total 2450, total 1470) +- Revenue pipeline (contracted but not yet recognized) +- Resource utilization across projects +- Cash flow impact (invoiced vs collected per project) + +--- + +## 6. Time tracking integration + +### Rate hierarchy + +When calculating project costs from time entries, rates are resolved in priority order: + +1. **Customer-specific rate** (override per customer contract) +2. **Project-specific rate** (override per project agreement) +3. **Activity-type rate** (e.g., senior consulting vs. junior) +4. **User role rate** (based on employee level/title) +5. **Default company rate** (fallback) + +### Internal cost rate calculation + +``` +Internal rate = (Årslön + Arbetsgivaravgifter 31.42% + OH-påslag) / Produktiva timmar + +Produktiva timmar = Total hours - Semester - Sjukdom - Utbildning - Intern tid +Typically 1,600-1,760 hours/year for full-time employee. +``` + +### Time entry → cost → WIP → invoice pipeline + +``` +Time Entry (hours × activity) + ↓ +Cost Calculation (hours × internal rate → project cost) + ↓ +WIP Calculation (upparbetad intäkt = hours × external rate) + ↓ +Invoice Generation (group unbilled entries, create faktura) + ↓ +Revenue Recognition (clear WIP, book revenue + moms) +``` + +--- + +## 7. Payroll distribution + +### Salary booking with project tags + +When employees work on multiple projects, their salary costs must be distributed based on time reports. + +Monthly flow: +1. Calculate total bruttolön per employee +2. Get time distribution: percentage per project from time entries +3. Book salary proportionally: + +``` +Employee A: 50,000 SEK bruttolön, 60% Project X, 40% Project Y + +Debet 7010 {6 "X"} 30,000 +Debet 7010 {6 "Y"} 20,000 +Kredit 2710 50,000 +``` + +4. Arbetsgivaravgifter follow same distribution: + +``` +Avgifter = 50,000 × 31.42% = 15,710 + +Debet 7510 {6 "X"} 9,426 +Debet 7510 {6 "Y"} 6,284 +Kredit 2730 15,710 +``` + +5. Semesterlöneskuld changes (7090/7290) should follow the same proportional distribution. Unallocated vacation liability distorts project profitability. + +--- + +## 8. Asset register integration + +### Project as cost collector for assets + +Projects serve as cost collectors during development/construction phases. Upon completion: + +1. Accumulated qualifying costs transfer from project accounts to anläggningsregister +2. The asset follows normal avskrivning schedules + +``` +Completion entry: +Debet 1010/1020 (materiell/immateriell tillgång) 500,000 +Kredit 1470 {6 "P001"} OR 38xx {6 "P001"} 500,000 +``` + +### K2 vs K3 constraints + +- K3: both materiella and immateriella egenupparbetade tillgångar can be activated +- K2: only förvärvade immateriella tillgångar; egenupparbetade must be expensed +- Project-specific tangible assets (e.g., construction equipment bought for a project) follow normal asset rules regardless of K2/K3 + +--- + +## 9. Period-end procedures + +At each period close, the engine should execute per-project: + +1. **Update färdigställandegrad**: recalculate based on latest cost data +2. **Adjust upparbetad intäkt**: book changes to 1620/2450 (successiv vinstavräkning) or 1470/4970 (alternativregeln) +3. **Assess cost accruals**: book upplupna kostnader (2990) for work received but not yet invoiced by suppliers +4. **Review prepaid costs**: verify kontogrupp 17xx items still relate to future project work +5. **Evaluate befarade förluster**: compare estimated total cost to contract revenue; if loss expected, book provision immediately +6. **Calculate tax divergence**: for löpande räkning projects, compute difference between accounting and tax revenue +7. **Run overhead allocation**: distribute shared costs using configured fördelningsnycklar + +### Automated checks + +The engine should flag: +- Projects where färdigställandegrad > 90% but status is still ACTIVE (prompt for completion review) +- Projects where actual costs > 110% of budget (trigger cost review) +- Projects with no time entries in last 30 days but status ACTIVE (dormant project) +- Projects with 1620/2450/1470 balances but status CLOSED (incomplete closing) +- Projects approaching end_date with significant remaining work + +--- + +## 10. Validation and error detection + +### Transaction-level validation + +Before saving a journal entry line with a project tag: +1. Verify project status is ACTIVE +2. Check account_dimension_settings: if MANDATORY for this account, project_id must be set +3. Check account_dimension_settings: if NOT_ALLOWED for this account, project_id must be null +4. Verify project's cost_center matches the line's cost_center (if both set and company enforces hierarchy) +5. For construction projects: check reverse_charge flag consistency with VAT account used + +### Period-level validation + +At period close: +1. **Orphaned costs**: identify transactions on project-mandatory accounts lacking project tags +2. **Closed project entries**: detect transactions booked to closed projects +3. **Balance sheet consistency**: verify 1620+1470 totals match subsidiary project ledger +4. **Cross-project netting**: ensure no netting between projects on 1620/2450/1470 (Srf U 14 violation) +5. **Moms consistency**: verify WIP adjustments (1620/2450 entries) carry no moms amounts +6. **Befarad förlust coverage**: all projects with estimated loss have corresponding provision + +### SIE export validation + +Before generating SIE4 export: +1. All projects with transactions have corresponding #OBJEKT declarations +2. Object numbers match between #OBJEKT and #TRANS records +3. Multi-year projects carry correct #OIB/#OUB balances +4. Dimension 6 is declared if any project objects exist +5. No transaction line references both a project and a cost center from different organizational units (if hierarchy enforced)$gb$, + 'horizontal/swedish-project-accounting', + 1, + 1 + ), + ( + 'horizontal/swedish-project-accounting/k2-k3-revenue-recognition', + 'horizontal', + 'K2/K3 Revenue Recognition for Project Accounting', + $gb$K2/K3 Revenue Recognition for Project Accounting: reference for Swedish Project Accounting$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 2568, + '.claude\skills\swedish-project-accounting\references\k2-k3-revenue-recognition.md', + $gb$# K2/K3 Revenue Recognition for Project Accounting + +## Table of contents + +1. K3 Chapter 23: successiv vinstavräkning +2. K2 Chapter 6: uppdrag till fast pris +3. K2 vs K3 comparison +4. Befarade förluster +5. Note disclosures +6. Choosing K2 vs K3 for project-intensive companies + +--- + +## 1. K3 Chapter 23: successiv vinstavräkning + +BFNAR 2012:1 Chapter 23 ("Intäkter") governs revenue recognition for tjänsteuppdrag and entreprenadavtal. + +### The mandatory main rule (punkt 23.18) + +For koncernredovisning: successiv vinstavräkning is MANDATORY for fixed-price contracts. +For juridisk person: successiv vinstavräkning is the default, with an opt-out to alternativregeln per punkt 23.31. + +Revenue and expenses shall be recognized based on the färdigställandegrad at each balance sheet date when ALL FOUR conditions are met: + +1. Uppdragsinkomsten (contract revenue) can be reliably measured +2. It is probable that economic benefits will flow to the entity +3. Färdigställandegrad at balance date can be reliably determined +4. Uppdragsutgifter incurred and remaining can be reliably measured + +If conditions are NOT met: recognize revenue only to the extent of costs incurred (zero profit method) until reliable estimation becomes possible. + +### Calculating färdigställandegrad + +The cost-to-cost method is dominant in Swedish practice: + +``` +Färdigställandegrad = Nedlagda kostnader / Totalt beräknade kostnader +``` + +Other permitted methods (less common): +- Physical measurement of work completed +- Proportion of contract work completed (milestones) + +What counts as nedlagda kostnader: +- Direct materials consumed +- Direct labor (timkostnad × hours from time reporting) +- Subcontractor costs +- Directly attributable overhead (allocated per fördelningsnyckel) +- Depreciation on project-specific equipment + +What does NOT count: +- Costs for future activity (materials delivered but not installed) +- Prepaid costs not yet consumed +- General overhead not attributable to the project + +### Löpande räkning (time-and-materials) + +Punkt 23.17: revenue recognized as work is performed. No completion percentage calculation needed. The practical rule: revenue = hours worked × agreed hourly rate + materials at agreed markup. + +WIP for löpande räkning: upparbetad ej fakturerad = (work performed at agreed rates) - (invoiced amount). If positive: Debet 1620L / Kredit 3xxx. This is straightforward because the "reliable estimation" conditions are inherently met. + +### Alternativregeln in juridisk person (punkt 23.31) + +Available only for pågående arbeten in byggnads-, anläggnings-, hantverks- eller konsultrörelse, as referenced to 17 kap. 23 § IL. + +Under this method: +- Costs are capitalized on 1470 +- Revenue recognized only when the project is substantially complete +- Requires "särskilda skäl" to switch from successiv vinstavräkning (punkt 23.37) +- Once chosen, must be applied consistently to similar contracts + +### Contract modifications and claims + +Punkt 23.20-23.22: contract modifications (tilläggsarbeten) are included in contract revenue when: +- The customer has approved the modification (formally or through actions) +- The amount can be reliably measured + +Incentive payments and claims: included only when the project has progressed far enough that performance targets are probable and measurable. + +### Multi-element contracts + +Punkt 23.9-23.15: a single contract may be split into separate assignments if each has separate pricing and can be accepted/rejected independently. Conversely, multiple contracts with the same customer should be combined if negotiated as a package and performed concurrently/sequentially. + +--- + +## 2. K2 Chapter 6: uppdrag till fast pris + +BFNAR 2016:10 Chapter 6 provides two methods for fixed-price contracts. + +### Huvudregeln (punkt 6.14) + +Similar to successiv vinstavräkning. Revenue recognized based on degree of completion. Same cost-to-cost calculation applies. + +### Alternativregeln (punkt 6.15) + +Revenue recognized only when the assignment is "väsentligen fullgjort" (substantially complete). + +Per Srf U 15: "väsentligen fullgjort" is assessed from the customer's acceptance and realization perspective, not a volume perspective. The work must be in a state where the customer can derive the intended benefit. Remaining work should be minor corrections, documentation, or warranty-related tasks. + +Per Srf U 14: pågående arbeten under alternativregeln must be reported gross per individual project. Netting of projects with surplus (1470) against projects with deficit (liability on 2430-2439) is prohibited. + +### Löpande räkning under K2 + +Punkt 6.12-6.13: revenue recognized as work is performed, identical to K3. The special K2 provision: if a time-and-materials contract includes a price ceiling (takpris), it is still treated as löpande räkning unless the ceiling fundamentally changes the risk profile. + +--- + +## 3. K2 vs K3 comparison for project accounting + +| Aspect | K2 | K3 | +|--------|----|----| +| Fixed-price recognition | Main rule OR alternativregeln | Successiv vinstavräkning mandatory (koncern) | +| T&M recognition | As work performed | As work performed | +| Dev cost capitalization | Prohibited (punkt 10.4) | Allowed under aktiveringsmodellen | +| Uppskjuten skatt | Prohibited | Required | +| Revenue recognition standard | Rule-based, simplified | Principle-based (Chapter 23) | +| Resultaträkning format | Kostnadsslagsindelning only | Kostnadsslags- or funktionsindelning | +| Note disclosures | Simplified | Full disclosures per Chapter 23 | +| Multi-element splitting | Limited guidance | Detailed rules (punkt 23.9-23.15) | +| Befarade förluster | Must recognize immediately | Must recognize immediately | + +### Key K2 limitation: punkt 10.4 + +Egenupparbetade immateriella tillgångar får inte aktiveras. ALL internally generated intangible assets (software, patents, development work) must be expensed immediately. Even a partially purchased asset becomes "tainted" as internally generated if incorporated into new development. Companies needing to capitalize development costs MUST use K3. + +This is the single most impactful difference for project-intensive tech/R&D companies. A software company spending 2 MSEK/year on development cannot show this as an asset under K2, directly reducing equity and potentially triggering kontrollbalansräkning. + +--- + +## 4. Befarade förluster + +### K3 requirement (punkt 23.32) + +If total estimated contract costs exceed total contract revenue, the expected loss must be recognized as a cost IMMEDIATELY, regardless of: +- How far the project has progressed +- Whether work has even begun +- The färdigställandegrad + +The full expected loss is recognized, not just the loss proportional to completion. + +### K2 requirement + +Same principle applies under both huvudregeln and alternativregeln. An anticipated loss must be expensed in full when identified. + +### Detection logic for software implementation + +Flag a project for befarad förlust review when: + +``` +IF (actual_costs_to_date + estimated_remaining_costs) > total_contract_revenue +THEN expected_loss = total_estimated_costs - total_contract_revenue + provision_needed = expected_loss - any_existing_provision +``` + +The system should alert when: +1. Estimated remaining costs are updated upward +2. Contract revenue is revised downward +3. Actual costs exceed the original budget pace by >15% +4. Färdigställandegrad lags behind the time-elapsed ratio by >25% + +### Booking pattern + +``` +Debet 4970 / 78xx {6 "project"} [loss amount] +Kredit 2290 {6 "project"} [loss amount] +``` + +If the loss estimate later decreases, the provision is reversed (but never below zero, and never creating a profit provision). + +--- + +## 5. Note disclosures + +### K3 större företag (punkter 23.28-23.30) + +The årsredovisning must include notes disclosing: +1. Revenue recognized from construction/service contracts in the period +2. Methods used to determine färdigställandegrad +3. Aggregate amount of costs incurred and recognized profits (less recognized losses) to date +4. Amount of advances received +5. Amount of retentions (innehållna belopp) +6. Gross amount due from customers (tillgång): costs + recognized profits - recognized losses - progress billings, when positive +7. Gross amount due to customers (skuld): same calculation, when negative + +### K3 mindre företag + +Simplified disclosures. Must disclose: +- Accounting principles for revenue recognition +- Principles for pågående arbeten + +### K2 + +Chapter 18 and 19 note requirements. Must disclose: +- Redovisningsprinciper including method for pågående arbeten +- Whether huvudregeln or alternativregeln is applied + +### Balance sheet presentation + +Under ÅRL: +- 1620 (upparbetad ej fakturerad intäkt): presented under Kortfristiga fordringar +- 1470 (pågående arbeten): presented under Varulager > Pågående arbete för annans räkning +- 2450 (fakturerad ej upparbetad intäkt): presented under Kortfristiga skulder + +--- + +## 6. Choosing K2 vs K3 for project-intensive companies + +### Factors favoring K3 + +- Need to capitalize development costs (software, R&D) +- Large fixed-price construction contracts spanning multiple years (successiv vinstavräkning gives smoother P&L) +- Want to present both kostnadsslags- and funktionsindelad resultaträkning +- Revenue recognition complexity requires principle-based framework +- Audit requirement makes K3 transition cost marginal + +### Factors favoring K2 + +- Simple project structure (few projects, all löpande räkning) +- No internally generated intangible assets +- Preference for the alternativregeln's simplicity (recognize at completion) +- No audit requirement, small company wanting minimal compliance burden +- Construction company preferring to defer revenue recognition for tax timing + +### Tax implications of the choice + +Under the materiellt samband principle, accounting choices flow to taxation. A K3 company using successiv vinstavräkning recognizes taxable income earlier than a K2 company using alternativregeln on the same project. However, the alternativregeln provides tax deferral (matched by delayed cost relief via 1470 capitalization), which can be a significant cash flow benefit for growing construction companies. + +The exception: löpande räkning contracts where tax treatment can diverge from accounting (HFD 2011 ref. 20). See tax-and-grants.md for details.$gb$, + 'horizontal/swedish-project-accounting', + 1, + 1 + ), + ( + 'horizontal/swedish-project-accounting/sie4-project-dimensions', + 'horizontal', + 'SIE4 Project Dimensions', + $gb$SIE4 Project Dimensions: reference for Swedish Project Accounting$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 2058, + '.claude\skills\swedish-project-accounting\references\sie4-project-dimensions.md', + $gb$# SIE4 Project Dimensions + +## Table of contents + +1. Dimension system overview +2. Record types for dimensions +3. Transaction encoding with objects +4. Object balances and budgets +5. Import/export considerations +6. Mapping to Fortnox/Visma/Bokio + +--- + +## 1. Dimension system overview + +SIE4 (Version 4B, 2008-09-30) provides a standardized encoding of dimensional data through reserved and user-defined dimensions. + +### Reserved dimensions + +| Dim # | Name | Multi-year | Notes | +|-------|------|-----------|-------| +| 1 | Kostnadsställe/Resultatenhet | No (resets annually) | Most commonly used | +| 2 | Kostnadsbärare | No | Sub-dimension of 1 (declared with #UNDERDIM) | +| 3-5 | Reserved | - | Not used in practice | +| 6 | Projekt | Yes (accumulates across years) | Second most common | +| 7 | Anställd | - | Employee tracking | +| 8 | Kund | - | Customer tracking | +| 9 | Leverantör | - | Supplier tracking | +| 10 | Faktura | - | Invoice tracking | +| 11-19 | Reserved | - | For future use | +| 20+ | Freely available | User-defined | Custom dimensions | + +Dimensions using reserved numbers (1-19) need not be declared with #DIM. Non-reserved dimensions (20+) must be explicitly declared. + +--- + +## 2. Record types for dimensions + +### #DIM -- Declare a dimension + +Syntax: `#DIM dimension_no "name"` + +``` +#DIM 6 "Projekt" +#DIM 1 "Kostnadsställe" +``` + +Reserved dimensions don't need this declaration but it is recommended for clarity. + +### #UNDERDIM -- Declare a sub-dimension + +Syntax: `#UNDERDIM dimension_no "name" parent_dimension_no` + +``` +#UNDERDIM 2 "Kostnadsbärare" 1 +``` + +Dimension 2 is a sub-dimension of dimension 1. Each object in dimension 2 belongs to exactly one object in dimension 1. + +### #OBJEKT -- Declare an object within a dimension + +Syntax: `#OBJEKT dimension_no "object_no" "object_name"` + +``` +#OBJEKT 6 "P2026-001" "Customer Project Alpha" +#OBJEKT 6 "P2026-002" "Internal R&D Sprint 4" +#OBJEKT 1 "100" "Stockholm Office" +#OBJEKT 1 "200" "Gothenburg Branch" +``` + +Object numbers are strings (quoted). They can contain alphanumeric characters and hyphens. Maximum length varies by importing system but 20 characters is safe. + +--- + +## 3. Transaction encoding with objects + +### #TRANS with object list + +Objects are attached to transaction lines via an object list in braces `{}`. The object list contains pairs of `dimension_no "object_no"`. + +Syntax: `#TRANS account_no {dim_no "obj_no" dim_no "obj_no" ...} amount [transdate] [transtext] [quantity] [sign]` + +### Examples + +Single project tag: +``` +#TRANS 3041 {6 "P2026-001"} -100000.00 +``` + +Multiple dimensions (project + cost center): +``` +#TRANS 3041 {1 "100" 6 "P2026-001"} -100000.00 +``` + +No dimensional tags (empty braces): +``` +#TRANS 1510 {} 125000.00 +``` + +### Complete verification example + +A consulting invoice for 100,000 SEK (25% moms) on project P2026-001, cost center 100: + +``` +#VER A 101 20260115 "Konsultarvode Projekt Alpha" +{ + #TRANS 1510 {} 125000.00 + #TRANS 2611 {} -25000.00 + #TRANS 3041 {1 "100" 6 "P2026-001"} -100000.00 +} +``` + +The receivable (1510) and VAT liability (2611) carry no project tags. Only the revenue account (3041) is dimensionally tagged. + +### WIP adjustment example (successiv vinstavräkning) + +``` +#VER E 45 20261231 "Upparbetad ej fakturerad Q4" +{ + #TRANS 1620 {6 "P2026-001"} 200000.00 + #TRANS 3041 {6 "P2026-001"} -200000.00 +} +``` + +### WIP capitalization example (alternativregeln) + +``` +#VER E 46 20261231 "Pågående arbete period 12" +{ + #TRANS 1470 {6 "P2026-003"} 350000.00 + #TRANS 4970 {6 "P2026-003"} -350000.00 +} +``` + +--- + +## 4. Object balances and budgets + +### #OIB -- Object opening balance + +Syntax: `#OIB year_index account_no {dim_no "obj_no"} amount` + +``` +#OIB 0 1470 {6 "P2026-001"} 450000.00 +#OIB 0 1620 {6 "P2026-002"} 85000.00 +``` + +Year index 0 = current year, -1 = previous year. + +### #OUB -- Object closing balance + +Syntax: `#OUB year_index account_no {dim_no "obj_no"} amount` + +``` +#OUB 0 1470 {6 "P2026-001"} 580000.00 +``` + +### #PSALDO -- Period object balance + +Syntax: `#PSALDO year_index period account_no {dim_no "obj_no"} amount` + +``` +#PSALDO 0 202601 4010 {6 "P2026-001"} 49655.00 +#PSALDO 0 202601 3041 {6 "P2026-001"} -125000.00 +``` + +### #PBUDGET -- Period object budget + +Syntax: `#PBUDGET year_index period account_no {dim_no "obj_no"} amount` + +``` +#PBUDGET 0 202601 4010 {6 "P2026-001"} 55000.00 +``` + +Budget data enables budget vs actual comparison per project. + +--- + +## 5. Import/export considerations + +### SIE Type 4E (export, .SE files) + +- All verifications with full object specifications are included +- #DIM and #OBJEKT declarations are recommended +- #KONTO declarations should cover all accounts used +- Objects referenced in transactions should all have corresponding #OBJEKT records + +### SIE Type 4I (import, .SI files) + +- Declarations are optional but recommended +- Transactions referencing undeclared objects: behavior varies by system + - Fortnox: auto-creates the object + - Visma: rejects the import with an error + - BL Administration: prompts the user +- Best practice: always include #OBJEKT declarations for all referenced objects + +### Encoding considerations + +SIE files use CP437 encoding by default (#FLAGGA 0). UTF-8 is indicated by #FLAGGA 1. Project names with å/ä/ö must be encoded correctly. See the swedish-sie-import-export skill for encoding details. + +### Multi-dimensional transactions + +A single #TRANS line can carry objects from multiple dimensions simultaneously. The object list is unordered (dimension numbers identify which dimension each object belongs to). Parser implementation should handle: + +- Zero objects: `{}` +- Single dimension: `{6 "P001"}` +- Multiple dimensions: `{1 "100" 6 "P001"}` +- Same dimension appearing only once (duplicates are invalid) + +--- + +## 6. Mapping to Fortnox/Visma/Bokio + +### Fortnox + +Fortnox exposes projects via `/3/projects/{ProjectNumber}` in its API. + +Project properties: +- ProjectNumber (string, user-assigned) +- Description +- Status: ONGOING or COMPLETED +- StartDate, EndDate +- ProjectLeader +- ContactPerson + +Voucher rows carry independent `Project` and `CostCenter` string fields. Both are optional per row. The VoucherRow object also has `CostCenterSettings` and `ProjectSettings` properties per account: ALLOWED, MANDATORY, or NOT_ALLOWED. + +SIE mapping: Project → dimension 6, CostCenter → dimension 1. Direct and unambiguous. + +Limitation: voucher search in Fortnox API only indexes header-level project tags, not row-level. A voucher with project P001 on individual rows but no header-level project will not appear in project-filtered searches. + +### Visma + +Visma uses renamable Objekt 1 and Objekt 2 types. The **Flerårigt** flag determines behavior: +- Flerårigt = true: balances accumulate across fiscal years (project behavior) +- Flerårigt = false: balances reset annually (cost center behavior) + +Visma.net adds **project balancing**: objects marked "Balanserat" get income/expense rebooked to balance accounts at year-end. At project close, a "resultatföring" operation transfers accumulated balance to the real P&L. + +SIE mapping: Flerårigt objects → dimension 6, non-Flerårigt → dimension 1. The mapping must respect the Flerårigt flag during SIE export. + +### Bokio + +Bokio uses unlimited **Tags** organized in **Tag Groups** functioning as dimensions. Users can create groups like "Projekt", "Avdelning", "Region" etc. + +Key differences: +- A single transaction row can be split across multiple tags by percentage +- Tags are a reporting overlay; they do NOT export to SIE files as standard dimensions +- No built-in WIP accounting or revenue recognition logic + +SIE mapping: no direct mapping. If importing Bokio data via SIE and the source had project tags, they are lost. Conversely, SIE imports into Bokio will not carry dimensional data into the tag system. + +### Data model implication + +For an AI-native bookkeeping engine supporting SIE interchange: +- Use SIE dimension numbers (1 for KS, 6 for project) as the canonical dimension identifiers +- Store object codes as strings (matching SIE format) +- Support per-account dimension enforcement (ALLOWED/MANDATORY/NOT_ALLOWED) +- Maintain multi-year balance accumulation for dimension 6 objects +- Reset dimension 1 balances at fiscal year boundary (unless explicitly overridden)$gb$, + 'horizontal/swedish-project-accounting', + 1, + 1 + ), + ( + 'horizontal/swedish-project-accounting/tax-and-grants', + 'horizontal', + 'Tax Implications and Grant Accounting for Projects', + $gb$Tax Implications and Grant Accounting for Projects: reference for Swedish Project Accounting$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 2650, + '.claude\skills\swedish-project-accounting\references\tax-and-grants.md', + $gb$# Tax Implications and Grant Accounting for Projects + +## Table of contents + +1. Materiellt samband principle +2. Tax treatment of pågående arbeten +3. Löpande räkning tax divergence +4. Forskningsavdrag (R&D payroll deduction) +5. Aktivering av utvecklingsutgifter +6. EU grants and offentliga bidrag +7. Omvänd skattskyldighet in construction + +--- + +## 1. Materiellt samband principle + +Under 14 kap. IL (Inkomstskattelagen), the reported accounting result is the starting point for taxable income. Revenue recognition choices in the financial accounts flow directly to taxation. This means: + +- A K3 company using successiv vinstavräkning recognizes taxable income earlier (as completion progresses) +- A K2 company using alternativregeln defers taxable income until project completion +- Switching between methods has immediate tax consequences +- Consistency is required: the same method must be used for both accounting and tax on identical contract types + +The tax authority (Skatteverket) follows the accounting treatment unless specific tax provisions override it. + +--- + +## 2. Tax treatment of pågående arbeten + +### Fixed-price contracts (uppdrag till fast pris) + +17 kap. 24-32 §§ IL govern WIP valuation for tax purposes. + +Under the alternativregeln, pågående arbeten (1470) may be valued at: +- Direct costs (direkt hänförliga utgifter) +- With the option to apply the 97% rule (17 kap. 4 § IL): value WIP at 97% of anskaffningsvärde, providing a small tax buffer + +Anti-avoidance provision (17 kap. 31 § IL): revenue must be recognized when invoicing has been significantly delayed beyond god affärssed. A company cannot indefinitely defer revenue by simply not invoicing a completed project. + +Under successiv vinstavräkning, the accounting-based revenue recognition flows directly to tax via the materiellt samband. No separate tax adjustment is needed for fixed-price contracts. + +### INK2 adjustments + +When accounting and tax treatment diverge (see section 3), adjustments are made in the inkomstdeklaration: +- INK2 ruta 4.3 c: Bokfört resultat justeras med redovisade ej skattepliktiga intäkter +- INK2 ruta 4.5: Skattemässiga justeringar av intäkter och kostnader + +The engine should track which revenue items require INK2 adjustment per project. + +--- + +## 3. Löpande räkning tax divergence + +This is the most critical tax-accounting divergence in project accounting. + +### The rule + +For time-and-materials contracts (löpande räkning), taxation is based on **invoiced amounts**, even when accounting applies successiv vinstavräkning and recognizes upparbetad ej fakturerad intäkt. + +Legal basis: HFD rulings (RÅ 2006 ref. 28, HFD 2011 ref. 20) established that: +- Upparbetad ej fakturerad intäkt (1620) on löpande räkning contracts is NOT taxable +- Only invoiced amounts create skattemässig intäkt +- This applies regardless of which accounting method is used + +### Practical consequence + +The bookkeeping engine must maintain DUAL revenue figures for every T&M project: +1. **Accounting revenue**: upparbetad intäkt (hours × rate, reflecting work performed) +2. **Tax revenue**: fakturerad intäkt (amounts on issued invoices) + +The difference creates a temporary tax difference: +- If accounting revenue > invoiced: positive temporary difference → uppskjuten skatteskuld (K3 only; K2 prohibits uppskjuten skatt) +- If invoiced > accounting revenue: negative temporary difference → uppskjuten skattefordran + +### INK2 handling + +At year-end, the difference between accounting and tax revenue for T&M projects must be reported as an adjustment in INK2. The engine should automatically calculate this as: `Σ(accounting_revenue - invoiced_revenue)` across all löpande räkning projects. + +--- + +## 4. Forskningsavdrag (R&D payroll deduction) + +### Current rules (Lag 2023:747) + +Companies employing personnel working on R&D (forskning eller utveckling) receive a 20% reduction in arbetsgivaravgifter. + +Requirements per employee: +- ≥50% of working time spent on qualifying R&D activities +- ≥15 hours per month on R&D + +Cap: SEK 3,000,000 per month per group (koncern). At 31.42% arbetsgivaravgifter, this allows deduction on salary costs up to approximately 9.5 MSEK/month. + +### Project accounting connection + +Project-level time tracking is ESSENTIAL for forskningsavdrag compliance: +- Time reports must distinguish R&D hours from non-R&D hours per employee +- Projects must be classified as R&D or non-R&D +- Monthly time summaries per employee must demonstrate the 50%/15h thresholds +- Documentation must be retained for Skatteverket review + +The engine should: +1. Allow project-level R&D classification +2. Aggregate employee time across R&D-classified projects +3. Calculate monthly R&D percentage per employee +4. Flag employees meeting/not meeting the threshold +5. Calculate the deduction amount for arbetsgivardeklaration + +### Proposed reform (SOU 2025:3) + +A reform proposal would replace the payroll deduction with either: +- A 300% cost deduction for qualifying R&D expenses, OR +- A 20% refundable tax credit (skattereduktion) + +If adopted, project-level R&D cost tracking (not just time) would become the basis. The engine should be prepared to track total project costs for R&D-classified projects. + +--- + +## 5. Aktivering av utvecklingsutgifter + +### K3 Chapter 18 (immateriella tillgångar) + +Companies may choose between: +- **Aktiveringsmodellen**: capitalize qualifying development costs as intangible assets +- **Kostnadsföringsmodellen**: expense all development costs immediately + +Once chosen, the model applies to all development activities (no cherry-picking). + +### Activation criteria (punkt 18.12) + +ALL SIX conditions must be demonstrated: +1. Technical feasibility of completing the asset +2. Intention to complete and use/sell +3. Ability to use or sell the asset +4. How the asset will generate probable future economic benefits +5. Availability of adequate resources (technical, financial) to complete +6. Ability to reliably measure expenditure attributable to the asset during development + +Research-phase costs (punkt 18.11) must ALWAYS be expensed, regardless of model choice. + +### Project accounting for activation + +The project serves as the cost collector during the development phase: +1. Classify project as "development" or "research" (or mixed, requiring phase separation) +2. Accumulate qualifying costs on the project: direct salary, materials, directly attributable overhead +3. At period end, capitalize accumulated costs: Debet 10xx (immateriell tillgång) / Kredit 38xx (aktiverat arbete) +4. Transfer equivalent amount to fond för utvecklingsutgifter (restricted equity per ÅRL 4 kap. 2 §) +5. Begin amortization when the asset is ready for use (max 10 years per K3 18.18, default 5 years per ÅRL 4 kap. 4 §) + +### Tax treatment + +Since 2019: interest costs may NOT be included in the tax-basis anskaffningsvärde, even when K3 allows their inclusion in accounting. The engine must track a separate tax-basis value excluding capitalized interest. + +Skatteverket position: aktivering following K3 creates a materiellt samband. The capitalized amount is tax-deductible through annual avskrivning, not at the time of expenditure. The fund för utvecklingsutgifter has no tax effect. + +### K2 prohibition + +Punkt 10.4: egenupparbetade immateriella tillgångar får inte aktiveras. Everything must be expensed. A partially purchased asset becomes tainted as internally generated if incorporated into unique development. This is a hard constraint with no exceptions. + +--- + +## 6. EU grants and offentliga bidrag + +### K3 Chapter 24 + +Offentliga bidrag are recognized based on performance conditions: + +- **Grants with future performance requirements**: recognized as revenue when performance conditions are satisfied +- **Grants without conditions**: recognized as revenue when received +- **Grants related to assets**: reduce the carrying amount of the asset OR recognized as intäkt over the asset's useful life + +### BAS accounts + +| Account | Purpose | +|---------|---------| +| 3980 | Erhållna statliga bidrag | +| 3981 | Erhållna EU-bidrag | +| 3989 | Övriga erhållna bidrag | +| 2880 | Skuld offentliga bidrag (liability for unearned grants) | +| 1790 | Övriga fordringar (approved but unreceived grants) | + +### Project accounting for grants + +Grant-funded projects require tracking: +1. Total granted amount and disbursement schedule +2. Eligible costs (per grant agreement, often narrower than accounting costs) +3. Co-financing requirements (own contribution percentage) +4. Reporting periods and deadlines +5. Repayment risk if conditions are not met + +The engine should support: +- Grant budget vs actual tracking per project +- Eligible cost filtering (which cost categories qualify) +- Period reporting aligned to grant reporting periods (often different from fiscal year) +- Automatic matching of received payments to 2880 liability releases + +### VAT on grants + +Grants are generally not subject to VAT (not consideration for a supply). However, if a grant is conditional on delivering specific goods/services to the grantor, it may be reclassified as consideration and become subject to moms. The classification affects both the VAT treatment and the BAS account used (3xxx vs 39xx). + +--- + +## 7. Omvänd skattskyldighet in construction + +### When it applies + +Reverse charge VAT applies in the construction sector when: +1. The seller provides byggtjänster (construction services) +2. The buyer is a company that itself "more than temporarily" provides construction services + +### Covered services + +- Bygg- och anläggningsarbeten +- Bygginstallationer (VVS, el, ventilation) +- Slutbehandling av byggnader (målning, golvläggning) +- Rivningsarbeten +- Uthyrning av personal för byggtjänster +- Uthyrning av maskiner med förare för bygg + +### NOT covered + +- Arkitektverksamhet +- Byggkonsultverksamhet (engineering, project management) +- Projektledning (unless physically performing construction) +- Leverans av byggmaterial utan installation +- Städning (unless part of a construction contract) + +### Project accounting impact + +Each project must track whether reverse charge applies, and this can vary within a single project if there are mixed services. The engine must: + +1. Per-project (or per-transaction) reverse charge flag +2. Seller perspective: invoice utan moms, buyer self-assesses +3. Buyer perspective: report both utgående and ingående moms (BAS 2614/2645 for 25%) +4. Momsdeklaration: reverse charge amounts in ruta 24 (byggtjänster) and ruta 30 (ingående moms) + +A construction project may have some subcontractors subject to reverse charge and others not (e.g., an architect is not subject to reverse charge). Per-line handling is required.$gb$, + 'horizontal/swedish-project-accounting', + 1, + 1 + ), + ( + 'horizontal/swedish-sie-import-export', + 'horizontal', + 'Swedish SIE Import Export', + $gb$Swedish SIE4 file format: parsing, validation, generation, troubleshooting. All record types (#VER, #TRANS, #IB, #UB, #RES, #KONTO, #RAR, #FLAGGA, #KSUMMA, #SRU, etc.), SIE types 1-4, encoding detection (CP437/UTF-8/Latin-1), mojibake diagnosis, verification balance integrity, IB/UB continuity, multi-year migration, diffing, audit trail under BFL, BAS account classes, SRU tax codes, and error patterns. Trigger on ANY SIE question: import, export, parsing, validation, encoding issues, garbled å/ä/ö, unbalanced verifications, IB/UB mismatch, #FLAGGA, SIE migration between Fortnox/Visma/BL/SpeedLedger/Bokio, .SE/.SI files, verification series, or code reading/writing SIE data. Always use over training data.$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 2076, + '.claude\skills\swedish-sie-import-export\SKILL.md', + $gb$--- +name: swedish-sie-import-export +description: > + Swedish SIE4 file format: parsing, validation, generation, troubleshooting. All record types + (#VER, #TRANS, #IB, #UB, #RES, #KONTO, #RAR, #FLAGGA, #KSUMMA, #SRU, etc.), SIE types 1-4, + encoding detection (CP437/UTF-8/Latin-1), mojibake diagnosis, verification balance integrity, + IB/UB continuity, multi-year migration, diffing, audit trail under BFL, BAS account classes, + SRU tax codes, and error patterns. Trigger on ANY SIE question: import, export, parsing, + validation, encoding issues, garbled å/ä/ö, unbalanced verifications, IB/UB mismatch, + #FLAGGA, SIE migration between Fortnox/Visma/BL/SpeedLedger/Bokio, .SE/.SI files, + verification series, or code reading/writing SIE data. Always use over training data. +--- + +# Swedish SIE4 Import/Export + +Deterministic reference for parsing, validating, generating, and troubleshooting SIE4 files. + +## Quick orientation + +SIE4 (Standard Import Export, version 4B, 2008) is Sweden's universal accounting data interchange format. Tagged plain-text, one record per line, `#LABEL` prefix, space-delimited fields. + +**File extensions**: `.SE` = export, `.SI` = import. + +**Five subtypes**: +- **Type 1**: Closing balances + chart of accounts + SRU codes (tax returns) +- **Type 2**: Type 1 + monthly period balances (#PSALDO, #PBUDGET) +- **Type 3**: Type 2 + object-level balances, dimensions +- **Type 4E**: Type 3 + all verifications (#VER/#TRANS) = full audit trail +- **Type 4I**: Verifications only, minimal header = subsystem import (payroll, POS) + +## Core invariants (never violate) + +1. **Verification balance**: Sum of all #TRANS amounts within a #VER block = 0.00 exactly +2. **IB/UB continuity**: UB(year N, account) = IB(year N+1, account) for all balance sheet accounts (1xxx-2xxx) +3. **Result account reset**: IB for income statement accounts (3xxx-9xxx) must be zero at year start +4. **#FLAGGA idempotency**: 0 = not imported, 1 = already imported. Prevents double-import. +5. **Sequential numbering**: Verifications within a series appear in ascending verno order +6. **Sign convention**: Debit = positive, Credit = negative (in #TRANS, #IB, #UB, #RES) + +## Field format rules + +- **Quoting**: Double quotes around fields with spaces. Escape internal quotes as `\"` +- **Dates**: YYYYMMDD. Periods: YYYYMM +- **Amounts**: Dot decimal separator, max 2 decimals, no plus sign +- **Block delimiters**: `{` and `}` each on own line around #TRANS entries in #VER +- **Object lists**: `{dimension_no "object_no"}` within balance/transaction items +- **Forward compat**: Readers must ignore unknown labels and unknown trailing fields + +## When to read reference files + +For the **complete record type specification** (all labels, fields, compulsory/optional rules, #KSUMMA CRC-32 details): +→ Read `references/record-types.md` + +For **encoding detection, mojibake diagnosis, and per-software encoding behaviors**: +→ Read `references/encoding.md` + +For **all validation rules, error patterns, and remediation procedures**: +→ Read `references/validation-rules.md` + +For **BAS account classes, SRU code mappings, and account type behaviors**: +→ Read `references/bas-sru.md` + +## Verification structure example + +``` +#VER A 1 20240115 "Kundfaktura 2024-001" +{ + #TRANS 1510 {} 12500.00 + #TRANS 2611 {} -2500.00 + #TRANS 3010 {1 "100" 6 "P01"} -10000.00 +} +``` + +Sum: 12500 + (-2500) + (-10000) = 0. Valid. + +## Verification series conventions (Swedish practice) + +- **A** = Huvudserie (main/general) +- **B** = Automatkonteringar (auto-postings) +- **F** = Kundfakturor (customer invoices) +- **I** = Inbetalningar (customer payments) +- **J** = Bokslutsverifikationer (year-end closing) +- **L** = Leverantörsfakturor (supplier invoices) +- **N** = Löner (payroll) +- **U** = Utbetalningar (supplier payments) + +Series and numbering restart each fiscal year. 4I import files may have empty series/verno. + +## Year-end closing and IB/UB flow + +1. Closing entries (J-series) zero out all result accounts (3xxx-8xxx) by transferring net result to account 2099 (Årets resultat) +2. After closing: UB for result accounts = 0, UB for equity reflects accumulated result +3. These UB values become IB for next year +4. #RES records capture what result accounts held during the year before closing + +## Multi-year handling + +- `#RAR 0 20240101 20241231` = current fiscal year +- `#RAR -1 20230101 20231231` = previous year +- Only one chart of accounts per file (current year's) +- Broken fiscal years supported: `#RAR 0 20240701 20250630` +- #PSALDO/#PBUDGET store monthly change (not cumulative), period = YYYYMM + +## Migration between systems + +Standard path: export SIE4E per fiscal year from source, import into target starting with current year, verify IB/UB continuity, remap verification series to avoid collisions. + +**What SIE does NOT carry**: VAT codes (must be manually configured post-import), customer/supplier subledgers (reskontror), processing history, underlying digital documents/vouchers. + +Post-migration validation: compare balance reports, trial balances, verification counts per series, Swedish character rendering. + +## Audit trail under BFL + +- **7-year retention** after calendar year in which fiscal year ended (BFL 7:1) +- **Storage in Sweden** required (EU/EEA with Skatteverket notification; non-EU requires permission) +- **Immutability**: locked entries cannot be modified. Corrections via separate correction verification only. +- **#FLAGGA**: anti-duplication control. Exporter writes 0, importer sets to 1 after success. +- **SIE is not complete archiving**: lacks processing history and system documentation required by BFL. +- As of July 2024, paper originals may be destroyed after proper digitization. + +## Encoding quick reference + +The spec mandates CP437 (`#FORMAT PC8`), but modern cloud software exports UTF-8. Many programs write `#FORMAT PC8` regardless of actual encoding. + +**Detection priority**: UTF-8 BOM → strict UTF-8 decode → CP437 byte scan (0x84/0x86/0x8E/0x8F/0x94/0x99) → Latin-1 byte scan (0xC4/0xC5/0xD6/0xE4/0xE5/0xF6) → check #PROGRAM (cloud = UTF-8, desktop = CP437) → fall back Latin-1. + +**Mojibake signatures**: `Ã¥`/`ä`/`ö` = UTF-8 read as Latin-1. `†`/`„`/`"` = CP437 read as Win-1252. `σ`/`Σ`/`÷` = Latin-1 read as CP437. + +**#KSUMMA note**: CRC-32 is calculated on CP437 byte values per spec. Skip KSUMMA validation when non-CP437 encoding is detected. + +For full encoding tables and per-software behaviors, read `references/encoding.md`. + +## Common errors (quick lookup) + +| Error | Cause | Fix | +|-------|-------|-----| +| Unbalanced verification | #TRANS sum ≠ 0 | Add öresutjämning (3741) or fix amounts | +| IB/UB mismatch | Incomplete year-end closing | Create adjustment verification in opening period | +| Garbled å/ä/ö | Encoding mismatch | Detect actual encoding, re-decode | +| Duplicate verno | Series collision on import | Remap to unused series | +| Undeclared account | #TRANS references account not in #KONTO | Add #KONTO or map to existing | +| #FLAGGA 1 | File already imported | Verify not duplicate, manually reset to 0 | +| Missing #RAR | Can't determine fiscal year | Reject file or infer from verification dates | +| Non-zero IB on 3xxx-9xxx | Incomplete closing in source | Run closing entries before export | +| Truncated file | #KSUMMA opening present, closing missing | Reject, re-export from source | +| No VAT codes post-import | SIE carries no moms info | Manually configure in target system | + +For the full error catalog with detailed remediation, read `references/validation-rules.md`. + +--- + +## Loadable references + +The reference files named above are NOT included in this body. When a question genuinely needs that depth, load the specific one on demand with `gnubok_load_skill`, and only then: + +- `references/bas-sru.md` → `gnubok_load_skill("horizontal/swedish-sie-import-export/bas-sru")`: BAS Kontoplan and SRU Code Reference for SIE4 +- `references/encoding.md` → `gnubok_load_skill("horizontal/swedish-sie-import-export/encoding")`: SIE4 Character Encoding Reference +- `references/record-types.md` → `gnubok_load_skill("horizontal/swedish-sie-import-export/record-types")`: SIE4 Record Type Reference +- `references/validation-rules.md` → `gnubok_load_skill("horizontal/swedish-sie-import-export/validation-rules")`: SIE4 Validation Rules and Error Patterns +$gb$, + NULL, + 3, + 1 + ), + ( + 'horizontal/swedish-sie-import-export/bas-sru', + 'horizontal', + 'BAS Kontoplan and SRU Code Reference for SIE4', + $gb$BAS Kontoplan and SRU Code Reference for SIE4: reference for Swedish SIE Import Export$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1550, + '.claude\skills\swedish-sie-import-export\references\bas-sru.md', + $gb$# BAS Kontoplan and SRU Code Reference for SIE4 + +## Account class hierarchy + +BAS uses a 4-digit decimal system: first digit = class, first two = group, all four = specific account. + +| Class | #KTYP | Swedish | English | Report | IB/UB? | +|-------|-------|---------|---------|--------|--------| +| 1xxx | T | Tillgångar | Assets | Balance sheet | Yes (#IB/#UB) | +| 2xxx | S | Eget kapital och skulder | Equity & liabilities | Balance sheet | Yes (#IB/#UB) | +| 3xxx | I | Rörelseintäkter | Operating revenue | Income statement | No (#RES) | +| 4xxx | K | Varuinköp/material | Cost of goods | Income statement | No (#RES) | +| 5xxx | K | Övriga externa kostnader (lokaler, förbrukningsinventarier) | Other external costs | Income statement | No (#RES) | +| 6xxx | K | Övriga externa kostnader (kontorsmaterial, telefon, reklam) | Other external costs | Income statement | No (#RES) | +| 7xxx | K | Personalkostnader, avskrivningar | Personnel, depreciation | Income statement | No (#RES) | +| 8xxx | I/K | Finansiella poster, bokslutsdispositioner, skatt | Financial items, appropriations, tax | Income statement | No (#RES) | +| 9xxx | - | Internredovisning | Internal/management | Off-report | N/A | + +## Account type (#KTYP) behavior in SIE4 + +| Type | Increases on | Decreases on | Normal balance | SIE sign convention | +|------|-------------|--------------|----------------|---------------------| +| T (Asset) | Debit (+) | Credit (-) | Positive | IB/UB positive = normal | +| S (Liability/Equity) | Credit (-) | Debit (+) | Negative | IB/UB negative = normal | +| I (Income) | Credit (-) | Debit (+) | Negative | RES negative = revenue | +| K (Cost) | Debit (+) | Credit (-) | Positive | RES positive = expense | + +## Key accounts for SIE validation + +These accounts appear frequently in SIE files and have special significance: + +### Balance sheet (1xxx-2xxx) +- **1510** Kundfordringar (accounts receivable) +- **1910** Kassa (cash) +- **1920** PlusGiro +- **1930** Företagskonto/bank (business bank account) +- **1940** Övriga bankkonton +- **2081** Aktiekapital (share capital, AB only) +- **2091** Balanserad vinst/förlust (retained earnings) +- **2098** Vinst/förlust föregående år +- **2099** Årets resultat (current year net income, used in closing) +- **2440** Leverantörsskulder (accounts payable) +- **2510** Skatteskulder (tax liabilities) +- **2610** Utgående moms 25% (output VAT 25%) +- **2620** Utgående moms 12% +- **2630** Utgående moms 6% +- **2640** Ingående moms (input VAT) +- **2650** Redovisning av moms (VAT settlement account) +- **2710** Personalens källskatt (employee withholding tax) +- **2730** Lagstadgade sociala avgifter (statutory social charges) +- **2920** Upplupna semesterlöner (accrued vacation pay) + +### Income statement (3xxx-8xxx) +- **3010-3099** Försäljning varor/tjänster (sales revenue) +- **3740** Öres-/avrundningsdifferens (rounding differences) +- **3741** Öresutjämning (øre equalization, used to balance rounding) +- **4010** Varuinköp (cost of goods purchased) +- **5010** Lokalhyra (office rent) +- **6110** Kontorsmaterial (office supplies) +- **6212** Mobiltelefon +- **6230** Datakommunikation (internet/data) +- **6570** Bankkostnader (bank charges) +- **7010** Löner (salaries) +- **7210** Arbetsgivaravgifter (employer contributions) +- **7510** Avskrivningar maskiner/inventarier (depreciation) +- **8310** Ränteintäkter (interest income) +- **8410** Räntekostnader (interest expenses) +- **8910** Skatt på årets resultat (income tax on profit, AB) +- **8999** Årets resultat (result for the year, closing account) + +## SRU codes + +### What SRU codes are + +SRU (Standardiserade Räkenskapsutdrag) codes are 4-digit numeric codes that map BAS accounts to specific fields in Swedish income tax declaration forms. They enable automated transfer of account balances to tax returns. + +### SRU in SIE files + +The `#SRU` record maps an account to its SRU code: +``` +#SRU 1510 7214 +#SRU 3010 7410 +``` + +Multiple #SRU entries per account are permitted (one account may map to multiple SRU codes). Some amounts map to different SRU codes depending on sign (debit vs credit balance). + +### Key relationships +- `#TAXAR` specifies which taxation year's SRU mappings apply +- `#KPTYP` determines which SRU mapping set is appropriate +- The mapping schema is maintained by BAS-kontogruppen and Skatteverket +- Updated annually; published at bas.se as "kopplingsschema" + +### Tax forms using SRU +- **INK2** (+ INK2R, INK2S): Aktiebolag (AB) income tax +- **INK3**: Ideella föreningar, stiftelser (non-profits, foundations) +- **INK4** (+ INK4R, INK4S, INK4DU): Handelsbolag, kommanditbolag (HB, KB) +- **NE-bilaga**: Enskild firma (sole proprietorship) + +### SRU code ranges (approximate) +- **7000-7399**: Balance sheet items (tillgångar, eget kapital, skulder) +- **7400-7699**: Income statement items (intäkter, kostnader) +- **7700-7999**: Special items (bokslutsdispositioner, skatter) + +### Important note +SRU mappings change between taxation years. A file with `#TAXAR 2023` uses 2023's mappings; `#TAXAR 2024` uses 2024's. Always verify the kopplingsschema version matches the taxation year. + +## Account class rules for SIE validation + +### Balance sheet accounts (1xxx-2xxx) +- Must have #IB and #UB records +- UB(year -1) must equal IB(year 0) +- Carry forward between fiscal years + +### Income statement accounts (3xxx-8xxx) +- Must have #RES records (not #IB/#UB) +- IB must be zero at start of each fiscal year +- Zeroed out by year-end closing entries (transferred to 2099) +- #PSALDO records track monthly changes + +### Internal accounts (9xxx) +- Not included in external reports +- Some systems (Visma Bokföring) don't support them +- May or may not appear in SIE exports depending on system +- No mandatory #IB/#UB or #RES requirements + +## BAS version handling in SIE + +The `#KPTYP` record declares the chart of accounts version: +- `BAS95`: Original BAS plan +- `BAS96`: 1996 revision +- `EUBAS97`: EU-adapted version (most common modern usage) +- `NE2007`: Specialized for enskild firma +- `BAS2xxx` (e.g., `BAS2024`): Treated as equivalent to EUBAS97 + +If `#KPTYP` is missing, assume BAS 95. The account number structure is consistent across versions; differences are mainly in which accounts exist and their SRU mappings.$gb$, + 'horizontal/swedish-sie-import-export', + 2, + 1 + ), + ( + 'horizontal/swedish-sie-import-export/encoding', + 'horizontal', + 'SIE4 Character Encoding Reference', + $gb$SIE4 Character Encoding Reference: reference for Swedish SIE Import Export$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1112, + '.claude\skills\swedish-sie-import-export\references\encoding.md', + $gb$# SIE4 Character Encoding Reference + +## The spec vs. reality + +The SIE4 spec mandates IBM PC Codepage 437 (declared as `#FORMAT PC8`). Modern cloud accounting software exports UTF-8. Many programs write `#FORMAT PC8` regardless of actual encoding. This mismatch is the single largest source of SIE interoperability failures. + +## Byte values for Swedish characters + +| Char | CP437 (hex) | Latin-1 (hex) | UTF-8 (hex) | +|------|-------------|---------------|-------------| +| å | 0x86 | 0xE5 | 0xC3 0xA5 | +| ä | 0x84 | 0xE4 | 0xC3 0xA4 | +| ö | 0x94 | 0xF6 | 0xC3 0xB6 | +| Å | 0x8F | 0xC5 | 0xC3 0x85 | +| Ä | 0x8E | 0xC4 | 0xC3 0x84 | +| Ö | 0x99 | 0xD6 | 0xC3 0x96 | +| é | 0x82 | 0xE9 | 0xC3 0xA9 | + +## Mojibake diagnosis patterns + +### UTF-8 bytes misread as Latin-1/CP1252 +- å → `Ã¥`, ä → `ä`, ö → `ö` +- Å → `Ã…`, Ä → `Ä`, Ö → `Ö` +- **Telltale**: The `Ã` prefix always indicates UTF-8 content decoded as single-byte +- **Fix**: Re-read the file as UTF-8 + +### CP437 bytes misread as Latin-1/CP1252 +- å → `†`, ä → `„`, ö → `"` +- Å → control char (0x8F), Ä → control char (0x8E), Ö → `™` +- **Telltale**: Typographic characters like `†„"™` in account names +- **Fix**: Re-read the file as CP437 + +### Latin-1 bytes misread as CP437 +- å → `σ`, ä → `Σ`, ö → `÷` +- **Telltale**: Greek letters or math symbols in Swedish text +- **Fix**: Re-read the file as Latin-1 (ISO 8859-1) + +### Double-encoding (UTF-8 encoded twice) +- å → `ã¥` or similar multi-byte garbage +- **Telltale**: 3+ byte sequences where 2 were expected +- **Fix**: Decode as UTF-8, then decode the result as UTF-8 again (strip one layer) + +## Encoding detection algorithm + +Apply in this order, stop at first match: + +1. **UTF-8 BOM check**: Bytes 0xEF 0xBB 0xBF at file start → UTF-8 +2. **Strict UTF-8 validation**: Attempt full decode. If valid AND multi-byte sequences found → UTF-8. Pure ASCII files are ambiguous (proceed to next step). +3. **CP437 byte scan**: Look for bytes in range 0x80-0x9F in text contexts (account names, descriptions). If bytes 0x84, 0x86, 0x8E, 0x8F, 0x94, 0x99 appear → CP437 +4. **Latin-1 byte scan**: Look for bytes in range 0xC0-0xFF in text contexts. If bytes 0xC4, 0xC5, 0xD6, 0xE4, 0xE5, 0xF6 appear → Latin-1 +5. **#PROGRAM heuristic**: Extract program name from the file (readable in any encoding since it's typically ASCII): + - Cloud software → assume UTF-8 + - Desktop software → assume CP437 +6. **Fallback**: Latin-1 (every byte 0x00-0xFF is valid, never fails) + +## Per-software encoding behaviors + +| Software | Platform | Typical encoding | Notes | +|----------|----------|-----------------|-------| +| Fortnox | Cloud | UTF-8 | May declare `#FORMAT PC8`. Largest market share. | +| Visma Administration | Desktop | CP437 or Win-1252 | Legacy Windows app. Requires non-UTF-8 locale. | +| Visma eEkonomi | Cloud | UTF-8 or Latin-1 | Known garbage character issues in exports. | +| Visma Compact | Desktop | CP437 | Standards-compliant. Referenced in SIE spec examples. | +| BL Administration (Björn Lundén) | Desktop | CP437 | Standards-compliant. | +| Lundify (BL cloud) | Cloud | UTF-8 | Modern cloud version of BL. | +| SpeedLedger | Cloud | UTF-8 (likely) | Web-based Unicode environment. | +| PE Accounting | Cloud | UTF-8 (likely) | Web-based. | +| Bokio | Cloud | UTF-8 | Parser-level normalization documented. | +| Dooer | Cloud | UTF-8 | Parser-level normalization documented. | +| Hogia | Desktop/Cloud | CP437 or UTF-8 | Depends on product version. | + +## #KSUMMA and encoding interaction + +The CRC-32 checksum (#KSUMMA) is defined to operate on CP437 byte values. When a file is actually encoded in UTF-8: + +1. Swedish characters have different byte representations (2 bytes in UTF-8 vs 1 byte in CP437) +2. The checksum computed on UTF-8 bytes will NOT match the expected CP437-based value +3. **Recommendation**: When non-CP437 encoding is detected, skip #KSUMMA validation entirely +4. When generating SIE files, either: (a) write CP437 with correct KSUMMA, or (b) write UTF-8 and omit KSUMMA + +## Normalization strategy for import + +Best practice for robust SIE import: + +1. Read raw bytes from file +2. Detect encoding using the algorithm above +3. Decode to Unicode/UTF-8 internal representation +4. Validate #KSUMMA only if encoding is CP437 +5. Parse all records from the Unicode text +6. Store internally as UTF-8 +7. When exporting: write CP437 if standards compliance is critical (auditors, Skatteverket), otherwise UTF-8 with a note that KSUMMA is omitted$gb$, + 'horizontal/swedish-sie-import-export', + 1, + 1 + ), + ( + 'horizontal/swedish-sie-import-export/record-types', + 'horizontal', + 'SIE4 Record Type Reference', + $gb$SIE4 Record Type Reference: reference for Swedish SIE Import Export$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 2701, + '.claude\skills\swedish-sie-import-export\references\record-types.md', + $gb$# SIE4 Record Type Reference + +Complete specification of all SIE4 record types, fields, and rules. + +## Table of contents +1. [Flag item](#flag-item) +2. [Identification items](#identification-items) +3. [Chart of accounts items](#chart-of-accounts-items) +4. [Dimension and object items](#dimension-and-object-items) +5. [Balance items](#balance-items) +6. [Verification and transaction items](#verification-and-transaction-items) +7. [Control total](#control-total) +8. [Record ordering](#record-ordering) +9. [Type availability matrix](#type-availability-matrix) + +--- + +## Flag item + +### #FLAGGA x +- **Compulsory**: All types +- **Position**: Must be first item in file +- **Values**: `0` = not yet imported (set by exporter), `1` = already imported (set by importer) +- **Purpose**: Prevents double-import of transaction files +- **Workflow**: Exporter creates with 0 → importer sets to 1 after success → re-import attempts detect 1 and refuse + +--- + +## Identification items + +### #PROGRAM name version +- **Compulsory**: All types +- **Example**: `#PROGRAM "Fortnox" 3.0` +- **Note**: Useful for encoding detection heuristics (cloud vs desktop) + +### #FORMAT PC8 +- **Compulsory**: All types +- **Values**: Only `PC8` (Codepage 437) is valid per spec +- **Reality**: Many programs write `PC8` but export UTF-8. Treat as unreliable for encoding detection. + +### #GEN date [sign] +- **Compulsory**: All types +- **Fields**: date = YYYYMMDD, sign = optional author signature string +- **Example**: `#GEN 20240115 "JD"` + +### #SIETYP n +- **Compulsory**: Types 2-4 (if absent, assume type 1) +- **Values**: 1, 2, 3, 4 +- **Note**: No distinction between 4E and 4I in this field; both are type 4 + +### #FNAMN name +- **Compulsory**: All types +- **Example**: `#FNAMN "Exempelföretag AB"` + +### #ORGNR cin [acq_no] [act_no] +- **Optional** +- **Format**: Organisationsnummer with hyphen after 6th digit: `556677-8899` +- **Additional fields**: acquisition number, activity number (rarely used) + +### #RAR year_no start end +- **Compulsory**: Types 1-3 and 4E +- **Fields**: year_no (0 = current, -1 = previous, -2 = two years ago), start/end = YYYYMMDD +- **Both current (0) and previous (-1) year should be present** +- **Supports broken fiscal years**: `#RAR 0 20240701 20250630` +- **Example**: `#RAR 0 20240101 20241231` + +### #TAXAR year +- **Optional** +- **Purpose**: Taxation year for SRU code interpretation +- **Example**: `#TAXAR 2024` + +### #OMFATTN date +- **Compulsory**: Types 2-3; optional for 4E +- **Purpose**: End date of the period scope covered by the file +- **Example**: `#OMFATTN 20241231` + +### #KPTYP type +- **Optional** (if missing, assume BAS 95) +- **Valid values**: `BAS95`, `BAS96`, `EUBAS97`, `NE2007` +- **Rule**: Any value starting with `BAS2` (e.g., `BAS2024`) is treated as `EUBAS97` + +### #PROSA text +- **Optional** +- **Purpose**: Free-form comment + +### #FNR id +- **Optional** +- **Purpose**: Internal company code in multi-company setups + +### #ADRESS contact address postal_address tel +- **Optional** +- **Fields**: 4 quoted strings +- **Example**: `#ADRESS "Jan Sansen" "Box 21" "211 20 Malmö" "040-12 34 56"` + +### #BKOD sni_code +- **Optional** +- **Purpose**: SNI industry code (Svensk Näringsgrensindelning) + +### #FTYP type +- **Optional** +- **Valid values**: AB, E, HB, KB, EK, KHF, BRF, BF, SF, I, S, FL, BAB, MB, SB, BFL, FAB, OFB, SE, SCE, TSF, X +- **Common**: AB (aktiebolag), E (enskild firma), HB (handelsbolag), KB (kommanditbolag) + +### #VALUTA code +- **Optional** (if missing, assume SEK) +- **Format**: ISO 4217 currency code + +--- + +## Chart of accounts items + +### #KONTO account_no name +- **Compulsory**: Types 1-3, 4E +- **Rule**: Account numbers must be numeric. All accounts used in the file must be declared. +- **Example**: `#KONTO 1510 "Kundfordringar"` + +### #KTYP account_no type +- **Optional** +- **Values**: T (Tillgång/Asset), S (Skuld/Liability), K (Kostnad/Cost), I (Intäkt/Income) +- **Example**: `#KTYP 1510 T` + +### #ENHET account_no unit +- **Optional** +- **Purpose**: Quantity unit for the account +- **Example**: `#ENHET 4010 "st"` + +### #SRU account sru_code +- **Compulsory**: Types 1-2 +- **Rule**: Multiple #SRU entries per account are permitted (one account can map to multiple SRU codes) +- **Example**: `#SRU 1510 7214` + +--- + +## Dimension and object items + +### #DIM dimension_no name +- **Types**: 3 and 4 +- **Reserved dimensions** (need not be explicitly declared): + - 1 = Kostnadsställe (cost centre) + - 2 = Kostnadsbärare (cost bearer, sub-dimension of 1) + - 6 = Projekt (project) + - 7 = Anställd (employee) + - 8 = Kund (customer) + - 9 = Leverantör (supplier) + - 10 = Faktura (invoice) +- **Reserved but unused**: 3-5, 11-19 +- **Freely assignable**: 20+ +- **Example**: `#DIM 1 "Kostnadsställe"` + +### #UNDERDIM dimension_no name superdimension +- **Optional** +- **Purpose**: Hierarchical sub-dimension declaration +- **Example**: `#UNDERDIM 2 "Kostnadsbärare" 1` + +### #OBJEKT dimension_no object_no name +- **Types**: 3 and 4 +- **Example**: `#OBJEKT 1 "100" "Stockholm"` +- **Example**: `#OBJEKT 6 "P01" "Projekt Alpha"` + +--- + +## Balance items + +### #IB year_no account balance [quantity] +- **Purpose**: Opening balance (Ingående Balans) for balance sheet accounts +- **year_no**: 0 = current year, -1 = previous year +- **Sign**: Credit = negative (liabilities/equity carry negative balances) +- **Rule**: Only balance sheet accounts (1xxx-2xxx) should have non-zero IB +- **Example**: `#IB 0 1510 125000.00` + +### #UB year_no account balance [quantity] +- **Purpose**: Closing balance (Utgående Balans) +- **Rule**: UB for current year (0) must always be present +- **Continuity rule**: UB(year -1, account) must equal IB(year 0, account) +- **Example**: `#UB 0 1510 98500.00` + +### #RES year_no account balance [quantity] +- **Purpose**: Balance for income statement accounts (3xxx-8xxx) +- **Sign**: Income (credit) = negative, Cost (debit) = positive +- **Example**: `#RES 0 3010 -500000.00` (500k in revenue) + +### #OIB year_no account {dim_no obj_no} balance [quantity] +- **Purpose**: Opening balance per object (type 3+) +- **Example**: `#OIB 0 1510 {1 "100"} 50000.00` + +### #OUB year_no account {dim_no obj_no} balance [quantity] +- **Purpose**: Closing balance per object (type 3+) + +### #PSALDO year_no period account {obj_list} balance [quantity] +- **Compulsory**: Types 2-3 +- **Purpose**: Monthly change on account (NOT cumulative) +- **Period**: YYYYMM +- **Object list**: Empty `{}` for type 2; object-specific for type 3 +- **Example**: `#PSALDO 0 202401 3010 {} -42000.00` + +### #PBUDGET year_no period account {obj_list} balance [quantity] +- **Optional** +- **Structure**: Same as #PSALDO but for budgeted values + +--- + +## Verification and transaction items + +### #VER series verno verdate [vertext] [regdate] [sign] +- **Type**: 4 only +- **Fields**: + - series = letter (A, B...), number, or alphanumeric string + - verno = sequential number within series + - verdate = YYYYMMDD + - vertext = optional description in quotes + - regdate = optional registration date YYYYMMDD + - sign = optional author signature +- **Rules**: + - Must be followed by `{` on its own line + - Then one or more #TRANS lines + - Then `}` on its own line + - All verifications within a series must be in ascending verno order + - For 4I files, series and verno may be empty (receiver assigns) +- **Example**: `#VER A 1 20240115 "Kundfaktura 2024-001" 20240115 "JD"` + +### #TRANS account_no {object_list} amount [transdate] [transtext] [quantity] [sign] +- **Type**: 4 only, as sub-entry of #VER +- **Fields**: + - account_no = numeric account + - object_list = `{}` or `{dim_no "obj_no" ...}` (multiple dim/obj pairs allowed) + - amount = decimal, debit positive, credit negative + - transdate = optional override of verification date + - transtext = optional line-level description + - quantity = optional quantity + - sign = optional author +- **Balance rule**: Sum of all #TRANS amounts in a #VER = 0.00 exactly +- **Example**: `#TRANS 1510 {} 12500.00 20240115 "Faktura 2024-001"` + +### #RTRANS (same fields as #TRANS) +- **Purpose**: Supplementary/corrected transaction +- **Rule**: Must be immediately followed by an identical #TRANS for backward compatibility +- **Programs understanding RTRANS**: use RTRANS, ignore following TRANS +- **Programs not understanding RTRANS**: ignore RTRANS, use TRANS + +### #BTRANS (same fields as #TRANS) +- **Purpose**: Removed/cancelled transaction +- **Programs not understanding BTRANS**: simply ignore it + +--- + +## Control total + +### #KSUMMA [value] +- **Optional** +- **Two instances**: + 1. Near file start: `#KSUMMA` (empty, signals active checksumming) + 2. At file end: `#KSUMMA 1234567890` (the actual CRC-32 value) +- **Algorithm**: CRC-32 with polynomial EDB88320H, pre-conditioning FFFFFFFF, post-conditioning bit-invert +- **Excluded from calculation**: whitespace, quote characters, brace characters +- **Truncation detection**: If opening KSUMMA exists but closing is missing, file is truncated. Reject. +- **Encoding caveat**: CRC is calculated on CP437 byte values per spec. If file is actually UTF-8, checksum will not match. Skip validation for non-CP437 files. + +--- + +## Record ordering + +The SIE spec defines a strict ordering: + +1. `#FLAGGA` (always first) +2. Identification items (#PROGRAM, #FORMAT, #GEN, #SIETYP, #FNAMN, #ORGNR, #RAR, etc.) +3. Chart of accounts (#KONTO, #KTYP, #ENHET, #SRU) +4. Dimensions and objects (#DIM, #UNDERDIM, #OBJEKT) +5. Balances (#IB, #UB, #OIB, #OUB, #RES, #PSALDO, #PBUDGET) +6. Verifications (#VER with nested #TRANS) +7. `#KSUMMA` (closing, if active) + +Readers should be tolerant of minor ordering deviations but may reject severely out-of-order files. + +--- + +## Type availability matrix + +| Record | Type 1 | Type 2 | Type 3 | Type 4E | Type 4I | +|--------|--------|--------|--------|---------|---------| +| #FLAGGA | Required | Required | Required | Required | Required | +| #PROGRAM | Required | Required | Required | Required | Required | +| #FORMAT | Required | Required | Required | Required | Required | +| #GEN | Required | Required | Required | Required | Required | +| #SIETYP | Implied | Required | Required | Required | Required | +| #FNAMN | Required | Required | Required | Required | Optional | +| #RAR | Required | Required | Required | Required | N/A | +| #KONTO | Required | Required | Required | Required | N/A | +| #SRU | Required | Required | Optional | Optional | N/A | +| #DIM/#OBJEKT | N/A | N/A | Required | Optional | Optional | +| #IB/#UB | Required | Required | Required | Required | N/A | +| #RES | Required | Required | Required | Required | N/A | +| #OIB/#OUB | N/A | N/A | Required | Optional | N/A | +| #PSALDO | N/A | Required | Required | Optional | N/A | +| #PBUDGET | N/A | Optional | Optional | Optional | N/A | +| #VER/#TRANS | N/A | N/A | N/A | Required | Required | +| #KSUMMA | Optional | Optional | Optional | Optional | Optional |$gb$, + 'horizontal/swedish-sie-import-export', + 1, + 1 + ), + ( + 'horizontal/swedish-sie-import-export/validation-rules', + 'horizontal', + 'SIE4 Validation Rules and Error Patterns', + $gb$SIE4 Validation Rules and Error Patterns: reference for Swedish SIE Import Export$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 2961, + '.claude\skills\swedish-sie-import-export\references\validation-rules.md', + $gb$# SIE4 Validation Rules and Error Patterns + +## Table of contents +1. [Structural validation](#structural-validation) +2. [Verification integrity](#verification-integrity) +3. [Balance continuity](#balance-continuity) +4. [Account and dimension validation](#account-and-dimension-validation) +5. [Verification numbering](#verification-numbering) +6. [Fiscal year boundaries](#fiscal-year-boundaries) +7. [Encoding errors](#encoding-errors) +8. [Post-import issues](#post-import-issues) +9. [Validation severity levels](#validation-severity-levels) +10. [SIE file diffing](#sie-file-diffing) + +--- + +## Structural validation + +### Missing required records +- **Check**: #FLAGGA present and first +- **Check**: #PROGRAM, #FORMAT, #GEN present +- **Check**: #FNAMN present +- **Check**: #SIETYP present for types 2-4 +- **Check**: #RAR present for types 1-3 and 4E (with both year 0 and year -1) +- **Check**: #OMFATTN present for types 2-3 +- **Severity**: FATAL for missing compulsory records + +### Truncated file detection +- **Check**: If opening `#KSUMMA` (empty) exists, closing `#KSUMMA value` must also exist +- **If missing**: File was truncated during export or transfer +- **Severity**: FATAL. Reject the file. Re-export from source system. + +### Wrong SIE type +- **Symptom**: Importing .SI (4I) file expecting .SE (4E) format +- **Difference**: 4I lacks balances, results, fiscal year definitions, chart of accounts +- **Check**: Verify #SIETYP matches expected import type +- **Severity**: FATAL for type mismatch + +### Malformed records +- **Check**: All lines starting with # have valid label names +- **Check**: Quoted strings properly closed (matching double quotes) +- **Check**: Escaped quotes `\"` within strings handled correctly +- **Check**: VER blocks have matching `{` and `}` on their own lines +- **Severity**: FATAL for unclosed quotes or unmatched braces + +--- + +## Verification integrity + +### Unbalanced verifications (most common error) +- **Rule**: Sum of all #TRANS amounts within a #VER = 0.00 +- **Detection**: Parse each VER block, sum all TRANS amounts, check for exact zero +- **Common cause**: VAT rounding across multiple line items producing 0.01 SEK discrepancy +- **Remediation**: Add öresutjämning line using account 3741 (Öresutjämning) for the difference +- **Tolerance**: Some parsers (jsisie) offer `AllowUnbalancedVoucher` flag. Use only for analysis, never for production import. +- **Severity**: ERROR. Block import of the specific verification unless tolerance is enabled. + +### Missing transaction data +- **Check**: Every #VER block contains at least one #TRANS +- **Check**: #TRANS has valid account_no (numeric) and amount (parseable decimal) +- **Check**: #TRANS amount has max 2 decimal places +- **Severity**: FATAL for empty VER blocks; ERROR for unparseable amounts + +### Date validation +- **Check**: verdate in #VER is valid YYYYMMDD +- **Check**: verdate falls within a fiscal year defined by #RAR +- **Check**: If regdate provided, it is a valid date +- **Check**: If transdate in #TRANS provided, it is a valid date +- **Severity**: WARNING for dates outside fiscal year; ERROR for unparseable dates + +--- + +## Balance continuity + +### IB/UB cross-year continuity +- **Rule**: For every balance sheet account (1xxx-2xxx): UB(year -1) = IB(year 0) +- **Detection**: Compare `#UB -1 account balance` with `#IB 0 account balance` for all accounts +- **Common cause**: Incomplete year-end closing, post-closing manual adjustments, mixed-date exports +- **Remediation**: Create adjustment verification in opening period to reconcile +- **Severity**: WARNING. Flag discrepancy with exact amounts. Do not silently proceed. + +### Result account IB validation +- **Rule**: IB for income statement accounts (3xxx-9xxx) must be zero +- **Detection**: Check `#IB 0 account balance` for all accounts where first digit is 3-9 +- **Common cause**: Source system did not complete year-end closing before export +- **Remediation**: Run closing entries in source system and re-export, or create closing entries in target +- **Severity**: WARNING + +### UB/RES consistency +- **Check**: For current year, UB values for balance sheet accounts should be derivable from IB + sum of relevant TRANS +- **Check**: RES values for income statement accounts should equal sum of relevant TRANS +- **Severity**: INFO (advisory check, complex to validate fully) + +### Missing balances +- **Check**: All accounts referenced in #TRANS have corresponding #IB/#UB or #RES records +- **Check**: #UB for year 0 exists for all balance sheet accounts with activity +- **Severity**: WARNING for missing UB; INFO for missing IB on accounts with no prior activity + +--- + +## Account and dimension validation + +### Undeclared accounts +- **Rule**: All accounts used in #TRANS must be declared in #KONTO (for types 1-3, 4E) +- **Exception**: Type 4I files may rely on target system's existing chart +- **Detection**: Collect all account numbers from #TRANS, check against #KONTO declarations +- **Remediation**: Add missing #KONTO declarations or map to existing accounts in target +- **Severity**: ERROR for 4E files; WARNING for 4I files + +### Duplicate account declarations +- **Rule**: Each account number may only appear once in #KONTO +- **Detection**: Track seen accounts, flag duplicates +- **Severity**: ERROR + +### Invalid account numbers +- **Check**: Account numbers are numeric (no letters) +- **Check**: Account numbers are 4 digits (standard BAS) or valid extended length +- **Severity**: ERROR for non-numeric; WARNING for non-standard length + +### Account class 9 handling +- **Note**: Class 9 (internal/management accounting) is unsupported by some programs (e.g., Visma Bokföring & Fakturering) +- **Check**: If target system doesn't support class 9, flag any 9xxx accounts +- **Severity**: WARNING + +### Dimension/object mismatches +- **Check**: Dimension numbers in TRANS object lists are declared in #DIM or are standard reserved (1,2,6-10) +- **Check**: Object numbers reference objects declared in #OBJEKT +- **Severity**: WARNING for undeclared dimensions; ERROR for malformed object list syntax + +--- + +## Verification numbering + +### Duplicate verification numbers +- **Rule**: Within each series, verification numbers must be unique +- **Detection**: Track (series, verno) pairs, flag duplicates +- **Common cause**: Series collision when importing into system with existing verifications +- **Remediation**: Remap to unused series letter or offset numbering +- **Severity**: ERROR + +### Gaps in numbering +- **Detection**: Within each series, check for sequential numbering (1, 2, 3...) +- **Significance**: Gaps may indicate deleted verifications. BFL requires unbroken sequences for customer invoices. +- **Severity**: WARNING + +### Non-ascending order +- **Rule**: Verifications within a series must appear in ascending verno order in the file +- **Detection**: Track last seen verno per series, flag if current < previous +- **Severity**: WARNING (some parsers tolerate this but it violates spec) + +### Empty series/verno in 4I files +- **Rule**: 4I import files are allowed to have empty series and verno +- **Detection**: If #SIETYP 4 and series/verno empty, this is valid for import +- **Handling**: Receiving program must assign series and verno + +--- + +## Fiscal year boundaries + +### Transactions outside fiscal year +- **Check**: All #VER dates fall within a #RAR-defined period +- **Detection**: Parse all #RAR records to build valid date ranges, check each VER date +- **Severity**: WARNING. May indicate wrong fiscal year selected for export. + +### Overlapping fiscal year definitions +- **Check**: #RAR records for different year indices should not overlap in date range +- **Severity**: ERROR + +### Incomplete fiscal year exports +- **Check**: Compare date range of actual verifications against #RAR 0 period +- **If verifications cover only part of the year**: Flag as potentially incomplete +- **Use #OMFATTN**: This record explicitly declares the scope end date +- **Severity**: INFO + +### Broken fiscal year validation +- **Check**: If #RAR shows non-calendar year (e.g., July-June), verify all period-dependent logic handles this +- **Check**: First fiscal year may be up to 18 months (AB) or shorter +- **Severity**: INFO (important for correct period assignment) + +--- + +## Encoding errors + +### Garbled Swedish characters +- **Symptom**: å/ä/ö appear as garbage in account names, company name, descriptions +- **Diagnosis**: Use mojibake patterns from encoding.md to identify mismatch type +- **Remediation**: Re-decode file with correct encoding +- **Severity**: WARNING (data is recoverable, not lost) + +### #FORMAT PC8 mismatch +- **Symptom**: File declares `#FORMAT PC8` but is actually UTF-8 +- **Detection**: Encoding detection algorithm identifies non-CP437 +- **Impact**: #KSUMMA validation will fail +- **Handling**: Skip KSUMMA, parse with detected encoding +- **Severity**: INFO + +--- + +## Post-import issues + +### Missing VAT codes +- **Issue**: SIE format carries no VAT/moms code information +- **Impact**: Momsdeklaration/momsrapporter cannot be generated automatically +- **Remediation**: Manually configure VAT codes for relevant accounts in target system +- **Accounts affected**: 2610-2650 (output VAT), 2640-2649 (input VAT) +- **Severity**: Operational issue, not a file error + +### Missing subledger data +- **Issue**: SIE 1-4 does not carry customer/supplier subledger (reskontra) data +- **Impact**: Aged receivables/payables reports unavailable +- **Remediation**: Import subledger data separately or rebuild from individual verifications +- **Severity**: Operational issue + +### Verification series remapping +- **Issue**: Target system uses different series conventions than source +- **Remediation**: Map source series to target series, document the mapping +- **Best practice**: Use unused series letters in target to avoid collisions + +--- + +## Validation severity levels + +| Level | Meaning | Action | +|-------|---------|--------| +| **FATAL** | File cannot be processed | Reject file, report error, re-export from source | +| **ERROR** | Specific records invalid | Block affected records, allow rest if possible | +| **WARNING** | Data integrity concern | Import with flag, require manual review | +| **INFO** | Advisory | Log for reference, no action required | + +## Recommended validation order + +1. Structural checks (required records, truncation, type) +2. Encoding detection and normalization +3. Record parsing (field formats, dates, amounts) +4. Chart of accounts validation (duplicates, undeclared) +5. Balance integrity (IB/UB continuity, result account reset) +6. Verification integrity (balance check, numbering) +7. Fiscal year boundary checks +8. Dimension/object validation +9. KSUMMA verification (only if CP437) + +--- + +## SIE file diffing + +### Comparing two SIE files + +To detect changes between two exports (e.g., before/after a correction period, or during migration validation): + +1. **Balance diff**: Compare #IB/#UB records by account. Flag any amount differences. +2. **Result diff**: Compare #RES records by account. +3. **Verification diff**: Match #VER blocks by (series, verno). Compare: + - Transaction amounts per account + - Transaction dates + - Number of lines + - Total verification count per series +4. **Added/removed verifications**: Identify VER blocks present in one file but not the other. +5. **Period diff**: Compare #PSALDO month-by-month per account. +6. **Chart diff**: Compare #KONTO declarations (added/removed/renamed accounts). +7. **Metadata diff**: Compare #FNAMN, #ORGNR, #RAR, #KPTYP for structural changes. + +### Implementation reference + +The .NET library `jsisie` provides `SieDocumentComparer.Compare()` returning a structured diff list. For custom implementations, key data structures are: +- Map<(series, verno), VER_block> for verification matching +- Map<(year_no, account), balance> for IB/UB/RES comparison +- Map<(year_no, period, account), balance> for PSALDO comparison$gb$, + 'horizontal/swedish-sie-import-export', + 1, + 1 + ), + ( + 'horizontal/swedish-sru-filing', + 'horizontal', + 'Swedish SRU Filing', + $gb$Swedish SRU file generation for Skatteverket digital tax filing (INK2, INK2R, INK2S declarations for aktiebolag). Covers the two-file submission structure (INFO.SRU + BLANKETTER.SRU), all SRU field codes for INK2/INK2R/INK2S, BAS-to-SRU account mappings for räkenskapsschema, ISO 8859-1 encoding rules, amount formatting (hela kronor, no öre), 12-digit org number formatting, blankett type period suffixes (P1-P4), #BLANKETT/#BLANKETTSLUT delimiters, #UPPGIFT record format, validation error patterns, and rounding/truncation rules per SFL 22:1. Trigger on ANY question about SRU files, SRU-koder, fältkoder, filöverföring till Skatteverket, INK2S/INK2R generation, BAS-to-SRU mapping, "skapa SRU", "generera deklarationsfil", "digital inlämning INK2", BLANKETTER.SRU, INFO.SRU, SKV269, or any code that produces SRU output. Also trigger when debugging Skatteverket validation errors on uploaded SRU files. Always use this skill over training data for SRU topics.$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 2407, + '.claude\skills\swedish-sru-filing\SKILL.md', + $gb$--- +name: swedish-sru-filing +description: > + Swedish SRU file generation for Skatteverket digital tax filing (INK2, INK2R, INK2S declarations for aktiebolag). + Covers the two-file submission structure (INFO.SRU + BLANKETTER.SRU), all SRU field codes for INK2/INK2R/INK2S, + BAS-to-SRU account mappings for räkenskapsschema, ISO 8859-1 encoding rules, amount formatting (hela kronor, + no öre), 12-digit org number formatting, blankett type period suffixes (P1-P4), #BLANKETT/#BLANKETTSLUT + delimiters, #UPPGIFT record format, validation error patterns, and rounding/truncation rules per SFL 22:1. + Trigger on ANY question about SRU files, SRU-koder, fältkoder, filöverföring till Skatteverket, INK2S/INK2R + generation, BAS-to-SRU mapping, "skapa SRU", "generera deklarationsfil", "digital inlämning INK2", + BLANKETTER.SRU, INFO.SRU, SKV269, or any code that produces SRU output. Also trigger when debugging + Skatteverket validation errors on uploaded SRU files. Always use this skill over training data for SRU topics. +--- + +# Swedish SRU File Generation + +This skill contains the complete technical specification for generating valid SRU files accepted by Skatteverket's filöverföringstjänst. The canonical source is Skatteverket's "Teknisk information om filöverföring" page (replaced brochure SKV 269 from Jan 1 2024). + +**Before writing any SRU generation code**, read `references/sru-codes.md` for the complete field code tables and BAS-to-SRU mapping. + +## Architecture: Two files, always + +Every SRU submission consists of exactly two files: + +| File | Content | Max size | +|---|---|---| +| `INFO.SRU` | Submitter metadata (who is filing) | N/A | +| `BLANKETTER.SRU` | All blankett blocks with tax data | 5 MB | + +File names are case-insensitive but must not be renamed (browsers appending `(1)` cause rejection). + +## INFO.SRU structure + +Posts must appear in this exact order. Omit optional posts entirely if not used. + +``` +#DATABESKRIVNING_START +#PRODUKT SRU +#MEDIAID +#SKAPAD +#PROGRAM +#FILNAMN BLANKETTER.SRU +#DATABESKRIVNING_SLUT +#MEDIELEV_START +#ORGNR <12-digit org number> +#NAMN +#ADRESS +#POSTNR <5-digit postal code> +#POSTORT +#AVDELNING +#KONTAKT +#EMAIL +#TELEFON +#FAX +#MEDIELEV_SLUT +``` + +Mandatory posts: `#PRODUKT`, `#FILNAMN`, `#ORGNR`, `#NAMN`, `#POSTNR`, `#POSTORT`. + +The `#PRODUKT` value is always `SRU` (post-2013). There is no `#PERIOD` post: period is encoded in each blankett type string. + +## BLANKETTER.SRU structure + +Contains one or more blankett blocks, terminated by `#FIL_SLUT`: + +``` +#BLANKETT +#IDENTITET +#NAMN +#UPPGIFT +... (repeat #UPPGIFT for each field) +#BLANKETTSLUT +... (repeat #BLANKETT blocks for each form section) +#FIL_SLUT +``` + +### INK2 requires three blankett blocks + +An aktiebolag filing INK2 must include three separate blocks in this file: + +| Block | BlankettTyp example | Content | +|---|---|---| +| INK2 | `INK2-2024P4` | Huvudblankett (page 1): summary fields | +| INK2R | `INK2R-2024P4` | Räkenskapsschema (pages 2-3): balance sheet + income statement | +| INK2S | `INK2S-2024P4` | Skattemässiga justeringar (page 4): tax adjustments | + +### Period suffix rules + +The suffix after the hyphen encodes when the fiscal year ENDS: + +| Suffix | Fiscal year ends in months | +|---|---| +| P1 | January-April | +| P2 | May-August | +| P3 | Special cases | +| P4 | September-December (calendar-year companies) | + +The year in the type string is the INCOME YEAR (inkomstår), not the filing year. A company with fiscal year 2024-01-01 to 2024-12-31 uses period `2024P4`. + +### Each block is independent + +Every blankett block carries its own `#IDENTITET` line. The `DatFramst` timestamp determines version precedence: later timestamps replace earlier submissions for the same org number and blankett type. + +## Encoding and formatting rules + +### Encoding: ISO 8859-1 (Latin-1) + +This is the single most common source of validation failure in programmatic SRU generation. **Never use UTF-8.** Swedish characters (å, ä, ö) will corrupt. + +When writing files in code: +- Python: `open(path, 'w', encoding='iso-8859-1')` +- Node.js: Use `iconv-lite` to encode to `iso-8859-1` before writing +- Java: `new OutputStreamWriter(fos, StandardCharsets.ISO_8859_1)` + +### Line endings + +All three conventions accepted: `\r\n` (Windows), `\r` (classic Mac), `\n` (Unix). + +### Amount formatting + +- **Integers in hela kronor (whole SEK)**. No öre, no decimals. +- Positive: no sign, no leading zeros. Example: `1000` +- Negative: `-` prefix. Example: `-1000` +- **No thousands separators.** `7 135` with a space WILL fail. +- Truncation rule per SFL 22 kap. 1 §: öre are DROPPED (truncated), not rounded. +- Small rounding differences from öre truncation across multiple posts are accepted by Skatteverket. + +### Org number format + +Always 12 digits, format `SSÅÅMMDDNNNK`, no hyphens. +- Juridiska personer (companies): century prefix `16` +- Example: org nr `556000-0100` becomes `165560000100` + +### Checkbox fields + +Value: uppercase `X`. If unchecked, **omit the entire #UPPGIFT line**: never send empty values. + +### The `#` character + +Reserved for post names. **Forbidden in all string data values.** + +## Zero-value handling + +**Do not emit `#UPPGIFT` lines for fields with zero value.** Omit them entirely. Including zero-value fields is a common source of validation warnings and in some cases errors. + +## Complete example: calendar-year 2024 AB + +### INFO.SRU +``` +#DATABESKRIVNING_START +#PRODUKT SRU +#SKAPAD 20250401 100000 +#PROGRAM accounted 1.0 +#FILNAMN BLANKETTER.SRU +#DATABESKRIVNING_SLUT +#MEDIELEV_START +#ORGNR 165590001234 +#NAMN Exempelbolaget AB +#POSTNR 11122 +#POSTORT Stockholm +#KONTAKT Anna Andersson +#EMAIL anna@exempel.se +#MEDIELEV_SLUT +``` + +### BLANKETTER.SRU +``` +#BLANKETT INK2-2024P4 +#IDENTITET 165590001234 20250401 100000 +#NAMN Exempelbolaget AB +#UPPGIFT 7011 20240101 +#UPPGIFT 7012 20241231 +#UPPGIFT 7113 90000 +#BLANKETTSLUT +#BLANKETT INK2R-2024P4 +#IDENTITET 165590001234 20250401 100001 +#NAMN Exempelbolaget AB +#UPPGIFT 7011 20240101 +#UPPGIFT 7012 20241231 +#UPPGIFT 7201 100000 +#UPPGIFT 7281 50000 +#UPPGIFT 7301 50000 +#UPPGIFT 7302 25000 +#UPPGIFT 7410 500000 +#UPPGIFT 7513 -200000 +#UPPGIFT 7514 -150000 +#UPPGIFT 7450 75000 +#BLANKETTSLUT +#BLANKETT INK2S-2024P4 +#IDENTITET 165590001234 20250401 100002 +#NAMN Exempelbolaget AB +#UPPGIFT 7011 20240101 +#UPPGIFT 7012 20241231 +#UPPGIFT 7650 75000 +#UPPGIFT 7651 15000 +#UPPGIFT 8020 90000 +#BLANKETTSLUT +#FIL_SLUT +``` + +## Validation errors + +Skatteverket validates on upload and returns a mottagningskvittens. + +### Level 1 (entire submission rejected) +- Structural errors in INFO.SRU +- Posts in wrong order in any blankett block +- More than 100 level 2 errors total +- Missing `#FIL_SLUT` +- Unknown post types +- `#FILNAMN` referencing nonexistent file + +### Level 2 (individual blankett block rejected, others accepted) +- Invalid org number +- Field code not valid for the blankett type +- Value violates field rules (wrong data type, out of range) +- Missing mandatory timestamp +- Invalid blankett type string + +### Most frequent real-world failures +1. **Renamed files**: browsers adding `(1)` suffix +2. **Wrong period**: using `2025P4` when income year is 2024 +3. **Amounts with decimals or spaces**: `7135.50` or `7 135` +4. **UTF-8 encoding** instead of ISO 8859-1 +5. **Including #UPPGIFT for zero/empty values** +6. **Duplicate field codes** in same blankett block +7. **10-digit or hyphenated org number** instead of 12-digit +8. **Non-existent SRU codes**: mapping BAS accounts to wrong field codes + +## BAS-to-SRU mapping: critical rules + +The official mapping is maintained by BAS-kontogruppen + Skatteverket at `bas.se/kontoplaner/sru/`. + +**The #1 mapping error**: BAS accounts 5000-6999 (övriga externa kostnader) must ALL aggregate into a single SRU code: **7513**. Do NOT create individual SRU codes per BAS account in this range. + +**INK2S codes are NOT auto-derived from BAS accounts.** They represent tax adjustments requiring manual calculation. The bookkeeping result flows from INK2R into INK2S field 7650/7750, then tax adjustments are applied to arrive at 8020/8021 (överskott/underskott). + +**For the complete SRU code tables and BAS mapping**, read `references/sru-codes.md`. + +## Data type reference + +| Type | Format | Range | +|---|---|---| +| Numeriskt_A | Integer | -999,999,999,999 to 999,999,999,999 | +| Numeriskt_B | Integer | 0 to 999,999,999,999 | +| Datum_A | YYYYMMDD | Valid calendar date | +| Tid_A | HHMMSS | 00:00:00 to 23:59:59 | +| Decimal_2 | x.xx | -9,999,999,999.99 to 9,999,999,999.99 | +| Andel_4 | x.xxxx | 0.0000 to 100.0000 | +| STR_250 | String | Max 250 chars, no `#` | + +## Key external references + +- Skatteverket tech spec: `skatteverket.se/foretag/inkomstdeklaration/forredovisningsbyraer/tekniskinformationomfiloverforing` +- BAS SRU mappings: `bas.se/kontoplaner/sru/` +- Annual field code ZIP packages: download from Skatteverket tech spec page (Excel files per period) +- Validation service: `www1.skatteverket.se/fv/fv_web/start.do` +- Open-source reference implementations: `github.com/thpe/pysru-accounting`, `github.com/aidium/SRU-Maker` + +--- + +## Loadable references + +The reference files named above are NOT included in this body. When a question genuinely needs that depth, load the specific one on demand with `gnubok_load_skill`, and only then: + +- `references/sru-codes.md` → `gnubok_load_skill("horizontal/swedish-sru-filing/sru-codes")`: SRU Code Tables and BAS-to-SRU Mapping +$gb$, + NULL, + 5, + 1 + ), + ( + 'horizontal/swedish-sru-filing/sru-codes', + 'horizontal', + 'SRU Code Tables and BAS-to-SRU Mapping', + $gb$SRU Code Tables and BAS-to-SRU Mapping: reference for Swedish SRU Filing$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 3527, + '.claude\skills\swedish-sru-filing\references\sru-codes.md', + $gb$# SRU Code Tables and BAS-to-SRU Mapping + +Complete field code (fältkod) tables for INK2, INK2R, and INK2S blankett types, plus the BAS account to SRU code mapping for INK2R. + +## Table of Contents + +1. [INK2: Huvudblankett](#ink2) +2. [INK2R: Räkenskapsschema: Balance Sheet Assets](#ink2r-assets) +3. [INK2R: Räkenskapsschema: Balance Sheet Equity & Liabilities](#ink2r-equity) +4. [INK2R: Räkenskapsschema: Income Statement](#ink2r-income) +5. [INK2S: Skattemässiga justeringar](#ink2s) +6. [BAS-to-SRU Mapping: Balance Sheet](#bas-balance) +7. [BAS-to-SRU Mapping: Income Statement](#bas-income) +8. [Sign conventions](#signs) + +--- + + +## 1. INK2: Huvudblankett (main declaration, page 1) + +| SRU | Row | Description | +|---|---|---| +| 7011 | N/A | Räkenskapsår fr.o.m. (YYYYMMDD) | +| 7012 | N/A | Räkenskapsår t.o.m. (YYYYMMDD) | +| 7113 | 1.1 | Överskott av näringsverksamhet | +| 7114 | 1.2 | Underskott av näringsverksamhet | +| 7132 | 1.4 | Underlag för särskild löneskatt på pensionskostnader | +| 7133 | 1.5 | Negativt underlag särskild löneskatt | +| 7153 | 1.6a | Avkastningsskatt 15% | +| 7155 | 1.7a | Avkastningsskatt 30% | + +Fields 7113/7114 correspond directly to INK2S fields 8020/8021. + +--- + + +## 2. INK2R: Balance Sheet: Assets (Tillgångar) + +| SRU | Row | Description | +|---|---|---| +| 7201 | 2.1 | Koncessioner, patent, licenser, varumärken, hyresrätter, goodwill | +| 7202 | 2.2 | Förskott avs. immateriella anläggningstillgångar | +| 7214 | 2.3 | Byggnader och mark | +| 7215 | 2.4 | Maskiner, inventarier, övriga materiella anläggningstillgångar | +| 7216 | 2.5 | Förbättringsutgifter på annans fastighet | +| 7217 | 2.6 | Pågående nyanläggningar, förskott materiella anläggningstillgångar | +| 7230 | 2.7 | Andelar i koncernföretag | +| 7231 | 2.8 | Andelar i intresseföretag och gemensamt styrda företag | +| 7233 | 2.9 | Ägarintressen i övriga företag + andra långfristiga värdepapper | +| 7232 | 2.10 | Fordringar hos koncern-/intresse-/gemensamt styrda företag | +| 7234 | 2.11 | Lån till delägare eller närstående | +| 7235 | 2.12 | Fordringar hos övriga företag med ägarintresse + andra långfristiga fordringar | +| 7241 | 2.13 | Råvaror och förnödenheter | +| 7242 | 2.14 | Varor under tillverkning | +| 7243 | 2.15 | Färdiga varor och handelsvaror | +| 7244 | 2.16 | Övriga lagertillgångar | +| 7245 | 2.17 | Pågående arbeten för annans räkning | +| 7246 | 2.18 | Förskott till leverantörer | +| 7251 | 2.19 | Kundfordringar | +| 7252 | 2.20 | Fordringar hos koncern-/intresse-/gemensamt styrda företag (kortfristiga) | +| 7261 | 2.21 | Fordringar hos övriga företag med ägarintresse + övriga fordringar | +| 7262 | 2.22 | Upparbetad men ej fakturerad intäkt | +| 7263 | 2.23 | Förutbetalda kostnader och upplupna intäkter | +| 7270 | 2.24 | Andelar i koncernföretag (kortfristiga) | +| 7271 | 2.25 | Övriga kortfristiga placeringar | +| 7281 | 2.26 | Kassa, bank och redovisningsmedel | + +--- + + +## 3. INK2R: Balance Sheet: Equity & Liabilities (Eget kapital och skulder) + +| SRU | Row | Description | +|---|---|---| +| 7301 | 2.27 | Bundet eget kapital | +| 7302 | 2.28 | Fritt eget kapital | +| 7321 | 2.29 | Periodiseringsfonder | +| 7322 | 2.30 | Ackumulerade överavskrivningar | +| 7323 | 2.31 | Övriga obeskattade reserver | +| 7331 | 2.32 | Avsättningar för pensioner enl. tryggandelagen | +| 7332 | 2.33 | Övriga avsättningar för pensioner | +| 7333 | 2.34 | Övriga avsättningar | +| 7350 | 2.35 | Obligationslån | +| 7351 | 2.36 | Checkräkningskredit (långfristig) | +| 7352 | 2.37 | Övriga skulder till kreditinstitut (långfristiga) | +| 7353 | 2.38 | Skulder till koncern-/intresse-/gemensamt styrda företag (långfristiga) | +| 7354 | 2.39 | Skulder till övriga företag med ägarintresse + övriga skulder (långfristiga) | +| 7360 | 2.40 | Checkräkningskredit (kortfristig) | +| 7361 | 2.41 | Övriga skulder till kreditinstitut (kortfristiga) | +| 7362 | 2.42 | Förskott från kunder | +| 7363 | 2.43 | Pågående arbeten för annans räkning (skuldsida) | +| 7364 | 2.44 | Fakturerad men ej upparbetad intäkt | +| 7365 | 2.45 | Leverantörsskulder | +| 7366 | 2.46 | Växelskulder | +| 7367 | 2.47 | Skulder till koncern-/intresse-/gemensamt styrda företag (kortfristiga) | +| 7369 | 2.48 | Skulder till övriga företag med ägarintresse + övriga skulder (kortfristiga) | +| 7368 | 2.49 | Skatteskulder | +| 7370 | 2.50 | Upplupna kostnader och förutbetalda intäkter | + +--- + + +## 4. INK2R: Income Statement (Resultaträkning) + +| SRU | Row | Description | Sign | +|---|---|---|---| +| 7410 | 3.1 | Nettoomsättning | * | +| 7411 | 3.2 | Förändring av lager | * | +| 7412 | 3.3 | Aktiverat arbete för egen räkning | * | +| 7413 | 3.4 | Övriga rörelseintäkter | * | +| 7511 | 3.5 | Råvaror och förnödenheter | * | +| 7512 | 3.6 | Handelsvaror | * | +| 7513 | 3.7 | Övriga externa kostnader | * | +| 7514 | 3.8 | Personalkostnader | * | +| 7515 | 3.9 | Av- och nedskrivningar materiella/immateriella | * | +| 7516 | 3.10 | Nedskrivningar omsättningstillgångar | * | +| 7517 | 3.11 | Övriga rörelsekostnader | * | +| 7414 | 3.12 | Resultat från andelar i koncernföretag | * | +| 7415 | 3.13 | Resultat från andelar i intresseföretag | * | +| 7423 | 3.14 | Resultat från övriga företag med ägarintresse | * | +| 7416 | 3.15 | Resultat från övriga finansiella anläggningstillgångar | * | +| 7417 | 3.16 | Övriga ränteintäkter och liknande | * | +| 7521 | 3.17 | Nedskrivningar finansiella anläggningstillgångar | * | +| 7522 | 3.18 | Räntekostnader och liknande | * | +| 7524 | 3.19 | Lämnade koncernbidrag | * | +| 7419 | 3.20 | Mottagna koncernbidrag | * | +| 7420 | 3.21 | Återföring av periodiseringsfond | * | +| 7525 | 3.22 | Avsättning till periodiseringsfond | * | +| 7421 | 3.23 | Förändring av överavskrivningar | * | +| 7422 | 3.24 | Övriga bokslutsdispositioner | * | +| 7528 | 3.25 | Skatt på årets resultat | * | +| 7450 | 3.26 | Årets resultat, vinst | + | +| 7550 | 3.27 | Årets resultat, förlust | - | + +**Sign convention (*)**: No pre-printed sign on form. Supply the sign as-is from the accounting. Costs are typically negative. **(+)**: Positive pre-printed; report positive for agreement. **(-)**: Negative pre-printed; report positive for agreement, negative to deviate. + +--- + + +## 5. INK2S: Skattemässiga justeringar (tax adjustments, page 4) + +| SRU | Row | Description | +|---|---|---| +| 7650 | 4.1 | Årets resultat, vinst | +| 7750 | 4.2 | Årets resultat, förlust | +| 7651 | 4.3a | Skatt på årets resultat (ej avdragsgill) | +| 7652 | 4.3b | Nedskrivning av finansiella tillgångar | +| 7653 | 4.3c | Andra bokförda kostnader som inte är avdragsgilla | +| 7751 | 4.4a | Lämnade koncernbidrag | +| 7764 | 4.4b | Andra ej bokförda kostnader som ska dras av | +| 7752 | 4.5a | Ackordsvinster (skattefria) | +| 7753 | 4.5b | Utdelning (skattefri) | +| 7754 | 4.5c | Andra bokförda intäkter som inte ska beskattas | +| 7654 | 4.6a | Schablonintäkt på periodiseringsfonder | +| 7668 | 4.6b | Schablonintäkt på fondandelar | +| 7655 | 4.6c | Mottagna koncernbidrag | +| 7656 | 4.6d | Uppräknat belopp vid återföring av periodiseringsfond | +| 7657 | 4.6e | Andra ej bokförda intäkter som ska beskattas | +| 7755 | 4.7a | Bokförd vinst vid avyttring av delägarrätter | +| 7756 | 4.7b | Bokförd förlust vid avyttring av delägarrätter | +| 7658 | 4.7e | Kapitalvinst för beskattningsåret | +| 7757 | 4.7f | Kapitalförlust som ska dras av | +| 7758 | 4.8a | Bokförd intäkt/vinst i handelsbolag | +| 7659 | 4.8b | Skattemässigt överskott enl. N3B | +| 7660 | 4.8c | Bokförd kostnad/förlust i handelsbolag | +| 7759 | 4.8d | Skattemässigt underskott enl. N3B | +| 7663 | 4.13 | Andra skattemässiga justeringar (catch-all) | +| 7763 | 4.14a | Outnyttjat underskott från föregående beskattningsår | +| 7664 | 4.14b | Reduktion av underskott (beloppsspärr/ackord) | +| 7670 | 4.14c | Reduktion pga koncernbidragsspärr/fusionsspärr | +| 8020 | 4.15 | Överskott → överförs till punkt 1.1 (INK2 field 7113) | +| 8021 | 4.16 | Underskott → överförs till punkt 1.2 (INK2 field 7114) | +| 7770 | 4.20 | Lån från aktieägare (fysisk person) vid beskattningsårets utgång | + +**Critical**: INK2S codes are NOT auto-derived from BAS accounts. They represent tax adjustments requiring manual calculation. The bookkeeping result (årets resultat from INK2R) flows into 7650/7750, then adjustments produce 8020/8021. + +--- + + +## 6. BAS-to-SRU Mapping: Balance Sheet + +Source: BAS-kontogruppen + Skatteverket joint mapping at bas.se/kontoplaner/sru/. Stable since 2017. + +### Assets + +| BAS accounts | → SRU | INK2R row | Description | +|---|---|---|---| +| 1010-1079, 1090-1099 | 7201 | 2.1 | Immateriella anläggningstillgångar | +| 1080-1089 | 7202 | 2.2 | Förskott immateriella | +| 1100-1119, 1130-1179, 1190-1199 | 7214 | 2.3 | Byggnader och mark | +| 1200-1299 (most) | 7215 | 2.4 | Maskiner och inventarier | +| 1120-1129 | 7216 | 2.5 | Förbättringsutgifter annans fastighet | +| 1180-1189 | 7217 | 2.6 | Pågående nyanläggningar | +| 1311-1316 | 7230 | 2.7 | Andelar koncernföretag | +| 1330-1338 | 7231 | 2.8 | Andelar intresseföretag | +| 1350-1359, 1380-1389 | 7233 | 2.9 | Ägarintressen övriga | +| 1320-1329, 1340-1349 | 7232 | 2.10 | Fordringar koncern/intresse | +| 1360-1369 | 7234 | 2.11 | Lån till delägare | +| 1370-1379, 1390-1399 | 7235 | 2.12 | Övriga långfristiga fordringar | +| 1410-1419 | 7241 | 2.13 | Råvaror | +| 1440-1449 | 7242 | 2.14 | Varor under tillverkning | +| 1450-1469 | 7243 | 2.15 | Färdiga varor | +| 1470-1489 | 7244 | 2.16 | Övriga lagertillgångar | +| 1490-1499 | 7245 | 2.17 | Pågående arbeten | +| 1400-1409 | 7246 | 2.18 | Förskott till leverantörer | +| 1500-1519 | 7251 | 2.19 | Kundfordringar | +| 1560-1579 | 7252 | 2.20 | Fordringar koncern/intresse (kortfristiga) | +| 1520-1559, 1580-1599, 1600-1699 | 7261 | 2.21 | Övriga fordringar | +| 1620 (specific) | 7262 | 2.22 | Upparbetad ej fakturerad | +| 1700-1799 | 7263 | 2.23 | Förutbetalda kostnader | +| 1860-1869 | 7270 | 2.24 | Kortfristiga andelar koncern | +| 1800-1859, 1870-1899 | 7271 | 2.25 | Övriga kortfristiga placeringar | +| 1900-1999 | 7281 | 2.26 | Kassa och bank | + +### Equity & Liabilities + +| BAS accounts | → SRU | INK2R row | Description | +|---|---|---|---| +| 2010-2089 | 7301 | 2.27 | Bundet eget kapital | +| 2090-2099 | 7302 | 2.28 | Fritt eget kapital | +| 2110-2129 | 7321 | 2.29 | Periodiseringsfonder | +| 2150-2159 | 7322 | 2.30 | Ackumulerade överavskrivningar | +| 2130-2149, 2160-2199 | 7323 | 2.31 | Övriga obeskattade reserver | +| 2210-2219 | 7331 | 2.32 | Pensionsavsättningar tryggandelagen | +| 2220-2229 | 7332 | 2.33 | Övriga pensionsavsättningar | +| 2230-2299 | 7333 | 2.34 | Övriga avsättningar | +| 2320-2329 | 7350 | 2.35 | Obligationslån | +| 2330-2339 | 7351 | 2.36 | Checkräkningskredit (långfristig) | +| 2340-2359 | 7352 | 2.37 | Övriga skulder kreditinstitut (långfristiga) | +| 2360-2379 | 7353 | 2.38 | Skulder koncern/intresse (långfristiga) | +| 2380-2399 | 7354 | 2.39 | Övriga skulder (långfristiga) | +| 2410-2419 | 7360 | 2.40 | Checkräkningskredit (kortfristig) | +| 2420-2439 | 7361 | 2.41 | Övriga skulder kreditinstitut (kortfristiga) | +| 2400-2409 | 7362 | 2.42 | Förskott från kunder | +| 2450-2459 | 7363 | 2.43 | Pågående arbeten (skuld) | +| 2460-2469 | 7364 | 2.44 | Fakturerad ej upparbetad | +| 2440-2449 | 7365 | 2.45 | Leverantörsskulder | +| 2490 | 7366 | 2.46 | Växelskulder | +| 2470-2479 | 7367 | 2.47 | Skulder koncern/intresse (kortfristiga) | +| 2480-2489, 2491-2499, 2600-2799, 2800-2899 | 7369 | 2.48 | Övriga skulder (kortfristiga) | +| 2500-2599 | 7368 | 2.49 | Skatteskulder | +| 2900-2999 | 7370 | 2.50 | Upplupna kostnader | + +--- + + +## 7. BAS-to-SRU Mapping: Income Statement + +**CRITICAL: BAS 5000-6999 ALL map to SRU 7513.** This is the single most common mapping error. + +| BAS accounts | → SRU | INK2R row | Description | +|---|---|---|---| +| 3000-3799 | 7410 | 3.1 | Nettoomsättning | +| 3800-3899 | 7412 | 3.3 | Aktiverat arbete | +| 3900-3999 | 7413 | 3.4 | Övriga rörelseintäkter | +| 4900-4999 | 7411 | 3.2 | Förändring av lager | +| 4000-4499 | 7511 | 3.5 | Råvaror och förnödenheter | +| 4600-4699 | 7512 | 3.6 | Handelsvaror | +| **5000-6999** | **7513** | 3.7 | **Övriga externa kostnader (ALL accounts in range)** | +| 7000-7699 | 7514 | 3.8 | Personalkostnader | +| 7700-7799 | 7516 | 3.10 | Nedskrivningar omsättningstillgångar | +| 7800-7899 | 7515 | 3.9 | Avskrivningar | +| 7900-7999 | 7517 | 3.11 | Övriga rörelsekostnader | +| 8000-8099 | 7414 | 3.12 | Resultat koncernföretag | +| 8100-8199 | 7415 | 3.13 | Resultat intresseföretag | +| 8200-8269 | 7423 | 3.14 | Resultat övriga ägarintresse | +| 8270-8299 | 7416 | 3.15 | Övriga finansiella anläggningstillgångar | +| 8300-8399 | 7417 | 3.16 | Ränteintäkter | +| 8400-8499 | 7522 | 3.18 | Räntekostnader | +| 8500-8599 (nedskrivn.) | 7521 | 3.17 | Nedskrivningar finansiella | +| 8810 | 7524 | 3.19 | Lämnade koncernbidrag | +| 8820 | 7419 | 3.20 | Mottagna koncernbidrag | +| 8830 | 7420 | 3.21 | Återföring periodiseringsfond | +| 8840 | 7525 | 3.22 | Avsättning periodiseringsfond | +| 8850 | 7421 | 3.23 | Förändring överavskrivningar | +| 8860-8899 | 7422 | 3.24 | Övriga bokslutsdispositioner | +| 8900-8989 | 7528 | 3.25 | Skatt | +| 8999 (positive balance) | 7450 | 3.26 | Vinst | +| 8999 (negative balance) | 7550 | 3.27 | Förlust | + +--- + + +## 8. Sign conventions for INK2R + +The income statement rows on INK2R use a sign system tied to the physical form: + +- **Revenue rows** (7410-7422): Report as the natural sign from accounting. Revenue positive, costs negative. +- **Cost rows** (7511-7528): Report as the natural sign. Costs are negative values. +- **7450 (vinst)**: Pre-printed as positive. Supply positive value if profit. +- **7550 (förlust)**: Pre-printed as negative. Supply positive value to indicate a loss; the minus is implicit in the row definition. + +When in doubt: supply the signed value as it appears in the trial balance. The form's physical layout handles presentation. + +**Balance sheet rows**: All amounts are positive (assets positive, equity/liabilities positive). A negative balance on a liability account indicates an error or special case.$gb$, + 'horizontal/swedish-sru-filing', + 2, + 1 + ), + ( + 'horizontal/swedish-tax-planning', + 'horizontal', + 'Swedish Tax Planning', + $gb$Swedish corporate tax planning (skatteplanering AB) for aktiebolag and fåmansbolag. Covers periodiseringsfond, överavskrivningar, koncernbidrag, 3:12-reglerna (gränsbelopp, löneunderlag, K10, 2026 reform), kapitalförsäkring i bolagskontext, ränteavdragsbegränsningar (EBITDA/N9), lön vs utdelning optimization, and tool interaction strategy. Trigger on ANY Swedish corporate tax planning question: "skatteplanering", "periodiseringsfond", "överavskrivningar", "koncernbidrag", "3:12", "fåmansbolag", "gränsbelopp", "K10", "löneunderlag", "kapitalförsäkring i bolaget", "ränteavdrag", "lön eller utdelning", "minimera skatt AB", "obeskattade reserver", "utdelningsutrymme", or questions about minimizing tax in a Swedish AB. Handles planning logic, not year-end booking mechanics (use swedish-year-end-closing for that).$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1431, + '.claude\skills\swedish-tax-planning\SKILL.md', + $gb$--- +name: swedish-tax-planning +description: > + Swedish corporate tax planning (skatteplanering AB) for aktiebolag and fåmansbolag. Covers periodiseringsfond, överavskrivningar, koncernbidrag, 3:12-reglerna (gränsbelopp, löneunderlag, K10, 2026 reform), kapitalförsäkring i bolagskontext, ränteavdragsbegränsningar (EBITDA/N9), lön vs utdelning optimization, and tool interaction strategy. Trigger on ANY Swedish corporate tax planning question: "skatteplanering", "periodiseringsfond", "överavskrivningar", "koncernbidrag", "3:12", "fåmansbolag", "gränsbelopp", "K10", "löneunderlag", "kapitalförsäkring i bolaget", "ränteavdrag", "lön eller utdelning", "minimera skatt AB", "obeskattade reserver", "utdelningsutrymme", or questions about minimizing tax in a Swedish AB. Handles planning logic, not year-end booking mechanics (use swedish-year-end-closing for that). +--- + +# Swedish Tax Planning for Aktiebolag (Skatteplanering AB) + +This skill covers the **planning and optimization logic** for Swedish corporate taxation. It is distinct from the year-end closing skill (which handles booking mechanics) and the VAT skill (which handles moms). The focus here is on how to use tax deferral and rate arbitrage tools to minimize the effective tax burden for AB owners. + +## Key base figures (update annually) + +| Parameter | 2024 | 2025 | 2026 | +|-----------|------|------|------| +| Bolagsskatt | 20.6% | 20.6% | 20.6% | +| IBB | 76,200 | 80,600 | 83,400 | +| PBB | 57,300 | 58,800 | 59,200 | +| SLR (30 Nov prior year) | 2.62% | 1.96% | 2.55% | +| Arbetsgivaravgifter | 31.42% | 31.42% | 31.42% | + +## Reference files + +Read the relevant file(s) based on the user's question: + +- **`references/periodiseringsfond.md`** -- IL 30 kap, 25% cap, 6-year reversal, schablonintäkt, BAS accounts, pitfalls +- **`references/overavskrivningar.md`** -- IL 18 kap, 30-regeln vs 20-regeln, direktavdrag, BAS accounts, interaction with periodiseringsfond +- **`references/koncernbidrag.md`** -- IL 35 kap, >90% ownership, öppna vs dolda, BAS accounts, underskottsspärr +- **`references/312-regler.md`** -- IL 56-57 kap, fåmansbolag definition, gränsbelopp (förenklingsregeln/huvudregeln), löneunderlag, sparat utdelningsutrymme, K10, 2026 reform +- **`references/kapitalforsakring.md`** -- KF for AB, avkastningsskatt mechanics, BAS accounts, KF vs direktägande vs näringsbetingade andelar +- **`references/ranteavdragsbegransningar.md`** -- IL 24 kap, EBITDA 30%, förenklingsregeln 5 MSEK, riktade regler, carry-forward, N9-blankett +- **`references/strategy-and-interactions.md`** -- Year-end sequencing, lön vs utdelning optimization, tool interactions, Skatteverket audit triggers, skatteflyktslagen + +## How to use this skill + +When a user asks a tax planning question: + +1. Identify the specific tool(s) involved (periodiseringsfond, 3:12, etc.) +2. Read the relevant reference file(s) +3. Answer with specific IL chapter/section references, BAS accounts, and current thresholds +4. Flag the 2026 3:12 reform changes when relevant to the question +5. Always distinguish between items booked in räkenskaperna vs items only in deklarationen +6. When the question spans multiple tools, read `references/strategy-and-interactions.md` for sequencing and interaction effects + +## Critical distinctions + +- **Periodiseringsfond for AB** must be booked as obeskattad reserv (formellt samband). For enskild firma, it is only in deklarationen. This skill covers AB. +- **Överavskrivningar** create obeskattade reserver (BAS 2150). Do NOT confuse with periodiseringsfond (BAS 2110-2139). +- **3:12-reglerna** apply to the physical person (delägare), not the company. The K10 is filed with INK1, not INK2. +- **Kapitalförsäkring**: the AB does NOT pay avkastningsskatt on a Swedish KF. The insurance company does. The AB only books insättningar/uttag. +- **Ränteavdragsbegränsningar**: förenklingsregeln 5 MSEK applies per intressegemenskap, not per bolag. + +## Boundary with other skills + +| Question type | Use this skill | Use other skill | +|--------------|----------------|-----------------| +| "How much periodiseringsfond should I set aside?" | Yes | | +| "How do I book periodiseringsfond?" | | swedish-year-end-closing | +| "Should I take lön or utdelning?" | Yes | | +| "What VAT code for EU services?" | | swedish-vat | +| "What is the deadline for årsredovisning?" | | swedish-year-end-closing | +| "How do I minimize total tax on 2 MSEK profit?" | Yes | | + +--- + +## Loadable references + +The reference files named above are NOT included in this body. When a question genuinely needs that depth, load the specific one on demand with `gnubok_load_skill`, and only then: + +- `references/312-regler.md` → `gnubok_load_skill("horizontal/swedish-tax-planning/312-regler")`: 3:12-reglerna (Fåmansbolag Dividend Taxation) +- `references/kapitalforsakring.md` → `gnubok_load_skill("horizontal/swedish-tax-planning/kapitalforsakring")`: Kapitalförsäkring i bolagskontext +- `references/koncernbidrag.md` → `gnubok_load_skill("horizontal/swedish-tax-planning/koncernbidrag")`: Koncernbidrag (Group Contributions) +- `references/overavskrivningar.md` → `gnubok_load_skill("horizontal/swedish-tax-planning/overavskrivningar")`: Överavskrivningar (Accelerated Depreciation) +- `references/periodiseringsfond.md` → `gnubok_load_skill("horizontal/swedish-tax-planning/periodiseringsfond")`: Periodiseringsfond (Tax Allocation Reserve) +- `references/ranteavdragsbegransningar.md` → `gnubok_load_skill("horizontal/swedish-tax-planning/ranteavdragsbegransningar")`: Ränteavdragsbegränsningar (Interest Deduction Limitations) +- `references/strategy-and-interactions.md` → `gnubok_load_skill("horizontal/swedish-tax-planning/strategy-and-interactions")`: Strategy, Interactions, and Optimization +$gb$, + NULL, + 3, + 1 + ), + ( + 'horizontal/swedish-tax-planning/312-regler', + 'horizontal', + '3:12-reglerna (Fåmansbolag Dividend Taxation)', + $gb$3:12-reglerna (Fåmansbolag Dividend Taxation): reference for Swedish Tax Planning$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1264, + '.claude\skills\swedish-tax-planning\references\312-regler.md', + $gb$# 3:12-reglerna (Fåmansbolag Dividend Taxation) + +## Legal basis +IL 56 kap (definition of fåmansföretag), IL 57 kap (taxation of qualified holdings) + +## Definitions + +**Fåmansföretag**: AB where 4 or fewer delägare control >50% of rösterna, counting närståendes holdings as one person (56 kap. 2 §). + +**Kvalificerade andelar**: Shares are qualified if the owner or a närstående has been **verksam i betydande omfattning** (actively participating) in the company during the tax year or any of the 5 preceding years (57 kap. 4 §). Shortened to **4 years** from inkomstår 2027. + +**Samma eller likartad verksamhet**: Activity in a related company can make shares qualified even if the owner is not active in the specific company (57 kap. 4 § first paragraph 1). + +## Tax rates on dividends from qualified shares + +| Zone | Tax rate | Determined by | +|------|----------|---------------| +| Within gränsbelopp | **20%** effective (2/3 x 30%) | K10 calculation | +| Above gränsbelopp | **~32-52%** (tjänstebeskattning) | Marginal income tax | +| Above takbelopp (90 IBB) | **30%** flat | Capital income | + +Takbelopp for utdelning: 90 x IBB = 7,254,000 kr (2025), 7,506,000 kr (2026) + +## Gränsbelopp calculation (through inkomstår 2025) + +### Förenklingsregeln +- Schablonbelopp: **2.75 x IBB (föregående år)** +- Inkomstår 2025: 2.75 x 76,200 = **209,550 kr** +- No salary or ownership threshold required +- Can only be used for ONE fåmansbolag per year +- Cannot be combined with huvudregeln + +### Huvudregeln +Formula: Omkostnadsbelopp x (SLR + 9%) + Lönebaserat utrymme + Sparat utdelningsutrymme x (SLR + 3%) + +For inkomstår 2025: +- Klyvningsränta: SLR 1.96% + 9% = **10.96%** +- Uppräkning sparat utrymme: SLR 1.96% + 3% = **4.96%** + +## Löneunderlag (IL 57 kap. 16-19 §§) + +Lönebaserat utrymme = **50% of total löneunderlag** (all kontant bruttolön paid by company + qualifying subsidiaries during calendar year preceding assessment year), proportioned by ownership share. + +### Lönekravet (through inkomstår 2025) + +Owner or närstående must have drawn kontant bruttolön equal to at least the LOWER of: +- 6 IBB + 5% of total company wages +- 9.6 IBB + +For inkomstår 2025 (löner 2024): lower of (457,200 + 5% of total wages) and 731,520 kr. + +### What counts as kontant bruttolön +- Cash salary only +- NOT: skattepliktiga förmåner, kostnadsersättningar, state-subsidized wages + +### 4%-spärren (through inkomstår 2025) +Must own at least **4% of capital** to use lönebaserat utrymme. Närståendes holdings do NOT count toward this threshold. + +### 50x cap +Lönebaserat utrymme is capped at **50 times** the owner's or närstående's own kontant ersättning from the company/subsidiaries. + +## Sparat utdelningsutrymme + +Unused gränsbelopp carries forward, uppräknat with SLR + 3 procentenheter annually. Filing K10 every year, even without dividends, is essential to preserve accumulation. + +## Capital gains on qualified shares + +Same split logic as dividends: +- Within remaining sparat utdelningsutrymme: 20% +- Excess: tjänstebeskattning up to takbelopp of **100 IBB** (8,060,000 kr for 2025) +- Above takbelopp: 30% flat + +The takbelopp aggregates the shareholder's and närståendes combined gains over current + 5 preceding years. + +## K10-deklaration (blankett SKV 2110) + +Filed as bilaga to **Inkomstdeklaration 1** by May 2 each year. + +Contents: +- (A1) Förenklingsregeln calculation +- (A2) Huvudregeln calculation +- (B) Kapitalvinst vid avyttring +- (C) Omräknat omkostnadsbelopp +- (D) Lönebaserat utrymme beräkning + +Must be filed every year to preserve sparat utdelningsutrymme, even if no dividend was taken. + +## 2026 Reform (effective January 1, 2026) + +Major changes replacing the dual system with a unified calculation: + +| Component | New rule (inkomstår 2026) | +|-----------|--------------------------| +| Grundbelopp | **4 x IBB (2025) = 322,400 kr** (replaces förenklingsregeln) | +| Lönebaserat utrymme | 50% x (ägarandel x löneunderlag - 8 IBB) | +| Ränta on omkostnadsbelopp | (Belopp - 100,000) x (SLR + 9%) | +| Sparat utdelningsutrymme | Carried forward WITHOUT ränteuppräkning | +| 4%-spärren | **Abolished** | +| Löneuttagskravet | **Abolished** (50x cap remains) | +| Karenstid | Shortened from 5 to **4 years** | +| Närståendebegreppet | Narrowed: siblings and their families excluded | +| Schablonmässigt löneavdrag | **8 IBB** per delägare subtracted from löneunderlag | + +The grundbelopp at 4 IBB is significantly higher than the old förenklingsregeln (2.75 IBB), benefiting small companies. The abolished lönekrav means owners of holding companies can access lönebaserat utrymme from subsidiary wages without meeting a salary threshold. + +## Common K10 errors + +1. Including förmåner (benefits) in kontant bruttolön +2. Using förenklingsregeln in multiple companies simultaneously +3. Failing to file K10 in years without dividend (losing sparat utrymme) +4. Confusing K10 (kvalificerade) with K12 (okvalificerade) +5. Miscalculating löneunderlag when subsidiaries are involved +6. Missing the 4% ownership threshold (through 2025) +7. Not tracking närståendes holdings for aggregation rules$gb$, + 'horizontal/swedish-tax-planning', + 1, + 1 + ), + ( + 'horizontal/swedish-tax-planning/kapitalforsakring', + 'horizontal', + 'Kapitalförsäkring i bolagskontext', + $gb$Kapitalförsäkring i bolagskontext: reference for Swedish Tax Planning$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 679, + '.claude\skills\swedish-tax-planning\references\kapitalforsakring.md', + $gb$# Kapitalförsäkring i bolagskontext + +## Key rule: AB cannot open ISK + +Investeringssparkonto is restricted to fysiska personer. Kapitalförsäkring (KF) is the sole schablonbeskattad sparform available to AB. + +## Tax mechanism for Swedish KF held by AB + +The AB does **NOT** report or pay avkastningsskatt. For a Swedish KF, the **livförsäkringsföretaget** (insurance company) is the skattskyldige entity under §2 first paragraph, Lag (1990:661) om avkastningsskatt på pensionsmedel (AvPL). + +The insurance company calculates and deducts avkastningsskatt internally, reducing the KF's value. The AB's books reflect only insättningar and uttag. Individual transactions within the KF are invisible to the AB's accounting. + +## Avkastningsskatt calculation + +1. Kapitalunderlag = KF value January 1 + 100% of premiums Jan-Jun + 50% of premiums Jul-Dec +2. Skatteunderlag = Kapitalunderlag x (SLR + 1 procentenhet), minimum **1.25%** +3. Avkastningsskatt = Skatteunderlag x **30%** + +For 2026: effective annual tax = (2.55% + 1%) x 30% = **1.065%** of kapitalunderlag. + +Properties: +- No tax on realized gains, dividends, or fund switches within KF +- Uttag (withdrawals) are skattefria +- Insättningar are NOT avdragsgilla + +## Utländsk KF + +For KF issued by non-Swedish insurance company without fast driftställe in Sweden: the **AB itself becomes skattskyldig** for avkastningsskatt (§2 first paragraph 6-7 AvPL). Must be declared in income declaration. The avkastningsskatt is not avdragsgill. + +## BAS accounts + +| Account | Use | +|---------|-----| +| 1385 | Värde av kapitalförsäkring (financial asset) | +| 8220 | Resultat vid försäljning (vinst/förlust at uttag) | + +Insättning: Debit 1385 / Credit 1930 (bank) +Uttag: Debit 1930 / Credit 1385 (+ 8220 for gain/loss) + +## When KF beats direktägande + +At 2026 SLR, breakeven annual return is approximately **5.2%**. Above this, KF's flat ~1.065% tax beats 20.6% bolagsskatt on realized gains in a depå. + +Additional KF advantages: +- No per-transaction bookkeeping +- Tax-free rebalancing +- Administrative simplicity + +## When KF is WRONG + +- **Näringsbetingade andelar** (IL 24 kap. 32-34 §): dividends and capital gains are entirely skattefria when held directly. KF would impose unnecessary tax. +- Never use KF for unquoted holdings +- Never use KF for listed shares where AB holds ≥10% of votes for at least one year +- KF losses are **not avdragsgilla**, making it disadvantageous in declining markets +- Placing kvalificerade andelar in KF is actively challenged by Skatteverket as skatteflykt + +## Proposed skattefri grundnivå + +A lagrådsremiss proposes a tax-free base level for ISK/KF savings. If enacted, this would affect the breakeven calculation. Monitor legislative developments.$gb$, + 'horizontal/swedish-tax-planning', + 1, + 1 + ), + ( + 'horizontal/swedish-tax-planning/koncernbidrag', + 'horizontal', + 'Koncernbidrag (Group Contributions)', + $gb$Koncernbidrag (Group Contributions): reference for Swedish Tax Planning$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 732, + '.claude\skills\swedish-tax-planning\references\koncernbidrag.md', + $gb$# Koncernbidrag (Group Contributions) + +## Legal basis +IL 35 kap + +## Core function + +Koncernbidrag transfers taxable income between group companies. Avdragsgillt for the giver, skattepliktigt for the receiver. Enables the koncern to pay tax only on net aggregate profit. + +## Requirements (35 kap. 2-3 §§) + +All of these must be met: +1. Moderföretaget owns **>90% of andelarna** (capital shares, not votes) +2. Ownership has existed for the **entire tax year** of both giver and receiver (or since subsidiary began any business) +3. Both are qualifying Swedish entities (AB, ekonomisk förening, sparbank, etc.) +4. Neither is a privatbostadsföretag or investmentföretag +5. Both **openly report** (öppet redovisa) the bidrag in income declarations filed at the same deadline +6. An actual **value transfer** must occur no later than the giver's declaration filing date + +## Directions + +- Parent to subsidiary (nedåtriktat) -- most common +- Subsidiary to parent (uppåtriktat) +- Between systerbolag (sidledes) -- requires common parent owning >90% of both + +## Öppna vs dolda koncernbidrag + +**Öppna**: Explicitly reported, regulated by IL 35 kap. Booked as bokslutsdisposition. + +**Dolda**: Through mispriced intra-group transactions, below-market sales, debt forgiveness. Fall outside IL 35 kap. Trigger uttagsbeskattning and transfer pricing scrutiny under 14 kap. 19 § IL (korrigeringsregeln). Avoid. + +## BAS accounts + +| Account | Name | +|---------|------| +| 8820 | Mottagna/Erhållna koncernbidrag (receiver) | +| 8830 | Lämnade koncernbidrag (giver) | +| 2860 | Kortfristig skuld till koncernföretag (giver's balance sheet) | +| 1660 | Kortfristig fordran på koncernföretag (receiver's balance sheet) | + +**CORRECTION**: Account 8840 is NOT for koncernbidrag. It is "Lämnade gottgörelser." The old accounts 8893/8894 were replaced by 8820/8830 in BAS 2009. + +## Underskottsspärr (40 kap. 18-19 §§) + +After an ownership change (ägarförändring), the acquired company's old tax losses CANNOT be offset against received koncernbidrag during a spärrtid. This prevents abuse of loss-making shell companies. + +## Planning considerations + +- Instant resultatutjämning across the group. No 6-year deferral like periodiseringsfond. +- Requires formal bolagsstämmobeslut +- No koncernbidragsrätt in the year a subsidiary is acquired (if it had prior operations) or sold. The "hela beskattningsåret" rule is strict. +- Koncernbidrag REDUCES the giver's EBITDA for ränteavdragsbegränsningar (negative interaction) +- The giver must have sufficient free equity (fritt eget kapital) per ABL to make the transfer without triggering "olovlig värdeöverföring" + +## Example + +Moder AB: taxable income 5 MSEK. Dotter AB: deficit 3 MSEK. +- Moder gives 3 MSEK koncernbidrag +- Moder: Debit 8830 / Credit 2860. Taxable income: 2 MSEK -> tax 412,000 kr +- Dotter: Debit 1660 / Credit 8820. Taxable income: 0 +- Without koncernbidrag, group pays 1,030,000 kr. Saving: 618,000 kr.$gb$, + 'horizontal/swedish-tax-planning', + 1, + 1 + ), + ( + 'horizontal/swedish-tax-planning/overavskrivningar', + 'horizontal', + 'Överavskrivningar (Accelerated Depreciation)', + $gb$Överavskrivningar (Accelerated Depreciation): reference for Swedish Tax Planning$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 786, + '.claude\skills\swedish-tax-planning\references\overavskrivningar.md', + $gb$# Överavskrivningar (Accelerated Depreciation) + +## Legal basis +IL 18 kap (inventarier), IL 19 kap (byggnader) + +## Core concept + +When skattemässig avskrivning exceeds bokföringsmässig avskrivning (planned depreciation per ÅRL/K2/K3), the difference is an överavskrivning, booked as obeskattad reserv. + +## Two methods for inventarier (räkenskapsenlig avskrivning) + +### 30-regeln / Restvärdemetoden (IL 18 kap. 13 §) +- Tax book value of all pooled inventarier can be written down to **70%** of avskrivningsunderlag +- Avskrivningsunderlag = prior-year tax residual value + new acquisitions - sales proceeds of items acquired in prior years +- Yields up to 30% deduction annually on declining balance +- Applied on the entire pool collectively + +### 20-regeln / Kompletteringsregeln (IL 18 kap. 17 §) +- 20% straight-line depreciation from acquisition year +- Full depreciation in 5 years +- Applied per individual asset, then summed +- Each asset's remaining tax value = max(anskaffningsvärde x (1 - 0.20 x antal år), 0) + +### Choosing between methods +- Companies may switch between the two methods each year +- Choose whichever yields the **lowest tax book value** (largest total deduction) +- 20-regeln typically wins for older assets; 30-regeln for newer large acquisitions + +## Direktavdrag (IL 18 kap. 4 §) +Assets costing less than **half a prisbasbelopp** or with expected useful life ≤ 3 years: +- 2025: < 29,400 kr +- 2026: < 29,600 kr + +## BAS accounts + +| Account | Name | +|---------|------| +| 2150 | Ackumulerade överavskrivningar (group) | +| 2153 | Ack. överavskrivningar, maskiner och inventarier | +| 8850 | Förändring av överavskrivningar (group) | +| 8853 | Förändring av överavskrivningar, maskiner och inventarier | +| 7831-7835 | Avskrivningar enligt plan (per asset category) | +| 1220/1229 | Inventarier: anskaffningsvärde / ack. avskrivningar | + +## Obeskattade reserver split + +Obeskattade reserver from överavskrivningar consist of: +- ~79.4% eget kapital +- ~20.6% latent skatteskuld (deferred tax liability) + +Under K3 consolidated accounts, these are split explicitly. Under K2, they appear as gross line item. + +## Interaction with periodiseringsfond + +Both create obeskattade reserver and can be used simultaneously. Optimal year-end sequence: +1. Maximize överavskrivningar (limited by asset base) +2. Calculate remaining taxable income +3. Set aside up to 25% to periodiseringsfond + +## Critical pitfall + +Skatteverket ställningstagande 2024-10-15, dnr 8-3120349: If a company systematically (more than one year) books depreciation exceeding the skattemässigt maximum, it **loses the right to räkenskapsenlig avskrivning entirely** and is forced onto restvärdesavskrivning (25% of residual value). A one-time error does not forfeit the right. + +## Planning considerations + +- Most valuable for capital-intensive businesses with large inventarier bases +- Combined with periodiseringsfond, an asset-heavy AB can defer the vast majority of its tax bill +- Monitor the gap between plan and tax depreciation to avoid unintended over-depreciation +- In a sale scenario, överavskrivningar are reversed (creating taxable income), so plan exit timing carefully$gb$, + 'horizontal/swedish-tax-planning', + 1, + 1 + ), + ( + 'horizontal/swedish-tax-planning/periodiseringsfond', + 'horizontal', + 'Periodiseringsfond (Tax Allocation Reserve)', + $gb$Periodiseringsfond (Tax Allocation Reserve): reference for Swedish Tax Planning$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 800, + '.claude\skills\swedish-tax-planning\references\periodiseringsfond.md', + $gb$# Periodiseringsfond (Tax Allocation Reserve) + +## Legal basis +IL 30 kap (Inkomstskattelagen 1999:1229) + +## Core rules for AB + +- Max avsättning: **25% of skattemässigt överskott** (taxable income before the deduction) +- Each year's fund is tracked separately +- Up to **6 parallel funds** at any time +- Each fund must be reversed no later than the **6th tax year** after the avsättning year (30 kap. 7 §) +- Reversal follows **FIFO** (oldest first) +- The avsättning **must be booked in räkenskaperna** as obeskattad reserv (formellt samband, 30 kap. 3 §). Without the booking, the deduction is invalid for AB. + +## Schablonintäkt (30 kap. 6a §) + +AB must declare a schablonintäkt annually: +- Formula: SLR (per Nov 30 prior year) x total periodiseringsfonder at tax year start +- Minimum SLR floor: **0.5%** +- Reported only on **INK2S punkt 4.6a** (not booked in accounting) +- Annual cost of the tax credit at SLR 2.55%: approximately 2.55% x 20.6% = **0.53%** of fund balance + +## Transition uppräkning + +Funds set aside when bolagsskatt was 22% (räkenskapsår starting 2018 or earlier) trigger a **6% uppräkning** on the reversed amount, preventing arbitrage from the rate change to 20.6%. + +## BAS accounts + +| Account | Name | Use | +|---------|------|-----| +| 2110-2139 | Periodiseringsfonder (year-specific) | Balance sheet, obeskattade reserver | +| 8810 | Förändring av periodiseringsfond (group) | Income statement, bokslutsdispositioner | +| 8811 | Avsättning till periodiseringsfond | Debit 8811 / Credit 21XX | +| 8819 | Återföring från periodiseringsfond | Debit 21XX / Credit 8819 | + +**CRITICAL**: Account 2150 is NOT periodiseringsfond. It is ackumulerade överavskrivningar. This is one of the most common bookkeeping errors. + +## Planning considerations + +- **Loss absorption**: When reversed against a loss year, the originally deferred tax becomes a permanent saving, not merely a deferral. This makes periodiseringsfond especially valuable for cyclical businesses. +- **Cash flow**: The deferred tax remains in the company as working capital. If the company earns a return exceeding the SLR before tax on the retained cash, the fund is net beneficial. +- **Year-end sequence**: Calculate periodiseringsfond AFTER maximizing överavskrivningar, since both reduce taxable income. +- **Interaction with EBITDA**: Avsättning to periodiseringsfond INCREASES the skattemässigt EBITDA (avdragsunderlag) for ränteavdragsbegränsningar purposes (IL 24 kap. 25 §). This is beneficial when interest deductions are constrained. + +## Common pitfalls + +1. Forgetting mandatory 6-year reversal (Skatteverket corrects automatically, plus skattetillägg risk) +2. Neglecting schablonintäkt in the deklaration +3. Failing to book in räkenskaperna (invalidates the deduction for AB) +4. Consuming the cash without reserving for future tax liability upon reversal +5. Not tracking individual funds separately (each has its own 6-year clock) + +## Example + +AB with 1,000,000 kr taxable income in 2025: +- Max avsättning: 25% x 1,000,000 = 250,000 kr +- Booking: Debit 8811 / Credit 2125 +- Taxable income falls to 750,000 kr +- Tax saved in current year: 51,500 kr +- 2026 schablonintäkt: 250,000 x 2.55% = 6,375 kr -> extra tax 1,313 kr$gb$, + 'horizontal/swedish-tax-planning', + 1, + 1 + ), + ( + 'horizontal/swedish-tax-planning/ranteavdragsbegransningar', + 'horizontal', + 'Ränteavdragsbegränsningar (Interest Deduction Limitations)', + $gb$Ränteavdragsbegränsningar (Interest Deduction Limitations): reference for Swedish Tax Planning$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 857, + '.claude\skills\swedish-tax-planning\references\ranteavdragsbegransningar.md', + $gb$# Ränteavdragsbegränsningar (Interest Deduction Limitations) + +## Legal basis +IL 24 kap. 21-29 §§ (generella regler), IL 24 kap. 16-20 §§ (riktade regler) + +Implements the EU Anti-Tax Avoidance Directive (ATAD). Effective January 1, 2019. + +## Two alternative ceilings + +### EBITDA-regeln (24 kap. 24 § first paragraph) + +Deduction of negativt räntenetto up to **30% of skattemässigt EBITDA** (avdragsunderlag). + +Avdragsunderlag calculation (24 kap. 25 §): +- Start: skattemässigt resultat +- ADD: värdeminskningsavdrag, negativt räntenetto, avsättning till periodiseringsfond, certain non-deductible items +- SUBTRACT: återförd periodiseringsfond, tax-free dividends on näringsbetingade andelar, positivt räntenetto + +Key interaction: periodiseringsfond avsättning INCREASES avdragsunderlag, which is beneficial. +Key interaction: koncernbidrag (lämnat) DECREASES avdragsunderlag, which is harmful. + +### Förenklingsregeln (24 kap. 24 § second paragraph) + +Deduction of negativt räntenetto up to **5 MSEK**. + +Critical constraints: +- Applies per **intressegemenskap**, not per bolag +- If ANY company in the group uses this, the 5 MSEK cap covers the ENTIRE group +- Non-deductible amounts under förenklingsregeln **cannot be carried forward** (permanently lost) +- Cannot be combined with EBITDA-regeln within the same intressegemenskap + +## Carry-forward (24 kap. 26 §) + +Under EBITDA-regeln only: excess negativt räntenetto becomes **kvarstående negativt räntenetto**, carried forward for **6 years**. Lost upon ägarförändring. + +## Definition of ränteutgifter (24 kap. 2 §) + +Broad definition includes: +- Traditional ränta +- Financing costs, commitment fees, arrangement fees +- Interest component of financial leasing +- Hedged currency losses on loans +- Capitalized interest + +## Riktade regler for koncerninterna lån (24 kap. 16-20 §§) + +Additional restrictions BEFORE the generella regler apply: +- Ränteavdrag denied if arrangement "uteslutande eller så gott som uteslutande" (90-100%) arose to generate väsentlig skatteförmån +- Förvärvsregeln (24 kap. 19 §): underlying acquisition must be "väsentligen affärsmässigt motiverat" +- Following HFD 2021 ref. 68 and HFD 2024, partly incompatible with EU law +- Prop. 2025/26:20 adapts rules from January 1, 2026: denial limited to "rent konstlade upplägg" for EES-based lenders + +## BAS accounts + +| Account | Use | +|---------|-----| +| 8400/8410 | Räntekostnader (general) | +| 8310/8311 | Ränteintäkter | +| Separate sub-accounts | Koncerninterna vs externa räntor (essential for N9) | + +## N9-blankett + +Filed as bilaga to INK2 when negativt räntenetto exists. Reports: +- Ränteintäkter and ränteutgifter +- Negativt/positivt räntenetto +- Avdragsunderlag (EBITDA) +- Avdragsutrymme +- Kvarstående negativt räntenetto from prior years +- Choice of EBITDA-regeln vs förenklingsregeln + +## Practical example + +AB Alfa: skattemässigt resultat 10 MSEK, ränteintäkter 1 MSEK, ränteutgifter 6 MSEK, avskrivningar 3 MSEK, periodiseringsfond avsättning 2 MSEK, återföring 1 MSEK. + +- Negativt räntenetto: 6 - 1 = 5 MSEK +- EBITDA = 10 + 5 + 3 + 2 - 1 = 19 MSEK +- Avdragsutrymme = 30% x 19 = 5.7 MSEK > 5 MSEK -> full deduction + +## Circular dependency warning + +Adjusting koncernbidrag after the EBITDA calculation creates circular dependencies. Koncernbidrag changes skattemässigt resultat, which changes EBITDA, which changes avdragsutrymme, which may change the optimal koncernbidrag. Iterative recalculation required.$gb$, + 'horizontal/swedish-tax-planning', + 1, + 1 + ), + ( + 'horizontal/swedish-tax-planning/strategy-and-interactions', + 'horizontal', + 'Strategy, Interactions, and Optimization', + $gb$Strategy, Interactions, and Optimization: reference for Swedish Tax Planning$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1336, + '.claude\skills\swedish-tax-planning\references\strategy-and-interactions.md', + $gb$# Strategy, Interactions, and Optimization + +## Year-end decision sequence + +Follow this order for optimal tax planning: + +1. **Överavskrivningar**: Calculate max under 30-regeln and 20-regeln. Limited by asset base, so do this first. +2. **Periodiseringsfond**: Calculate remaining taxable income, set aside up to 25%. Remember any återföring in the same year increases the base. +3. **Koncernbidrag**: Equalize remaining profits and losses across the group. Requires bolagsstämmobeslut. +4. **Löneuttag**: Verify owner salary meets lönekrav for 3:12 purposes (through inkomstår 2025). December bonuses are common but draw Skatteverket attention. +5. **Utdelning**: Plan within available gränsbelopp. +6. **Ränteavdragsbegränsningar**: Verify compliance. Periodiseringsfond avsättning increases EBITDA (good), koncernbidrag decreases it (bad for giver). + +## Lön vs utdelning: the fundamental trade-off + +### Effective combined tax burdens + +| Extraction method | Combined burden (company + owner) | +|-------------------|-----------------------------------| +| Utdelning within gränsbelopp | ~36.5% (1 - 0.794 x 0.80) | +| Lön below brytpunkt (no statlig skatt) | ~47-52% (incl. arbetsgivaravgifter 31.42%) | +| Lön above brytpunkt | ~58-63% | +| Utdelning above gränsbelopp (tjänstebeskattning) | ~52-58% | + +### Optimal strategy for most fåmansbolagsägare + +1. Take lön up to pension ceiling: 8.07 x IBB = ~673,000 kr (2026). This secures SGI and pensionsrätt. +2. Ensure lönekravet is met for 3:12 (through inkomstår 2025) +3. Distribute remaining profits as utdelning within gränsbelopp +4. Excess profits: retain in company, invest via kapitalförsäkring, or use periodiseringsfond to defer + +### When lön is preferable despite higher tax +- Building SGI (sjukpenninggrundande inkomst) for social insurance benefits +- Maximizing allmän pension +- When the company has no accumulated gränsbelopp +- When löneunderlag needs to be built (owner's lön feeds into the calculation) + +## Interaction matrix + +| Tool A | Affects Tool B | How | +|--------|---------------|-----| +| Periodiseringsfond avsättning | EBITDA | Increases avdragsunderlag (beneficial) | +| Periodiseringsfond återföring | EBITDA | Decreases avdragsunderlag (harmful) | +| Koncernbidrag (lämnat) | EBITDA | Decreases avdragsunderlag (harmful for giver) | +| Koncernbidrag (mottaget) | EBITDA | Increases avdragsunderlag (beneficial for receiver) | +| Löneuttag | 3:12 gränsbelopp | Meets lönekrav AND feeds löneunderlag | +| Löneuttag | Company cost | Avdragsgill, reduces taxable income | +| Löneuttag | Arbetsgivaravgifter | 31.42% additional company cost | +| Överavskrivningar | Periodiseringsfond | Reduces taxable income, lowering max avsättning | +| Överavskrivningar | EBITDA | Added back, increases avdragsunderlag | + +## Obeskattade reserver: balance sheet effects + +Both periodiseringsfonder and ackumulerade överavskrivningar appear as obeskattade reserver: +- ~79.4% equity component +- ~20.6% latent tax component + +For bank credit assessments (soliditet), these components are typically split. In K3 consolidated accounts, the split is explicit (uppskjuten skatteskuld and eget kapital). + +## Skatteverket audit triggers + +Common patterns that invite scrutiny: +1. Discrepancies between momsdeklaration and INK2 turnover +2. Unusually large avdrag for representation, leasing, consulting fees +3. Owner salary patterns that appear primarily tax-motivated (e.g., large December bonuses to meet lönevillkoret) +4. Placing kvalificerade andelar in kapitalförsäkring +5. "Samma eller likartad verksamhet" when activity is split between related companies +6. Rapid corporate restructuring before significant transactions +7. Koncernbidrag patterns lacking business substance +8. Transfer pricing in intra-group transactions without documentation + +## Skatteflyktslagen (Lag 1995:575) + +Applies when four cumulative conditions are met: +1. Väsentlig skatteförmån +2. Taxpayer participation (directly or indirectly) +3. Tax benefit was the predominant reason +4. Taxation based on the arrangement would contravene the law's purpose + +## Documentation requirements + +Essential documentation that must be in order: +- Periodiseringsfond: corresponding obeskattade reserver in räkenskaperna +- Koncernbidrag: formal bolagsstämmobeslut +- K10: filed annually (even without dividend) +- Transfer pricing: arm's-length documentation for intra-group transactions +- Löneunderlag: lönespecifikationer supporting the K10 calculation + +Missing any of these creates both skattetillägg risk and potential loss of deduction rights. + +## Multi-year planning horizon + +The most valuable long-term strategy for a fåmansbolagsägare: +1. Maximize sparat utdelningsutrymme through consistent K10 filing +2. Optimize löneunderlag annually (company wages directly feed gränsbelopp growth) +3. Compound growth of the 20%-taxed dividend space reduces lifetime tax burden far more than any single-year maneuver +4. Use periodiseringsfond strategically against anticipated loss years +5. Time major asset acquisitions to maximize överavskrivningar in the acquisition year + +## Proposed bolagsskatt reduction + +A proposal to reduce bolagsskatt to 20% has been remitted (May 2025) but is not yet enacted. If passed, it would trigger transition effects across periodiseringsfonder (potential uppräkning) and affect the relative attractiveness of all tools. Monitor.$gb$, + 'horizontal/swedish-tax-planning', + 1, + 1 + ), + ( + 'horizontal/swedish-vat', + 'horizontal', + 'Swedish VAT', + $gb$Swedish VAT (moms) compliance reference. Covers momsredovisning periods/deadlines, EU VAT (omvänd skattskyldighet, reverse charge, tjänstehandel, varuhandel, trepartshandel, OSS), import/export moms, representation moms (300 SEK cap), mixed verksamhet (proportionell avdragsrätt, HFD 2023 ref. 45), jämkning of input VAT on capital goods, frivillig skattskyldighet for uthyrning, momsdeklaration Ruta 05-62 to BAS 26xx mapping, complete BAS 26xx series, error patterns, penalties, and law references (ML 2023:200, SFL, EU VAT Directive). Trigger on ANY Swedish moms/VAT question, momsdeklaration, EU trade VAT, reverse charge, representation, blandad verksamhet, jämkning, BAS 2610-2670, rutor 05-62, "vilken momskod", "hur bokför jag moms", "omvänd moms", "EU-moms", "importmoms". Highest-error-rate area in Swedish bookkeeping; always use this skill over training data.$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1027, + '.claude\skills\swedish-vat\SKILL.md', + $gb$--- +name: swedish-vat +description: > + Swedish VAT (moms) compliance reference. Covers momsredovisning periods/deadlines, EU VAT (omvänd skattskyldighet, reverse charge, tjänstehandel, varuhandel, trepartshandel, OSS), import/export moms, representation moms (300 SEK cap), mixed verksamhet (proportionell avdragsrätt, HFD 2023 ref. 45), jämkning of input VAT on capital goods, frivillig skattskyldighet for uthyrning, momsdeklaration Ruta 05-62 to BAS 26xx mapping, complete BAS 26xx series, error patterns, penalties, and law references (ML 2023:200, SFL, EU VAT Directive). Trigger on ANY Swedish moms/VAT question, momsdeklaration, EU trade VAT, reverse charge, representation, blandad verksamhet, jämkning, BAS 2610-2670, rutor 05-62, "vilken momskod", "hur bokför jag moms", "omvänd moms", "EU-moms", "importmoms". Highest-error-rate area in Swedish bookkeeping; always use this skill over training data. +--- + +# Swedish VAT (Moms) Compliance Skill + +This skill provides authoritative compliance reference for Swedish VAT. It is the **single highest-error-rate area** in Swedish bookkeeping. + +## When to use + +Always read the full reference before answering ANY question about: + +- Momsredovisning periods, thresholds, deadlines +- EU VAT: reverse charge, intra-EU goods/services, triangulation, OSS +- Import/export VAT +- Representation moms (deduction limits, BAS accounts) +- Mixed activities (proportional deduction, HFD 2023 ref. 45) +- Jämkning (adjustment of input VAT on capital goods) +- Frivillig skattskyldighet for property rental +- Momsdeklaration field-to-BAS account mapping +- BAS 26xx account usage +- VAT error patterns, penalties, skattetillägg + +## How to use + +1. **Read the full reference first:** `view /path/to/this/skill/references/vat-compliance-reference.md` +2. Find the relevant section for the user's question +3. Provide precise answers with account numbers, ruta numbers, legal references, and thresholds +4. Flag common error patterns relevant to the user's scenario + +## Quick reference: VAT rates + +| Rate | Applies to | +|------|-----------| +| 25% | Default rate, most goods and services | +| 12% | Food, hotel, restaurant, camping (drops to 6% for food from April 2026) | +| 6% | Books, newspapers, transport, cultural events, sports, repairs (bicycles/shoes/clothing) | +| 0% | Exports outside EU, intra-EU supplies (with conditions) | + +## Quick reference: Key BAS accounts + +| Account | Purpose | Momsdeklaration | +|---------|---------|-----------------| +| 2611 | Utgående moms domestic 25% | Ruta 10 | +| 2614 | Utgående moms reverse charge 25% | Ruta 30 | +| 2615 | Utgående moms import 25% | Ruta 60 | +| 2641 | Debiterad ingående moms | Ruta 48 | +| 2645 | Beräknad ingående moms förvärv utlandet | Ruta 48 | +| 2650 | Momsredovisningskonto (clearing) | Ruta 49 | + +## Quick reference: Reporting thresholds + +| Annual beskattningsunderlag | Default period | +|----------------------------|----------------| +| ≤ 1M SEK | Annual | +| > 1M - ≤ 40M SEK | Quarterly | +| > 40M SEK | Monthly | + +## Critical error patterns to flag + +1. **2611 vs 2614**: Reverse charge output VAT must go to 2614 (Ruta 30), never 2611 (Ruta 10) +2. **One-sided reverse charge**: Both output AND input VAT must be booked; silent netting is prohibited +3. **Import double-counting**: Since 2015, VAT-registered businesses report import VAT to Skatteverket only, not Tullverket +4. **Representation**: VAT deductible on 300 SEK base; income tax deduction abolished for meals since 2017 +5. **Period-end clearing**: All 261x-264x must clear to 2650; residual balances cause reconciliation failures + +For the complete reference with all account mappings, legal citations, formulas, and detailed rules, read: +`references/vat-compliance-reference.md` + +--- + +## Loadable references + +The reference files named above are NOT included in this body. When a question genuinely needs that depth, load the specific one on demand with `gnubok_load_skill`, and only then: + +- `references/vat-compliance-reference.md` → `gnubok_load_skill("horizontal/swedish-vat/vat-compliance-reference")`: Swedish VAT (Moms) Complete Compliance Reference +$gb$, + NULL, + 3, + 1 + ), + ( + 'horizontal/swedish-vat/vat-compliance-reference', + 'horizontal', + 'Swedish VAT (Moms) Complete Compliance Reference', + $gb$Swedish VAT (Moms) Complete Compliance Reference: reference for Swedish VAT$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 6309, + '.claude\skills\swedish-vat\references\vat-compliance-reference.md', + $gb$# Swedish VAT (Moms) Complete Compliance Reference + +## Table of Contents + +1. [Momsredovisning Periods, Thresholds, Deadlines](#1-momsredovisning-periods-thresholds-and-deadlines) +2. [EU VAT Rules in Sweden](#2-eu-vat-rules-in-sweden) +3. [Representation Moms Rules](#3-representation-moms-rules-for-2024-2026) +4. [Mixed Verksamhet / Proportional Deduction](#4-mixed-verksamhet-and-proportional-deduction) +5. [Jämkning of Input VAT on Capital Goods](#5-jämkning-of-input-vat-on-capital-goods) +6. [Frivillig Skattskyldighet for Property Rental](#6-frivillig-skattskyldighet-for-property-rental) +7. [Momsdeklaration Field-to-BAS Account Mapping](#7-momsdeklaration-field-to-bas-account-mapping) +8. [Complete BAS 26xx Account Series](#8-complete-bas-26xx-account-series) +9. [Common Error Patterns and Penalties](#9-highest-frequency-error-patterns) +10. [Key Law References](#10-key-law-references) + +--- + +## 1. Momsredovisning Periods, Thresholds, and Deadlines + +Swedish VAT reporting periods are governed by SFL 26 kap. 10-11 §§. The determining factor is the company's beskattningsunderlag (taxable base excluding VAT), specifically excluding unionsinterna förvärv and imports. + +### Threshold structure + +| Beskattningsunderlag per year | Default period | Alternatives | +|------|------|------| +| ≤ 1 million SEK | Full beskattningsår (annual) | Quarterly or monthly (voluntary) | +| > 1M - ≤ 40 million SEK | Kalenderkvartal (quarterly) | Monthly (voluntary) | +| > 40 million SEK | Kalendermånad (monthly) | None | + +Unchanged since 2008 (Prop. 2007/08:25). VAT registration exemption threshold raised from 80,000 SEK to 120,000 SEK effective 1 January 2025 (Prop. 2023/24:149). + +### Filing deadlines: Monthly filers + +**Beskattningsunderlag ≤ 40M SEK:** Deadline is the 12th of the second month after period ends. In January and August, deadline shifts to the 17th (26 kap. 26 § SFL). + +**Beskattningsunderlag > 40M SEK:** Deadline is the 26th of the month after period ends, with 27th applying in December (26 kap. 30 § SFL). + +### Filing deadlines: Quarterly filers + +12th of the second month after quarter-end, with 17th in August. + +| Quarter | Deadline | +|------|------| +| Jan-Mar | 12 May | +| Apr-Jun | 17 August | +| Jul-Sep | 12 November | +| Oct-Dec | 12 February (following year) | + +### Filing deadlines: Annual filers + +Enskild näringsidkare without EU trade: 12 May following year (byråanstånd to 26 June). With EU trade: 26 February. Juridiska personer: varies by räkenskapsår end-date and filing method (26 kap. 33-33b §§ SFL). + +Weekend/holiday deadlines move to the next business day. Payment must reach Skattekontot by filing deadline (62 kap. 3 § SFL). + +### Switching periods + +Any business can request a shorter period (26 kap. 13 § 1st para, point 1 SFL). 24-month lock-in before switching back to longer period (26 kap. 13 § 2nd para SFL). Switch to quarterly takes effect after current quarter ends (26 kap. 15 § SFL). Turnover threshold crossings require Skatteverket notification (7 kap. 4 § SFL). + +### Accounting method interaction + +Faktureringsmetoden (accrual) required for omsättning > 3 million SEK. Bokslutsmetoden (cash) available for ≤ 3M SEK; VAT recognized on payment except at year-end. + +--- + +## 2. EU VAT Rules in Sweden + +### 2.1 Omvänd skattskyldighet (reverse charge) + +Buyer self-assesses both output and input VAT. Applies in two contexts: + +**EU cross-border:** Intra-community goods acquisitions, B2B service purchases under main rule, purchases from non-EU suppliers. + +**Domestic:** Byggtjänster (construction, between VAT-registered construction businesses), avfall och skrot (scrap metal), guldmaterial (≥ 325 thousandths), mobiltelefoner/datorer/spelkonsoler (invoice > SEK 100,000, since April 2021). + +**BAS accounts and booking for reverse charge:** + +| Account | Role | Momsdeklaration | +|------|------|------| +| 2614 | Utgående moms, omvänd betalningsskyldighet 25% | Ruta 30 | +| 2624 | Utgående moms, omvänd betalningsskyldighet 12% | Ruta 31 | +| 2634 | Utgående moms, omvänd betalningsskyldighet 6% | Ruta 32 | +| 2645 | Beräknad ingående moms på förvärv från utlandet | Ruta 48 | +| 2647 | Ingående moms, omvänd betalningsskyldighet varor/tjänster i Sverige | Ruta 48 | + +Standard journal entry (EU consulting at 25%): Debit cost account + 2645, credit 2614 + leverantörsskulder (2440). Net VAT effect is zero with full deduction right. BOTH sides must be reported; silent netting is prohibited. + +### 2.2 Trade in services within EU + +**Huvudregeln** (ML 6 kap. 34 §, Article 44 VAT Directive): B2B services taxed where buyer established. + +Swedish seller: Invoice without VAT, reference "reverse charge," include buyer VAT number. Report in Ruta 39 + periodisk sammanställning. + +Swedish buyer receiving EU services: Report purchase in Ruta 21, self-assess output VAT in Ruta 30/31/32, claim input VAT in Ruta 48. + +**Exceptions** (taxed where performed): Fastighetstjänster (property location), persontransporter (where transport occurs), korttidsuthyrning transport vehicles (pickup location), restaurang/catering (where performed), admission to cultural/sports events (event location). + +B2C: Generally taxed where seller established. Exception: electronic services, telecom, broadcasting (destination principle since 2015). + +### 2.3 Trade in goods within EU + +**Gemenskapsinterna förvärv (intra-community acquisitions):** Swedish buyer provides VAT number, receives invoice without VAT, self-assesses. Purchase in Ruta 20, output VAT in Ruta 30/31/32, input VAT in Ruta 48. Cost accounts: 4515/4516/4517 (25%/12%/6%). + +**Gemenskapsintern försäljning (intra-community supply):** Zero-rated if four conditions met: valid buyer VAT number (verified via VIES), physical transport from Sweden to another EU country, at least two independent transport documents, reporting in periodisk sammanställning. Reported in Ruta 35, BAS account 3108. + +**Trepartshandel (triangulation):** Intermediary (B) avoids VAT registration in destination country. B reports purchases in Ruta 37, sales in Ruta 38, no output/input VAT. Must include in periodisk sammanställning under trepartshandel column. BAS: 4512 (purchase), 3107 (sale). + +**Chain transactions (Quick Fixes 2020):** Transport attributed to supply made to the intermediary (if intermediary arranges transport). If intermediary provides departure-country VAT number to supplier, transport attributed to supply made by intermediary. ML 5 kap. 22-25 §. + +### 2.4 Distance selling and OSS + +Aggregate threshold for B2C distance sales across all EU: EUR 10,000 (≈ SEK 99,680). Above this, destination-country VAT applies. OSS via Skatteverket for quarterly declarations. BAS 2670 handles OSS output VAT. OSS transactions NOT on standard momsdeklaration. + +### 2.5 Import and export VAT + +Since 1 January 2015, VAT-registered businesses report import VAT in momsdeklaration to Skatteverket (not Tullverket). Only customs duties to Tullverket. + +Import tax base (Ruta 50): tullvärde + duties + ancillary costs. Output VAT in Ruta 60/61/62. Input VAT in Ruta 48. BAS: 2615/2625/2635 (output), 2641 (input), 4545/4546/4547 (beschattningsunderlag). + +Non-VAT-registered importers: Tullverket collects import VAT directly. + +Exports outside EU: 0% moms, full avdragsrätt retained. Ruta 36, BAS 3105. Proof requires customs/freight documentation. + +### 2.6 Periodisk sammanställning (EC Sales List) + +Required for VAT-registered businesses selling goods/services to VAT-registered EU buyers. Monthly for goods (or goods + services), quarterly for services-only. Electronic deadline: 25th of month after period; paper: 20th (35 kap. 9 § SFL). Late filing penalty: SEK 1,250 per report (52 kap. 10 § SFL). No extension available. Amounts must match Ruta 35 + 38 (goods) and Ruta 39 (services). + +--- + +## 3. Representation Moms Rules for 2024-2026 + +2017 reform: Income tax deduction for representation meals abolished entirely. Only enklare förtäring (simple refreshments) deductible at 60 SEK/person/occasion for income tax. VAT deduction on representation meals retained. + +### VAT deduction limits + +Max beskattningsunderlag: 300 SEK excl. moms per person per occasion. + +| Scenario | Max VAT deduction per person | +|------|------| +| Food only (12% VAT) | 300 × 12% = 36 SEK | +| Food + alcohol (mixed 12%/25%) | Schablon 46 SEK | +| All at 25% VAT | 300 × 25% = 75 SEK | +| Events/entertainment | Max base 180 SEK/person | +| Representationsgåvor | Max base 300 SEK/person | + +**April 2026 change:** Food VAT drops from 12% to 6%, reducing food-only schablon to ~18 SEK (or 33 SEK per updated Skatteverket guidance). + +Dual-track: A 500 SEK/person dinner is NOT deductible for income tax but VAT IS deductible on first 300 SEK base. + +### BAS accounts for representation + +| Account | Purpose | +|------|------| +| 6071 | Representation, avdragsgill (income-tax-deductible) | +| 6072 | Representation, ej avdragsgill | +| 7631 | Personalrepresentation, avdragsgill | +| 7632 | Personalrepresentation, ej avdragsgill | +| 2641 | Ingående moms (deductible VAT portion) → Ruta 48 | + +Non-deductible VAT booked as cost, not claimed on momsdeklaration. + +### Legal basis + +ML 13 kap. 24-25 §§. IL 16 kap. 2 §. Ställningstagande: Dnr 131 519171-16/111 (2016-12-21); Dnr 202 416536-17/111. + +--- + +## 4. Mixed Verksamhet and Proportional Deduction + +When business has both VAT-taxable and VAT-exempt activities: directly attributable costs get full/no deduction; shared costs (gemensamma kostnader) require proportional allocation. + +### Two methods after HFD 2023 ref. 45 + +**Method 1 - Skälig grund (ML 13 kap. 29 §):** Allocation on "reasonable basis" reflecting actual resource use. Keys: omsättning, yta, arbetstid, produktionskostnad. Minimum two decimal places. + +**Method 2 - EU turnover method (Articles 173.1, 174):** Taxable turnover ÷ total turnover (both excl. VAT). Result rounded UP to next whole number (Article 175.1). Prior year's proportion usable provisionally with year-end adjustment. + +Taxpayers may combine methods per cost category, choosing whichever gives better result. Confirmed by Skatteverket Dnr 8-2749853 (2024-02-05) and HFD 2025 not. 29. + +### 95% rules (ML 13 kap. 30 §) + +If shared purchase used > 95% in taxable part: full input VAT deduction permitted. If > 95% of total turnover is taxable AND input VAT on specific shared purchase ≤ SEK 1,000: full deduction permitted. + +### BAS accounts + +| Account | Purpose | +|------|------| +| 2649 | Ingående moms, blandad verksamhet (deductible portion) → Ruta 48 | +| 6999 | Ingående moms, blandad verksamhet (non-deductible portion as cost) | + +Proportion recalculated annually based on actual turnover with year-end adjustments. + +### Proposed changes effective 1 January 2027 + +Omsättningsmetoden as explicit statutory default. Area-based method (ytbaserad) for building costs. Per-verksamhetsgren calculation. + +--- + +## 5. Jämkning of Input VAT on Capital Goods + +Renamed "justering" in ML 2023:200, 15 kap. Requires correction of previously deducted input VAT when capital good use changes during adjustment period. + +### Adjustment periods and thresholds + +| Asset type | Period | Min ingående moms | Equiv. anskaffningsvärde | +|------|------|------|------| +| Lös egendom (machinery, vehicles) | 5 years | ≥ 50,000 SEK | ≥ 200,000 SEK excl. moms | +| Fastighet (buildings, ny-/till-/ombyggnad) | 10 years | ≥ 100,000 SEK per tax year | ≥ 400,000 SEK excl. moms | + +Period starts from acquisition (movable) or completion (real property). Acquisition/completion year = year 1. Each asset assessed separately for threshold. For real property, all work on same fastighet within single tax year IS aggregated. + +### Triggers for jämkning + +Changed usage between taxable/exempt (assessed at year-end vs acquisition), sale/transfer, demolition, cessation of frivillig skattskyldighet, verksamhetsöverlåtelse. Minimum change: ≥ 5 percentage points. + +### Calculation formulas + +**Annual adjustment (changed usage):** +Annual jämkning = Original ingående moms × Change in avdragsandel × 1/N (N = 5 or 10) + +**One-time adjustment (sale/cessation):** +Slutjämkning = Original ingående moms × Change in avdragsandel × Remaining years / Total years + +Example: Warehouse renovated Year 1, 500,000 SEK ingående moms fully deducted, shifts to 60% taxable Year 3: 500,000 × (-40%) × 1/10 = -20,000 SEK (repayment for Year 3). + +### EU law: C-787/18 (Sögård Fastigheter) + +Swedish rules on transferring jämkningsskyldighet to property buyers incompatible with EU law. Skatteverket confirmed transfer rules no longer applied. Legislative reform: SOU 2026:24 (26 March 2026), lagrådsremiss 1 April 2026. + +### BAS accounts + +Negative jämkning (repayment): credit 2640/2641, debit cost/asset account. Positive jämkning: reverse. Reported in Ruta 48. Account 2648 (vilande ingående moms) for construction phase before frivillig beskattning granted. + +--- + +## 6. Frivillig Skattskyldighet for Property Rental + +ML 12 kap. Allows property owners to charge 25% VAT on commercial rental, unlocking input VAT deductions on property costs. Without this, rental is VAT-exempt, creating dold moms. + +### Requirements + +Tenant must use premises for VAT-taxable activities (or blandad verksamhet). Rental to stat/kommun/kommunalförbund qualifies regardless. Lease must cover klart avgränsad del of building, provide stadigvarande användning (≥ 1 year or undefined period), premises must not be stadigvarande bostad. + +### Activation + +Landlord issues hyresavi with 25% moms within 6 months of rental period start. No Skatteverket application needed unless activating during construction (form SKV 5704). + +### Chain requirement + +Each link in subletting chain must maintain frivillig beskattning. Max three rental links (owner → first-hand → second-hand → end user). If any link fails to charge moms or end-user is exempt, entire chain above loses frivillig beskattning for that lokal, potentially triggering jämkning. + +### Interaction with jämkning + +If frivillig beskattning ceases: landlord must repay previously deducted investeringsmoms for remaining korrigeringstid. Example: 4,000,000 SEK deducted renovation VAT, loses voluntary registration year 3: repayment = 4,000,000 × 7/10 = 2,800,000 SEK. Landlords should include momsklausuler in leases. + +### BAS accounts + +| Account | Purpose | +|------|------| +| 2613 | Utgående moms för uthyrning, 25% | +| 2642 | Debiterad ingående moms, frivillig betalningsskyldighet | +| 2646 | Ingående moms på uthyrning | +| 2648 | Vilande ingående moms (construction phase) | +| 3913 | Hyresintäkter (frivilligt momspliktiga) | + +--- + +## 7. Momsdeklaration Field-to-BAS Account Mapping + +Complete mapping for SKV 4700. + +### Section A - Taxable sales (belopp excl. VAT) + +| Ruta | Label | BAS accounts | +|------|------|------| +| 05 | Momspliktig försäljning ej i annan ruta | 3001/3002/3003, 35xx | +| 06 | Momspliktiga uttag | 3401, 3402, 3403 | +| 07 | Beskattningsunderlag vid vinstmarginalbeskattning | 3211, 3212, 3220 | +| 08 | Hyresinkomster vid frivillig skattskyldighet | 3913 | + +### Section B - Output VAT on sales (moms amounts) + +| Ruta | Label | BAS accounts | +|------|------|------| +| 10 | Utgående moms 25% | 2611, 2612, 2613, 2616 | +| 11 | Utgående moms 12% | 2621, 2622, 2623, 2626 | +| 12 | Utgående moms 6% | 2631, 2632, 2633, 2636 | + +### Section C - Reverse charge purchases (belopp excl. VAT) + +| Ruta | Label | BAS accounts | +|------|------|------| +| 20 | Inköp varor annat EU-land | 4515, 4516, 4517 | +| 21 | Inköp tjänster annat EU-land (huvudregeln) | 4535, 4536, 4537 | +| 22 | Inköp tjänster land utanför EU | 4531, 4532, 4533 | +| 23 | Inköp varor i Sverige (köparen betalningsskyldig) | 4415, 4416, 4417 | +| 24 | Övriga inköp tjänster i Sverige (köparen betalningsskyldig) | 4425, 4426, 4427 | + +### Section D - Output VAT on reverse charge (moms amounts) + +| Ruta | Label | BAS accounts | +|------|------|------| +| 30 | Utgående moms 25% | 2614 | +| 31 | Utgående moms 12% | 2624 | +| 32 | Utgående moms 6% | 2634 | + +### Section E - VAT-exempt sales (belopp) + +| Ruta | Label | BAS accounts | +|------|------|------| +| 35 | Försäljning varor till annat EU-land | 3108 | +| 36 | Försäljning varor utanför EU | 3105 | +| 37 | Mellanmans inköp vid trepartshandel | 4512 | +| 38 | Mellanmans försäljning vid trepartshandel | 3107 | +| 39 | Försäljning tjänster till EU (huvudregeln) | 3308 | +| 40 | Övrig försäljning tjänster omsatta utom landet | 3305 | +| 41 | Försäljning när köparen betalningsskyldig i Sverige | 3231, 3232, 3233 | +| 42 | Övrig försäljning mm | 3004, 3404, 3994, 3980 | + +### Section H - Import tax base (belopp) + +| Ruta | Label | BAS accounts | +|------|------|------| +| 50 | Beskattningsunderlag vid import | 4545, 4546, 4547 | + +### Section I - Output VAT on imports (moms amounts) + +| Ruta | Label | BAS accounts | +|------|------|------| +| 60 | Utgående moms 25% import | 2615 | +| 61 | Utgående moms 12% import | 2625 | +| 62 | Utgående moms 6% import | 2635 | + +### Section F - Input VAT + +| Ruta | Label | BAS accounts | +|------|------|------| +| 48 | Ingående moms att dra av | 2641 + 2645 + 2646 + 2647 + 2649 (deductible only) | + +### Section G - Net VAT + +| Ruta | Label | BAS accounts | +|------|------|------| +| 49 | Moms att betala eller få tillbaka | 2650 (settlement) | + +**Formula:** (Ruta 10 + 11 + 12 + 30 + 31 + 32 + 60 + 61 + 62) - Ruta 48 = Ruta 49 + +--- + +## 8. Complete BAS 26xx Account Series + +### 261x - Utgående moms 25% + +| Account | Name | Purpose | Ruta | +|------|------|------|------| +| 2610 | Utgående moms, 25% | Summary account | 10 | +| 2611 | Utgående moms försäljning inom Sverige, 25% | Standard domestic | 10 | +| 2612 | Utgående moms egna uttag, 25% | Owner withdrawals | 10 | +| 2613 | Utgående moms uthyrning, 25% | Frivillig skattskyldighet | 10 | +| 2614 | Utgående moms omvänd betalningsskyldighet, 25% | All reverse charge | **30** | +| 2615 | Utgående moms import, 25% | Import VAT (since 2015) | **60** | +| 2616 | Utgående moms VMB 25% | Profit margin scheme | 10 | +| 2618 | Vilande utgående moms, 25% | Dormant/pending | Transferred | + +### 262x - Utgående moms 12% + +| Account | Name | Purpose | Ruta | +|------|------|------|------| +| 2620 | Utgående moms, 12% | Summary account | 11 | +| 2621 | Utgående moms försäljning inom Sverige, 12% | Food, hotel, restaurant | 11 | +| 2622 | Utgående moms egna uttag, 12% | Owner withdrawals | 11 | +| 2623 | Utgående moms uthyrning, 12% | Rental | 11 | +| 2624 | Utgående moms omvänd betalningsskyldighet, 12% | Reverse charge | **31** | +| 2625 | Utgående moms import, 12% | Import | **61** | +| 2626 | Utgående moms VMB 12% | Profit margin | 11 | +| 2628 | Vilande utgående moms, 12% | Dormant | Transferred | + +### 263x - Utgående moms 6% + +| Account | Name | Purpose | Ruta | +|------|------|------|------| +| 2630 | Utgående moms, 6% | Summary account | 12 | +| 2631 | Utgående moms försäljning inom Sverige, 6% | Books, transport, culture | 12 | +| 2632 | Utgående moms egna uttag, 6% | Owner withdrawals | 12 | +| 2633 | Utgående moms uthyrning, 6% | Rental | 12 | +| 2634 | Utgående moms omvänd betalningsskyldighet, 6% | Reverse charge | **32** | +| 2635 | Utgående moms import, 6% | Import | **62** | +| 2636 | Utgående moms VMB 6% | Profit margin | 12 | +| 2638 | Vilande utgående moms, 6% | Dormant | Transferred | + +### 264x - Ingående moms + +| Account | Name | Purpose | Ruta | +|------|------|------|------| +| 2640 | Ingående moms | Summary account (all rates) | 48 | +| 2641 | Debiterad ingående moms | Standard invoiced input VAT | 48 | +| 2642 | Debiterad ingående moms, frivillig betalningsskyldighet | Voluntary rental input VAT | 48 | +| 2645 | Beräknad ingående moms förvärv utlandet | Reverse charge input (EU + non-EU) | 48 | +| 2646 | Ingående moms på uthyrning | Rental operations input VAT | 48 | +| 2647 | Ingående moms omvänd betalningsskyldighet i Sverige | Domestic reverse charge input | 48 | +| 2648 | Vilande ingående moms | Dormant (construction phase) | Transferred | +| 2649 | Ingående moms blandad verksamhet | Deductible portion mixed activities | 48 | + +### 265x-267x - Settlement, excise, OSS + +| Account | Name | Purpose | +|------|------|------| +| 2650 | Redovisningskonto för moms | Clearing; net = Ruta 49 | +| 2660 | Punktskatter | Excise (not on momsdeklaration) | +| 2670 | Utgående moms försäljning inom EU, OSS | OSS (separate declaration) | + +**Historical note:** Before 2015, 2615/2625/2635 were for EU acquisition output VAT. Since 2015, exclusively for import VAT (Ruta 60-62). Account 2614 now handles all reverse charge (EU + domestic). Legacy system migration must remap. + +--- + +## 9. Highest-Frequency Error Patterns + +### Rate misclassification + +Wrong VAT rate is the most common SME error. Confusion points: restaurant vs. takeaway food (both 12% but alcohol triggers 25% splitting), digital products (e-books 6% vs. SaaS 25%), mixed hotel packages, repair services (reduced rates only for specific categories: bicycles, shoes, leather goods, clothing, household linen). + +### EU trade errors + +Forgetting reverse charge on EU purchases entirely (neither output nor input VAT reported). Common for IT services, advertising platforms (Google, Meta), consulting from EU suppliers. Also: missing periodisk sammanställning, not validating buyer VAT via VIES, zero-rating without transport documentation. + +### Reverse charge booking errors + +Posting reverse charge output VAT to 2611 instead of 2614 (inflates Ruta 10 instead of Ruta 30). Booking only one side of reverse charge (output without input or vice versa). + +### Period-end clearing failures + +Failing to clear all 261x-264x into 2650 at period end. Debit balance on 2650 at year-end should reclassify to 1650 (Momsfordran). Vilande accounts (2618/2628/2638/2648) never transferred cause under-reporting. + +### Import VAT errors + +Double-counting (paying Tullverket AND reporting in momsdeklaration). Reporting output VAT on imports (Ruta 60) without claiming input VAT (Ruta 48). Using old EU acquisition accounts instead of import-specific accounts. + +### Representation errors + +Deducting full VAT without 300 SEK cap. Confusing income tax deductibility (abolished 2017) with VAT deductibility (retained). Not separating avdragsgill/ej avdragsgill on correct accounts (6071 vs 6072). + +### Penalties + +| Violation | Consequence | +|------|------| +| Incorrect declaration | Skattetillägg: 20% of underpaid/overclaimed | +| Period error within 4 months | Skattetillägg: 2% | +| Period error in annual reporting | Skattetillägg: 5% | +| Late filing (skattedeklaration) | Förseningsavgift: 625 SEK (1,250 after föreläggande) | +| Late periodisk sammanställning | 1,250 SEK per report | +| Failure to file (skönsbeskattning) | 20% skattetillägg on estimated amount | + +Voluntary correction before Skatteverket detection avoids skattetillägg. Both are not tax-deductible (BAS 6992). + +--- + +## 10. Key Law References + +### Mervärdesskattelagen (2023:200) + +Replaced ML (1994:200) on 1 July 2023. Key terminology: "omsättning" → "leverans av varor/tillhandahållande av tjänster," "skattskyldig" → "beskattningsbar person/betalningsskyldig." + +| Chapter | Subject | Key sections | +|------|------|------| +| 5 kap. | Beskattningsbara transaktioner | §§22-25 (intra-EU) | +| 6 kap. | Plats för transaktioner | §34 (B2B main rule), §35 (B2C) | +| 7 kap. | Beskattningsgrundande händelse | §§4-6 | +| 9 kap. | Skattesatser | §2 (25%), §§3-7 (12%), §§8-15 (6%) | +| 10 kap. | Undantag | Healthcare, education, financial, property | +| 12 kap. | Frivillig beskattning | Commercial property rental | +| 13 kap. | Avdrag för ingående skatt | §6 (main), §18 (cars), §§24-25 (representation), §29 (mixed), §30 (95% rules) | +| 15 kap. | Justering av avdrag | Jämkning; §10 (periods) | +| 16 kap. | Betalningsskyldig | §§6-22 (reverse charge) | +| 18 kap. | Liten årsomsättning | Small business (120,000 SEK from 2025) | +| 22 kap. | OSS/IOSS | One Stop Shop | + +### Skatteförfarandelagen (2011:1244) + +| Chapter | Subject | +|------|------| +| 7 kap. | Registration (§1 who must register, §4 notification) | +| 26 kap. | Skattedeklaration (§§10-11 periods, §13 voluntary changes/24mo lock-in, §§15-16 timing, §26 deadline 12th, §30 large entity 26th, §§33-33b annual) | +| 35 kap. | Periodisk sammanställning (§9 deadline) | +| 48 kap. | Förseningsavgift | +| 49 kap. | Skattetillägg (§4: 20%, §11: 2% period errors) | +| 62 kap. | Payment deadlines (§3) | + +### Key Skatteverket ställningstaganden + +- **Representation:** Dnr 131 519171-16/111 (2016-12-21, 300 SEK/schablon); Dnr 202 416536-17/111 (income tax) +- **Mixed activities:** Dnr 8-2749853 (2024-02-05, post-HFD 2023 ref. 45) +- **Jämkning:** Dnr 131 347924-07/111 (5% threshold); Dnr 8-2349336 (2023-05-12, property transfers) +- **Import VAT:** Dnr 131 183789-16/111 (liability) + +### Key court rulings + +- **HFD 2023 ref. 45** - EU turnover method via direct effect for proportional deduction +- **HFD 2025 not. 29** - Turnover method applies even with stadigvarande bostad +- **C-787/18 (Sögård Fastigheter)** - Swedish jämkning transfer rules incompatible with EU law; reform underway (SOU 2026:24) + +### EU VAT Directive (2006/112/EC) + +Key articles: 44 (B2B services), 138 (intra-EU supply), 173-175 (proportional deduction), 176 (restriction stand-still), 184-192 (adjustment), 194 (optional domestic reverse charge). Implementing Regulation 282/2011 directly applicable per ML 1 kap. 4 §.$gb$, + 'horizontal/swedish-vat', + 1, + 1 + ), + ( + 'horizontal/swedish-year-end-closing', + 'horizontal', + 'Swedish Year End Closing', + $gb$Swedish year-end closing (bokslut) for AB and Enskild firma. Covers legal framework (BFL/ÅRL/K2/K3), step-by-step closing with BAS account numbers, all bokslutstransaktioner, tax calculations (bolagsskatt, egenavgifter, räntefördelning, expansionsfond, periodiseringsfond), reporting (årsredovisning/NE-bilaga), filing deadlines, SIE4 export, K2 vs K3 differences, and compliance pitfalls. Trigger on bokslut, årsbokslut, årsredovisning, closing entries, resultatdisposition, year-end accruals, tax provisions, överavskrivningar, accounts 2099/2091/8910/8811/2512/21xx/29xx in closing context, or any question about closing books for a Swedish company. Also trigger for "how do I book tax at year-end", "periodiseringsfond AB vs EF", "deadline årsredovisning", "what accounts for accruals".$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1170, + '.claude\skills\swedish-year-end-closing\SKILL.md', + $gb$--- +name: swedish-year-end-closing +description: > + Swedish year-end closing (bokslut) for AB and Enskild firma. Covers legal framework (BFL/ÅRL/K2/K3), step-by-step closing with BAS account numbers, all bokslutstransaktioner, tax calculations (bolagsskatt, egenavgifter, räntefördelning, expansionsfond, periodiseringsfond), reporting (årsredovisning/NE-bilaga), filing deadlines, SIE4 export, K2 vs K3 differences, and compliance pitfalls. Trigger on bokslut, årsbokslut, årsredovisning, closing entries, resultatdisposition, year-end accruals, tax provisions, överavskrivningar, accounts 2099/2091/8910/8811/2512/21xx/29xx in closing context, or any question about closing books for a Swedish company. Also trigger for "how do I book tax at year-end", "periodiseringsfond AB vs EF", "deadline årsredovisning", "what accounts for accruals". +--- + +# Swedish Year-End Closing (Bokslut) + +This skill provides everything needed to perform or implement a complete Swedish year-end closing for **Aktiebolag (AB)** and **Enskild firma**. + +## Quick decision tree + +1. **AB** → always årsredovisning → K2 (if mindre and eligible) or K3 +2. **Enskild firma, revenue ≤ 3 MSEK** → K1 förenklat årsbokslut +3. **Enskild firma, revenue > 3 MSEK** → full årsbokslut (BFNAR 2017:3) + +## Reference files + +This skill contains detailed reference material split by topic. Read the relevant file(s) based on the user's question: + +- **`references/legal-framework.md`**: BFL, ÅRL, K1/K2/K3 framework rules, entity obligations, större/mindre företag thresholds, 2026 K2 changes +- **`references/closing-process.md`**: Complete 8-phase closing process with BAS account numbers: avstämningar, periodiseringar, avskrivningar, lagervärdering, obeskattade reserver, avsättningar/skatt, equity handling, result closing +- **`references/journal-entries.md`**: All specific bokslutstransaktioner with debit/credit pairs for software implementation +- **`references/tax-calculations.md`**: Bolagsskatt for AB, egenavgifter/räntefördelning/expansionsfond/periodiseringsfond for enskild firma, schablonintäkt, schablonavdrag +- **`references/reporting-and-filing.md`**: Årsredovisning structure, NE-bilaga, filing deadlines, penalties, Bolagsverket/Skatteverket requirements, SIE4 export, audit thresholds +- **`references/k2-vs-k3.md`**: Implementation differences: component depreciation, deferred tax, intangibles, leasing, format restrictions, account visibility +- **`references/pitfalls-and-rates.md`**: Common mistakes, compliance traps, kontrollbalansräkning, and reference rate table (2025/2026) + +## How to use this skill + +When a user asks a bokslut question: + +1. Identify whether it's about AB or Enskild firma (or both) +2. Identify which phase/topic the question relates to +3. Read the relevant reference file(s) +4. Answer with specific BAS account numbers and journal entries where applicable +5. Flag K2 vs K3 differences when relevant +6. Include current rates/thresholds from the rates table + +Always distinguish between items that are **booked** in the accounting vs items that exist **only in the tax declaration**: +- **Booked**: överavskrivningar, periodiseringsfond (AB only), skatt på årets resultat (AB only) +- **Declaration only**: periodiseringsfond (EF), expansionsfond, räntefördelning, schablonintäkt on periodiseringsfond, egenavgifter schablonavdrag + +--- + +## Loadable references + +The reference files named above are NOT included in this body. When a question genuinely needs that depth, load the specific one on demand with `gnubok_load_skill`, and only then: + +- `references/closing-process.md` → `gnubok_load_skill("horizontal/swedish-year-end-closing/closing-process")`: Step-by-Step Closing Process with BAS Account Numbers +- `references/journal-entries.md` → `gnubok_load_skill("horizontal/swedish-year-end-closing/journal-entries")`: Specific Closing Journal Entries (Bokslutstransaktioner) +- `references/k2-vs-k3.md` → `gnubok_load_skill("horizontal/swedish-year-end-closing/k2-vs-k3")`: K2 vs K3: Implementation Differences for Year-End Closing +- `references/legal-framework.md` → `gnubok_load_skill("horizontal/swedish-year-end-closing/legal-framework")`: Legal Framework for Swedish Year-End Closing +- `references/pitfalls-and-rates.md` → `gnubok_load_skill("horizontal/swedish-year-end-closing/pitfalls-and-rates")`: Common Mistakes, Compliance Pitfalls, and Reference Rates +- `references/reporting-and-filing.md` → `gnubok_load_skill("horizontal/swedish-year-end-closing/reporting-and-filing")`: Reporting Obligations, Filing, and SIE4 +- `references/tax-calculations.md` → `gnubok_load_skill("horizontal/swedish-year-end-closing/tax-calculations")`: Tax Calculations: AB vs Enskild Firma +$gb$, + NULL, + 3, + 1 + ), + ( + 'horizontal/swedish-year-end-closing/closing-process', + 'horizontal', + 'Step-by-Step Closing Process with BAS Account Numbers', + $gb$Step-by-Step Closing Process with BAS Account Numbers: reference for Swedish Year End Closing$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1560, + '.claude\skills\swedish-year-end-closing\references\closing-process.md', + $gb$# Step-by-Step Closing Process with BAS Account Numbers + +The closing process (bokslutsarbete) proceeds in eight phases, each depending on prior phases. + +## Phase 1: Reconciliations (avstämningar) + +Every balance sheet account must be reconciled against external documentation. + +| What | Account(s) | Reconcile against | +|------|-----------|-------------------| +| Bank | **1920** Plusgiro, **1930** Företagskonto | Bank statements | +| Cash | **1910** Kassa | Physical count | +| Skattekonto | **1630** Avräkning för skatter och avgifter | Skatteverket kontoutdrag | +| Moms | **2610-2650** | Declared and transferred amounts to 1630 | +| Kundfordringar | **1510** | Kundreskontra (open invoices) | +| Leverantörsskulder | **2440** | Leverantörsreskontra | +| Doubtful receivables | **1519** Nedskrivning / **6352** Befarade förluster | Assessment of collectability | + +## Phase 2: Accruals and deferrals (periodiseringar) + +### Interimsfordringar (assets, 17xx) + +| Account | Description | +|---------|-------------| +| **1710** | Förutbetalda hyreskostnader | +| **1720** | Förutbetalda leasingavgifter | +| **1730** | Förutbetalda försäkringspremier | +| **1740** | Förutbetalda räntekostnader | +| **1750** | Upplupna hyresintäkter | +| **1760** | Upplupna ränteintäkter | +| **1790** | Övriga förutbetalda kostnader och upplupna intäkter | + +### Interimsskulder (liabilities, 29xx) + +| Account | Description | +|---------|-------------| +| **2910** | Upplupna löner | +| **2920** | Upplupna semesterlöner | +| **2940** | Beräknade upplupna sociala avgifter | +| **2943** | Beräknad upplupen SLP | +| **2960** | Upplupna räntekostnader | +| **2970** | Förutbetalda intäkter | +| **2991** | Beräknat arvode för bokslut | +| **2992** | Beräknat arvode för revision | +| **2990** | Övriga upplupna kostnader | + +### K2 simplification +Individual recurring costs below **5,000 SEK** that don't fluctuate >20% year-over-year need not be accrued. Personnel costs must ALWAYS be accrued regardless of amount. K3 has no such threshold. + +## Phase 3: Depreciation (avskrivningar) + +| Asset type | Cost account | Accumulated depreciation | +|------------|-------------|------------------------| +| Immateriella tillgångar | **7810-7819** | **1019, 1029** etc. | +| Byggnader | **7821** | **1119** | +| Markanläggningar | **7824** | **1129** | +| Maskiner | **7831** | **1219** | +| Inventarier | **7832** | **1229** | +| Bilar/transportmedel | **7834** | **1249** | +| Datorer | **7833** | **1259** | + +### K2 vs K3 depreciation +- **K2**: Schablonmässiga nyttjandeperioder allowed (5 years for inventarier, tax rates for buildings). Component depreciation FORBIDDEN. +- **K3**: Individual assessment of useful life and residual value required. **Component depreciation mandatory** for assets with significant components having different consumption patterns. + +## Phase 4: Inventory valuation (lagervärdering) + +Physical inventory count at balance date required. Valuation: **lägsta värdets princip (LVP)** using FIFO. + +Alternative: **97% schablon rule** (3% inkuransavdrag). + +| Account | Description | +|---------|-------------| +| **1410** | Råvaror | +| **1440** | Produkter i arbete | +| **1450** | Färdiga varor | +| **1460** | Lager av handelsvaror | +| **4990** | Lagerförändring | + +K1: inventory below half a prisbasbelopp (29,600 SEK for 2026) need not be valued. +K3: indirect manufacturing overhead must be included when material. K2: optional. + +## Phase 5: Untaxed reserves (obeskattade reserver) + +### Periodiseringsfonder (AB only, booked) + +AB can defer up to **25%** of skattemässigt resultat for up to 6 years. + +| Account | Description | +|---------|-------------| +| **2110-2129** | Periodiseringsfond per year (e.g. 2125 = tax year 2025) | +| **8811** | Avsättning till periodiseringsfond | +| **8819** | Återföring från periodiseringsfond | + +Entry: Debit 8811 / Credit 21xx (avsättning). Debit 21xx / Credit 8819 (återföring). + +**Enskild firma**: 30% periodiseringsfond, handled ONLY in NE-bilaga (R29/R30), NEVER booked. + +### Överavskrivningar + +Excess of tax-allowed depreciation over planned depreciation. + +| Account | Description | +|---------|-------------| +| **8850** (or 8851-8853) | Förändring av överavskrivningar | +| **2150** (or 2151-2153) | Ackumulerade överavskrivningar | + +Two methods: **30-rule** (declining balance on pool) and **20-rule** (straight-line per asset over 5 years). Use whichever produces lowest allowable residual value. + +## Phase 6: Provisions and tax (avsättningar, skatt) + +### Provisions +| Account | Description | +|---------|-------------| +| **2210** | Avsättningar för pensioner | +| **2220** | Avsättningar för garantier | +| **2230, 2250** | Other provisions | +| **7533** | Särskild löneskatt on pensions | +| **2514** | Beräknad SLP | + +SLP rate: **24.26%** on pension costs. Entry: Debit 7533 / Credit 2514. + +### Tax provision (AB only) +| Account | Description | +|---------|-------------| +| **8910** | Skatt på årets resultat | +| **2512** | Beräknad inkomstskatt | +| **2518** | Betald F-skatt (debit balance during year) | + +Entry: Debit 8910 / Credit 2512. Net 2518 against 2510/2512 at year-end. + +**Enskild firma does NOT book any tax**: owner taxed personally via NE-bilaga. + +### Deferred tax (K3 only) +| Account | Description | +|---------|-------------| +| **8940** | Uppskjuten skatt | +| **2240** | Avsättningar för uppskjutna skatter | +| **1370** | Uppskjuten skattefordran | + +All marked **[Ej K2]** in BAS kontoplan. K2 must NEVER recognize deferred tax. + +## Phase 7-8: Equity handling and result closing + +All P&L accounts (classes 3-8) net to **8999** (Årets resultat). + +### AB equity flow +1. Year-end: Debit 8999 / Credit **2099** (Årets resultat) for profit +2. New year start: 2099 → **2098** (Vinst/förlust från föregående år) +3. After bolagsstämma: 2098 → **2091** (Balanserad vinst eller förlust) +4. Declared dividend: 2098 → **2898** (Outtagen vinstutdelning) + +### Enskild firma equity flow +1. Year-end: Debit 8999 / Credit **2019** (Årets resultat, delägare 1) +2. New year start: Zero all sub-accounts (**2011** egna varuuttag, **2012** avräkning skatter, **2013** övriga egna uttag, **2017** årets kapitaltillskott, **2018** övriga egna insättningar, **2019** årets resultat) → net into **2010** (Eget kapital) +3. No bolagsstämma required$gb$, + 'horizontal/swedish-year-end-closing', + 2, + 1 + ), + ( + 'horizontal/swedish-year-end-closing/journal-entries', + 'horizontal', + 'Specific Closing Journal Entries (Bokslutstransaktioner)', + $gb$Specific Closing Journal Entries (Bokslutstransaktioner): reference for Swedish Year End Closing$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 938, + '.claude\skills\swedish-year-end-closing\references\journal-entries.md', + $gb$# Specific Closing Journal Entries (Bokslutstransaktioner) + +All entries dated on balance sheet date (e.g., 2025-12-31). These are the core entries a software system must generate. + +## Salary accruals +December salary earned but paid in January: +``` +Debit 7010 Löner till kollektivanställda +Credit 2910 Upplupna löner +``` +Alternatives: 7210 (tjänstemän), 7220 (företagsledare). + +## Vacation pay accruals +Year-end adjustment of semesterlöneskuld: +``` +Debit 7090 Förändring av semesterlöneskuld +Credit 2920 Upplupna semesterlöner +``` +Book the difference between calculated vacation pay liability at year-end and opening balance of 2920. + +## Social fees on accrued salary and vacation +``` +Debit 7510 Lagstadgade sociala avgifter +Credit 2940 Beräknade upplupna sociala avgifter +``` +Calculate as: (upplupen lön + upplupen semester) × **31.42%** + +## Depreciation (example: machinery) +``` +Debit 7831 Avskrivningar på maskiner +Credit 1219 Ack. avskrivningar maskiner +``` +Repeat per asset category with appropriate account pairs. + +## Överavskrivningar (excess tax depreciation) +``` +Debit 8853 Förändring av överavskrivningar maskiner & inventarier +Credit 2153 Ack. överavskrivningar maskiner & inventarier +``` + +## Inventory increase +``` +Debit 1460 Lager av handelsvaror +Credit 4990 Lagerförändring +``` +For decrease: reverse the entry. Use separate accounts per inventory type for manufacturing. + +## Prepaid expenses (e.g., insurance covering next year) +``` +Debit 1730 Förutbetalda försäkringspremier +Credit 6310 Företagsförsäkringar +``` +Reversal on January 1 mirrors the entry. Similar for 1710 (rent), 1790 (other). + +## Accrued income (work performed, invoice pending) +``` +Debit 1790 Övriga förutbetalda kostnader och upplupna intäkter +Credit 3010 Försäljning +``` +Booked without moms; moms recognized when invoice is issued. + +## Deferred revenue (advance payment for future service) +``` +Debit 3010 Försäljning +Credit 2970 Förutbetalda intäkter +``` +Recognized monthly: Debit 2970 / Credit 3010. + +## Accrued audit/accounting fees +``` +Debit 6420 Revision och bokslut +Credit 2992 Beräknat arvode för revision +``` + +## Periodiseringsfond avsättning (AB, 25% of 400,000 = 100,000) +``` +Debit 8811 Avsättning till periodiseringsfond +Credit 2126 Periodiseringsfond tax year 2026 +``` +Återföring of oldest fund: +``` +Debit 2120 Periodiseringsfond [oldest year] +Credit 8819 Återföring från periodiseringsfond +``` + +## Tax provision (AB, taxable profit 500,000 × 20.6% = 103,000) +``` +Debit 8910 Skatt som belastar årets resultat +Credit 2512 Beräknad inkomstskatt +``` + +## Result closing (AB, profit 397,000 after tax) +``` +Debit 8999 Årets resultat +Credit 2099 Årets resultat +``` + +## Result closing (Enskild firma, profit) +``` +Debit 8999 Årets resultat +Credit 2019 Årets resultat, delägare 1 +``` + +## New year opening: carry forward previous year result (AB) +``` +Debit 2099 Årets resultat (previous year) +Credit 2098 Vinst/förlust från föregående år +``` +After bolagsstämma: +``` +Debit 2098 Vinst/förlust från föregående år +Credit 2091 Balanserad vinst eller förlust +``` + +## New year opening: consolidate equity (Enskild firma) +Zero all of 2011-2019 into 2010: +``` +Debit 2010 Eget kapital (for net credits from sub-accounts) +Credit 2011 Egna varuuttag +Credit 2012 Avräkning skatter och avgifter +Credit 2013 Övriga egna uttag +Debit 2017 Årets kapitaltillskott (reverse into 2010) +Debit 2018 Övriga egna insättningar (reverse into 2010) +Debit 2019 Årets resultat (reverse into 2010) +``` +(Direction depends on whether sub-accounts have debit or credit balances.) + +## Särskild löneskatt on pension provisions +``` +Debit 7533 Särskild löneskatt +Credit 2514 Beräknad särskild löneskatt +``` +Rate: **24.26%** on pension costs.$gb$, + 'horizontal/swedish-year-end-closing', + 2, + 1 + ), + ( + 'horizontal/swedish-year-end-closing/k2-vs-k3', + 'horizontal', + 'K2 vs K3: Implementation Differences for Year-End Closing', + $gb$K2 vs K3: Implementation Differences for Year-End Closing: reference for Swedish Year End Closing$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 846, + '.claude\skills\swedish-year-end-closing\references\k2-vs-k3.md', + $gb$# K2 vs K3: Implementation Differences for Year-End Closing + +## Component depreciation + +**K3**: Mandatory. Assets with significant components having materially different useful lives must be split and depreciated separately. Buildings decomposed into roof, HVAC, facade, frame, etc. Software must support multiple components per asset with independent useful lives, residual values, and schedules. + +**K2**: Forbidden. Each asset treated as single unit. + +## Deferred tax (uppskjuten skatt) + +**K3**: Required using balance sheet approach on all temporary differences. +- **1370** Uppskjuten skattefordran +- **2240** Avsättningar för uppskjutna skatter +- **8940** Uppskjuten skatt +- All marked **[Ej K2]** in BAS kontoplan +- Obeskattade reserver analytically split: 79.4% equity / 20.6% latent skatteskuld + +**K2**: Never recognized. These accounts must be hidden/disabled. + +## Internally developed intangible assets + +**K3**: May be capitalized using **1010-1019** (Utvecklingsutgifter), also [Ej K2]. + +**K2**: All development costs must be expensed immediately. Only acquired intangibles may be recognized. + +## Fair value measurement + +**K3**: Available for certain financial instruments and investment properties. + +**K2**: Only historical cost (anskaffningsvärde). Försiktighetsprincip enforced strictly. + +## Leasing classification + +**K3**: Distinguishes financial and operational leases. Financial leases capitalized: +- **1260** Leasade tillgångar [Ej K2] +- **1269** Ack. avskrivningar [Ej K2] + +**K2**: All leases treated as operational. + +## Income statement format + +**K2**: Kostnadsslagsindelad only. +**K3**: Both kostnadsslagsindelad and funktionsindelad allowed. + +## Depreciation simplifications + +**K2**: May always set inventarier useful life to 5 years. May use tax depreciation rates directly for buildings, potentially avoiding separate bokslutsdispositioner for överavskrivningar. + +**K3**: Individually assessed useful lives and residual values required for every asset. + +## Accrual threshold + +**K2**: Individual recurring costs below 5,000 SEK (not fluctuating >20%) need not be accrued (except personnel costs). + +**K3**: No blanket threshold. Individual materiality assessment. + +## Notes requirements + +**K2**: Simplified, template-based. Sufficient to state framework applied, depreciation periods, employees, pledges, contingencies. + +**K3**: Extensive: deferred tax analysis, critical judgments, estimation uncertainty, component depreciation details, segment reporting (if applicable). + +## Accounts to hide/disable in K2 mode + +The following BAS accounts are marked [Ej K2] and should be hidden or disabled: +- **1010-1019** (Utvecklingsutgifter) +- **1081** (Pågående projekt, immateriella) +- **1260** (Leasade tillgångar) +- **1269** (Ack. avskrivningar leasade tillgångar) +- **1370** (Uppskjuten skattefordran) +- **2240** (Avsättningar för uppskjutna skatter) +- **8940** (Uppskjuten skatt) + +## Summary table + +| Feature | K2 | K3 | +|---------|-----|-----| +| Component depreciation | Forbidden | Mandatory | +| Deferred tax | Forbidden | Required | +| Capitalize dev costs | Forbidden | Allowed | +| Fair value | Forbidden | Allowed | +| Financial leases | Not recognized | Capitalized | +| RR format | Kostnadsslagsindelad only | Both | +| Depreciation | Schablonmässig OK | Individual assessment | +| Accrual threshold | 5,000 SEK | No threshold | +| Notes | Simplified | Extensive |$gb$, + 'horizontal/swedish-year-end-closing', + 2, + 1 + ), + ( + 'horizontal/swedish-year-end-closing/legal-framework', + 'horizontal', + 'Legal Framework for Swedish Year-End Closing', + $gb$Legal Framework for Swedish Year-End Closing: reference for Swedish Year End Closing$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 575, + '.claude\skills\swedish-year-end-closing\references\legal-framework.md', + $gb$# Legal Framework for Swedish Year-End Closing + +## Primary laws + +- **Bokföringslagen (BFL, SFS 1999:1078)**: who must keep accounts and how they close +- **Årsredovisningslagen (ÅRL, SFS 1995:1554)**: content and format of årsredovisning + +## Who does what (BFL Chapter 6) + +### Must prepare årsredovisning (§1): +- All aktiebolag (regardless of size) +- All ekonomiska föreningar +- Handelsbolag with at least one juridisk person as partner +- Bookkeeping-obligated stiftelser +- Any enterprise meeting "större företag" criteria + +### Prepare årsbokslut (§3): +- All other bookkeeping-obligated entities (including most enskilda firmor) +- Consists of: resultaträkning, balansräkning, noter (no förvaltningsberättelse) + +### Förenklat årsbokslut (§6): +- Enterprises with nettoomsättning normally ≤ 3 MSEK +- Only resultaträkning and balansräkning, no notes + +## K-framework mapping + +| Framework | Full name | Applies to | +|-----------|-----------|------------| +| K1 (BFNAR 2006:1) | Enskilda näringsidkare, förenklat årsbokslut | Sole traders with revenue ≤ 3 MSEK | +| BFNAR 2017:3 | Årsbokslut | Entities preparing full årsbokslut (not årsredovisning) | +| K2 (BFNAR 2016:10) | Årsredovisning i mindre företag | Smaller AB/EK föreningar choosing simplified rules | +| K3 (BFNAR 2012:1) | Årsredovisning och koncernredovisning | Default/mandatory for all årsredovisning preparers; required for större företag | + +## Större företag definition (ÅRL 1 kap 3§) + +Exceeds more than one of three thresholds for each of the two most recent fiscal years: +- **>50 average employees** +- **>40 MSEK total assets** +- **>80 MSEK net revenue** +- Or any entity with listed securities + +Större företag must use K3, prepare kassaflödesanalys, and meet additional disclosure requirements. + +## Decision tree for developers + +``` +AB → always årsredovisning → K2 (if mindre and eligible) or K3 +Enskild firma, revenue ≤ 3 MSEK → K1 förenklat årsbokslut +Enskild firma, revenue > 3 MSEK → full årsbokslut per BFNAR 2017:3 +Enskild firma meeting större criteria (extremely rare) → årsredovisning under K3 +``` + +## 2025/2026 K2 changes + +From fiscal years starting after December 31, 2025, K2 can no longer be used by: +- Bostadsrättsföreningar +- Companies with foreign branches +- Companies holding crypto assets +- Those issuing share-based payments$gb$, + 'horizontal/swedish-year-end-closing', + 2, + 1 + ), + ( + 'horizontal/swedish-year-end-closing/pitfalls-and-rates', + 'horizontal', + 'Common Mistakes, Compliance Pitfalls, and Reference Rates', + $gb$Common Mistakes, Compliance Pitfalls, and Reference Rates: reference for Swedish Year End Closing$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 914, + '.claude\skills\swedish-year-end-closing\references\pitfalls-and-rates.md', + $gb$# Common Mistakes, Compliance Pitfalls, and Reference Rates + +## Common mistakes + +### 1. Failure to reverse prior-year accruals +Interimsposter booked at year-end must be reversed on day 1 of new fiscal year. Without auto-reversal, costs/revenues are double-counted. Software should auto-generate reversal entries. + +### 2. Incorrect periodiseringsfond calculations +- Wrong percentage: 25% for AB, 30% for EF +- Missing mandatory 6-year reversal +- Forgetting **gross-up rule** for funds created before 2019 (at old 22% rate, requiring 103-106% uppräkning on reversal) + +### 3. Missing schablonintäkt on periodiseringsfonder +Affects AB companies. SLR × total funds at year-start. Is a skattemässig justering, NEVER booked. Many systems incorrectly try to record it as journal entry. + +### 4. Confusing bokföringsmässigt and skattemässigt resultat +The reconciliation from book result to taxable result (INK2S logic) must be implemented as separate calculation layer. + +### 5. Failing to close 2099 to 2091 correctly +- **2099** (Årets resultat) must move to **2098** at year-start +- Then to **2091** after bolagsstämma decides on disposition +- 2099 should ONLY ever contain current year's result + +### 6. Kontrollbalansräkning requirement +Triggers when eget kapital falls below **50% of registrerat aktiekapital** (ABL 25 kap). + +In kontrollbalansräkning: +- Obeskattade reserver split: 79.4% equity / 20.6% tax +- Assets may be revalued to net realizable value + +If confirmed: +1. Board calls first kontrollstämma +2. Must restore full aktiekapital within 8 months +3. Board members face **personal liability** if not followed + +Software should flag when equity approaches this threshold. + +### 7. Forgetting SLP on pension provisions +Särskild löneskatt 24.26% on pension costs must be booked same period: +Debit 7533 / Credit 2514. Frequently missed. + +### 8. Incorrect inventory valuation +- Forgetting 3% inkuransavdrag (97% schablon rule) +- Applying it to excluded types (real estate, securities) +- Affects both balance sheet and tax calculation + +### 9. Not reconciling överavskrivningar +Mismatch between plan depreciation (78xx) and tax depreciation creates incorrect obeskattade reserver (2150 series), cascading into wrong tax and potential kontrollbalansräkning trigger. + +### 10. Booking items that should only exist in declaration +For enskild firma: periodiseringsfond, expansionsfond, räntefördelning, egenavgifter schablonavdrag should NEVER appear as journal entries. + +--- + +## Key reference rates and thresholds + +| Parameter | 2025 | 2026 | +|-----------|------|------| +| Bolagsskatt | 20.6% | 20.6% | +| Statslåneränta (SLR, Nov 30 prior year) | 1.96% | 2.55% | +| Schablonintäkt periodiseringsfond (AB) | 1.96% (floor 0.5%) | 2.55% (floor 0.5%) | +| Positiv räntefördelning | 7.96% (SLR+6) | 8.55% (SLR+6) | +| Negativ räntefördelning | 2.96% (SLR+1) | 3.55% (SLR+1) | +| Egenavgifter (full, 7 karensdagar) | 28.97% | 28.97% | +| Schablonavdrag egenavgifter (active) | 25% | 25% | +| Särskild löneskatt (SLP) | 24.26% | 24.26% | +| Expansionsfondsskatt | 20.6% | 20.6% | +| Expansionsfond max | 125.94% of kapitalunderlag | 125.94% | +| Periodiseringsfond AB max | 25% of skattemässigt resultat | 25% | +| Periodiseringsfond EF max | 30% of result | 30% | +| Arbetsgivaravgifter (standard) | 31.42% | 31.42% | +| Prisbasbelopp | 58,800 SEK | 59,200 SEK | +| K2 accrual threshold | 5,000 SEK/item | 5,000 SEK/item | +| Inkuransavdrag (inventory) | 3% (97% rule) | 3% (97% rule) | +| Kontrollbalansräkning trigger | <50% of aktiekapital | <50% | +| Neg. räntefördelning threshold | -500,000 SEK | -500,000 SEK | +| Revisor opt-out thresholds | >3 emp, >1.5M BS, >3M rev (2/3) | Same |$gb$, + 'horizontal/swedish-year-end-closing', + 2, + 1 + ), + ( + 'horizontal/swedish-year-end-closing/reporting-and-filing', + 'horizontal', + 'Reporting Obligations, Filing, and SIE4', + $gb$Reporting Obligations, Filing, and SIE4: reference for Swedish Year End Closing$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1340, + '.claude\skills\swedish-year-end-closing\references\reporting-and-filing.md', + $gb$# Reporting Obligations, Filing, and SIE4 + +## Årsredovisning for AB + +Must contain, in order: +1. **Förvaltningsberättelse** +2. **Resultaträkning** +3. **Balansräkning** +4. **Noter (tilläggsupplysningar)** +5. **Kassaflödesanalys** (större företag only) + +Every page: company name, organisationsnummer, registered office. + +### Förvaltningsberättelse (K2 minimum) +- Description of business activities and säte +- Important events during the year +- Whether kontrollbalansräkning has been prepared +- **Flerårsöversikt**: nettoomsättning, resultat efter finansiella poster, soliditet for current year + 3 preceding years +- Specification of changes in eget kapital +- Board's proposed **resultatdisposition** + +### Resultaträkning +- K2: **kostnadsslagsindelad** format ONLY +- K3: both kostnadsslagsindelad and funktionsindelad allowed +- Key lines: nettoomsättning, lagerförändring, övriga rörelseintäkter, personalkostnader, avskrivningar, finansiella poster, bokslutsdispositioner, skatt på årets resultat, årets resultat + +### Balansräkning +- Tillgångar: anläggningstillgångar (immateriella/materiella/finansiella), omsättningstillgångar (varulager/fordringar/kassa) +- Eget kapital och skulder: bundet/fritt eget kapital, obeskattade reserver, avsättningar, långfristiga/kortfristiga skulder +- K2: rigid template, cannot add/merge line items beyond template + +### Minimum notes (K2) +- Applied redovisningsprinciper ("upprättad i enlighet med ÅRL och BFNAR 2016:10") +- Avskrivningstider per asset category +- Medelantal anställda +- Ställda säkerheter +- Eventualförpliktelser + +K3 requires significantly more: deferred tax analysis, critical judgments, estimation uncertainty. + +### Signing +All board members + VD (if appointed) must sign. Revisionsberättelse appended if company has revisor. + +--- + +## NE-bilaga for Enskild firma + +Form: blankett 2161, filed as part of Inkomstdeklaration 1. + +### Page 1: Räkenskapsschema +- R1-R4: Intäkter (momspliktiga, momsfria, egna uttag, övriga) +- R5-R13: Kostnader (varuinköp, externa kostnader, löner, arbetsgivaravgifter, avskrivningar) +- R14: Bokfört resultat +- B1-B22: Condensed balansräkning + +### Page 2: Skattemässiga justeringar +- R15-R46: räntefördelning, periodiseringsfond, expansionsfond, egenavgifter schablonavdrag +- NE surplus/deficit flows into INK1 under "Inkomst av näringsverksamhet" + +--- + +## Audit thresholds + +Private AB may opt out of revisor if NOT exceeding 2 of 3 thresholds for 2 consecutive years: +- **>3 average employees** +- **>1.5 MSEK total assets** +- **>3 MSEK net revenue** + +Exceeding → must have registered revisor, revisionsberättelse becomes part of årsredovisning. + +--- + +## Filing deadlines + +### AB with calendar year (Jan-Dec) + +| Milestone | Deadline | Penalty | +|-----------|----------|---------| +| Årsredovisning prepared | June 30 (6 months) | Bokföringsbrott risk | +| Bolagsstämma (AGM) | June 30 (6 months) | Must adopt årsredovisning | +| Årsredovisning to Bolagsverket | July 31 (7 months) | Förseningsavgift 5,000 SEK | +| Inkomstdeklaration 2 to Skatteverket | August 1 | Förseningsavgift 6,250 SEK | + +For brutet räkenskapsår: same intervals relative to fiscal year-end. + +### Late filing penalties (Bolagsverket) +- After 7 months: **5,000 SEK** +- After 9 months: additional **5,000 SEK** +- After 11 months: additional **10,000 SEK** +- Total maximum: **20,000 SEK** (private AB) +- After 11 months: Bolagsverket initiates **tvångslikvidation** +- Penalties are NOT tax-deductible + +### Filing formats +- Bolagsverket: **iXBRL** via API, or paper/PDF + fastställelseintyg (signed with BankID) +- Skatteverket INK2: main form (INK2), räkenskapsschema (INK2R), skattemässiga justeringar (INK2S). INK2R/INK2S uploadable as **SRU-filer** via filöverföring. + +### Enskild firma +- **Inkomstdeklaration 1 + NE-bilaga** by **May 2** (or nearest weekday) +- 2026: May 4 for fiscal year 2025 +- No filing with Bolagsverket + +--- + +## SIE4 Export + +SIE (Standard Import Export) is the Swedish open standard. SIE 4 provides full transaction-level data. + +### File format +- Plain text, **CP437 encoding** +- Hash-prefixed tags + +### Critical tags for year-end closing + +| Tag | Description | +|-----|-------------| +| `#SIETYP` | Always "4" | +| `#FNAMN` | Company name | +| `#ORGNR` | Organisationsnummer | +| `#RAR` | Fiscal year definition (0 = current, -1 = previous) | +| `#KPTYP` | Chart of accounts (e.g. "BAS2025") | +| `#KONTO` | Account number and name | +| `#SRU` | Maps account to Skatteverket field codes | +| `#IB` / `#UB` | Opening/closing balances (balance sheet accounts) | +| `#VER` | Verification header (series, number, date, description) | +| `#TRANS` | Transaction lines within verification | + +### Bokslutstransaktioner conventions +- Use dedicated **verifikationsserie** (e.g. "I" or "B") +- Dated on balance sheet date +- Many systems treat as **period 13** (boksluts period) +- `#SRU` tag enables automated INK2R/INK2S generation + +### File extensions +- `.se`: complete export with balances +- `.si`: transaction-only import + +### Example SIE4 snippet +``` +#FLAGGA 0 +#FORMAT PC8 +#SIETYP 4 +#PROGRAM "AccountingSoft" 2.0 +#GEN 20260401 +#FNAMN "Exempel AB" +#ORGNR 556123-4567 +#RAR 0 20250101 20251231 +#KPTYP BAS2025 +#KONTO 8910 "Skatt på årets resultat" +#SRU 8910 7650 +#IB 0 2091 -500000.00 +#UB 0 2091 -897000.00 +#VER "I" 1 20251231 "Bokslut - skatteberäkning" +{ + #TRANS 8910 {} 103000.00 + #TRANS 2512 {} -103000.00 +} +```$gb$, + 'horizontal/swedish-year-end-closing', + 2, + 1 + ), + ( + 'horizontal/swedish-year-end-closing/tax-calculations', + 'horizontal', + 'Tax Calculations: AB vs Enskild Firma', + $gb$Tax Calculations: AB vs Enskild Firma: reference for Swedish Year End Closing$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1020, + '.claude\skills\swedish-year-end-closing\references\tax-calculations.md', + $gb$# Tax Calculations: AB vs Enskild Firma + +## Bolagsskatt for AB + +Rate: **20.6%** (since January 1, 2021). + +### Skattemässigt resultat calculation + +Start from bokfört resultat, then adjust: + +**Add back (ej avdragsgilla kostnader):** +- Representation (over deductible limits) +- Böter, skattetillägg +- Kostnadsränta on skattekonto +- Gåvor +- Bolagsbildningskostnader + +**Subtract (ej skattepliktiga intäkter):** +- Utdelning from näringsbetingade andelar +- Intäktsränta on skattekonto + +**Add:** +- Schablonintäkt on periodiseringsfonder +- Reversal of overused tax depreciation + +**Subtract:** +- Prior-year losses (underskottsavdrag) + +Round down to nearest 10 SEK before applying 20.6%. + +### Schablonintäkt on periodiseringsfonder (AB) + +Formula: total periodiseringsfonder at year-start × statslåneränta (SLR) from November 30 of preceding year (floor 0.5%). + +- Beskattningsår ending 2025: **1.96%** +- Beskattningsår ending 2026: **2.55%** + +This is a skattemässig justering ONLY. NEVER booked in accounting. Reported on INK2S field 4.6a. + +### Transition rule for pre-2019 periodiseringsfonder + +Funds created before 2019 (when rate was 22%) require **gross-up of 103-106%** on reversal to compensate for rate reduction. Handled only in tax calculation. + +--- + +## Enskild firma: four unique tax mechanisms + +An enskild firma is NOT a skattesubjekt. Owner pays tax personally via Inkomstdeklaration 1 + NE-bilaga. + +### 1. Egenavgifter + +Replace arbetsgivaravgifter for employees. + +**Full rate (2025/2026):** 28.97% (born 1959 or later, active business, 7 karensdagar) + +**NE-bilaga schablonavdrag logic:** +- R43: Schablonavdrag = **25%** of överskott before egenavgifter +- R40: Previous year's schablonavdrag added back +- R41: Actual egenavgifter charged previous year deducted +- Net effect: estimated deduction, reconciled following year + +**Reduced rates:** +- Pensioners born 1938-1958: 10.21% rate, 10% schablonavdrag +- Passive businesses: SLP 24.26% instead, 20% schablonavdrag + +**Additional nedsättning:** 7.5% (max 15,000 SEK/year) for active businesses with överskott > 40,000 SEK. Calculated automatically by Skatteverket. + +### 2. Räntefördelning + +Shifts calculated return on business capital from inkomstslaget näringsverksamhet (taxed at marginal rates up to ~55% including egenavgifter) to inkomstslaget kapital (flat 30%). + +**Positive räntefördelning (voluntary):** +- Rate: SLR + 6 percentage points +- 2025: 7.96%, 2026: 8.55% +- Applied on positive kapitalunderlag +- From 2025: no minimum kapitalunderlag threshold (previously 50,000 SEK) + +**Negative räntefördelning (mandatory):** +- Triggers when negative kapitalunderlag exceeds **500,000 SEK** +- Rate: SLR + 1 percentage point +- 2025: 2.96%, 2026: 3.55% + +**Kapitalunderlag** = adjusted eget kapital in the business at previous year-end. + +Handled in NE-bilaga only, NEVER booked. + +### 3. Expansionsfond + +Gives sole traders equivalent of AB's ability to retain earnings at corporate tax rate. + +- Owner pays **20.6% expansionsfondsskatt** on avsättning +- Max avsättning: **125.94%** of kapitalunderlag at year-end +- **No mandatory 6-year reversal** (can be held indefinitely) +- On reversal: amount added back as NV income, previously paid 20.6% credited against that year's tax + +Handled exclusively in NE-bilaga (R33/R34), NEVER booked. + +### 4. Periodiseringsfond (Enskild firma) + +- Max deferral: **30%** of result (vs 25% for AB) +- Same 6-year mandatory reversal +- **No schablonintäkt** for fysiska personer +- Handled only in NE-bilaga (R29/R30), NEVER booked + +--- + +## Critical distinction: booked vs declaration-only + +| Item | AB | Enskild firma | +|------|-----|---------------| +| Periodiseringsfond | **Booked** (8811/21xx) | Declaration only (NE R29/R30) | +| Överavskrivningar | **Booked** (8850/2150) | **Booked** (8850/2150) | +| Skatt på årets resultat | **Booked** (8910/2512) | NOT booked (personal tax) | +| Schablonintäkt periodiseringsfond | Declaration only (INK2S 4.6a) | N/A | +| Räntefördelning | N/A | Declaration only | +| Expansionsfond | N/A | Declaration only | +| Egenavgifter schablonavdrag | N/A | Declaration only |$gb$, + 'horizontal/swedish-year-end-closing', + 2, + 1 + ), + ( + 'modifier/holding-ab', + 'modifier', + 'Holdingbolag (rena ägar-/förvaltningsbolag)', + $gb$Modifier for Swedish holding-aktiebolag (typiskt SNI 64.20): rena ägar-/förvaltningsbolag utan operativ omsättning vars resultat domineras av utdelning, koncernbidrag, ränteintäkter på koncerninterna lån och kapitalvinst på näringsbetingade andelar. Aktivera när AB:t har BAS 1310/1312/1330 dominerande i balansen utan 3xxx-omsättning, eller när transaktionerna rör näringsbetingade andelar (IL 24 kap 32-42 §§), koncernbidrag (IL 35 kap), ränteavdragsbegränsning (IL 24 kap 16-29 §§), aktieägartillskott, skalbolag, kupongskatt, holdingbolags momsavdrag eller kvalificerade andelar 3:12. Trigga även utan "holding-AB"-formuleringen: moderbolag, dotterbolag, koncern, förvärvsbolag, M&A-moms, reavinst på dotterbolagsförsäljning eller utdelning från dotter indikerar att modifern ska laddas. Påverkas av HFD 2023 ref. 41 (Volvo), HFD 2024 ref. 18 (Lamiflex), prop. 2025/26:20 (ränteavdrag) och SFS 2025:1361 (3:12).$gb$, + ARRAY['64.20']::text[], + $gb${}$gb$::jsonb, + 11000, + '.claude\skills\modifier\holding-ab\SKILL.md', + $gb$--- +id: modifier/holding-ab +tier: modifier +title: "Holdingbolag (rena ägar-/förvaltningsbolag)" +description: > + Modifier for Swedish holding-aktiebolag (typiskt SNI 64.20): rena ägar-/förvaltningsbolag utan operativ omsättning vars resultat domineras av utdelning, koncernbidrag, ränteintäkter på koncerninterna lån och kapitalvinst på näringsbetingade andelar. Aktivera när AB:t har BAS 1310/1312/1330 dominerande i balansen utan 3xxx-omsättning, eller när transaktionerna rör näringsbetingade andelar (IL 24 kap 32-42 §§), koncernbidrag (IL 35 kap), ränteavdragsbegränsning (IL 24 kap 16-29 §§), aktieägartillskott, skalbolag, kupongskatt, holdingbolags momsavdrag eller kvalificerade andelar 3:12. Trigga även utan "holding-AB"-formuleringen: moderbolag, dotterbolag, koncern, förvärvsbolag, M&A-moms, reavinst på dotterbolagsförsäljning eller utdelning från dotter indikerar att modifern ska laddas. Påverkas av HFD 2023 ref. 41 (Volvo), HFD 2024 ref. 18 (Lamiflex), prop. 2025/26:20 (ränteavdrag) och SFS 2025:1361 (3:12). +sni_prefixes: ["64.20"] +trigger_signals: + ownership: "holding_structure" + text_patterns: + - "näringsbetingade andelar" + - "koncernbidrag" + - "utdelning dotterbolag" + - "aktieägartillskott" + - "ränteavdragsbegränsning" + - "kapitalförsäkring" + - "kupongskatt" + - "underprisöverlåtelse" + - "skalbolag" + - "management fee dotterbolag" + bas_account_signals: + - "1310" + - "1312" + - "1318" + - "1330" + - "1385" + - "1662" + - "2093" + - "2860" + - "8012" + - "8022" + - "8072" + - "8820" + - "8830" +estimated_tokens: 11000 +version: 1 +--- + +# Holding-AB (SNI 64.20): vertikalskill + +## 1. När denna skill används + +Aktivera när bolaget saknar operativ omsättning (3xxx ≈ 0) och resultatet drivs av 80xx-poster (utdelning från dotter, koncernbidrag, reavinst på andelar, ränta från koncernföretag). Typiskt: enmans-/familjeägt holding över ett eller flera operativa dotterbolag, PE-portföljbolag, eller styrnod i koncerntopp. **Avgränsa mot:** rent investmentföretag (IL 39 kap, kapitalförvaltning för fysiska delägare via värdepappersportfölj, SNI 64.30/64.99, ej koncernbidragsberättigat enligt 35 kap 3 § p. 1); operativt moderbolag med egen omsättning och central stab (faktiska 3xxx-intäkter, fallet faller i branschskill för operativ verksamhet, denna skill används sekundärt för koncernkonton). Skatterättsligt finns ingen särkategori "holding-AB": alla regler nedan är allmänna AB-regler som i praktiken nästan uteslutande aktualiseras för holdingstrukturer. + +## 2. Typiska arbetsflöden + +**Fakturering:** oftast ingen. Om aktiv förvaltning: månads-/kvartalsvis management fee till dotterbolag (25 % moms, konto 3740 eller motsv. omsättningskonto, motkonto 1510 mot dotter). **Värden måste vara armlängdsmässiga (IL 14 kap 19 §) och tjänsterna faktiskt utförda**: proforma management fee underkänns för både moms (HFD 2024 ref. 34 II) och inkomstskatt. Hyresfakturor om holdingen äger driftsfastighet och hyr ut till dotter (Marle Participations C-320/17 ger momsavdragsrätt). + +**Kostnadsrytm:** revisorsarvode (årligen), redovisningsbyrå (löpande), juridisk rådgivning (oregelbundet), M&A-kostnader vid förvärv/avyttring (klumpsummor), finansiella kostnader på förvärvslån (löpande). M&A-moms är momsskillens kärnfråga (sektion 4a). + +**Avstämning:** månadsvis avstämning av koncerninterna mellanhavanden (1660-1662 ↔ 2860-2862; 1320 ↔ motpartens 2353; 8260/8462 ↔ motpartens räntepost). Kvartalsvis upprättande av underlag för koncernredovisning om sådan ska upprättas (mindre koncern undantagen, ÅRL 7 kap 3 §, gränsvärden 50 anställda / 40 MSEK balansomslutning / 80 MSEK nettoomsättning per 2026, oförändrade trots SOU 2023:34). Årlig nedskrivningsprövning av andelar (ÅRL 4 kap 5 §; K3 27.3-27.13 indikatorbedömning; K2 19.8 schablon "lägsta av 25 000 kr eller 10 % av EK"). + +**Lön:** typiskt ingen löpande lön. Styrelsearvode bokförs på 7240/7510. Om ägaren tar lön via holdingen för att uppnå **löneuttagskrav slopas dock från 2026** (IL 57 kap 19 § upphävd via SFS 2025:1361): strategin "lön i holding för 3:12-utrymme" är delvis överspelad; löneunderlaget från dotterbolagens anställda räknas in i moderbolagets gränsbelopp (57 kap 16 §, civilrättslig dotterföretagsdefinition). + +## 3. BAS 2025-konton för holding-AB + +Verifierat mot bas.se/kontoplaner/bas-2025. Ingen ändring i koncern-/holding-relevanta konton mellan BAS 2024 och BAS 2025; reformerna i BAS 2025 avser endast moms-formulering, delägarlån (1360/1369/1685) och periodiseringsfondsår (2126/2136 ny, 2127/2137 borttagna). + +| BAS 2025 | Officiellt namn | Holding-AB-specifik användning | +|---|---|---| +| **1310** | Andelar i koncernföretag | Samlingskonto. Vid första förvärv av dotter: D 1310 mot K likvida. | +| **1312** | Aktier i onoterade svenska koncernföretag | **Det dominerande tillgångskontot** i typisk svensk holding. | +| **1314** | Aktier i onoterade utländska koncernföretag | Onoterat utländskt dotter (LP, GmbH, Ltd). | +| **1318** | Ackumulerade nedskrivningar av andelar i koncernföretag | Krediteras vid bestående värdenedgång; ackumulerat mot 1310-serien. | +| **1320** | Långfristiga fordringar hos koncernföretag | Reverslån till dotter > 12 mån (cash pool, förvärvsfinansiering). | +| **1330** | Andelar i intresseföretag, gemensamt styrda företag och övriga företag som det finns ett ägarintresse i | 20-50 % ägande utan koncernrelation. | +| **1336** | Andelar i övriga företag som det finns ett ägarintresse i | < 20 % strategiskt ägande (ej ren finansiell placering). | +| **1338** | Ackumulerade nedskrivningar av andelar i intresseföretag … | Nedskrivningskonto 1330-gruppen. | +| **1350** | Andelar och värdepapper i andra företag | Långsiktig portfölj utan ägarintresse (passiv placering). | +| **1380** | Andra långfristiga fordringar | Övriga reverser, depositioner, ej värdepapper. | +| **1385** | Kapitalförsäkring | Standardkontot för KF i holding (premiumvärdet, anskaffningsvärdesmetod enligt RedR 9). | +| **1660** | Kortfristiga fordringar hos koncernföretag | Samlingskonto. Motkonto vid mottaget koncernbidrag innan reglering. | +| **1662** | Kortfristiga fordringar hos dotterföretag | **Centralt i moder**: fordran på dotter för utdelning/koncernbidrag innan kontant reglering. | +| **2093** | Erhållna aktieägartillskott | I bolaget som tar emot tillskott. Klassificeras under fritt eget kapital. | +| **2350** | Andra långfristiga skulder till kreditinstitut | Bankfinansierat förvärvslån > 12 mån. | +| **2860** | Kortfristiga skulder till koncernföretag | Motkonto i givande bolag för lämnat koncernbidrag (D 8830 / K 2860). | +| **2862** | Kortfristiga skulder till dotterföretag | I moder om kortfristig skuld nedåt. | +| **8010 / 8012** | Utdelning på andelar i koncernföretag / dotterföretag | **Huvudintäktskontot.** Krediteras mot 1662/likvida. | +| **8020 / 8022** | Resultat vid försäljning av andelar i koncernföretag / dotterföretag | Reavinst/-förlust på dotterbolagsförsäljning. **Vinst skattefri, förlust ej avdragsgill** (IL 25 a kap 5 §). | +| **8070 / 8072** | Nedskrivningar av andelar i och långfristiga fordringar hos koncernföretag / dotterföretag | **Bokföringsmässigt avdragsgill, skattemässigt ej** för andelar (skattemässig justering i INK2 ruta 4.7 b). | +| **8080 / 8082** | Återföringar av nedskrivningar … / dotterföretag | Reversering enl. ÅRL 4 kap 5 § 3 st / K3 27.13. | +| **8260 / 8262** | Ränteintäkter från långfristiga fordringar hos koncernföretag / dotterföretag | Ränta på 1320-reverser. Måste vara armlängdsmässig (IL 14 kap 19 §). | +| **8460 / 8462** | Räntekostnader till koncernföretag / dotterföretag | Speglar motpartens 8260/8262. **Avdragsrätt prövas mot IL 24 kap 18-19 §§ + 21-29 §§.** | +| **8820** | Erhållna koncernbidrag | Krediteras mot 1662/likvida i mottagande bolag. Bokslutsdisposition. | +| **8830** | Lämnade koncernbidrag | Debiteras mot 2860/likvida i givande bolag. Bokslutsdisposition. | +| **2091** | Balanserad vinst eller förlust | Ackumulerade utdelningsbara medel, typiskt stor post i etablerad holding. | +| **2098** | Vinst eller förlust från föregående år | Föregående års resultat före stämmobeslut. | + +**Vanliga BAS-felval i holding-AB** (sett i Fortnox/Visma/Bokio-data): 8423 används felaktigt för "ränta till koncern": det är ränta på skattekontot; korrekt är **8460/8462**. 8077 används felaktigt som "återföring nedskrivning": det är *nedskrivning av lån till dotter*; återföring av nedskrivning av aktier i dotter är **8082**. 1380 används felaktigt för "långfristiga värdepappersinnehav": det är **1350** (1380 = övriga långfristiga fordringar). + +## 4. Reglerande särfall: högsta värdedensiteten + +### 4a. Moms: när är holdingbolaget skattskyldigt? + +**Lagrum:** ML (2023:200), ikraft 2023-07-01 (ersätter ML 1994:200). Materiella regler oförändrade för holdingbolag. **4 kap 2 § ML** definierar beskattningsbar person (motsv. art. 9.1 momsdirektivet). **13 kap 6 § ML** reglerar avdrag (motsv. art. 168). **4 kap 7-14 §§ ML** reglerar mervärdesskattegrupp (motsv. gamla 6 a kap ML 1994:200). + +**Tre lägen:** + +| Profil | Status | Avdragsrätt | +|---|---|---| +| Passivt holding: enbart andelsinnehav, ingen fakturering till dotter | Ej beskattningsbar person (C-60/90 Polysar; C-28/16 MVM; HFD 2024 ref. 34 II) | **Noll.** Ingående moms bokförs som kostnad (inkl. moms på 6420 Revisor, 6530 Juridik, M&A-kostnader). | +| Aktivt holding: fortlöpande momspliktig management fee, hyresupplåtelse, IT/HR/ekonomi-tjänster mot ersättning till dotter (eller dotterdotter, HFD 2024 ref. 18 Lamiflex) | Beskattningsbar person (C-142/99 Floridienne; C-320/17 Marle) | **Full**, även på M&A-kostnader och försäljningskostnader om de inte övervältras på köparen (HFD 2023 ref. 41 Volvo AB; C-16/00 Cibo). | +| Blandat: vissa dotter aktiva, andra passiva, eller även PE-investeringsverksamhet | Delvis beskattningsbar | **Proportionell efter skälig grund** (Sonaecom C-42/19 p. 47; KRNG mål 5919-5220-23 efter återförvisning HFD 2023 ref. 41). | + +**M&A-kostnader vid förvärv:** avdragsrätt förutsätter **avsikt vid förvärvstillfället** att aktivt förvalta målbolaget (C-16/00 Cibo; HFD 2024 ref. 18). Avbrutet förvärv: avdrag kvarstår om avsikt styrkt (Ryanair C-249/17; Sonaecom C-42/19) men **faktisk skattefri användning av kapitalet (t.ex. lån vidare till koncern) går före ursprunglig avsikt** (Sonaecom p. 53-69). + +**Försäljningskostnader vid avyttring av dotter:** undantagen finansiell tjänst enl. 10 kap 33 § ML. Direkt hänförliga kostnader ej avdragsgilla (C-4/94 BLP). Men: HFD 2023 ref. 41 fastslår att kostnader vid avyttring är **allmänna omkostnader** med full avdragsrätt om syftet är att effektivisera kvarvarande verksamhet och kostnaderna inte övervältras på köparen. + +**Mervärdesskattegrupp (4 kap 7-14 §§ ML):** kräver (a) endast deltagare under FI-tillsyn med finansiella/försäkringsundantagna tjänster eller kommissionärsförhållande (4 kap 8 §); (b) svenskt fast etableringsställe (4 kap 9 §; jfr Skandia C-7/13, Danske Bank C-812/19); (c) alla tre samband: finansiellt + ekonomiskt + organisatoriskt (4 kap 10 §). **Passivt holding kan inte ingå** (är ej beskattningsbar person). Sällsynt utanför bank/försäkring. + +**Management fee-prissättning:** efter **C-808/23 Högkullen (3 juli 2025)** och **HFD 2026-01-27 mål 3217-21** kan Skatteverket inte schablonmässigt omvärdera management fee till självkostnadsbas. Koncerninterna förvaltningstjänster är **inte ett enda odelbart tillhandahållande**; marknadsvärde ska bestämmas per tjänst med jämförbar marknadstransaktion som första metod (8 kap ML; art. 80 momsdirektivet). Skatteverkets ställningstagande 190430 (dnr 202 195456-19/111) om självkostnadsmetod är överspelat i sin schablonmässiga del. Sexåriga omprövningsbara perioder bör granskas. + +**Skatteverket Rättslig vägledning:** "Holdingbolag: avdragsrätt för mervärdesskatt" (dnr 202 377677-17/111, uppdaterad 2024-03-21 efter HFD 2024 ref. 18): `skatteverket.se/rattsligvagledning/365766.html`. + +### 4b. Bokföring: andelsvärdering, tillskott, koncernbidrag + +**Andelar i koncern/intresse, anskaffningsvärdemetoden:** ÅRL 4 kap 3 § + K2 BFNAR 2016:10 kap 11, 19 / K3 BFNAR 2012:1 kap 11. **Kapitalandelsmetoden får inte användas i juridisk person under K3** (endast i koncernredovisning, K3 14.3-14.5). Under K2 är kostnadsmetoden enda alternativet. + +**Nedskrivning:** +- **K2 (19.8):** schablonregel: nedskrivning krävs om värdet understiger redovisat värde med mer än det lägsta av **25 000 kr eller 10 % av eget kapital vid årets ingång**. Värde noll → alltid ned till noll. +- **K3 (kap 27):** **återvinningsvärde = max(nyttjandevärde, verkligt värde − försäljningskostnader)**. Nedskrivning till återvinningsvärde när detta understiger redovisat värde. Reversering tillåten (27.13), utom för goodwill. +- ÅRL 4 kap 5 § 2 st: finansiell anläggningstillgång *får* skrivas ned till lägre värde på balansdagen även om värdenedgången inte är bestående (lägsta värdets princip). +- **Skatterättsligt:** nedskrivning av andelar är **ej avdragsgill** om andelarna är näringsbetingade (justeras i INK2 ruta 4.7 b "Bokförda kostnader som ej ska dras av"). Återföring av sådan nedskrivning är **ej skattepliktig** (4.5 b). + +**Aktieägartillskott, ovillkorat:** +- **Givaren:** D 1310/1312 (ökar anskaffningsvärdet på andelarna, K2 19.5; K3 11.10-11.12) / K likvida eller 2860. Skattemässigt: ökar omkostnadsbeloppet vid framtida avyttring (44 kap 14 § IL). +- **Mottagaren:** D likvida / K **2093 Erhållna aktieägartillskott** (fritt eget kapital). Skattefritt. +- Återbetalning = vinstutdelning (kräver utdelningsbara medel, ABL 17-18 kap; utdelningsbeskattas hos ägaren). + +**Aktieägartillskott, villkorat:** +- **Givaren:** D 1380 (fordran, inte ökning av andelsvärde) / K likvida. Förlust avdragsgill om verklig och definitiv (RÅ 2008 ref. 24), inte fångad av aktiefållan i 48 kap 26 § IL. +- **Mottagaren:** identiskt med ovillkorat (K 2093). +- Återbetalning skattefri hos givaren intill omkostnadsbeloppet (RÅ 1988 ref. 65; RÅ 2009 ref. 41). +- **Omvandling villkorat → ovillkorat = avyttring** skattemässigt (RÅ 2009 ref. 41). +- **NY REGEL från räkenskapsår 2026:** Utfästelse om tillskott måste lämnas **senast på balansdagen** för att tillskottet ska redovisas på det året (BFN beslut 2025-06-16; tidigare regel om utfästelse mellan balansdag och årsredovisningens upprättande borttagen). +- BFN U 97:2 är **upphävt** och inarbetat i K2/K3. + +**Koncernbidrag, redovisning:** +- **Givare:** D 8830 Lämnade koncernbidrag / K 2860 alt. likvida. +- **Mottagare:** D 1660/1662 alt. likvida / K 8820 Erhållna koncernbidrag. +- Klassificeras som **bokslutsdisposition** i RR (under finansiella poster, efter resultat efter finansiella poster). Alternativ redovisning direkt mot fritt eget kapital är tillåten enligt RFR 2 för noterade men i icke-noterad K3-miljö är 8820/8830 standard. K2 har enbart bokslutsdispositionsalternativet. +- **Civilrättsligt krav:** koncernbidrag = värdeöverföring enl. ABL 17 kap 1 § + 3 § (beloppsspärr + försiktighetsregel). Kräver formellt beslut (oftast bolagsstämma); styrelseyttrande enl. ABL 18 kap 4 § är obligatoriskt och kan inte avtalas bort (NJA 2015 s. 359; HD T 5171-23, 2024). + +**Koncernredovisning ÅRL 7 kap:** mindre koncerner undantagna (7 kap 3 §). **Gränsvärden 2026 (oförändrade): 50 anställda / 40 MSEK balansomslutning / 80 MSEK nettoomsättning**: koncern är "större" om mer än ett av villkoren uppfyllts två räkenskapsår i följd. Interna fordringar/skulder elimineras vid mätning. Subkoncern: 7 kap 2 § ger undantag om EES-moder upprättar konsoliderad redovisning enligt direktiv 2013/34/EU. **K2 förbjuder koncernredovisning** (BFNAR 2016:10 p. 1.1): holding som är moder i större koncern måste tillämpa K3. + +**Kapitalförsäkring i holding-AB:** FAR RedR 9. Anskaffningsvärdesmetoden: premier bokförs som finansiell anläggningstillgång (1385); löpande värdestegring redovisas inte. Uttag intäktsförs som finansiell intäkt (8350 alt.). Avkastningsskatt enl. AvPL (skattepliktig i bolaget, ej moms). **NY REGEL 2026:** särskild löneskatt på pensionsåtagande säkerställt av KF beräknas på KF:s marknadsvärde om detta överstiger åtagandets redovisade värde (K2 16.17, K3 28.12A, BFN-ändring 2025-06-16). + +### 4c. Inkomstskatt: kärnan av denna skill + +**Näringsbetingade andelar, IL 24 kap 32-42 §§** (SFS 2003:224 ikraft 2003-07-01; numrering ändrad SFS 2018:1206 ikraft 2019-01-01): +- **24 kap 32 § IL**, Definition: andel i AB/ek.för. ägd av svenskt AB som ej är investmentföretag, motsvarande EES-bolag, m.fl. +- **24 kap 33 § IL**, Villkor (kapitaltillgång + ett av): (a) **onoterad andel** automatiskt näringsbetingad (inget röst-/innehavskrav); (b) marknadsnoterad andel kräver **≥ 10 % av rösterna**; (c) andel betingad av rörelse hos ägaren eller närstående företag. +- **24 kap 35 § IL**: Utdelning på näringsbetingad andel tas inte upp till beskattning. +- **24 kap 40 § IL**: Marknadsnoterad andel måste ha innehafts **≥ 1 år** vid utdelnings-/avyttringstillfället. Onoterad har inget innehavskrav. + +**Kapitalvinst, IL 25 a kap:** +- **25 a kap 5 § IL**: Kapitalvinst på näringsbetingad andel tas inte upp; **kapitalförlust är aldrig avdragsgill** (med smala undantag i 5 § 2 st). +- **25 a kap 19 § IL**: Avdragsförbud för förlust på tillgång vars underliggande tillgång är näringsbetingad andel. **HFD 2023 ref. 1**: gäller inte kapitalförlust på köpeskillingsrevers som uppkommit vid tidigare avyttring av näringsbetingade andelar (fordringen är inte själv underliggande näringsbetingad andel). + +**Skalbolagsregler, IL 25 a kap 9-18 §§ + SFL 27 kap 2 §:** +- **25 a kap 9 §**: Vid avyttring av andel i skalbolag (eller återköp enl. 18 §) bortfaller skattefriheten: hela ersättningen tas upp som kapitalvinst. +- Skalbolagsdefinition: marknadsvärdet av likvida tillgångar > **jämförelsebeloppet** (halva ersättningen vid avyttring av samtliga andelar). +- **25 a kap 12 § "ventilen"**: undantag om väsentligt inflytande inte går över eller särskilda skäl föreligger (skatten betalas, koncernbidragsrätt köpare/säljare). +- **Skalbolagsdeklaration:** inom **60 dagar** från avyttring (SFL 27 kap 4 §); säkerhet för slutlig skatt kan krävas. + +**Koncernbidrag, IL 35 kap:** +- **35 kap 1 § IL**: Avdrag hos givare, intäkt hos mottagare; **värdeöverföring senast på inkomstdeklarationsdagen** (kodifierat SFS 2016:1239 ikraft 2017-01-01). +- **35 kap 2 § IL**: Moderföretag = svenskt AB/ek.för./sparbank/öms.försäkr./skattepliktig stiftelse-ideell förening som äger **> 90 %** av dotter. +- **35 kap 2 a § IL**: EES-bolag som motsvarar svenskt jämställs om skattskyldigt i Sverige för verksamheten (svensk filial). +- **35 kap 3 § IL**, Förutsättningar: ej privatbostadsföretag/investmentföretag; öppen redovisning; **dotter helägt under hela båda bolagens beskattningsår** (eller sedan verksamhet inleddes); mottagare ej hemvist utanför Sverige enligt skatteavtal; vid DF→MF: utdelning från DF får inte vara skattepliktig hos MF. +- **35 kap 4-6 §§**: Slussning mellan systerbolag via MF; fusionsregel. +- **Civilrättslig grund:** ABL 17 kap 1 § + 3 § (beloppsspärr + försiktighetsregel); ABL 18 kap 4 § styrelseyttrande obligatoriskt (NJA 2015 s. 359; HD T 5171-23, 2024). + +**Ränteavdragsbegränsning, IL 24 kap (SFS 2018:1206, ikraft 2019-01-01):** + +Generell EBITDA-regel: +- **24 kap 21 § IL**, Tillämpningsområde: jur. pers. och svenska HB (HB med enbart fysiska ägare undantagna). +- **24 kap 23 § IL**: Negativt räntenetto = avdragsgilla ränteutgifter − skattepliktiga ränteinkomster. +- **24 kap 24 § IL**: **30 % av avdragsunderlag** (resultat före ränta, skatt, av- och nedskrivningar = "skattemässigt EBITDA"). Förenklingsregel 3 st: **5 MSEK** av negativt räntenetto får alltid dras av (per intressegemenskap; vid tillämpning får inget kvarstående räntenetto sparas). +- **24 kap 26 § IL**: Carry forward **6 år**. +- **24 kap 27-29 §§**: Beräkning, ägarförändringseffekter. + +Riktade regler (koncerninterna lån), IL 24 kap 16-20 §§: +- **24 kap 18 § 1 st**: Avdragsrätt om mottagaren hör hemma inom EES eller beskattas ≥ 10 % (tioprocentsregeln). +- **24 kap 18 § 2 st "undantagsregeln"**: Ej avdrag om skuldförhållandet **uteslutande eller så gott som uteslutande** uppkommit för väsentlig skatteförmån. +- **24 kap 19 § "förvärvsregeln"**, Skuld för koncerninternt förvärv av delägarrätt: avdrag bara om förvärvet är **väsentligen affärsmässigt motiverat** (organisatoriska skäl räcker ej, HFD 2022 ref. 49). +- **EU-rätt:** **C-484/19 Lexel (20 jan 2021)** underkände 2013 års undantagsregel; **HFD 2021 ref. 68** underkände 2019 års lydelse på samma grund; **HFD 2024 ref. 6 (22 jan 2024)** underkände 24 kap 19 § (förvärvsregeln) som EU-rättsstridig när koncernbidragsrätt funnits om båda bolagen varit svenska. +- **2026 års reform:** prop. 2025/26:20 (bet. SkU8): ny **24 kap 19 a § IL** för skuldförhållanden inom EES; omformulerade 18 § 2 st och 19 §; ikraft 2026-01-01. + +**Kupongskatt, KupL (1970:624):** +- **5 §**: 30 % på utdelning till begränsat skattskyldig fysisk/jur. person; reduceras genom skatteavtal (vanligen 15 %, 5 % eller 0 %). +- **4 § 5 st**, Undantag enligt moder/dotterbolagsdirektivet 2011/96/EU: EU-juridisk person med ≥ 10 % andelskapital och som uppfyller direktivets art. 2. +- **4 § 6-7 st**: Undantag för EES-bolag som motsvarar svenskt AB enligt IL 24 kap 32 § 1-4 och 33 § 1 st 1 eller 2; innehavstid ≥ 1 år. + +**Förbjudna lån, ABL 21 kap + IL 11 kap 45 §:** +- **ABL 21 kap 1 §**: Förbud mot lån till aktieägare/närstående. +- **ABL 21 kap 2 § 1 st p. 2**, **Koncernundantaget**: lån till annat företag i samma koncern är tillåtet (moder→dotter, dotter→moder, syster↔syster). Koncerndefinition ABL 1 kap 11 §. **2 st utvidgar till EES-moder.** +- **IL 11 kap 45 §**: Fysisk låntagare beskattas för hela lånebeloppet i inkomstslaget tjänst. **IL 15 kap 3 §**: annan juridisk person än AB tar upp lånebeloppet som näringsverksamhet. **AB som låntagare är generellt undantagna** (SFS 2009:1412). + +**CFC, IL 39 a kap:** +- **39 a kap 5 § IL**: Lågbeskattad om utländsk jur. pers. beskattas < 55 % av svenskt AB (med 20,6 % bolagsskatt → tröskel **≈ 11,33 %**). +- **39 a kap 7 § + bilaga 39 a**, "Vita listan": undantagna områden/inkomstkategorier. +- **39 a kap 7 a § IL**: EES-bolag undantas om de utgör **verklig etablering** med affärsmässigt motiverad verksamhet (efter C-196/04 Cadbury Schweppes, kodifierat SFS 2007:1254). + +**Omstruktureringar, IL 23, 37, 38, 38 a, 42, 48 a, 49 kap:** +- **IL 23 kap** Underprisöverlåtelser (NB: i 23 kap, inte 53 kap, 53 kap reglerar överlåtelser till utländska företag från fysiska personer). +- **IL 37 kap** Kvalificerade fusioner och fissioner. +- **IL 38 kap** Verksamhetsavyttring; **IL 38 a kap** Partiella fissioner. +- **IL 42 kap 16 § Lex ASEA**: skattefri utdelning av samtliga aktier i dotterbolag om utdelande moder är marknadsnoterad och övriga villkor uppfyllda. +- **IL 48 a kap** Framskjuten beskattning vid andelsbyten (fysiska); **IL 49 kap** Uppskovsgrundande andelsbyten (juridiska). + +**IL 35 a kap Koncernavdrag (slutliga förluster i EES-dotter)**: kodifiering av Marks & Spencer-doktrin (C-446/03), ikraft 2010-07-01 (SFS 2010:353). Krav: > 90 % helägt, **direkt ägt** (HFD 2019 not. 38 Holmen), inom EES, slutligt avvecklat, MF ej investmentföretag. Snäv praktisk tillämpning. + +**3:12, kvalificerade andelar IL 57 kap, STOR REFORM SFS 2025:1361 ikraft 2026-01-01:** +- **57 kap 4 § IL**, Smitta mellan dotterbolag via holdingbolag: ägare verksam i ett dotter → holdingens andelar kvalificerade. "Samma eller likartad verksamhet"-rekvisitet smittar via överförda vinstmedel/kapital (RÅ 2010 ref. 11 I-V; HFD 2023 ref. 11 Intersport/Adelis; HFD 2024 ref. 51). +- **57 kap 16 § IL (ny lydelse 2026)**: Löneunderlag = kontant ersättning till anställda i företaget **och dess dotterföretag** (civilrättslig definition); löner i dotterbolag räknas in i holdingens gränsbelopp (proportionerligt vid < 100 % ägande). +- **57 kap 16 a § IL (ny 2026)**: Schablonavdrag **8 IBB per delägare** från löneunderlaget (≈ 644 800 kr 2026 baserat på IBB 80 600 kr). +- **57 kap 17 § IL**: Lönebaserat utrymme = **50 %** av löneunderlaget efter schablonavdrag. +- **57 kap 19 § IL UPPHÄVD 2026**: **Löneuttagskravet för delägaren slopas**. Ingen lägstanivå för ägares eller närståendes löneuttag krävs. +- **Grundbelopp 4 IBB (322 400 kr 2026)** per företag fördelat efter ägarandel. Räntebaserat utrymme: SLR + 9 % på omkostnadsbelopp **överstigande 100 000 kr**. Uppräkning av sparat utdelningsutrymme **slopad**. Karenstid förkortad från 5 → 4 år (gäller utlösande händelser från 2027). 4 %-spärren (kapitalandelskravet) slopad. + +### 4d. HFD och Skatteverket: senaste 5 åren (urval för holding-AB) + +| Avgörande | Område | Holding | +|---|---|---| +| HFD 2021 ref. 33 ("Hoist") | Skalbolag / underskott | Skatteflyktslagen ej tillämplig på förvärv av underskottsbolag finansierat via övertagen säljarskuld; ledde till stopplag prop. 2021/22:93. | +| HFD 2021 ref. 40 ("Valedo") | 3:12 / PE-strukturer | Aktieslagsuppdelning A/B + ägaravtal → särskilda skäl mot utomståenderegeln. | +| HFD 2021 ref. 66 | Koncernbidrag | Ändrad ägarstruktur inom koncern utlöser ej koncernbidragsspärr enl. 40 kap 10 § 3 st om bestämmande inflytande består. | +| HFD 2021 ref. 68 | Ränteavdrag | 2019 års undantagsregel 24 kap 18 § 2 st EU-stridig vid svensk koncernbidragsrätt. | +| HFD 2021 not. 10 | Ränteavdrag | Tillämpar Lexel C-484/19 på 2013 års regel. | +| HFD 2022 ref. 49 | Ränteavdrag | 24 kap 19 § förvärvsregel: organisatoriska skäl räcker ej som affärsmässighet. | +| HFD 2022 not. 3 | Näringsbetingade | Andelar i Liechtenstein-Anstalt näringsbetingade trots lågbeskattning: formell skattskyldighet räcker. | +| HFD 2023 ref. 1 | Näringsbetingade | Köpeskillingsrevers efter avyttring av nb-andelar omfattas inte av 25 a kap 19 § avdragsförbud. | +| HFD 2023 ref. 11 ("Adelis") | 3:12 / utomståenderegeln | Förvärv genom nyemission i annat fåmansföretag → inte "samma eller likartad verksamhet" om vinstmedel ej överförts. | +| HFD 2023 ref. 41 (Volvo AB) | Moms / aktieförsäljning | Aktivt holding har avdragsrätt för moms på försäljningskostnader om kostnaderna inte övervältras på köparen: allmänna omkostnader. | +| HFD 2024 ref. 6 | Ränteavdrag | 24 kap 19 § förvärvsregel EU-stridig vid svensk koncernbidragsrätt → 2026-reform. | +| HFD 2024 ref. 18 (Lamiflex) | Moms / aktieförvärv | Avdragsrätt vid förvärv av "rent" holding där förvaltningstjänster levereras till dotterdotter. | +| HFD 2024 ref. 34 I-II | Moms / scheinmanagement | Bolag som inte fakturerar dotter och inte vidarefakturerar saknar ekonomisk verksamhet → ingen avdragsrätt; momsregistrering ger inte berättigade förväntningar. | +| HFD 2024 ref. 51 | 3:12 / smitta | "Samma eller likartad verksamhet": vinstmedel överförda från Z AB till Y AB → kvalificerade andelar i Y AB. | +| HFD 2026-01-27 mål 3217-21 (Högkullen) | Moms / management fee | Underkänner Skatteverkets schablonmässiga omvärdering av management fee, efter EUD C-808/23. | +| HD T 5171-23 (2024) | Koncernbidrag civilrätt | Försiktighetsregeln tillämpas med återhållsamhet; styrelseyttrande ABL 18 kap 4 § kan inte avtalas bort. | + +**Skatteverkets ställningstaganden:** +- "Holdingbolag: avdragsrätt för mervärdesskatt", dnr 202 377677-17/111 (uppdaterat 2024-03-21 efter HFD 2024 ref. 18). +- "Avsnitt 4.2.4 om riskkapitalbolag upphör att gälla", 2024-02-02, dnr 8-2756161: PE-investeringsverksamhet = icke-ekonomisk verksamhet. +- "När motsvarar en utländsk juridisk person ett svenskt AB vid tillämpning av reglerna om näringsbetingade andelar", 2022-10 (ersätter äldre); SICAV med variabelt kapital motsvarar ej svenskt AB; Jersey/Liechtenstein-Anstalt OK efter HFD 2022 not. 3. +- "Koncernbidrag mellan svenskt företag och utländskt bolags fasta driftställe i Sverige när det utländska bolaget hör hemma utanför EES": kräver diskrimineringsförbud i skatteavtal motsv. OECD-modellen art. 24.3. +- "Förluster på fordringar på eget bolag", dnr 131 440547-09/111: omvandling fordran ↔ villkorat tillskott = avyttring. + +## 5. De tre vanligaste felmönstren + +**Felmönster 1: Passivt holding drar av ingående moms på revisor och M&A-kostnader.** +*Fel:* Holdingbolaget bokför ingående moms på 6420 Revisor, 6530 Juridik, M&A-konsulter på 2641 trots att bolaget aldrig fakturerar dotter (ingen management fee, ingen hyresupplåtelse). Skatteverket återkallar avdrag och påför skattetillägg. +*Rätt:* Utan momspliktig omsättning är holdingbolaget **inte beskattningsbar person** (4 kap 2 § ML; C-60/90 Polysar; HFD 2024 ref. 34 II). Hela kostnaden inklusive moms bokförs på kostnadskontot: ingen del på 2641. Om avsikt finns att börja fakturera dotter måste det styrkas redan vid kostnadens uppkomst (HFD 2024 ref. 18). +*Referens:* ML (2023:200) 4 kap 2 §, 13 kap 6 §; HFD 2024 ref. 34 I-II; Skatteverkets ställningstagande dnr 202 377677-17/111. + +**Felmönster 2: Skattemässigt avdrag för kapitalförlust på näringsbetingade andelar.** +*Fel:* Moderbolag säljer dotter för 1 SEK efter förluståret, bokför kapitalförlust 4 200 000 SEK på 8022 och låter den slå igenom i skattepliktigt resultat. Eller skriver ned 1310 med 8072 och drar av nedskrivningen. +*Rätt:* Kapitalförlust på näringsbetingad andel är **aldrig avdragsgill** (IL 25 a kap 5 § 2 st). Återlägg i INK2 ruta 4.7 b "Bokförda kostnader som ej ska dras av". Detsamma gäller nedskrivning. Spegelbild: kapitalvinst tas inte upp (4.7 a). Undantag finns för kapitalförlust på köpeskillingsrevers (HFD 2023 ref. 1) som faller utanför avdragsförbudet i 25 a kap 19 §. +*Referens:* IL 25 a kap 5 § (SFS 2003:224); IL 25 a kap 19 §; HFD 2023 ref. 1. + +**Felmönster 3: Ränteavdragsbegränsning ignoreras vid förvärvslån.** +*Fel:* Holdingbolaget tar förvärvslån 50 MSEK (extern bank eller koncernintern) för att köpa dotter, betalar ränta 2,5 MSEK/år och bokför fullt avdrag på 8410/8460 utan beräkning av räntenetto, EBITDA-tak eller förvärvsregelns affärsmässighet. Vid revision av Skatteverket återförs miljonbelopp. +*Rätt:* Beräkna negativt räntenetto enl. 24 kap 23 §. Pröva först **förenklingsregeln 5 MSEK** (24 kap 24 § 3 st): om räntenettot är under tröskeln behövs ingen EBITDA-beräkning. Annars beräkna **avdragsunderlaget** (≈ skattemässigt EBITDA) och tillämpa **30 %-taket**. Vid **koncerninternt** lån: pröva ytterligare 24 kap 18 § (tioprocentsregel + skatteförmånsundantag) och 24 kap 19 § (förvärvsregel, "väsentligen affärsmässigt motiverat"). Beakta EU-rättens utveckling (Lexel C-484/19; HFD 2021 ref. 68; HFD 2024 ref. 6) och **nya 24 kap 19 a §** ikraft 2026-01-01 för EES-långivare. Kvarstående negativt räntenetto sparas 6 år (24 kap 26 §). +*Referens:* IL 24 kap 21-29 §§ + 16-20 §§ (SFS 2018:1206 ikraft 2019-01-01); prop. 2025/26:20 (SkU8) ikraft 2026-01-01. + +## 6. Öppna frågor: flagga för mänsklig granskning + +1. **2026 års ränteavdragsanpassning (prop. 2025/26:20, SkU8, nya 24 kap 19 a § IL).** Ikraftträdandet 2026-01-01 är bekräftat men Skatteverkets vägledning är ännu inte färdiguppdaterad per maj 2026; tillämpning på pågående lån från före 2026 kräver granskning av övergångsregler. +2. **Skatteverkets omvärderingsställningstagande för koncerninterna tjänster (dnr 202 195456-19/111) efter Högkullen.** EUD C-808/23 (3 juli 2025) och HFD 2026-01-27 mål 3217-21 underkänner schablonmetoden men ny vägledning saknas. Omprövning av tidigare beslut inom 6-årsfristen bör övervägas men osäker praxis. +3. **3:12-reformen SFS 2025:1361: tillämpning första året.** Ikraftträdande 2026-01-01, men nya löneunderlagsregeln (civilrättslig dotterföretagsdefinition + schablonavdrag 8 IBB) saknar etablerad praxis; särskilt för holding med utländska dotterbolag (löner i utländska dotter, räknas de in?). Karenstidsförkortning 5→4 år gäller först från 2027. +4. **PE-fonder / riskkapitalbolag som holding-AB.** Skatteverket har 2024-02-02 (dnr 8-2756161) återkallat tidigare ställningstagande och behandlar PE-investeringsverksamhet som icke-ekonomisk (begränsad momsavdragsrätt). Fördelningsnyckel mellan ekonomisk/icke-ekonomisk verksamhet är inte standardiserad: kostnadsbaserad fördelning godtas (KRNG mål 5919-5220-23 efter HFD 2023 ref. 41) men inget bindande prejudikat. +5. **Höjda gränsvärden för "större företag/koncern" (SOU 2023:34).** Förslag finns men inte ikraftträtt per maj 2026. Påverkar valet K2 vs K3 för moderbolag och koncernredovisningsplikt. + +## Overflow-referenser + +För djupare detaljer hänvisas till följande filer i `references/`: + +- `references/naringsbetingade-andelar.md`: full §-genomgång IL 24 kap 32-42 §§ och 25 a kap inklusive skalbolagsdetaljer, ventilbedömning, jämförelsebeloppsberäkning. +- `references/koncernbidrag.md`: IL 35 kap kompletta villkor (helägt, slussning, EES-filial), ABL 17-18 kap värdeöverföringsmekanik, NJA 2015 s. 359 + HD T 5171-23. +- `references/ranteavdrag.md`: IL 24 kap 16-29 §§ beräkningsexempel (EBITDA-tak, förenklingsregel, kvarstående räntenetto), Lexel-doktrinens utveckling, ny 24 kap 19 a § 2026. +- `references/moms-holdingbolag.md`: EU-praxis (Polysar→Högkullen), avdragsrätt vid förvärv/avyttring/avbrutet förvärv, mervärdesskattegrupp, Skatteverkets ställningstagande dnr 202 377677-17/111 i sin helhet, omvärdering management fee post-C-808/23. +- `references/aktieagartillskott.md`: ovillkorat vs villkorat, RÅ 2009 ref. 41 omvandling, K2/K3-redovisning 2026, fordringsförluster. +- `references/312-holding.md`: IL 57 kap reformen SFS 2025:1361 i detalj, smittobedömning via dotterbolag, löneunderlagsberäkning med schablonavdrag. +- `references/kupongskatt-cfc.md`: KupL (1970:624) struktur, moder/dotterbolagsdirektivet implementering, IL 39 a kap CFC inklusive bilaga 39 a-uppdateringar. +- `references/omstrukturering.md`: IL 23, 37, 38, 38 a, 42, 48 a, 49 kap för paketeringsförsäljningar och Lex ASEA. + + +--- + +## Loadable references + +The reference files named above are NOT included in this body. When a question genuinely needs that depth, load the specific one on demand with `gnubok_load_skill`, and only then: + +- `references/312-holding.md` → `gnubok_load_skill("modifier/holding-ab/312-holding")`: 3:12-reglerna i holdingstruktur: utvidgad referens +- `references/aktieagartillskott.md` → `gnubok_load_skill("modifier/holding-ab/aktieagartillskott")`: Aktieägartillskott: utvidgad referens +- `references/koncernbidrag.md` → `gnubok_load_skill("modifier/holding-ab/koncernbidrag")`: Koncernbidrag: utvidgad referens +- `references/kupongskatt-cfc.md` → `gnubok_load_skill("modifier/holding-ab/kupongskatt-cfc")`: Kupongskatt och CFC: utvidgad referens +- `references/moms-holdingbolag.md` → `gnubok_load_skill("modifier/holding-ab/moms-holdingbolag")`: Moms för holdingbolag: utvidgad referens +- `references/naringsbetingade-andelar.md` → `gnubok_load_skill("modifier/holding-ab/naringsbetingade-andelar")`: Näringsbetingade andelar och skalbolag: utvidgad referens +- `references/omstrukturering.md` → `gnubok_load_skill("modifier/holding-ab/omstrukturering")`: Omstruktureringar: utvidgad referens +- `references/ranteavdrag.md` → `gnubok_load_skill("modifier/holding-ab/ranteavdrag")`: Ränteavdragsbegränsning: utvidgad referens +$gb$, + NULL, + 3, + 1 + ), + ( + 'modifier/holding-ab/312-holding', + 'modifier', + '3:12-reglerna i holdingstruktur: utvidgad referens', + $gb$3:12-reglerna i holdingstruktur: utvidgad referens: reference for Holdingbolag (rena ägar-/förvaltningsbolag)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1745, + '.claude\skills\modifier\holding-ab\references\312-holding.md', + $gb$# 3:12-reglerna i holdingstruktur: utvidgad referens + +Ladda när uppgiften rör kvalificerade andelar i fåmansföretagshålligning, smitta mellan dotterbolag, löneunderlag, eller 2026-reformen SFS 2025:1361. + +## 2026-reformen: SFS 2025:1361 + +Riksdagen antog 3 december 2025; **ikraft 2026-01-01** med undantag för karenstidsförkortning som gäller utlösande händelser från 2027. + +### Strukturella förändringar +| Element | Före 2026 | Från 2026 | +|---|---|---| +| Förenklingsregel grundbelopp | 2,75 IBB per företag | **4 IBB per företag** fördelat efter ägarandel | +| Schablonavdrag från löneunderlag | Finns inte | **8 IBB per delägare** subtraheras | +| Lönebaserat utrymme | 50 % av löneunderlaget | **50 % av löneunderlaget efter schablonavdrag** | +| Löneuttagskravet (57 kap 19 §) | Ägare/närstående lägstanivå (6 IBB + 5 % löneunderlag eller 9,6 IBB) | **Slopat** | +| Kapitalandelskrav ("4 %-spärren") | Krävs för löneunderlagsregeln | **Slopat** | +| Karenstid efter utlösande händelse | 5 år | **4 år** (från 2027) | +| Uppräkning av sparat utdelningsutrymme | SLR + 3 % | **Slopad** | +| Räntebaserat utrymme | SLR + 9 % på omkostnadsbelopp | **Oförändrad**, men endast på del **över 100 000 kr** | + +### Belopp 2026 (IBB = 80 600 kr) +- Grundbelopp: 4 × 80 600 = **322 400 kr per företag**. +- Schablonavdrag löneunderlag: 8 × 80 600 = **644 800 kr per delägare**. + +### Löneunderlag: ny definition (57 kap 16 § ny lydelse) +- **Civilrättslig dotterföretagsdefinition** (ABL 1 kap 11 §): innehav som ger > 50 % röster eller bestämmande inflytande. +- Löner i samtliga dotterbolag (svenska och utländska EES) räknas in i moderbolagets löneunderlag. +- **Proportionerligt** vid < 100 % ägande: vid 70 % ägande räknas 70 % av dotterbolagets löner. +- Löneunderlaget minus schablonavdrag (8 IBB per delägare) ger underlaget för lönebaserat utrymme. + +### Praktiskt: löneuttagskravets slopande +**Före 2026:** Delägaren eller närstående måste själva ta ut lön ≥ min(6 IBB + 5 % av samlat löneunderlag; 9,6 IBB) under föregående år för att holdingens andelar skulle räknas in i löneunderlaget. + +**Från 2026:** **Inget krav på ägarens egen löneuttag**. Strategin "lön i holding för att låsa upp löneunderlaget" är inte längre nödvändig. Däremot finns kvar avvägning lön vs utdelning baserat på (a) sociala avgifter vs kapitalskatt, (b) tjänstebeskattning över gränsbeloppet, (c) sjukpenning- och pensionsgrundande inkomst. + +## Smitta i holdingstruktur + +### IL 57 kap 4 §: definition av kvalificerad andel +Andel är kvalificerad om delägaren eller närstående under beskattningsåret eller något av föregående **fem (från 2027: fyra) beskattningsår** varit verksam i betydande omfattning i: +- företaget, +- annat fåmansföretag som bedriver **samma eller likartad verksamhet**, +- annat fåmansföretag i samma koncern. + +### "Samma eller likartad verksamhet": smittobedömning +Praxis: rekvisitet smittar via **överförda vinstmedel eller kapital** mellan fåmansföretag som bedriver samma eller likartad verksamhet. + +| Avgörande | Princip | +|---|---| +| RÅ 2010 ref. 11 I-V | Smitta mellan fåmansföretag via överförda vinstmedel + samma slags verksamhet. | +| HFD 2014 ref. 2 | Trädabolag: ackumulerade vinstmedel från aktivt fåmansföretag som överförts till passivt bolag → smittar; passiva bolagets andelar är kvalificerade i 5 år efter senaste aktivitet. | +| HFD 2023 ref. 11 (Intersport/Adelis) | Förvärv genom nyemission i annat fåmansföretag → inte "samma eller likartad verksamhet" om vinstmedel inte överförts. | +| HFD 2024 ref. 51 | Vinstmedel överförda från Z AB till Y AB → kvalificerade andelar i Y AB. | + +### Konsekvens för holding-AB +Om delägaren är verksam i ett dotterbolag → andelarna i holdingen är **kvalificerade**. 3:12-reglerna tillämpas på utdelning och avyttring av holding-andelarna. + +Vid komplexa koncernstrukturer: +- Verksamhet i ett dotter smittar holdingen. +- Holdingen kan vidare "smitta" en separat holding ovanför om vinstmedel överförs. +- "Trädamodellen": ägaren går ur aktiv verksamhet, väntar 4 år (från 2027) → andelarna upphör vara kvalificerade. + +## Utomståenderegeln: IL 57 kap 5 § + +Om utomstående (ej närstående till någon verksam delägare) äger ≥ **30 %** av andelarna och har rätt till utdelning, gäller normalt **inte** 3:12: utdelning och kapitalvinst beskattas i kapital till 25 %/30 % (näringsbetingad → 0 %, men det är fysisk delägare som vinner via utomstående). + +**Särskilda skäl mot tillämpning** (5 § 3 st): +- Aktieslag A/B med olika rösträtt och utdelningsrätt (HFD 2021 ref. 40 Valedo). +- Ägaravtal som ger faktiskt inflytande utöver formellt ägande. +- Fondstrukturer där utomstående utdelningsrätt är begränsad (Skeppsbron Skatt 2024-11-13). + +## Räntebaserat utrymme: IL 57 kap 11 § + +Räntebaserat utrymme = (SLR + 9 %) × omkostnadsbeloppet på andelarna. + +**Från 2026:** omkostnadsbelopp **överstigande 100 000 kr** ger räntebaserat utrymme. Mindre belopp omfattas inte. Praktisk effekt: små holdingbolag med små anskaffningsvärden får inget räntebaserat utrymme. + +**Höjt omkostnadsbelopp:** alternativ regel (57 kap 11 a §) med indexering, samt regel för andelar förvärvade före 1990 (alternativregeln). + +## Praktiska felmönster + +**Felmönster A: Trädamodellen tillämpas utan vänta 4 år.** +Ägaren lägger holdingen "vilande" och tar utdelning efter 3 år: andelarna är fortfarande kvalificerade. Krav: full karenstid (5 år före 2027 utlösande, 4 år för utlösande från 2027). Verksam i något annat fåmansföretag i samma eller likartad verksamhet bryter karenstiden. + +**Felmönster B: Löneunderlag beräknas på koncernens konsoliderade löner utan proportionering.** +Om holdingen äger 60 % av ett dotter: endast **60 % av dotterbolagets löner** räknas in. Felaktig 100 %-beräkning leder till för högt gränsbelopp. + +**Felmönster C: Schablonavdrag 8 IBB tillämpas på koncernnivå i stället för per delägare.** +Schablonavdraget är **per delägare**: i ett företag med 3 verksamma delägare blir totalt avdrag 24 IBB = 1 934 400 kr 2026 från löneunderlaget innan det multipliceras med 50 %. + +**Felmönster D: Löneuttagskravet tillämpas felaktigt på 2026 års räkenskapsår.** +Från 2026 ska inget löneuttagskrav prövas. Tidigare praxis (verifiera lönen, K10-bilaga med löneunderlagsberäkning) ändras: K10 förenklas men löneunderlaget måste fortfarande dokumenteras. + +**Felmönster E: Smittobedömning ignorerar HFD 2024 ref. 51.** +Vinstmedel överförda från ett fåmansföretag till ett annat smittar: även om bolagen formellt bedriver olika branscher kan rekvisitet "samma eller likartad verksamhet" uppfyllas via kapitalöverföring. + +## Lagrum och källor + +- IL (1999:1229) 57 kap 1-35 §§: ny lydelse SFS 2025:1361 ikraft 2026-01-01. +- ABL (2005:551) 1 kap 11 § (dotterföretagsdefinition). +- HFD: RÅ 2010 ref. 11 I-V; HFD 2014 ref. 2; HFD 2021 ref. 40 (Valedo); HFD 2023 ref. 11 (Intersport/Adelis); HFD 2024 ref. 51. +- Skatteverkets rättsliga vägledning "Beräkning av gränsbelopp" samt "Kvalificerade andelar". +- Forvis Mazars sammanfattning 2025-12-03 av riksdagens antagande. +$gb$, + 'modifier/holding-ab', + 2, + 1 + ), + ( + 'modifier/holding-ab/aktieagartillskott', + 'modifier', + 'Aktieägartillskott: utvidgad referens', + $gb$Aktieägartillskott: utvidgad referens: reference for Holdingbolag (rena ägar-/förvaltningsbolag)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1732, + '.claude\skills\modifier\holding-ab\references\aktieagartillskott.md', + $gb$# Aktieägartillskott: utvidgad referens + +Ladda när uppgiften rör skillnaden ovillkorat/villkorat, omvandling, fordringsförluster, eller K2/K3-redovisning från 2026. + +## Civilrättslig grund + +Aktieägartillskott är **inte reglerat i ABL** men civilrättsligt erkänt sedan länge (NJA 1988 s. 620; NJA 2009 s. 250). Klassificeras under fritt eget kapital hos mottagaren. + +## Två huvudtyper + +### Ovillkorat tillskott +- Ingen återbetalningsrätt avtalad. +- Återbetalning till givaren = **vinstutdelning** (kräver utdelningsbara medel, ABL 17-18 kap; utdelningsbeskattas hos fysisk ägare som inkomst av kapital eller som tjänst om kvalificerade andelar). +- **Givaren (AB):** D 1310/1312 Andelar i koncernföretag (ökar anskaffningsvärdet) / K bank eller K 2860. +- **Mottagaren:** D bank / K 2093 Erhållna aktieägartillskott. +- Skattemässigt: ökar omkostnadsbeloppet vid framtida avyttring av andelarna (IL 44 kap 14 §). Vid avyttring av näringsbetingade andelar saknar detta praktisk betydelse eftersom kapitalvinst är skattefri och förlust ej avdragsgill. + +### Villkorat tillskott +- Återbetalningsrätt avtalad, ofta villkorad av framtida utdelningsbara medel. +- Givaren har en **fordran** på framtida värdeöverföring: ej ägarstärkning. +- **Givaren (AB):** D 1380 Andra långfristiga fordringar / K bank. Inte ökning av andelsvärde. +- **Mottagaren:** D bank / K 2093 (samma som ovillkorat, civilrättsligt fritt EK). +- Återbetalning **skattefri** hos givaren intill omkostnadsbeloppet (RÅ 1988 ref. 65; RÅ 2009 ref. 41). +- Återbetalning **över** omkostnadsbeloppet → skattepliktig kapitalvinst. + +## Omvandling villkorat → ovillkorat + +**RÅ 2009 ref. 41:** Omvandling av villkorat till ovillkorat tillskott är en **avyttring** av fordringen. Beskattningskonsekvens hos givaren beroende på fordringens marknadsvärde vid omvandlingstidpunkten: + +- Marknadsvärde = nominellt → ingen vinst, ingen förlust. Omkostnadsbeloppet på andelarna ökas med nominellt belopp. +- Marknadsvärde < nominellt (typiskt: mottagaren är på obestånd) → kapitalförlust på fordringen. **Aktiefållans avdragsförbud (IL 48 kap 26 §) tillämpas** om fordringen är delägarrättsrelaterad. Vid förlust på vanlig fordran på koncernföretag: bedömning enligt 24 kap 1 § / 25 kap 7-8 §§. + +**Skatteverkets ställningstagande "Förluster på fordringar på eget bolag" (dnr 131 440547-09/111):** omvandling = avyttring. Förlust avdragsgill i den utsträckning fordringen var skattemässigt en separat tillgång. + +## Återbetalning av villkorat tillskott + +**RÅ 1988 ref. 65:** Återbetalning är **inte utdelning** civilrättsligt om den sker enligt det avtalade villkoret och tillskottsavtalet inte hade utdelningskaraktär. Skattemässigt: skattefri intäkt hos givaren intill omkostnadsbeloppet. + +**Krav:** +1. Tillskottsavtalet måste vara dokumenterat **innan** tillskottet lämnas. +2. Återbetalningen måste rymmas inom utdelningsbara medel hos mottagaren (ABL 17 kap 3 §). +3. Formellt beslut om återbetalning på bolagsstämma. + +Återbetalning av ovillkorat tillskott är **alltid utdelning** civilrättsligt och skattemässigt. + +## Fordringsförluster på villkorat tillskott + +Om mottagaren går i konkurs/likvidation och villkorat tillskott aldrig återbetalas: +- Förlusten är **kapitalförlust på fordran**. +- Avdragsrätten beror på om fordringen är delägarrätt eller fordringsrätt. +- **Aktiefållan (IL 48 kap 26 §):** om fordringen är skatterättsligt en delägarrätt (vissa konvertibler, kapitalandelslån) → endast kvittning mot delägarrätter. +- Om fordringen klassas som **fordring på koncernföretag** med icke-marknadsmässiga villkor: avdragsförbud enligt **25 a kap 19 §** om underliggande tillgång är näringsbetingad andel (HFD 2023 ref. 1 gör avgränsning för köpeskillingsreverser). + +**RÅ 2008 ref. 24:** Förlust på villkorat tillskott avdragsgill om verklig och definitiv (mottagaren konkurs, likvidation slutförd). Belastas av aktiefållan. + +## K2/K3-redovisning + +### Tidigare regel (gällde t.o.m. räkenskapsår 2025) +**BFN U 97:2** (upphävd) tillät redovisning av tillskott på det år utfästelse lämnades **mellan balansdagen och årsredovisningens upprättande**, om utfästelsen var bindande. + +### Ny regel (räkenskapsår från 2026) +BFN beslut 2025-06-16: +- **K2 19.5** och **K3 11.10-11.12**: Aktieägartillskott redovisas på det räkenskapsår **utfästelsen lämnas**. Utfästelsen måste vara lämnad **senast på balansdagen**. +- Tillskott utfäst efter balansdagen redovisas först nästa räkenskapsår. +- Effekt: möjligheten att "back-datera" tillskott till räddning av tekniska kapitaltäckning är borttagen: kontrollbalansräkningsfrågor måste hanteras före 31/12. + +### Klassificering hos mottagaren +- **2093 Erhållna aktieägartillskott**: fritt eget kapital. Visas under "Annat fritt eget kapital" i balansräkningen (K2 4.12; K3 18.5). +- Skattefri inkomst: påverkar inte resultaträkningen, går direkt till EK. + +### Klassificering hos givaren +- **Ovillkorat:** 1310/1312 Andelar i koncernföretag: ökar anskaffningsvärdet. +- **Villkorat:** 1380 Andra långfristiga fordringar: separat fordring. + +## Praktiska felmönster + +**Felmönster A: Ovillkorat tillskott bokförs som fordran (1380) i stället för ökning av andelsvärde.** +Effekt: vid framtida avyttring av andelarna kommer omkostnadsbeloppet att vara för lågt → felaktig kapitalvinst (om näringsbetingad: ingen praktisk skatteeffekt, men felaktig redovisning av andelarnas värde). Felklassificeringen kan också ha utdelningsbeskattningseffekter om "fordringen" återbetalas. + +**Felmönster B: Tillskott bokförs på 2093 hos givaren.** +2093 är endast **mottagarens** konto. Givaren ska bokföra mot 1310/1312 (ovillkorat) eller 1380 (villkorat). + +**Felmönster C: Återbetalning av ovillkorat tillskott bokförs som återbetalning av fordran.** +Återbetalning av ovillkorat tillskott är **vinstutdelning** civilrättsligt: kräver utdelningsbara medel, stämmobeslut, utdelningsbeskattning hos ägaren. Bokförs som utdelning, inte som återbetalning av fordran. + +**Felmönster D: Villkorat tillskott räknas in i andelens omkostnadsbelopp.** +Villkorat tillskott är **fordran**: det ökar inte omkostnadsbeloppet på aktierna. Vid avyttring av aktierna blir omkostnadsbeloppet enbart anskaffningsvärdet (eventuellt plus ovillkorade tillskott). Den villkorade fordringen avyttras separat. + +**Felmönster E: Skattekonsekvens av villkorat tillskott jämställs med ovillkorat.** +Skattefri återbetalning av villkorat (RÅ 1988 ref. 65) finns inte för ovillkorat. Felblandning ger upptaxering hos givaren. + +## Lagrum och källor + +- Civilrättslig grund: NJA 1988 s. 620; NJA 2009 s. 250. +- Skatterätt: IL 44 kap 14 §; IL 48 kap 26 § (aktiefållan); IL 25 a kap 5, 19 §§. +- HFD/RÅ: RÅ 1988 ref. 65; RÅ 2008 ref. 24; RÅ 2009 ref. 41. +- Skatteverkets ställningstagande "Förluster på fordringar på eget bolag" dnr 131 440547-09/111. +- Bokföring: K2 BFNAR 2016:10 punkt 19.5 (ny lydelse 2026); K3 BFNAR 2012:1 punkt 11.10-11.12 (ny lydelse 2026). BFN beslut 2025-06-16. +- BFN U 97:2, upphävd. +$gb$, + 'modifier/holding-ab', + 2, + 1 + ), + ( + 'modifier/holding-ab/koncernbidrag', + 'modifier', + 'Koncernbidrag: utvidgad referens', + $gb$Koncernbidrag: utvidgad referens: reference for Holdingbolag (rena ägar-/förvaltningsbolag)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1909, + '.claude\skills\modifier\holding-ab\references\koncernbidrag.md', + $gb$# Koncernbidrag: utvidgad referens + +Ladda när uppgiften specifikt rör koncernbidragens skatte- eller civilrättsliga mekanik, slussning, EES-filialer, eller bokföringsmässig klassificering. + +## IL 35 kap: skattemässig avdragsrätt + +### 35 kap 1 § IL +Avdrag hos givaren, intäkt hos mottagaren under förutsättning att **värdeöverföring** sker senast den dag inkomstdeklarationen ska lämnas (kodifierat SFS 2016:1239 ikraft 2017-01-01; tidigare praxis krävde överföring under räkenskapsåret). + +### 35 kap 2 § IL: moderföretag +Definition: svenskt AB, svensk ekonomisk förening, svensk sparbank, svensk ömsesidig försäkringsförening, eller svensk stiftelse/ideell förening som inte är skattebefriad. Ägande **> 90 %** av andelarna i dottern. + +### 35 kap 2 a § IL: EES-bolag +Utländskt EES-bolag som motsvarar svenskt AB jämställs om det är skattskyldigt i Sverige för verksamhet hos fast driftställe. **Skatteverkets ställningstagande:** EES-bolag utanför Sverige som äger svenskt dotter kan inte ge koncernbidrag till det svenska dottret om inte verksamheten bedrivs här (Marks & Spencer-doktrinen begränsad). + +### 35 kap 3 § IL: förutsättningar (samtliga krävs) +1. Varken givare eller mottagare är privatbostadsföretag eller **investmentföretag** (IL 39 kap). +2. Koncernbidraget redovisas **öppet** i båda bolagens inkomstdeklarationer för samma taxeringsår. +3. Dottern har varit **helägd (>90%) under hela båda bolagens beskattningsår**, eller sedan dottern började bedriva näringsverksamhet. +4. Om mottagaren är moder och dottern är givare: utdelning under beskattningsåret från dottern till modern hade **inte varit skattepliktig** (näringsbetingad-test). +5. Mottagarens hemvist enligt skatteavtal är inte i annan stat (utöver EES-filialundantag). + +### 35 kap 4 § IL: fusionsregel +Koncernbidrag kan ges/tas trots att helägt-kravet inte är uppfyllt om bolagsstrukturen kan ledas tillbaka till en kvalificerad koncern via mellanled. + +### 35 kap 5 § IL: slussning mellan systrar +Bidrag mellan systrar (S1 och S2) godtas om bidrag genom MF (S1 → MF → S2) skulle ha varit avdragsgillt steg för steg. Vanlig konstruktion: undvik dubbel resultatpåverkan i mellanledet. + +### 35 kap 6 § IL: fusionsfall +Specialregel vid fusion. + +## Civilrättslig grund: ABL 17 + 18 kap + +### Värdeöverföringsdefinition (ABL 17 kap 1 §) +Koncernbidrag = "annan affärshändelse som medför att bolagets förmögenhet minskar och inte har rent affärsmässig karaktär för bolaget" → värdeöverföring. + +### Beloppsspärr (ABL 17 kap 3 § 1 st) +Värdeöverföring får inte ske om det efter överföringen saknas full täckning för bolagets bundna egna kapital. Beräkning på senaste fastställda balansräkning. + +### Försiktighetsregeln (ABL 17 kap 3 § 2 st) +Värdeöverföring får ske endast om den med hänsyn till verksamhetens art, omfattning och risker, samt konsolideringsbehov, likviditet och ställning i övrigt framstår som **försvarlig**. + +**HD T 5171-23 (2024):** Försiktighetsregeln tillämpas med **återhållsamhet**: styrelsens bedömning får ifrågasättas bara vid uppenbart oförsvarliga beslut. Standard för "försvarlig" är hög för aktivt försvar av beslutet, lägre för domstolens omprövning. + +### Styrelseyttrande (ABL 18 kap 4 §) +Vid värdeöverföring som inte är ordinarie utdelning ska styrelsen avge yttrande över **förenligheten** med 17 kap 3 §. Yttrandet ska bifogas stämmoprotokollet. **NJA 2015 s. 359:** styrelseyttrandets formkrav är **tvingande**: kan inte avtalas bort, inte ens med enhälligt aktieägarbeslut. Underlåtenhet → värdeöverföringen kan återkallas via klandertalan. + +### Beslutsordning +Vid värdeöverföring under räkenskapsåret som inte motsvarar utdelning på fastställd årsredovisning: +- **Förskottsutdelning/efterutdelning** enligt ABL 18 kap 4 § kräver extra bolagsstämma. +- **Koncernbidrag** behandlas formellt som värdeöverföring → bolagsstämmobeslut (eller skriftligt aktieägarbeslut, ABL 7 kap 6 §) + styrelseyttrande. +- Praktisk lösning: stämmobeslut vid årsstämman där koncernbidraget för bokslutsperioden fastställs (öppen redovisning). + +## Bokföring + +### Givaren (under K2/K3) +- **Resultatpåverkande, bokslutsdisposition:** D 8830 Lämnade koncernbidrag / K 2860 Kortfristiga skulder till koncernföretag (alt. K bank vid kontant reglering). Visas i RR som "Lämnat koncernbidrag" under "Bokslutsdispositioner". +- **Mot fritt eget kapital (endast K3, sällsynt utanför börsnoterat):** D 2091 Balanserad vinst eller förlust / K 2860. Förutsätter att koncernbidraget klassificeras som värdeöverföring direkt mot EK. + +### Mottagaren +- D 1660/1662 Kortfristiga fordringar hos koncernföretag (alt. D bank) / K 8820 Erhållna koncernbidrag. Visas som "Erhållna koncernbidrag" under "Bokslutsdispositioner". + +### Periodisering +Koncernbidrag periodiseras till samma räkenskapsår som det skattemässigt avser, oavsett när själva utbetalningen sker. Värdeöverföring civilrättsligt får dock inte föregå formellt beslut. + +## EES-relaterade specialfall + +### Koncernbidrag till EES-filial i Sverige (35 kap 2 a §) +Tillåtet om det utländska EES-bolaget motsvarar svenskt AB och driftstället är skattskyldigt i Sverige för den verksamhet bidraget hänför sig till. **Skatteverkets ställningstagande "Koncernbidrag till svensk fast driftställe när huvudbolaget är utanför EES":** kräver diskrimineringsklausul i skatteavtal motsv. OECD-modellen art. 24.3. + +### Koncernavdrag IL 35 a kap (slutliga förluster i EES-dotter) +Separat regelverk efter Marks & Spencer C-446/03; ej koncernbidrag i traditionell mening. Kodifiering SFS 2010:353. Snäv: kräver direkt ägt EES-dotter, slutlig likvidation, modern är inte investmentföretag. **HFD 2019 not. 38 (Holmen):** avdrag medgavs inte för indirekt ägt dotter: direkt-kravet tolkas strikt. + +## Praxis senaste 5 åren + +| Avgörande | Princip | +|---|---| +| HFD 2021 ref. 66 | Ändrad ägarstruktur inom koncern (omstrukturering) utlöser inte koncernbidragsspärr enl. 40 kap 10 § 3 st om bestämmande inflytande består. | +| HFD 2019 not. 38 (Holmen) | Direkt-kravet i 35 a kap koncernavdrag tolkas strikt. | +| HD T 5171-23 (2024) | Försiktighetsregeln tillämpas med återhållsamhet; styrelseyttrande oavtalbart. | +| NJA 2015 s. 359 | Styrelseyttrande ABL 18 kap 4 § är tvingande. | +| HFD 2009 not. 33 | Värdeöverföring senast på inkomstdeklarationsdagen accepterad: sedermera kodifierad. | + +## Praktiska felmönster + +**Felmönster: Koncernbidrag bokförs utan formellt stämmobeslut.** +Bidraget bokas på 8820/8830 vid bokslutet utan att bolagsstämma fattat värdeöverföringsbeslut och utan styrelseyttrande. Civilrättsligt ogiltigt → kan klandras av aktieägare/borgenär; om bidraget gjort bolaget oförmöget att betala skulder kan styrelsen bli skadeståndsskyldig (ABL 17 kap 6-7 §§ återbäringsskyldighet + 29 kap 1 § styrelseansvar). Skattemässigt avdrag kan vägras av Skatteverket om civilrättslig grund saknas (HFD-praxis: värdeöverföring måste vara civilrättsligt giltig för skattemässigt avdrag). + +**Felmönster: Koncernbidrag mellan systerbolag bokförs utan slussning genom MF.** +S1 ger 10 MSEK till S2 utan att gå via MF. Skattemässigt OK enligt 35 kap 5 § om förutsättningarna för slussning är uppfyllda. Civilrättsligt: värdeöverföringen sker direkt mellan S1 och S2 (inte via MF) → kräver formellt beslut hos S1 och beaktning av ABL 17 kap 3 § hos S1. + +**Felmönster: Investmentföretag försöker ge eller ta emot koncernbidrag.** +Investmentföretag (IL 39 kap 15 §) är **utesluten** från koncernbidragssystemet (35 kap 3 § p. 1). Holding-AB klassas sällan som investmentföretag (kräver registrering hos Finansinspektionen som AIF eller motsvarande, och fler än tio fysiska delägare med spridd ägarstruktur) men kontrollera klassificering. +$gb$, + 'modifier/holding-ab', + 2, + 1 + ), + ( + 'modifier/holding-ab/kupongskatt-cfc', + 'modifier', + 'Kupongskatt och CFC: utvidgad referens', + $gb$Kupongskatt och CFC: utvidgad referens: reference for Holdingbolag (rena ägar-/förvaltningsbolag)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1857, + '.claude\skills\modifier\holding-ab\references\kupongskatt-cfc.md', + $gb$# Kupongskatt och CFC: utvidgad referens + +Ladda när uppgiften rör utdelning till utländsk ägare, källskatt vid utbetalning, eller utländska lågbeskattade dotterbolag. + +## Kupongskatt: KupL (1970:624) + +### Tillämpning +Statlig **källskatt** på utdelning från svenskt AB/svensk värdepappersfond/svensk investmentförening till **begränsat skattskyldig** mottagare (KupL 1 §). Innehålls av bolaget vid utbetalning och betalas in till Skatteverket. + +### Skattesats (KupL 5 §) +**30 %** på utdelningens bruttobelopp. Reduceras genom dubbelbeskattningsavtal (typiskt 15 %, 10 %, 5 % eller 0 % beroende på avtal och ägarstruktur). + +### Undantag: moder/dotterbolagsdirektivet + +**KupL 4 § 5 st:** Undantag enligt direktiv 2011/96/EU. Förutsättningar: +- Mottagaren är **EU-juridisk person** enligt direktivets art. 2 (svensk motsvarighet: AB). +- Ägarandel **≥ 10 %** av kapitalet. +- Mottagaren skattskyldig i sin hemstat för bolagsinkomst utan möjlighet till undantag/återbetalning för utdelningen. + +**KupL 4 § 6-7 st:** Undantag för **EES-bolag** som motsvarar svenskt AB enligt IL 24 kap 32 § 1-4 och 33 § 1 st 1 eller 2; **innehavstid ≥ 1 år** (jämfört med 24 kap 40 § näringsbetingade andelar i svenskt sammanhang). + +### Praktiska situationer + +| Situation | Kupongskatt | Lagrum | +|---|---|---| +| Svensk holding ger utdelning till svensk fysisk ägare | Ingen kupongskatt (begränsat skattskyldighet saknas) | KupL 1 § | +| Svensk holding → svensk dottermoder | Ingen kupongskatt | KupL 1 § | +| Svensk holding → EU-moder med ≥ 10 % | 0 % | KupL 4 § 5 st | +| Svensk holding → EES-moder utanför EU med ≥ 10 % | 0 % efter 1 års innehav | KupL 4 § 6-7 st | +| Svensk holding → moder i tredje land (USA, UK, Schweiz) | Reducerat enligt skatteavtal: typiskt 5 % vid ≥ 10 % ägande | Skatteavtal | +| Svensk holding → fysisk person utomlands | Reducerat enligt skatteavtal: typiskt 15 % | Skatteavtal | + +### Återbetalning +Vid felaktigt innehållen källskatt kan utländsk mottagare ansöka om återbetalning hos Skatteverket inom 5 år (KupL 27 §). + +### Skatteavtalsspecifika ägartrösklar + +| Land | Tröskel för 0/5 % | Avtalsår | +|---|---|---| +| USA | 5 % vid ≥ 10 % ägande | 1994 | +| Storbritannien | 5 % vid ≥ 10 % ägande | 2015 | +| Schweiz | 0 % vid ≥ 10 % ägande och 1 års innehav | 2011-protokoll | +| Norge | 0 % vid ≥ 10 % ägande | Nordiska skatteavtalet | +| Tyskland | 5 % vid ≥ 10 % ägande | 1992 | + +(Kontrollera aktuell version av respektive avtal.) + +## CFC: IL 39 a kap + +### Tillämpningsområde: IL 39 a kap 2 § +Svensk obegränsat skattskyldig **delägare** (fysisk eller juridisk) i utländsk juridisk person beskattas löpande för sin andel av nettoresultatet om bolaget är **lågbeskattat**, oavsett om utdelning skett. + +**Delägare:** > 25 % av kapital eller röster, ensam eller tillsammans med närstående/intressegemenskap. + +### Lågbeskattning: IL 39 a kap 5 § +Lågbeskattad om **utländsk skatt < 55 % av svensk bolagsskatt** på samma inkomst. + +Svensk bolagsskatt 2026: **20,6 %**. Tröskel: 55 % × 20,6 % = **≈ 11,33 %**. + +Beräkningen utgår från **hypotetisk svensk skatt** på inkomsten enligt svenska regler, jämfört med faktisk utländsk skatt på samma inkomst. + +### Vita listan: IL 39 a kap 7 § + bilaga 39 a +Bilaga 39 a anger länder och inkomstkategorier som **undantas** från CFC-beskattning. Listan har två kategorier: + +**Sektion 1:** Stater där all inkomst hos juridisk person är undantagen (typiskt: EU-medlemsstater med normal bolagsskatt). + +**Sektion 2:** Stater där inkomst undantas **utom** specifika inkomstkategorier (typiskt: stater med särskilda lågbeskattningsregimer för vissa typer av inkomst, patentboxar, holdingregimer, IP-regimer). + +Bilagan uppdateras löpande genom regeringsbeslut. + +### EES-undantaget: IL 39 a kap 7 a § +EES-bolag undantas från CFC-beskattning om de utgör **verklig etablering** med affärsmässigt motiverad verksamhet. Implementering av C-196/04 Cadbury Schweppes (Skatteverket vägledning baserat på SFS 2007:1254). + +**Kriterier för "verklig etablering":** +- Substansell verksamhet (lokal, personal, utrustning). +- Affärsmässigt motiv (ej skattearbitrage som primärt syfte). +- Ekonomisk verksamhet i den mening som anges i momsdirektivet. + +### ATAD-anpassningar +**SFS 2018:1208 (prop. 2017/18:296):** anpassning av CFC-reglerna till EU:s ATAD-direktiv (Anti-Tax Avoidance Directive 2016/1164). Effekter: +- Utvidgad definition av "lågbeskattad inkomst" till vissa passiva inkomstkategorier även om effektiv skatt ≥ 11,33 %. +- Skärpta krav på substans i undantag. + +### Hybridregler: IL 24 b kap (SFS 2019:1233) +Separat regelverk för **hybrida missmatchningar** (samma kostnad dras av i två länder, eller inkomst inkluderas inte i något land). Påverkar koncerninterna transaktioner med utländska dotter. + +## Praktiska scenarier för holding-AB + +### Holding med dotter i lågskatteland +- Cypern (12,5 %): inte lågbeskattat efter ATAD-justeringar för aktiv inkomst; passiva inkomster (royalty, ränta utan substans) kan träffas. +- Malta (35 % nominellt, ofta 5 % effektivt via refund): träffas typiskt. +- Liechtenstein (12,5 %): EES → om verklig etablering → undantag. +- BVI, Cayman (0 %): träffas regelmässigt utom vita listan-undantag. + +### Holding med EU-dotter +Direktiv 2011/96/EU: utdelning från EU-dotter till svensk moder är **skattefri** (om näringsbetingad enligt IL 24 kap) **och** EU-dottern undantas från egen källskatt om svenskt AB är moder. Symetri mellan båda regler. + +### Kupongskatt vid utflyttning av holding +Om svensk holding flyttar säte/verklig ledning till annan EES-stat: utflyttningsbeskattning enligt IL 22 kap 7 § (uttagsbeskattning) + IL 17 a kap (anstånd för EES-utflyttning enligt C-371/10 National Grid Indus). + +## Praktiska felmönster + +**Felmönster A: Kupongskatt innehålls inte vid utdelning till nordisk moder.** +Norden har inom Nordiska skatteavtalet 0 % källskatt vid > 10 % ägande, **men** innehållskravet i KupL gäller även när skattesatsen är 0 %: bolaget måste ha intyg från mottagaren om hemvist (typiskt formuläret K10 eller likvärdigt) före utbetalningen. Vid utebliven dokumentation: 30 % innehålls och återbetalning sker via mottagaren senare. + +**Felmönster B: Verklig etablering antas finnas i lågskatteland utan substanstest.** +Brevlådedotter på Cypern utan personal och kontor: inte verklig etablering → CFC-beskattning. Substanskrav: lokal personal som faktiskt fattar beslut, lokal infrastruktur, lokal närvaro. + +**Felmönster C: Bilaga 39 a kontrolleras inte vid förvärv av utländskt dotter.** +Bilagan uppdateras kvartalsvis/halvårsvis. Vid förvärv av utländskt dotter ska aktuell version av bilagan granskas: tidigare undantagna regimer kan ha lagts till på listan (typiskt: IP-regimer, holdingregimer som ändrats). + +**Felmönster D: Kupongskatt antas vara avdragsgill i bolaget.** +Kupongskatt innehålls av bolaget för **mottagarens** räkning: det är inte bolagets egen kostnad utan en del av utdelningen som vidarebefordras till Skatteverket. Bokförs över balansräkningen (2710 Personalskatt → här används analogt 2710 eller specifik post för innehållen kupongskatt mot 1930 vid betalning), inte som kostnad i RR. + +## Lagrum och källor + +- KupL (1970:624): kupongskatt. +- IL (1999:1229) 39 a kap: CFC. +- IL 24 b kap: hybridregler (SFS 2019:1233). +- Direktiv 2011/96/EU: moder/dotterbolagsdirektivet. +- Direktiv 2016/1164/EU (ATAD). +- C-196/04 Cadbury Schweppes. +- Skatteverkets rättsliga vägledning "Beskattning av CFC-bolag och dess delägare" och "Kupongskatt". +$gb$, + 'modifier/holding-ab', + 2, + 1 + ), + ( + 'modifier/holding-ab/moms-holdingbolag', + 'modifier', + 'Moms för holdingbolag: utvidgad referens', + $gb$Moms för holdingbolag: utvidgad referens: reference for Holdingbolag (rena ägar-/förvaltningsbolag)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 2159, + '.claude\skills\modifier\holding-ab\references\moms-holdingbolag.md', + $gb$# Moms för holdingbolag: utvidgad referens + +Ladda när uppgiften rör avdragsrätt för ingående moms i holdingbolag, M&A-kostnader, försäljning av dotter, mervärdesskattegrupp, eller omvärdering av management fee. + +## Grundprincip: när är holding "beskattningsbar person"? + +ML (2023:200) 4 kap 2 § (motsv. art. 9.1 momsdirektivet 2006/112/EG): "den som självständigt bedriver en ekonomisk verksamhet, oberoende av dess syfte eller resultat". + +**Enbart innehav av andelar är inte ekonomisk verksamhet** (C-60/90 Polysar; C-142/99 Floridienne; C-28/16 MVM; HFD 2024 ref. 34 II). Passivt holdingbolag är därför inte beskattningsbar person → inget momsavdrag. + +**Aktivt holdingbolag** (som "direkt eller indirekt deltar i förvaltningen av dotterbolagen" genom att tillhandahålla momspliktiga tjänster (administrativa, ekonomiska, kommersiella, tekniska) mot ersättning) är beskattningsbar person (C-142/99 Floridienne; C-16/00 Cibo; C-320/17 Marle Participations). + +## EU-praxis: tidslinje + +| Mål | År | Princip | +|---|---|---| +| C-60/90 Polysar | 1991 | Passivt holding = ej beskattningsbar person. | +| C-142/99 Floridienne | 2000 | Aktivt holding via management services = beskattningsbar. | +| C-16/00 Cibo | 2001 | M&A-kostnader vid förvärv = allmänna omkostnader → full avdragsrätt om förvärv leder till aktiv förvaltning. | +| C-4/94 BLP | 1995 | Försäljning av dotterandelar = undantagen finansiell transaktion → direkt hänförliga kostnader ej avdragsgilla. | +| C-29/08 SKF | 2009 | Försäljningskostnader kan vara allmänna omkostnader om de inte övervältras på köparen. | +| C-108/14 Larentia + Minerva | 2015 | Pro rata-avdrag för holding med delvis aktiv/delvis passiv verksamhet. | +| C-28/16 MVM | 2017 | "Aktiv" förvaltning utan momspliktig ersättning räcker inte. | +| C-320/17 Marle Participations | 2018 | Uthyrning av fastighet till dotter räknas som aktiv förvaltning. | +| C-42/19 Sonaecom | 2020 | Avbrutet förvärv → avdrag möjligt om avsikt styrkt, men faktisk skattefri användning av kapital (vidareutlåning) trumpar avsikt. | +| C-249/17 Ryanair | 2018 | Avbrutet aktieförvärv → avdrag om förvärvsavsikt fanns för aktiv förvaltning. | +| C-7/13 Skandia | 2014 | Mervärdesskattegrupp endast inom samma medlemsstat. | +| C-812/19 Danske Bank | 2021 | Filial och huvudkontor i olika medlemsstater = separata beskattningsbara personer om huvudkontor är medlem i momsgrupp. | +| **C-808/23 Högkullen** | 2025-07-03 | Skatteverket kan inte schablonmässigt omvärdera management fee till självkostnad. Koncerninterna förvaltningstjänster är inte ett odelbart tillhandahållande; marknadsvärde per tjänst. | + +## Svensk praxis: senaste 5 åren + +| Avgörande | Princip | +|---|---| +| HFD 2023 ref. 41 (Volvo AB) | Aktivt holdings försäljningskostnader för dotterandelar är allmänna omkostnader → full avdragsrätt om kostnaderna inte övervältras på köparen och syftet är att effektivisera kvarvarande verksamhet. | +| HFD 2024 ref. 18 (Lamiflex) | Avdragsrätt vid förvärv av "rent" holding som förvaltar dotterdotter: kedjan moder → dotter → dotterdotter bryter inte avdragsrätten om förvaltningstjänster fakturerades nedåt i kedjan. | +| HFD 2024 ref. 34 I-II | Bolag som inte fakturerade dotter och inte vidarefakturerade kostnader saknade ekonomisk verksamhet → ingen avdragsrätt; momsregistreringen i sig skapar inte berättigade förväntningar. | +| HFD 2026-01-27 mål 3217-21 (Högkullen, slutligt avgörande) | Implementerar C-808/23. Schablonmässig omvärdering underkänd. | +| KRNG mål 5919-5220-23 (2024-04-23) | Återförvisning efter HFD 2023 ref. 41: fördelningsnyckel mellan momspliktig/skattefri verksamhet ska bestämmas på skälig grund (kostnadsbaserad nyckel godtagen). | + +## Avdragsrätt i typiska situationer + +| Situation | Avdragsrätt | Lagrum/praxis | +|---|---|---| +| Passivt holding, ingen fakturering | Noll | C-60/90; HFD 2024 ref. 34 II | +| Aktivt holding, full förvaltning, momspliktig fee | Full | Cibo C-16/00; Marle C-320/17 | +| Förvärvskostnader (DD, juridik, M&A-konsult) vid förvärv som leder till aktiv förvaltning | Full | Cibo C-16/00; HFD 2024 ref. 18 | +| Förvärvskostnader, avbrutet förvärv, avsikt om aktiv förvaltning styrkt | Avdrag medges normalt | Ryanair C-249/17; Sonaecom C-42/19 (men beakta faktisk användning av kapital) | +| Försäljningskostnader vid avyttring av dotter: direkt hänförliga, övervältras på köparen | Ingen | BLP C-4/94 | +| Försäljningskostnader: allmänna omkostnader, inte övervältrade | Full (om aktiv förvaltning) | SKF C-29/08; HFD 2023 ref. 41 | +| Holding som blandat förvaltar aktivt (mgmt fee) och passivt (rent ägande) | Pro rata | Larentia C-108/14 | +| PE-fond som investerar i portföljbolag utan systematisk förvaltning | Begränsad/ingen | Skatteverkets ställningstagande 2024-02-02 dnr 8-2756161 | + +## Mervärdesskattegrupp: ML 4 kap 7-14 §§ + +**Förutsättningar:** +- Endast deltagare som tillhandahåller eller mottar tjänster som **undantagna från skatteplikt** inom finansiell sektor (10 kap 33 § om financial services), eller medlemmar med kommissionärsförhållande (4 kap 8 §). +- **Svensk fast etableringsställe** (4 kap 9 §; Skandia, Danske Bank). +- **Trippel-samband (4 kap 10 §):** finansiellt + ekonomiskt + organisatoriskt. + +**Praktisk räckvidd:** sällsynt utanför banker, försäkringsbolag, börsmäklare. Passivt holding kan inte ingå (är inte beskattningsbar person). + +## Omvärdering av management fee: efter Högkullen + +Före Högkullen tillämpade Skatteverket regelmässigt ML 7 kap 3 a § (gamla; nu 8 kap 6 § nya ML) för att omvärdera koncerninterna förvaltningstjänster till **självkostnadsbas** (samtliga koncernens overhead-kostnader som "kostnad för tillhandahållandet"). Skatteverkets ställningstagande 190430 (dnr 202 195456-19/111). + +Efter **C-808/23 Högkullen (3 juli 2025) och HFD 2026-01-27 mål 3217-21:** +- Marknadsvärdet ska bestämmas **per separat tjänst** med jämförbar marknadstransaktion som primär metod. +- Schablonmässig "self-cost"-metod är inte förenlig med art. 80 momsdirektivet. +- Skatteverkets ställningstagande 190430 är överspelat i sin schablonmässiga del. + +**Praktisk konsekvens:** management fee 100 kkr/månad för administrativ tjänst kan inte ifrågasättas av Skatteverket bara för att holdingens totala kostnadsbas är högre: krävs konkret jämförbar marknadstransaktion. Omprövning av tidigare omvärderingsbeslut inom 6-årsfristen bör övervägas. + +## Praktiska felmönster + +**Felmönster A: Avdrag på M&A-kostnader för förvärv som aldrig genomfördes.** +Skatteverket återkallar avdrag om förvärvet avbröts och inget aktivt förvaltningssyfte kan styrkas vid kostnadens uppkomst. Rätt: dokumentera avsikt i investment memorandum, term sheet, board minutes. Sonaecom C-42/19 öppnar för avdrag vid avbrutet förvärv men faktisk skattefri användning av kapital (lån vidare till koncern) eliminerar avdraget. + +**Felmönster B: Försäljningskostnader bokförs som direkt hänförliga utan analys.** +Säljarens M&A-rådgivare, vendor due diligence, juridik vid exit: bedöm om dessa **övervältras** på köparen (typiskt: explicit i SPA). Övervältras = ej allmänna omkostnader = inget avdrag. Övervältras inte = allmänna omkostnader → avdrag (HFD 2023 ref. 41). + +**Felmönster C: Holding utan management fee men med "intern fakturering" antas vara aktiv.** +"Internfakturering" mellan koncernbolag utan reell vederlag, eller fakturering som omedelbart kvittas via koncernbidrag/utdelning, klassas av Skatteverket som **fiktiv** (HFD 2024 ref. 34 II). Krävs faktisk betalning, marknadsmässig prissättning, dokumenterade tjänster. + +**Felmönster D: PE-investeringsverksamhet inkluderas i "aktiv förvaltning".** +Skatteverkets ställningstagande 2024-02-02 (dnr 8-2756161) återkallar tidigare ställningstagande och behandlar PE-investeringsverksamhet som **icke-ekonomisk** verksamhet: avdragsrätten begränsas till den del som hänför sig till portföljbolag där aktiv förvaltning faktiskt utförs. + +## Skatteverket: primära källor + +- "Holdingbolag: avdragsrätt för mervärdesskatt", rättslig vägledning, dnr 202 377677-17/111 (uppdaterat 2024-03-21 efter HFD 2024 ref. 18): `skatteverket.se/rattsligvagledning/365766.html`. +- "Avsnitt 4.2.4 om riskkapitalbolag upphör att gälla", 2024-02-02, dnr 8-2756161. +- Mervärdesskattegrupp: `skatteverket.se/rattsligvagledning/393925.html`. + +## Lagrum + +- ML (2023:200): ikraft 2023-07-01. Materiella regler för holding oförändrade jfr ML 1994:200. +- ML 4 kap 2 § (beskattningsbar person), 4 kap 7-14 §§ (mervärdesskattegrupp), 8 kap 6 § (omvärdering), 10 kap 33 § (finansiella undantag), 13 kap 6 § (avdragsrätt). +- Momsdirektivet 2006/112/EG art. 9 (beskattningsbar person), art. 80 (omvärdering), art. 168 (avdragsrätt), art. 11 (momsgrupp). +$gb$, + 'modifier/holding-ab', + 2, + 1 + ), + ( + 'modifier/holding-ab/naringsbetingade-andelar', + 'modifier', + 'Näringsbetingade andelar och skalbolag: utvidgad referens', + $gb$Näringsbetingade andelar och skalbolag: utvidgad referens: reference for Holdingbolag (rena ägar-/förvaltningsbolag)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1437, + '.claude\skills\modifier\holding-ab\references\naringsbetingade-andelar.md', + $gb$# Näringsbetingade andelar och skalbolag: utvidgad referens + +Ladda denna fil när uppgiften specifikt rör definitionen av näringsbetingade andelar, kapitalvinst/-förlust på dotterandelar, eller skalbolagsbedömning. + +## IL 24 kap 32-42 §§: komplett genomgång + +### 24 kap 32 § IL: ägarkrets +Andel är näringsbetingad endast om den ägs av: +1. svenskt AB eller svensk ekonomisk förening som inte är investmentföretag, +2. svensk stiftelse eller ideell förening som inte är skattebefriad, +3. svensk sparbank, +4. svensk ömsesidig försäkringsförening, +5. utländsk juridisk person som hör hemma i EES och motsvarar något av ovanstående. + +**HFD 2022 not. 3:** Liechtenstein-Anstalt (med EES-tillhörighet via EEA-avtalet) godtagen som motsvarighet trots låg beskattning: formell obegränsad skattskyldighet räcker. + +**Skatteverket dnr 202-385227-22/111 (2022-10):** SICAV med variabelt kapital motsvarar **inte** svenskt AB (kapitalstrukturen avviker fundamentalt). Luxemburg SARL OK. Brittiska Ltd OK. Irländska DAC OK. Jersey Ltd OK om bolagsrätten motsvarar EES (efter HFD 2022 not. 3 enklare bedömning). + +### 24 kap 33 § IL: kategoriseringsvillkor +Andel måste vara kapitaltillgång hos ägaren, **plus** ett av: + +| Villkor | Tröskel | +|---|---| +| Onoterad andel i svenskt AB/ek.för. eller motsv. utländskt EES-bolag | Automatiskt, **inget innehavskrav** | +| Marknadsnoterad andel | **≥ 10 % av rösterna** i bolaget | +| Betingad av rörelse hos ägaren/närstående företag | Bedömning per fall | + +"Betingad av rörelse", RÅ 2001 ref. 6: aktier i underleverantör betingade av eget rörelseinnehav om strategiskt samband. + +### 24 kap 35 § IL: utdelning skattefri +Utdelning på näringsbetingad andel tas inte upp. Gäller även utländsk utdelning (jfr 39 a kap CFC). + +### 24 kap 40 § IL: innehavstid +Marknadsnoterad andel: **≥ 1 år** vid utdelnings-/avyttringstillfället. Onoterad: inget innehavskrav. Beräknad bakåt från transaktionstidpunkt. + +## IL 25 a kap: kapitalvinst/-förlust + +### 25 a kap 5 § IL +- **5 § 1 st:** kapitalvinst på näringsbetingad andel tas inte upp. +- **5 § 2 st:** kapitalförlust på näringsbetingad andel är **inte avdragsgill**. Undantag: aktiefållans handelsbolagsregel. + +### 25 a kap 19 § IL: avdragsförbud för "underliggande" tillgång +Förlust på fordran/tillgång vars värde till väsentlig del bestäms av näringsbetingad andel är ej avdragsgill. Typfall: säljarrevers där köparen är dotterbolaget vars aktier är näringsbetingade. + +**HFD 2023 ref. 1:** Köpeskillingsrevers efter avyttring av nb-andelar omfattas **inte** av 19 §. Fordringen är inte själv en näringsbetingad andel och dess värde bestäms av köparens betalningsförmåga, inte av målbolagets värde. → Förlust på säljarrevers är avdragsgill (om verklig och definitiv). + +### Aktiefållan: IL 48 kap 26 § +Kapitalförlust på delägarrätter som inte är näringsbetingade i AB → endast kvittas mot kapitalvinster på samma slag (rullning framåt). Påverkar inte näringsbetingade andelar direkt men relevant för portföljaktier (1350). + +## Skalbolagsregler: IL 25 a kap 9-18 §§ + +### Definition (25 a kap 9 §) +Skalbolag = AB/ek.för. där marknadsvärdet av **likvida tillgångar** > **jämförelsebeloppet**. + +**Likvida tillgångar:** kontanter, värdepapper, andelar i investeringsfonder, fordringar (med vissa undantag), tillgångar som inte hör till rörelsen. + +**Jämförelsebeloppet:** +- Vid avyttring av samtliga andelar: **halva ersättningen**. +- Vid annan andel: proportionell beräkning enligt 25 a kap 10 §. + +### Konsekvens (25 a kap 9 §) +Hela ersättningen tas upp som kapitalvinst: skattefriheten för näringsbetingade andelar bortfaller. + +### Ventilen (25 a kap 12 §) +Skalbolagsbeskattning sker inte om: +1. **väsentligt inflytande** över skalbolaget inte har gått över genom avyttringen, **eller** +2. **särskilda skäl** föreligger (typiskt: skatten betalas direkt; köpare övertar bolaget och fortsätter verksamheten; säljaren visar att skatteflyktssyfte saknas). + +### Skalbolagsdeklaration (SFL 27 kap 4 §) +Inom **60 dagar** från avyttring. Innehåll: balansräkning per avyttringsdagen, värdering av likvida tillgångar, jämförelsebelopp, eventuell ventilgrund. + +**Säkerhet** för skatten på obeskattade vinstmedel kan krävas (SFL 27 kap 5 §). Bankgaranti eller depositionsbeslag. + +## Praktiska felmönster (utöver SKILL.md huvuddokument) + +**Felmönster A: Andelar i utländskt holding klassas felaktigt som icke-näringsbetingade.** +Cypern Ltd, Malta Ltd, Luxemburg SARL: alla EES → motsvarar svenskt AB enligt 24 kap 32 § 5 p. Utdelning skattefri. Säljaren betalar ingen skatt på vinst. Skatteverket misstar sig ibland och beskattar. + +**Felmönster B: 1-årsregeln ignoreras vid marknadsnotering mitt under innehavet.** +Innehavet börjar som onoterat (näringsbetingat utan tidskrav), bolaget IPO:as, säljs månad 6 efter notering. Vid avyttring är andelen marknadsnoterad → 24 kap 40 § 1-årskrav räknas baklänges från avyttringen. Innehavstiden under noterad period räknas, plus motsvarande tid som onoterad → totalt > 1 år → näringsbetingad. Detta missförstås ofta. + +**Felmönster C: Skalbolagsdeklaration utelämnas vid avyttring av sovande bolag.** +Säljaren tror att skalbolagsregeln bara gäller "tomma" bolag, men jämförelsebeloppstest baseras på marknadsvärden: ett bolag med 5 MSEK på bankkonto och inga rörelsetillgångar som säljs för 10 MSEK är skalbolag oavsett om det "är aktivt". + +## Lagrum och källor + +- IL (1999:1229) 24 kap 32-42 §§: SFS 2003:224 ikraft 2003-07-01, omnumrering SFS 2018:1206 ikraft 2019-01-01. +- IL 25 a kap 5, 9-18, 19 §§. +- IL 48 kap 26 § aktiefållan. +- SFL (2011:1244) 27 kap 2, 4, 5 §§. +- HFD 2022 not. 3 (Liechtenstein-Anstalt). +- HFD 2023 ref. 1 (köpeskillingsrevers). +- Skatteverkets rättsliga vägledning "Näringsbetingade andelar och aktier" och "Skalbolagsbeskattning". +$gb$, + 'modifier/holding-ab', + 2, + 1 + ), + ( + 'modifier/holding-ab/omstrukturering', + 'modifier', + 'Omstruktureringar: utvidgad referens', + $gb$Omstruktureringar: utvidgad referens: reference for Holdingbolag (rena ägar-/förvaltningsbolag)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 2289, + '.claude\skills\modifier\holding-ab\references\omstrukturering.md', + $gb$# Omstruktureringar: utvidgad referens + +Ladda när uppgiften rör underprisöverlåtelser, fusioner, fissioner, verksamhetsavyttring, andelsbyten, eller Lex ASEA. + +## IL 23 kap: Underprisöverlåtelser + +Reglerar **överlåtelse av tillgång till underpris** mellan företag utan att utlösa uttagsbeskattning (IL 22 kap), om vissa villkor är uppfyllda. + +### 23 kap 14-29 §§: villkor +1. **Skattesubjektsvillkor** (14 §): båda parter är skattskyldiga för näringsverksamhet i Sverige. +2. **Kvalifikationsvillkor** (15-16 §§): överlåtaren och förvärvaren är kvalificerade (AB, ek.för., HB, etc.). +3. **Koncernbidragsvillkor** (17-19 §§): koncernbidragsrätt mellan parterna ska föreligga, **eller** något av specialundantagen. +4. **Verksamhetsgrensvillkor** (20-22 §§): vid överlåtelse av enstaka tillgång ska överlåtaren själv kunna ge koncernbidrag till förvärvaren; vid överlåtelse av verksamhetsgren undantas detta krav. +5. **Underskottsvillkor** (24-26 §§): underskott hos förvärvaren får inte utnyttjas mot vinstöverföring (skydd mot underskottshandel). +6. **Kvalificerade andelar-villkor** (18-19 §§): vid överlåtelse till företag med kvalificerade andelar: särskilda villkor. + +### Konsekvens om villkoren uppfylls +- Ingen uttagsbeskattning hos överlåtaren (IL 22 kap 11 §). +- Förvärvaren övertar **skattemässig kontinuitet** (anskaffningsvärde, värdeminskningsavdrag, periodiseringsfonder, etc.). + +### Praktisk användning +Typiskt: omstrukturering inom koncern där tillgång eller verksamhetsgren flyttas mellan bolag utan att utlösa moms eller inkomstskatt. + +## IL 37 kap: Kvalificerade fusioner + +### Definition (37 kap 1-4 §§) +Fusion = överlåtande bolag upplöses, övertagande bolag tar emot alla tillgångar och skulder, aktieägare i överlåtande bolag får vederlag (typiskt aktier i övertagande bolag). + +**Kvalificerad fusion:** +- Båda bolag är AB eller ek.för. (eller motsv. EES). +- Båda är skattskyldiga i Sverige (eller hör hemma inom EES). +- Övertagande bolag fortsätter den verksamhet överlåtande bolag bedrev. + +### Konsekvens +- Ingen uttagsbeskattning. +- Kontinuitet i skattemässiga värden, sparat underskott (under förutsättning att underskottsspärr inte slår till, 40 kap). +- Koncernbidragsspärr enl. 40 kap 17-19 §§ kan begränsa utnyttjande. + +### Bokföring +- BFNAR 2003:2 (kvalificerad fusion) eller BFNAR 2020:5 (fusion av helägt dotterbolag). +- Kontinuitetsprincip: övertagande bolag tar över bokföringsmässiga värden. + +## IL 38 kap: Verksamhetsavyttring + +Överlåtelse av en hel **verksamhetsgren** mot vederlag i form av aktier eller andelar i mottagande bolag. + +### Förutsättningar (38 kap 6-8 §§) +- Överlåtaren och förvärvaren är AB/ek.för./motsv. EES. +- Vederlag i andelar i förvärvaren. +- Förvärvaren övertar tillgångar **och** skulder hänförliga till verksamhetsgrenen. +- Verksamhetsgren: fortsätter som självständig enhet hos förvärvaren. + +### Konsekvens +- Ingen uttagsbeskattning på överlåtelsen (38 kap 9 §). +- Kontinuitet i skattemässiga värden hos förvärvaren. +- Andelarna i förvärvaren erhållna som vederlag har omkostnadsbelopp = nettovärdet av överlåtna tillgångar minus skulder. + +## IL 38 a kap: Partiella fissioner + +Företag X "spinner ut" en verksamhetsgren till nytt bolag Y, vars aktier delas ut till X:s aktieägare. + +### Förutsättningar (38 a kap 2 §) +- Bolag X delar ut samtliga andelar i nybildat bolag Y till sina aktieägare. +- Y har övertagit en verksamhetsgren från X. +- X kvarstår med övriga verksamhetsgrenar. + +### Konsekvens +- Ingen uttagsbeskattning hos X. +- Ingen utdelningsbeskattning hos aktieägarna. +- Aktieägarna i X får andelar i Y med omkostnadsbelopp baserat på proportionerlig fördelning. + +## IL 42 kap 16 §: Lex ASEA + +Utdelning av **samtliga aktier i ett dotterbolag** till aktieägarna i ett **marknadsnoterat** moderbolag är **skattefri** för aktieägarna om vissa villkor är uppfyllda. + +### Villkor +- Utdelande bolag är **marknadsnoterat**. +- Samtliga aktier i dotterbolaget delas ut. +- Dotterbolaget bedriver eller äger andelar i bolag som bedriver näringsverksamhet. +- Andelarna i dotterbolaget är näringsbetingade hos utdelande bolag. + +### Konsekvens hos aktieägarna +- Ingen utdelningsbeskattning. +- Omkostnadsbeloppet på de gamla aktierna fördelas mellan de gamla och de nya aktierna baserat på marknadsvärdesförhållandet vid utdelningstidpunkten. + +**Praktisk användning:** typiskt för noterade koncerner som spinner ut affärsområden till självständiga noterade bolag. Mindre relevant för privat holding men kan användas vid förberedelse för börsnotering. + +## IL 48 a kap: Framskjuten beskattning vid andelsbyten (fysiska delägare) + +Fysisk person byter aktier i bolag A mot aktier i bolag B (typiskt: ägaren säljer sitt operativt aktiebolag till ett nybildat holding mot vederlag i holdingaktier). + +### Förutsättningar (48 a kap 2-9 §§) +- Säljaren är fysisk person obegränsat skattskyldig i Sverige. +- Köparen är AB/ek.för./motsv. EES. +- Vederlag i andelar i köparen, eventuellt med tillägg av kontant högst 10 % av andelarnas nominella belopp. +- Köparen efter bytet äger > 50 % av rösterna i bolag A. + +### Konsekvens +- **Ingen omedelbar beskattning** av kapitalvinsten vid bytet. +- Säljaren får aktier i köparen med omkostnadsbelopp = omkostnadsbeloppet på de avyttrade aktierna. +- Beskattning sker när de nya aktierna avyttras. + +**Kvalificerade andelar:** om de avyttrade aktierna var kvalificerade enligt 57 kap är de nya också kvalificerade (kontinuitet). + +## IL 49 kap: Uppskovsgrundande andelsbyten (juridiska delägare) + +Liknande 48 a kap men för **juridiska personer** som säljare. Mindre praktisk relevans efter införandet av näringsbetingade andelar: om andelarna är näringsbetingade är försäljningen redan skattefri. + +## Skapande av holdingstruktur: typisk transaktionsväg + +### Ren holdingbildning ovanför befintligt operativt AB +1. Fysisk ägare X äger 100 % i Operativ AB (OperAB). +2. X bildar nytt Holding AB (HoldAB) genom kontant insättning av aktiekapitalet. +3. X säljer aktierna i OperAB till HoldAB mot **vederlag i nyemitterade aktier i HoldAB**. +4. Tillämpa **IL 48 a kap framskjuten beskattning** → ingen beskattning hos X. +5. Resultat: X → HoldAB → OperAB. + +**Skattekonsekvens:** kontinuitet i omkostnadsbelopp. Om aktierna i OperAB var kvalificerade hos X är aktierna i HoldAB nu också kvalificerade. + +### Köparpaketering inför försäljning av rörelse +1. Ägare vill sälja **rörelse** i OperAB men köparen vill bara köpa **aktier** (slipper övertagandeansvar och stämpelskatt vid fastighet). +2. OperAB överför rörelsen till nystartat dotterbolag DotterAB via **underprisöverlåtelse (IL 23 kap)** eller **verksamhetsavyttring (IL 38 kap)**. +3. OperAB säljer aktierna i DotterAB → **näringsbetingad andel → skattefri kapitalvinst (IL 25 a kap 5 §)**. +4. Risk: **skalbolagsregler** (IL 25 a kap 9-18 §§) kan utlösa beskattning om OperAB efter försäljningen är "skalbolag". + +## Praktiska felmönster + +**Felmönster A: Underprisöverlåtelse mellan systerbolag utan koncernbidragsrätt.** +S1 överlåter tillgång till S2 till underpris. Koncernbidragsrätt mellan S1 och S2 finns genom slussning via MF: IL 23 kap 17 § kräver direkt koncernbidragsrätt eller specifikt undantag. Slussning räcker inte alltid → uttagsbeskattning utlöses. Lös genom att lyfta tillgången via MF i två steg, eller använd specialundantag i 23 kap 18 §. + +**Felmönster B: Fusion mellan bolag med olika räkenskapsår utan kontroll av periodiseringsfond.** +Periodiseringsfonder överförs vid kvalificerad fusion men måste återföras inom 6 år från avsättningsåret: fusionen ändrar inte återföringstidpunkten. Felaktig kontering kan leda till sen återföring och sanktioner. + +**Felmönster C: Andelsbyte enligt 48 a kap utan kontroll av kontantvederlag.** +Kontantvederlag får högst vara 10 % av aktiernas **nominella belopp** (inte marknadsvärde). Vid överskridande tillämpas inte framskjuten beskattning → fysisk ägare beskattas omedelbart för hela kapitalvinsten. + +**Felmönster D: Lex ASEA-utdelning utan att bolaget är marknadsnoterat.** +Lex ASEA kräver att utdelande bolag är marknadsnoterat. Onoterat privat holding kan inte använda Lex ASEA. För onoterad utdelning av dotterbolagsaktier: prövas som vanlig utdelning → näringsbetingad → skattefri för aktiebolag, men för fysisk ägare blir det utdelningsbeskattning. Lösning: partiell fission (IL 38 a kap), inte begränsad till noterade bolag. + +**Felmönster E: Skalbolagsregler ignoreras vid försäljning av "tomt" bolag efter paketering.** +Efter paketeringsförsäljning kan ursprungsbolaget (säljaren) bli skalbolag: likvida tillgångar (köpeskillingen) > jämförelsebeloppet. Skalbolagsdeklaration krävs inom 60 dagar (SFL 27 kap 4 §) annars skalbolagsbeskattning. + +## Lagrum och källor + +- IL (1999:1229) 22 kap (uttagsbeskattning), 23 kap (underprisöverlåtelser), 25 a kap 9-18 §§ (skalbolag), 37 kap (fusioner), 38 kap (verksamhetsavyttring), 38 a kap (partiella fissioner), 42 kap 16 § (Lex ASEA), 48 a kap (andelsbyte fysiska), 49 kap (andelsbyte juridiska). +- ABL (2005:551) 23 kap (fusion), 24 kap (delning). +- BFNAR 2003:2 Fusion av helägt aktiebolag; BFNAR 2020:5 Redovisning av fusion. +- Skatteverkets rättsliga vägledning "Omstrukturering, uttagsbeskattning och utskiftning". +$gb$, + 'modifier/holding-ab', + 2, + 1 + ), + ( + 'modifier/holding-ab/ranteavdrag', + 'modifier', + 'Ränteavdragsbegränsning: utvidgad referens', + $gb$Ränteavdragsbegränsning: utvidgad referens: reference for Holdingbolag (rena ägar-/förvaltningsbolag)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1918, + '.claude\skills\modifier\holding-ab\references\ranteavdrag.md', + $gb$# Ränteavdragsbegränsning: utvidgad referens + +Ladda när uppgiften rör beräkning av räntenetto, EBITDA-tak, koncerninterna förvärvslån, eller den nya 24 kap 19 a § (2026). + +## Översikt två-skikts-modell + +Sedan 2019-01-01 (SFS 2018:1206, prop. 2017/18:245) består svensk ränteavdragsbegränsning av två oberoende skikt: + +1. **Generell EBITDA-regel** (IL 24 kap 21-29 §§): gäller alla räntor, även externa. +2. **Riktade regler för koncerninterna lån** (IL 24 kap 16-20 §§): gäller endast intressegemenskap. + +Båda måste passeras. Generell regel tillämpas på **avdragsgillt** räntenetto, alltså efter att riktade regler kan ha eliminerat vissa räntor. + +## Generell EBITDA-regel: 24 kap 21-29 §§ + +### 24 kap 21 § IL: tillämpningsområde +Juridiska personer och svenska handelsbolag. Handelsbolag med enbart fysiska delägare undantagna. + +### 24 kap 23 § IL: räntenetto +**Negativt räntenetto** = avdragsgilla ränteutgifter − skattepliktiga ränteinkomster. + +Endast negativt räntenetto begränsas. Positivt räntenetto (mer ränteinkomster än -utgifter) är obegränsat. + +### 24 kap 24 § IL: avdragstaket + +**Huvudregel (1 st):** Negativt räntenetto får dras av till **30 % av avdragsunderlaget**. + +**Avdragsunderlag (2 st)** = resultat före skatt och negativt räntenetto, **plus** av- och nedskrivningar, **minus** överskott från andelar (näringsbetingad utdelning + kapitalvinst) och vissa ränteinkomster. Approximation: skattemässigt EBITDA. + +**Förenklingsregel (3 st):** Negativt räntenetto upp till **5 MSEK** får alltid dras av per **intressegemenskap** (för bolag i koncern: gemensamt tak; varje bolag kan inte använda 5 MSEK var). Om förenklingsregeln tillämpas får inget kvarstående räntenetto sparas till nästa år. + +### 24 kap 26 § IL: sparat räntenetto +Kvarstående negativt räntenetto efter tillämpning av 30 %-taket sparas och kan dras av kommande **6 år**. Kan utnyttjas mot framtida överskott i avdragsunderlaget. Vid ägarförändring: spärrsregel enligt 27-29 §§. + +### Beräkningsexempel + +Bolag A med: +- Rörelseresultat före räntor, skatt, av-/nedskrivningar: 12 MSEK +- Av-/nedskrivningar: 3 MSEK (redan inkluderade som kostnad i rörelseresultatet) +- Räntekostnader (externa + koncerninterna): 4 MSEK +- Ränteintäkter: 0,5 MSEK +- Utdelning från dotter (näringsbetingad): 2 MSEK +- Reavinst på avyttring av dotter (näringsbetingad): 0 MSEK + +Negativt räntenetto = 4 - 0,5 = 3,5 MSEK. +Avdragsunderlag = 12 - 3,5 (eller räknat baklänges från resultatet före skatt + räntenetto + avskrivningar) ... förenklat: skattemässigt EBITDA ≈ 12 - 2 (näringsbetingad utdelning räknas inte med) = 10 MSEK. +30 %-tak = 3 MSEK. +Förenklingsregel = 5 MSEK. + +Negativt räntenetto 3,5 MSEK < förenklingsregel 5 MSEK → **fullt avdrag** (men inget sparat räntenetto). + +Alternativt med 30 %-regel: 3 MSEK avdrag, 0,5 MSEK kvarstående negativt räntenetto sparas 6 år. + +## Riktade regler: 24 kap 16-20 §§ + +### 24 kap 16 § IL: intressegemenskap +Bolagen anses ingå i intressegemenskap om ett bolag direkt eller indirekt har ett **väsentligt inflytande** över det andra, eller om bolagen i huvudsak står under gemensam ledning. + +### 24 kap 18 § IL: tioprocentsregeln + undantagsregeln + +**1 st (tioprocentsregeln):** Räntekostnad till intressegemenskap är avdragsgill om motsvarande inkomst hade beskattats med **minst 10 %** hos mottagaren enligt lagstiftningen i mottagarens hemstat (hypotetiskt test, som om det vore enda inkomsten). + +**2 st (undantagsregeln):** Trots tioprocentsregeln är räntan inte avdragsgill om skuldförhållandet **uteslutande eller så gott som uteslutande** uppkommit för att intressegemenskapen ska få en **väsentlig skatteförmån**. + +### 24 kap 19 § IL: förvärvsregeln +Räntekostnad på skuld som hänför sig till **koncerninternt förvärv av en delägarrätt** (typiskt: HoldCo lånar från koncernbolag för att köpa Target från annat koncernbolag) → avdrag bara om förvärvet är **väsentligen affärsmässigt motiverat**. + +**HFD 2022 ref. 49:** Organisatoriska skäl (omstrukturering, "städa upp" koncernstruktur) räcker inte. Krävs affärsmässigt motiv såsom synergier, marknadstillträde, finansieringskrav från extern motpart. + +### EU-rättens påverkan + +**Lexel C-484/19 (20 jan 2021):** EU-domstolen underkände 2013 års lydelse av undantagsregeln som **etableringsfrihetsfientlig**: regeln användes selektivt mot transaktioner med utländska koncernbolag i situationer där svenska motsvarigheter inte skulle träffats. + +**HFD 2021 ref. 68:** Tillämpning av 2019 års lydelse av 24 kap 18 § 2 st på lån från belgiskt koncernbolag underkändes på samma EU-rättsliga grund som Lexel: koncernbidragsrätt skulle ha medgivits om båda bolagen varit svenska. + +**HFD 2024 ref. 6 (22 jan 2024):** Förvärvsregeln 24 kap 19 § underkändes som EU-stridig i en gränsöverskridande situation där koncernbidragsrätt skulle ha medgivits om både låntagare och långivare varit svenska. Skatteverket tvingades backa och regelverket reformeras. + +### 2026 års reform: prop. 2025/26:20 + +**Ikraft 2026-01-01** (bet. SkU8, antagen). Anpassningar: + +- **Ny 24 kap 19 a § IL:** för skuldförhållanden inom EES, om koncernbidragsrätt mellan låntagare och långivare skulle ha funnits hade båda varit svenska AB, gäller särskild bedömning som inkorporerar EU-rättens proportionalitetskrav. +- **Omformulering av 18 § 2 st och 19 §**: explicit anpassning till Lexel-doktrinen. +- Övergångsbestämmelser för pågående lån: Skatteverkets vägledning ej färdig per maj 2026. + +## Bokföring av ränteavdragsbegränsning + +Ränteavdragsbegränsning är **endast skattemässig**. Bokföringsmässigt redovisas hela räntekostnaden som finansiell kostnad (8400-serien). Den ej avdragsgilla delen återförs i INK2: + +- INK2S ruta 4.9 a "Ej avdragsgilla räntekostnader (negativt räntenetto)": för 30 %-regeln. +- INK2S ruta 4.9 b/4.16: för riktade regler. +- Kvarstående negativt räntenetto rapporteras i INK2 ruta 4.14 b och flyttas mellan år i bilaga N8 (Räntenettoavdrag). + +## Praktiska felmönster + +**Felmönster A: Förenklingsregeln tillämpas per bolag i koncern.** +Fel: koncern med 4 bolag som vart för sig har 3 MSEK negativt räntenetto bokför 12 MSEK total avdrag under förenklingsregeln. Rätt: förenklingsregeln 5 MSEK gäller **per intressegemenskap** (24 kap 24 § 3 st): koncernen får totalt 5 MSEK avdrag på förenklingsregelgrund. Återstoden måste passera 30 %-regeln eller sparas. + +**Felmönster B: Avdragsunderlaget beräknas på koncernens konsoliderade EBITDA i stället för bolagets.** +Beräkningen sker på **bolagets** enskilda resultat (juridisk person), inte koncernens. Koncernbidrag påverkar avdragsunderlaget (35 kap koncernbidrag → påverkar resultatet i båda bolagen). + +**Felmönster C: Tioprocentsregeln antas räcka utan undantagsregeltest.** +Tioprocentsregeln öppnar bara avdrag: undantagsregeln 18 § 2 st kan fortfarande eliminera det om skuldförhållandet uppkommit primärt av skatteskäl. Tioprocentsregeln är **nödvändigt men inte tillräckligt** villkor. Före 2026: undantagsregeln tillämpas restriktivt efter Lexel; från 2026: ny 19 a § styr. + +**Felmönster D: Bokförd räntekostnad som inte är skatterättslig ränta inkluderas.** +Skatterättsligt räntebegrepp (24 kap 2 §): ersättning för kredit. Garantiavgifter, ej; valutakursförluster, ej; kapitalrabatt på obligationer, ja. Felklassificering ger fel beräkning. + +## Lagrum och källor + +- IL (1999:1229) 24 kap 16-29 §§: SFS 2018:1206 ikraft 2019-01-01. +- Prop. 2017/18:245 "Nya skatteregler för företagssektorn". +- C-484/19 Lexel (EU-domstolen 20 jan 2021). +- HFD 2021 ref. 68; HFD 2022 ref. 49; HFD 2024 ref. 6. +- Prop. 2025/26:20 "Anpassningar av ränteavdragsreglerna till EU-rätten"; bet. 2025/26:SkU8. +- Skatteverkets rättsliga vägledning "Begränsad avdragsrätt för negativa räntenetton". +$gb$, + 'modifier/holding-ab', + 2, + 1 + ), + ( + 'modifier/mixed-verksamhet', + 'modifier', + 'Blandad verksamhet (moms-split)', + $gb$Modifier for any Swedish legal entity with BOTH momspliktig and momsfri omsättning in the same juridisk person, cross-SNI. Use whenever the books touch blandad verksamhet, proportionell avdragsrätt, fördelningsnyckel, skälig grund, jämkning/justering av avdrag, frivillig skattskyldighet/beskattning, mixed VAT, partial VAT recovery, holdingbolag avdragsrätt, lokaluthyrning moms, jämkningshandling/justeringshandling, uppförandeskede, retroaktivt avdrag, ML 13 kap 29 §, ML 15 kap, ML 12 kap, HFD 2023 ref. 45, or any chart of accounts showing both 2649 plus momsfri 3xxx-konton (3911, 3004) or both 3911 and 3913 hyresintäkter. Also triggers on questions about how to split input VAT between taxable and exempt activities, holding-company VAT deduction, property leasing VAT, voluntary tax liability, or 10-year/5-year adjustment periods for investment goods.$gb$, + ARRAY['64', '65', '66', '68.20', '85', '86', '87', '88', '94']::text[], + $gb${}$gb$::jsonb, + 4800, + '.claude\skills\modifier\mixed-verksamhet\SKILL.md', + $gb$--- +id: modifier/mixed-verksamhet +tier: modifier +title: "Blandad verksamhet (moms-split)" +description: > + Modifier for any Swedish legal entity with BOTH momspliktig and momsfri omsättning in the same juridisk person, cross-SNI. Use whenever the books touch blandad verksamhet, proportionell avdragsrätt, fördelningsnyckel, skälig grund, jämkning/justering av avdrag, frivillig skattskyldighet/beskattning, mixed VAT, partial VAT recovery, holdingbolag avdragsrätt, lokaluthyrning moms, jämkningshandling/justeringshandling, uppförandeskede, retroaktivt avdrag, ML 13 kap 29 §, ML 15 kap, ML 12 kap, HFD 2023 ref. 45, or any chart of accounts showing both 2649 plus momsfri 3xxx-konton (3911, 3004) or both 3911 and 3913 hyresintäkter. Also triggers on questions about how to split input VAT between taxable and exempt activities, holding-company VAT deduction, property leasing VAT, voluntary tax liability, or 10-year/5-year adjustment periods for investment goods. +sni_prefixes: ["64", "65", "66", "68.20", "85", "86", "87", "88", "94"] +trigger_signals: + vat_split: true + text_patterns: + - "fördelningsnyckel" + - "proportionell avdragsrätt" + - "skälig grund" + - "jämkning" + - "justering av avdrag" + - "frivillig skattskyldighet" + - "frivillig beskattning" + - "blandad verksamhet" + - "ej avdragsgill ingående moms" + - "delvis avdragsrätt" + - "omsättningsbaserad fördelning" + - "jämkningshandling" + - "justeringshandling" + - "uppförandeskede" + - "retroaktivt avdrag" + bas_account_signals: + - "2642" + - "2649" + - "6999" + - "2613" + - "3913" + - "3911" + - "1110" + - "1220" + - "3004" + - "8210" +estimated_tokens: 4800 +version: 1 +--- + +# Swedish blandad verksamhet: moms-specifika regler + +## 1. När denna skill ska användas + +Aktiveras när huvudboken visar BÅDE momspliktig omsättning (3001/3002/3003/3913 med utgående moms 2611/2613) OCH momsfri omsättning (3004, 3911, undantagna tjänster per ML 10 kap NML) i samma juridiska person. Aktiveras också vid: registrerad frivillig beskattning för fastighetsupplåtelse (ML 12 kap NML); förvärv av investeringsvara ≥100 000 kr ingående moms (fastighet) eller ≥50 000 kr (lös egendom); holdingbolag med utdelningar + management fees; ideell förening med både bidragsfinansierad och momspliktig verksamhet; bostadsrättsförening med lokaluthyrning under frivillig beskattning. Skillen täcker INTE generella momsregler: se horisontal skill `swedish-vat`. + +## 2. Typiska arbetsflödesmönster + +**Fakturering.** Två parallella fakturaströmmar måste hållas isär på radnivå. Tagga varje rad vid utfärdande: momspliktig (3001/3002/3003 + 2611/2621/2631 eller 3913 + 2613), momsfri inom Sverige (3004), undantagen (specifika konton per undantagskategori, sjukvård, utbildning, finansiella tjänster). Vid blandade kundkontrakt (t.ex. lokalhyra + bostadshyra till samma hyresgäst): separera per yta i avtalet och bokför per kostnadsställe. + +**Kostnadshantering.** Varje leverantörsfaktura ska klassas i tre kategorier vid kontering: +(a) **Direkt hänförlig till momspliktig verksamhet** → full avdrag på 2641; +(b) **Direkt hänförlig till momsfri verksamhet** → momsen kostnadsförs (ingen 26xx); +(c) **Gemensam kostnad** → hela momsen på 2649 löpande; vid bokslut/månadsavstämning splittras 2649 enligt aktuell fördelningsnyckel: avdragsgill del → 2650, resten → 6999. + +Den vanligaste felklassificeringen är att (c) felaktigt behandlas som (a). Endast (c) får fördelningsnyckel. + +**Avstämning.** Preliminär fördelningsnyckel används löpande under året (baserad på föregående års utfall eller budget). Vid bokslut görs **årlig avstämning** mot faktiskt utfall: slutlig fördelningsnyckel räknas på årsomsättning, retroaktiv justering bokförs i sista perioden. Detta är obligatoriskt; månadsvis "korrekt" fördelning utan slutlig årlig justering är inte tillåtet. Jämkning/justering av investeringsvaror redovisas i första redovisningsperioden EFTER räkenskapsårets utgång (ML 15 kap NML). + +**Lönefördelning.** Specifikt för blandad verksamhet: när anställdas tid fördelas mellan momspliktig och momsfri verksamhetsgren utgör detta inte i sig en momsfråga, men tidredovisningen kan fungera som **alternativ fördelningsnyckel** ("tid") för gemensamma kostnader om omsättning ger ett missvisande resultat och den skattskyldige väljer att tillämpa skälig grund. + +## 3. BAS 2025-konton specifika för blandad verksamhet + +Verifierade mot bas.se BAS 2025. **Vanlig felaktig uppfattning att 2647 = blandad verksamhet är fel**: 2647 är "Ingående moms, omvänd betalningsskyldighet varor och tjänster i Sverige". **Blandad-verksamhet-kontot är 2649.** + +| Konto | BAS 2025-namn | Användning vid blandad verksamhet | +|---|---|---| +| **2649** | Ingående moms, blandad verksamhet | Hela momsen på gemensamma kostnader debiteras 2649; splittas vid avstämning till 2650 + 6999 | +| **6999** | Ingående moms, blandad verksamhet | Kostnadssida: den icke-avdragsgilla delen av 2649 | +| **2642** | Debiterad ingående moms i anslutning till frivillig betalningsskyldighet | Ingående moms hänförlig till frivillig beskattning för lokaluthyrning (12 kap NML) | +| **2613** | Utgående moms för uthyrning, 25 % | Utgående moms på frivilligt momspliktig lokalhyra | +| **2648** | Vilande ingående moms | Bokslutsmetod; även vid pågående jämkning under räkenskapsår | +| **3913** | Frivilligt momspliktiga hyresintäkter | Lokalhyra under frivillig beskattning (ej "lokaler momspliktig") | +| **3914** | Övriga momspliktiga hyresintäkter | Korttidsuthyrning, parkering, garage (momspliktigt utan frivillig beskattning) | +| **3911** | Hyresintäkter | Bostadsuthyrning och annan momsfri hyra (ej "hyresintäkter momsfria") | +| **3912** | Arrendeintäkter | Arrende (momsfritt som regel) | +| **3004** | Försäljning inom Sverige, momsfri | Momsfri tjänsteförsäljning inom Sverige | +| **1110/1119** | Byggnader / Ackumulerade avskrivningar byggnader | Investeringsvara ≥100 tkr ingående moms → 10 års justeringsperiod | +| **1220/1229** | Inventarier och verktyg / Ackumulerade avskrivningar | Investeringsvara ≥50 tkr ingående moms → 5 års justeringsperiod | +| **8010/8210** | Utdelning på andelar i koncernföretag / andra företag | **Exkluderas från omsättningsbaserad fördelningsnyckel** (Cibo C-16/00) | +| **8250/8310** | Ränteintäkter (långfristiga / omsättningstillgångar) | Bitransaktioner exkluderas från fördelningsnyckel (art. 174.2 momsdirektivet) | + +## 4. Regelverk unikt för blandad verksamhet + +### 4.1 Mervärdesskatt: kärnregler med dubbel paragrafhänvisning + +Ny ML (2023:200) trädde ikraft 1 juli 2023 och ersatte ML (1994:200). Terminologi: "jämkning" → "justering", "korrigeringstid" → "justeringsperiod", "jämkningshandling" → "justeringshandling". Substansen är i allt väsentligt oförändrad. Citera båda numreringarna i juridiska skrivelser; default till NML-numrering framåt. + +**Proportionell avdragsrätt och fördelning efter skälig grund.** ML (1994:200) 8 kap 13 § och 14 § → ML (2023:200) **13 kap 29 § första och andra stycket**. Första stycket: vid gemensamma förvärv där avdragsrätt delvis saknas får avdrag endast göras för avdragsgill del. Andra stycket: om den avdragsgilla delen inte kan fastställas får uppdelning ske efter skälig grund. + +**HFD 2023 ref. 45** (mål 7254-7255-22, meddelad 16 oktober 2023, "VW Finans-målet") är landmärket. HFD slog fast att (i) 13 kap 29 § ML inte uppfyller EU-direktivets krav på tydlighet/precision/klarhet för att införliva art. 173.2 c momsdirektivet 2006/112/EG; (ii) artiklarna **173.1 och 174 har direkt effekt**: den skattskyldige kan välja omsättningsbaserad pro rata-metod oavsett om Skatteverket anser att en annan metod (sektor, yta, tid) ger ett mer exakt resultat; (iii) HFD 2014 ref. 18 I:s formulering om "den fördelningsgrund som ger ett mer exakt resultat" kan inte längre användas MOT den skattskyldige. Skatteverket bekräftade i ställningstagande **dnr 8-2749853 (2024-02-02)** "Uppdelning av ingående mervärdesskatt" som ersatte tidigare dnr 131 446423-15/111. Tre HFD-domar 2025-06-24 (mål 7071-24, 7072-24, 7273-24) samt **HFD 2025 not. 29** bekräftade att direkt effekt gäller även när inköpet delvis omfattas av avdragsförbudet för stadigvarande bostad. + +**EU-praxis som binder svensk tillämpning.** +- C-4/94 BLP Group: "direkt och omedelbart samband"-testet. +- C-16/00 Cibo Participations: aktivt holdingbolags förvärvskostnader = allmänna omkostnader; utdelningar är utanför momsens tillämpningsområde. +- C-437/06 Securenta: tvåstegsavdrag, först fördelning mellan ekonomisk och icke-ekonomisk verksamhet, sedan pro rata. +- C-29/08 AB SKF: avdrag för rådgivning vid dotterbolagsavyttring kan medges som allmän omkostnad. +- C-108/14 + C-109/14 Larentia + Minerva: managementholdingbolag har som huvudregel full avdragsrätt. +- C-126/14 Sveda: avdrag möjligt även för anläggning som direkt används gratis av tredje man om den är medel för momspliktiga utgående transaktioner. +- C-132/16 Iberdrola: avdrag för arbeten på tredje mans fastighet om nödvändiga för egen momspliktig verksamhet. +- C-42/19 Sonaecom: avbruten förvärvstransaktion ger avdrag baserat på avsikt; faktisk momsfri användning bryter avdragsrätten. +- C-787/18 Sögård Fastigheter: svensk regel om automatiskt övertagande av jämkningsskyldighet vid ren fastighetsöverlåtelse strider mot EU-rätten: bekräftat i HFD 2021 not. 26-27. + +**Frivillig beskattning för fastighetsupplåtelser.** ML (1994:200) 9 kap → ML (2023:200) **12 kap**, särskilt 12 kap 5 § (förutsättningar), 12 kap 18 § (anmälningsskyldighet), 12 kap 20-21 § (uppförandeskede). Förutsättning: stadigvarande uthyrning till hyresgäst med transaktioner som medför avdragsrätt (eller stat/kommun/kommunalförbund utan momspliktigt krav). Frivillig beskattning sker numera **genom att moms debiteras på fakturan**: ingen ansökan utom under uppförandeskede (blankett SKV 5704). Stadigvarande bostad är alltid undantagen. + +**Jämkning av investeringsvaror.** ML (1994:200) 8a kap → ML (2023:200) **15 kap**. Definition 15 kap 4 §: maskiner/inventarier med ingående moms ≥**50 000 kr**, fastigheter med ingående moms ≥**100 000 kr** under ett beskattningsår. Justeringsperiod 15 kap 10 §: **10 år** fastigheter, **5 år** lös egendom, räknas från det räkenskapsår tillgången förvärvades/togs i bruk. Utlösande händelser (15 kap 6-9 §§): ändrad användning, överlåtelse, övergång till/från frivillig beskattning, konkurs, övergång till skattebefrielse. Förenklingsregel: ingen jämkning om förändring i avdragsrätt <5 procentenheter. Full mekanik och worked examples i `references/jamkning-mechanics.md`. + +**Övertagande av justeringsskyldighet.** 15 kap 20 § (verksamhetsöverlåtelse) och 15 kap 21 § (fastighetsöverlåtelse) NML. EFTER C-787/18 Sögård tillämpar Skatteverket INTE 15 kap 21 § på rena fastighetsöverlåtelser: säljaren slutjämkar för återstoden. Vid verksamhetsöverlåtelse (TOGC) gäller övertagande fortfarande. SKV ställningstagande **dnr 8-2349336 (2023-05-12)** "Jämkningshandling vid vissa fastighetsöverlåtelser" anger formkrav. Detaljer i `references/frivillig-skattskyldighet-fastighet.md`. + +**Undantag från skatteplikt: sektorkonton.** +- Finansiella tjänster: ML 3 kap 9 § GML → **10 kap 33 § NML**. +- Försäkring: 3 kap 10 § GML → **10 kap 32 § NML**. +- Sjukvård: 3 kap 4-5 §§ GML → **10 kap 6-7 §§ NML**. +- Utbildning: 3 kap 8 § GML → **10 kap 15-16 §§ NML** (uppdragsutbildning normalt momspliktig). +- Allmännyttiga ideella föreningar: 4 kap 8 § GML → **4 kap 6 § NML**. Avgörs via 7 kap 3 § IL (1999:1229). + +### 4.2 Bokföringsregler unika för blandad verksamhet + +BFL (1999:1078) 4 kap 2 § kräver att räkenskapsinformation är ordnad så att posternas samband med varandra utan svårighet kan följas. För blandad verksamhet betyder detta att verifikationer och kontoplaner måste vara så granulära att fördelning mellan momspliktig och momsfri verksamhetsgren kan rekonstrueras i efterhand: utan separation per kostnadsställe/projekt/lokal bryts god redovisningssed. BFNAR 2013:2 om bokföring kräver att varje affärshändelse bokförs så snart det kan ske; för blandad verksamhet innebär detta att klassificeringen (a/b/c per avsnitt 2 ovan) ska göras vid kontering, inte vid bokslut. + +Periodiseringsfrågor: jämkningsbelopp periodiseras **inte** över räkenskapsåret utan redovisas i första redovisningsperioden efter räkenskapsårets utgång (ML 15 kap NML). Vid slutjämkning (försäljning, övergång till skattebefrielse) redovisas hela återstående beloppet i den period händelsen inträffar. + +### 4.3 Sektorlagar som triggar momsfrihet + +- **Fastighet:** JB 12 kap (hyreslagen) styr klassningen bostad vs lokal: bostad alltid momsfri och utesluter frivillig beskattning. +- **Vård:** HSL (2017:30) och patientsäkerhetslagen avgör vem som är legitimerad vårdgivare och därmed omfattas av ML 10 kap 6-7 §§ NML. Personaluthyrning räknas inte som sjukvård efter HFD 2018 ref. 41, HFD 2020 ref. 5, HFD 2020 ref. 35. +- **Utbildning:** Skollagen (2010:800) och högskolelagen (1992:1434) avgör vad som är grundläggande utbildning (momsfri per 10 kap 15 § NML). Uppdragsutbildning enligt förordning (2002:760) är momspliktig om inte beställaren själv bedriver utbildning där tjänsten ingår (10 kap 16 § NML). +- **Finans:** Lagen om bank- och finansieringsrörelse (2004:297): finansiell verksamhet undantagen per 10 kap 33 § NML. + +### 4.4 Relevanta Skatteverket-ställningstaganden (2020-2026) + +| Dnr | Datum | Ämne | +|---|---|---| +| 8-2749853 | 2024-02-02 | Uppdelning av ingående mervärdesskatt (huvudställningstagande post-HFD 2023 ref. 45) | +| (ej publikt verifierat) | ca 2025-10-15 | Ersättare till 8-2749853 efter HFD 2025 not. 29 (avdragsförbud stadigvarande bostad) | +| 8-2596368 | 2023-10-19 | Avdragsrätt för mervärdesskatt på inköp vid försäljning av aktier i dotterbolag (post-Volvo) | +| 202 377677-17/111 | 2017-12-19 | Holdingbolag: avdragsrätt (delvis överspelad; exempel 2 om riskkapitalbolag ersatt 2024-02-02 dnr 8-2756161) | +| 8-2349336 | 2023-05-12 | Jämkningshandling vid vissa fastighetsöverlåtelser | +| 8-2671490 | 2023-12-13 | Begreppet stadigvarande användning vid frivillig beskattning | +| 8-3193742 | 2024-12-12 | Rättsfallskommentar SRN 35-24/I (uppdelning + avdragsförbud bostad) | + +## 5. De tre högsta felfrekvenser-scenarierna + +### 5.1 Holdingbolag drar 100 % på rådgivningskostnader trots betydande utdelningsinkomster + +**Fel:** Bolag bokför hela ingående momsen på management consulting och M&A-rådgivning på 2641 med full avdragsrätt, samtidigt som resultaträkningen visar utdelningar (8010/8210) som överstiger management fee-intäkterna. Skatteverket gör upptaxering vid revision. + +**Rätt:** Utdelningar är utanför momsens tillämpningsområde (C-16/00 Cibo) och ska inte ingå i fördelningsnyckel. Men om bolaget även äger andelar i dotterbolag i vilkas förvaltning det INTE medverkar (passivt innehav), måste en **två-stegs-fördelning** göras per C-437/06 Securenta: först fördelning mellan ekonomisk och icke-ekonomisk verksamhet, sedan pro rata inom ekonomisk del. Om hela innehavet är aktivt (management fees till alla dotterbolag) gäller däremot Larentia + Minerva (C-108/14) → full avdragsrätt på allmänna omkostnader. Rådgivning vid förvärv av dotterbolag som ska bli aktivt förvaltat = allmän omkostnad → avdrag (Cibo); rådgivning vid avyttring kan ge avdrag om kapital frigörs till egen momspliktig verksamhet (HFD 2017 ref. 20, HFD 2023 ref. 41). + +**Kontering vid blandat innehav (aktiva + passiva):** Konsultfaktura 500 000 kr + moms 125 000 kr. Hela momsen → 2649. Vid bokslut: antag 80 % avdragsrätt enligt omsättningsbaserad fördelning på ekonomisk del. Bokföring: D 6999 25 000 / D 2650 100 000 / K 2649 125 000. + +**Lag:** ML 13 kap 29 § NML; momsdirektivet art. 173-174; C-16/00, C-108/14, C-437/06, HFD 2017 ref. 20, HFD 2023 ref. 41, HFD 2023 ref. 45, HFD 2024 ref. 18. SKV dnr 8-2596368, dnr 202 377677-17/111 (delvis). + +### 5.2 Fastighetsbolag missar jämkning vid övergång till/från frivillig beskattning eller saknar jämkningshandling vid överlåtelse + +**Fel:** (a) Bolag övergår från frivillig beskattning på en lokal till bostadsuthyrning utan att redovisa negativ jämkning. (b) Vid fastighetsförsäljning utfärdar säljaren ingen jämkningshandling till köparen, och båda parter antar att skyldigheten "övergår automatiskt". (c) Köpare antar att övertagande av jämkningsskyldighet sker vid ren fastighetsöverlåtelse (sant före Sögård, INTE sant nu). + +**Rätt:** (a) Övergång från frivillig beskattning är jämkningsutlösande händelse (15 kap NML); negativ jämkning ska beräknas på återstoden av justeringsperioden och redovisas i första redovisningsperioden efter räkenskapsårets utgång. (b) Vid **verksamhetsöverlåtelse** (TOGC) övertar förvärvaren rättighet/skyldighet: jämkningshandling enligt 15 kap 22-23 § NML är obligatorisk med samtliga 9 punkter (ursprungsbelopp, avdragen del, tidpunkter, fördelning per lokal, tidigare ägare, parter, transaktionsart, momsregistreringsnummer, övrigt). (c) Vid **ren fastighetsöverlåtelse** övergår jämkningsskyldigheten INTE längre: säljaren slutjämkar för återstoden (HFD 2021 not. 26-27 efter C-787/18 Sögård; SKV dnr 8-2349336). + +**Kontering exempel:** Lokal byggdes om för 500 000 kr ingående moms år 1 (100 % avdrag). År 5 övergår till bostadsuthyrning (avdragsrätt 0 %). Δ = 100 procentenheter; återstående år (inkl år 5) = 6; årligt jämkningsbelopp = 500 000 × 100 % × 1/10 = 50 000 kr; totalt återbetalas 300 000 kr över 6 år. Bokföring år 5: D 7820 (eller motkonto fastighet) 50 000 / K 2650 50 000. + +**Lag:** ML 15 kap 4, 6-10, 12, 20-23 §§ NML (motsv. 8a kap 2, 4-8, 11-12, 15-17 §§ GML); ML 12 kap NML (frivillig beskattning); C-787/18; HFD 2021 not. 26-27; SKV dnr 8-2349336, dnr 8-2671490. + +### 5.3 Fördelningsnyckel beräknas på fel basperiod eller inkluderar fel poster + +**Fel:** (a) Bolag beräknar omsättningsbaserad fördelningsnyckel månadsvis utan slutlig årlig avstämning vid bokslut. (b) Utdelningar, ränteintäkter, fastighetsförsäljningar och bidrag inkluderas i nämnaren och späder ut den avdragsgilla andelen. (c) Bolag använder budget i stället för faktiskt utfall vid bokslut. + +**Rätt:** (a) Preliminär nyckel löpande (baserad på föregående år eller budget), **slutlig årlig nyckel vid bokslut** med retroaktiv justering: detta är obligatoriskt enligt SKV rättslig vägledning. (b) Exkludera från fördelningsnyckel: utdelningar (utanför momsens tillämpningsområde per Cibo); ränteintäkter och fastighetstransaktioner om de är bitransaktioner (art. 174.2 momsdirektivet); kapitalvaror som används i verksamheten; bidrag som inte utgör ersättning för tjänst (C-126/14 Sveda kontrasterar mot bidrag som DEL av priset). (c) Faktiskt utfall styr; budget endast preliminärt. Slutlig fördelningsandel avrundas uppåt till heltal (art. 175 momsdirektivet). + +**Kontering exempel:** Företag har årsomsättning momspliktig 8 mkr + momsfri 2 mkr + utdelning 5 mkr + räntor 200 tkr (bitransaktioner). Fördelningsnyckel = 8 / (8+2) = 80 %. Utdelning och räntor exkluderas helt. Gemensamma kostnader 1 000 000 kr + moms 250 000 kr på 2649 löpande. Bokslutsjustering: D 2650 200 000 / D 6999 50 000 / K 2649 250 000. + +**Lag:** ML 13 kap 29 § NML; momsdirektivet art. 173.1, 174.1-2, 175; C-16/00, C-437/06, HFD 2023 ref. 45; SKV dnr 8-2749853 (och 2025-efterträdare). + +## 6. Öppna frågor: flagga för manuell granskning + +1. **Val mellan omsättningsbaserad och sektorbaserad fördelning för borderline holdingbolag** där management fees är låga relativt utdelningar och Skatteverket kan ifrågasätta omsättningsmetoden. Efter HFD 2023 ref. 45 kan den skattskyldige välja, men valet bör motiveras skriftligt och dokumenteras i momspolicy. +2. **Bitransaktion vs huvudtransaktion** för enstaka stora finansiella transaktioner (t.ex. ett internt lån, en aktieförsäljning). Cibo och art. 174.2 ger inte tydlig gräns; beror på frekvens, omfattning, resursåtgång. Vid osäkerhet inhämta förhandsbesked från Skatterättsnämnden. +3. **Nybyggnation där användning ännu inte fastställts.** Under uppförandeskede kan retroaktivt avdrag eller löpande avdrag vid frivillig beskattning bli aktuellt: val mellan dessa har stora konsekvenser för jämkning senare. Konsultera fastighetsmomsspecialist. +4. **Status för SKV-ställningstagande hösten 2025** som ersätter dnr 8-2749853 efter HFD 2025 not. 29. Dnr inte publikt verifierat i forskningen: kontrollera Skatteverkets ställningstagandeindex innan ny rådgivning ges. +5. **Pågående lagstiftningsarbete:** Dir. 2024:46 om utökad frivillig beskattning och nya justeringsregler (redovisas 2026-01-30); regeringens förslag 2025-12-04 om omsättningsmetod som lagstadgad huvudregel i ML: planerat ikraftträdande 1 januari 2027. Bevaka. + +## Referensfiler + +- `references/jamkning-mechanics.md`: Full ML 15 kap-mekanik med tre worked examples +- `references/fordelningsnyckel-metoder.md`: Omsättning/yta/tid/sektor + HFD 2023 ref. 45 deep-dive +- `references/holdingbolag-avdragsratt.md`: EU- och HFD-praxis, management fee-krav +- `references/frivillig-skattskyldighet-fastighet.md`: Anmälan, krav, jämkning vid övergång + + +--- + +## Loadable references + +The reference files named above are NOT included in this body. When a question genuinely needs that depth, load the specific one on demand with `gnubok_load_skill`, and only then: + +- `references/fordelningsnyckel-metoder.md` → `gnubok_load_skill("modifier/mixed-verksamhet/fordelningsnyckel-metoder")`: Fördelningsnyckel: metoder och val efter HFD 2023 ref. 45 +- `references/frivillig-skattskyldighet-fastighet.md` → `gnubok_load_skill("modifier/mixed-verksamhet/frivillig-skattskyldighet-fastighet")`: Frivillig beskattning för fastighetsupplåtelser +- `references/holdingbolag-avdragsratt.md` → `gnubok_load_skill("modifier/mixed-verksamhet/holdingbolag-avdragsratt")`: Holdingbolag: avdragsrätt för ingående moms +- `references/jamkning-mechanics.md` → `gnubok_load_skill("modifier/mixed-verksamhet/jamkning-mechanics")`: Jämkning (justering) av ingående moms på investeringsvaror +$gb$, + NULL, + 3, + 1 + ), + ( + 'modifier/mixed-verksamhet/fordelningsnyckel-metoder', + 'modifier', + 'Fördelningsnyckel: metoder och val efter HFD 2023 ref. 45', + $gb$Fördelningsnyckel: metoder och val efter HFD 2023 ref. 45: reference for Blandad verksamhet (moms-split)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1407, + '.claude\skills\modifier\mixed-verksamhet\references\fordelningsnyckel-metoder.md', + $gb$# Fördelningsnyckel: metoder och val efter HFD 2023 ref. 45 + +Lagstöd: ML 13 kap 29 § NML (motsv. 8 kap 13-14 § GML). EU-rätt: momsdirektivet art. 173-175. Skatteverket: ställningstagande dnr 8-2749853 (2024-02-02) "Uppdelning av ingående mervärdesskatt", med 2025-efterträdare efter HFD 2025 not. 29. + +## 1. Huvudregel efter HFD 2023 ref. 45: direkt effekt av art. 173.1 och 174 + +HFD slog 2023-10-16 fast i mål 7254-7255-22 (VW Finans) att 13 kap 29 § ML inte uppfyller EU-domstolens krav på "tydlighet, precision och klarhet" för att införliva direktivets art. 173.2 c. Konsekvens: artiklarna 173.1 och 174 har **direkt effekt**: den skattskyldige kan välja **omsättningsbaserad pro rata** även när Skatteverket anser att en sektoriserad metod ger ett mer exakt resultat. Skatteverket kan inte mot den enskildes vilja tvinga fram annan metod. + +Den skattskyldige kan dock själv välja att tillämpa skälig grund (omsättning, yta, tid, sektor) om det är gynnsammare. Valet kan göras **per förvärv**: direkt effekt för vissa inköp, skälig grund för andra. Detta är post-2023 SKV-position. + +HFD 2014 ref. 18 I:s formulering om att "den fördelningsgrund som ger ett mer exakt resultat" ska användas: denna formulering kan enligt HFD 2023 ref. 45 punkt 21 inte längre användas MOT den skattskyldige. Skälig grund-regeln finns kvar men är endast tillgänglig om den skattskyldige väljer den. + +Tre HFD-domar 2025-06-24 (mål 7071-24, 7072-24, 7273-24) och HFD 2025 not. 29 bekräftade att direkt effekt gäller även när inköpet delvis omfattas av avdragsförbudet för stadigvarande bostad, vilket föranledde ett nytt SKV-ställningstagande hösten 2025. + +## 2. Omsättningsbaserad metod (art. 174 momsdirektivet) + +**Formel:** Avdragsgill andel = (årsomsättning från transaktioner med avdragsrätt, exkl moms) / (årsomsättning från avdragsgilla transaktioner + från transaktioner utan avdragsrätt, exkl moms). Avrundas uppåt till heltal procent (art. 175). + +**Exkluderas från beräkningen** (art. 174.2): +- Försäljning av kapitalvaror som används i verksamheten (för att undvika snedvridning vid sporadiska försäljningar). +- **Bitransaktioner** av fastighetsmässig art. +- **Bitransaktioner** av finansiell art (sporadiska räntor, enstaka lån). +- **Utdelningar** (utanför momsens tillämpningsområde, Cibo C-16/00). +- **Bidrag** som inte utgör ersättning för en tjänst. + +**Vad räknas som bitransaktion:** Bedöms utifrån frekvens, omfattning av investerade resurser, om transaktionerna är ett accessoarisk komplement till huvudverksamheten. EU-domstolen i Régie dauphinoise C-306/94 och NCC Construction Danmark C-174/08 ger ramar. + +**Tillämpning:** Preliminär nyckel under året (föregående års utfall eller budget), **slutlig årlig avstämning** vid bokslut med retroaktiv justering. + +## 3. Sektoriserad metod (art. 173.2 a/b) + +Verksamheten delas i ekonomiska sektorer; pro rata beräknas per sektor. Tillåten enligt EU-rätten men nu inte tvingbar av Skatteverket på den skattskyldige. + +Användbar när: +- Tydligt åtskilda verksamhetsgrenar med olika resursförbrukning. +- Holdingbolag med både aktivt förvaltade och passivt ägda dotterbolag. +- Fastighetsbolag med både bostadsbestånd och kommersiellt bestånd. + +## 4. Användningsbaserad metod: yta, tid, körsträcka, produktionskostnader (art. 173.2 c) + +Tillåtet om den skattskyldige själv väljer det och metoden ger ett mer exakt resultat än omsättning. Exempel: +- **Yta:** Fastighetsbolag fördelar gemensamma kostnader efter kvm per användning (bostad vs lokal). +- **Tid:** Vårdbolag fördelar gemensamma kostnader efter arbetade timmar per verksamhetsgren. +- **Körsträcka:** Bilbolag (faktiskt utnyttjande i de olika sektorerna). +- **Produktionskostnader:** Tillverkande företag med både momspliktig och momsfri output. + +Användningsbaserad metod är **inte längre obligatorisk** efter HFD 2023 ref. 45 även när Skatteverket anser den vara mer exakt. + +## 5. Tvåstegsmetoden för ekonomisk + icke-ekonomisk verksamhet (Securenta C-437/06) + +För passiva holdingbolag och bidragsfinansierade verksamheter där delar av verksamheten faller utanför momsens tillämpningsområde: + +**Steg 1:** Fördelning mellan ekonomisk verksamhet och icke-ekonomisk verksamhet. Direktivet anger ingen metod: medlemsstaten bestämmer, men metoden ska objektivt återspegla faktisk användning. SKV accepterar omsättning + utdelningsvolym, kapitalbas, eller annan resursbaserad metod. + +**Steg 2:** Inom den ekonomiska delen tillämpas pro rata enligt art. 173-175 (avsnitt 2-4 ovan). + +## 6. Strategisk valmatris + +| Situation | Föredragen metod | Skäl | +|---|---|---| +| Holdingbolag med dominerande management fees, små utdelningar | Omsättning | Direkt effekt, högst avdrag, enkelt | +| Holdingbolag med dominerande utdelningar, små management fees | Tvåstegsmetod + sektor | Securenta krävs; sektor inom ekonomisk del kan ge mer exakt fördelning | +| Fastighetsbolag bostad/lokal | Yta | Ofta exakt; den skattskyldige väljer själv om det gynnsamt | +| Vårdbolag med momsfri vård + momspliktig konsultverksamhet | Omsättning eller tid | Beror på relativa marginalerna | +| Utbildningsföretag, grundutbildning + uppdragsutbildning | Omsättning | Enkel, ofta gynnsam | +| Blandad verksamhet där omsättning ger missvisande låg avdragsandel | Den skattskyldige väljer skälig grund | Direkt effekt är en rättighet, inte en tvång | + +## 7. Dokumentationskrav + +Valet av metod ska dokumenteras i momspolicy. Vid val av direkt effekt: kortfattad motivering att art. 173.1/174 åberopas. Vid val av skälig grund: motivering varför vald metod ger mer exakt resultat och beräkningsunderlag. Beräkningen ska kunna rekonstrueras 7 år framåt (BFL 7 kap 2 §). +$gb$, + 'modifier/mixed-verksamhet', + 2, + 1 + ), + ( + 'modifier/mixed-verksamhet/frivillig-skattskyldighet-fastighet', + 'modifier', + 'Frivillig beskattning för fastighetsupplåtelser', + $gb$Frivillig beskattning för fastighetsupplåtelser: reference for Blandad verksamhet (moms-split)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1583, + '.claude\skills\modifier\mixed-verksamhet\references\frivillig-skattskyldighet-fastighet.md', + $gb$# Frivillig beskattning för fastighetsupplåtelser + +Lagstöd: ML (2023:200) **12 kap** (NML), motsv. ML (1994:200) **9 kap** (GML). Centrala paragrafer: 12 kap 5 § (förutsättningar), 12 kap 10 § (uppförandeskede), 12 kap 12 § (upphörande), 12 kap 18 § (anmälningsskyldighet), 12 kap 20-21 § (uppförandeskede-ansökan). Skatteverkets rättsliga vägledning: "Frivillig beskattning vid lokaluthyrning". Centrala SKV-ställningstaganden: dnr 8-2671490 (2023-12-13) "Begreppet stadigvarande användning"; dnr 8-2349336 (2023-05-12) "Jämkningshandling vid vissa fastighetsöverlåtelser". + +## 1. Förutsättningar (12 kap 5 § NML) + +Frivillig beskattning får tillämpas om hyresvärden för **stadigvarande användning** hyr ut byggnad/del därav till hyresgäst som: +1. bedriver verksamhet där transaktionerna **medför avdragsrätt** (helt eller delvis), **eller** +2. är staten, en kommun eller ett kommunalförbund. + +För kategori 2 krävs INTE att hyresgästens verksamhet är momspliktig. + +**Stadigvarande användning** kräver normalt hyresavtal om minst **ett år** (SKV dnr 8-2671490 efter HFD 2023 ref. 24). Frivillig beskattning kan tillämpas även när flera hyresgäster delar yta utan ensamrätt till specifik yta, förutsatt att samtliga bedriver momspliktig verksamhet. SKV anser dock att frivillig beskattning **inte** är möjlig om hyresvärden själv samnyttjar ytan: denna restriktion är ifrågasatt i KRSU 2984-22. + +**Frivillig beskattning är inte möjlig för stadigvarande bostad** (12 kap 4 § NML). + +## 2. Hur frivillig beskattning påbörjas + +Sedan 1 januari 2014 (gäller även under NML från 1 juli 2023): **Frivillig beskattning påbörjas genom att moms debiteras på hyresfakturan**. Ingen ansökan krävs i normalfallet. + +**Undantag, uppförandeskede:** Före uthyrningen påbörjats (under byggnation/renovering) krävs särskild ansökan på blankett SKV 5704. Beslut om frivillig beskattning under uppförandeskede ger löpande avdragsrätt på byggkostnader (12 kap 10 § NML). + +**Per lokal-bedömning:** Frivillig beskattning bestäms lokal för lokal. Samma fastighet kan ha frivillig beskattning på en lokal och inte på en annan. + +## 3. Anmälningsskyldighet (12 kap 18 § NML + 7 kap 1-4 §§ SFL) + +Hyresvärden ska anmäla till Skatteverket vid: +- Förändringar som påverkar omfattningen av frivillig beskattning. +- Upphörande. +- Överlåtelse av fastighet. + +## 4. Upphörande (12 kap 12 § NML) + +Frivillig beskattning upphör när: +- Hyresvärden upphör att debitera moms på hyran. +- Lokalen övergår till stadigvarande bostadsanvändning. +- Hyresgästens verksamhet upphör att medföra avdragsrätt. +- Fastigheten överlåts (utom vid TOGC där förvärvaren övertar). + +**Konsekvens:** Upphörande är justeringsutlösande händelse (15 kap NML): negativ justering av tidigare gjorda avdrag för återstoden av justeringsperioden. + +## 5. Retroaktivt avdrag (12 kap 16-17 § NML, motsv. 9 kap 8 § GML) + +Vid övergång till frivillig beskattning på lokal som ännu inte tagits i bruk får hyresvärden göra **retroaktivt avdrag** för ingående moms på kostnader för ny-, till- eller ombyggnad som uppkommit före frivillig beskattning. Hela momsen dras omedelbart. + +**Strategiskt val** mellan retroaktivt avdrag och löpande justering: retroaktivt avdrag oftast gynnsamt vid stor investering + tidig frivillig beskattning, eftersom hela beloppet återbetalas direkt utan att den löpande justeringen riskerar förluster vid senare ändringar. + +**Förutsättning:** Avdrag får göras endast om kostnaden hänför sig till tid då frivillig beskattning fortlöpande hade varit möjlig (typiskt: byggåtgärd och momspliktig hyresgäst klart i pipeline). + +## 6. Jämkning vid övergång och vid fastighetsöverlåtelse + +### 6.1 Övergång till frivillig beskattning + +Positiv justering på återstoden av justeringsperioden. Beräknas på ursprungsbeloppet (total ingående moms på ursprungliga byggåtgärden, oavsett vad som ursprungligen drogs av). Se `jamkning-mechanics.md` Exempel C. + +### 6.2 Upphörande av frivillig beskattning + +Negativ justering på återstoden av justeringsperioden. Se Exempel B i jamkning-mechanics.md. + +### 6.3 Fastighetsöverlåtelse: kritisk distinktion efter Sögård (C-787/18) + +**Verksamhetsöverlåtelse (TOGC, art. 19 momsdirektivet):** Förvärvaren övertar både rättighet och skyldighet att justera enligt 15 kap 20 § NML. Säljaren utfärdar justeringshandling enligt 15 kap 22-23 § NML. + +**Ren fastighetsöverlåtelse:** Efter C-787/18 Sögård Fastigheter och HFD 2021 not. 26-27 tillämpar Skatteverket **inte** automatisk övergång till köparen. Säljaren **slutjämkar** för återstoden av justeringsperioden i transaktionsperioden. Köparens framtida användning är säljaren ovidkommande. + +Distinktionen ligger i om en verksamhet (inkl personal, kontrakt, goodwill, organisation) övergår, eller om det är ett rent fastighetsförvärv. Bedömningen görs in casu. + +**SKV ställningstagande dnr 8-2349336 (2023-05-12)** anger formkraven för justeringshandling och bekräftar Sögård-konsekvensen. Paragrafhänvisningar i ställningstagandet är till GML men bedömningen kvarstår enligt NML. + +## 7. Praktisk checklista vid fastighetsförvärv eller -försäljning + +1. Klassificera transaktionen: TOGC eller ren fastighetsöverlåtelse? +2. För TOGC: säkerställ justeringshandling enligt 15 kap 22-23 § NML med samtliga 9 informationspunkter (se jamkning-mechanics.md p. 6). +3. För ren fastighetsöverlåtelse: säljaren slutjämkar, beräkna belopp, redovisa i transaktionsperioden. +4. Anmäl till Skatteverket vid överlåtelse av fastighet med frivillig beskattning (12 kap 18 § NML). +5. Köparens bedömning: planeras momspliktig hyresgäst? → överväg att påbörja frivillig beskattning vid första hyresfakturering eller söka uppförandeskede. +6. Arkivera justeringshandling och underlag i 7 år efter justeringsperiodens slut (= upp till 17 år efter förvärvet för fastigheter; 9 kap 1 § 2 st SFF). + +## 8. Pågående lagstiftningsarbete + +Regeringen har tillsatt utredning Dir. 2024:46 om **utökad frivillig beskattning** och nya justeringsregler i förenlighet med EU-rätten (Sögård-anpassning). Uppdraget redovisas senast **30 januari 2026**. Förändringar kan väntas särskilt avseende: +- Möjlighet till frivillig beskattning för bostadsuthyrning till momspliktiga hyresgäster (idag uteslutet). +- Lagfäst slutjämkning vid ren fastighetsöverlåtelse istället för dagens praxis-baserade lösning. +- Förenklat förfarande för uppförandeskede. + +Bevaka. +$gb$, + 'modifier/mixed-verksamhet', + 2, + 1 + ), + ( + 'modifier/mixed-verksamhet/holdingbolag-avdragsratt', + 'modifier', + 'Holdingbolag: avdragsrätt för ingående moms', + $gb$Holdingbolag: avdragsrätt för ingående moms: reference for Blandad verksamhet (moms-split)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1589, + '.claude\skills\modifier\mixed-verksamhet\references\holdingbolag-avdragsratt.md', + $gb$# Holdingbolag: avdragsrätt för ingående moms + +## 1. Grundindelning + +| Typ | Karaktär | Avdragsrätt huvudregel | +|---|---|---| +| **Rent passivt holdingbolag** | Äger andelar utan att aktivt förvalta | Ingen ekonomisk verksamhet → ingen avdragsrätt; ingen momsregistrering | +| **Aktivt (management-) holdingbolag** | Tillhandahåller momspliktiga förvaltningstjänster (administrativa, finansiella, kommersiella, tekniska) mot ersättning till alla dotterbolag | Full avdragsrätt på allmänna omkostnader (Larentia + Minerva C-108/14) | +| **Blandat holdingbolag** | Tillhandahåller management till vissa dotterbolag, passivt ägande av andra | Två-stegs-fördelning (Securenta C-437/06) + pro rata inom ekonomisk del | + +## 2. EU-praxis i kronologisk utveckling + +**C-60/90 Polysar (1991):** Rent passivt ägande är inte ekonomisk verksamhet. + +**C-4/94 BLP Group (1995):** "Direct and immediate link"-testet. Konsultkostnader vid momsfri aktieförsäljning gav inte avdrag: det yttre syftet (momspliktig rörelse i koncernen) är irrelevant. Modifierad senare av AB SKF men grundprincipen står. + +**C-16/00 Cibo Participations (2001):** Aktivt holdingbolag som tillhandahåller momspliktiga tjänster till dotterbolag bedriver ekonomisk verksamhet. Förvärvskostnader för andelar är **allmänna omkostnader** → avdragsrätt. Utdelningar är utanför momsens tillämpningsområde och ska inte ingå i pro rata. "Cibo-doktrinen". + +**C-29/08 AB SKF (2009):** Svensk förhandsfråga från Regeringsrätten. Vid avyttring av dotterbolagsaktier kan moms på rådgivning vara avdragsgill som allmän omkostnad om kostnaderna inte kan övervältras på köparen och ingår i priset på moderbolagets momspliktiga utgående transaktioner. Modifierade BLP. + +**C-108/14 + C-109/14 Larentia + Minerva / Marenave (2015):** Managementholdingbolag har **full avdragsrätt** på allmänna omkostnader vid förvärv. Endast om bolaget även har passivt ägande ska uppdelning göras mellan ekonomisk och icke-ekonomisk del. + +**C-126/14 Sveda (2015):** Avdragsrätt kan finnas även för anläggning som direkt används gratis av tredje man om den är medel för momspliktiga utgående transaktioner. + +**C-132/16 Iberdrola (2017):** Avdrag för arbeten på tredje mans fastighet om de är objektivt nödvändiga för egen momspliktig verksamhet; om de överstiger det nödvändiga begränsas avdraget proportionellt. + +**C-42/19 Sonaecom (2020):** Vid avbrutet förvärv styrs avdragsrätten av den objektiva avsikten. Men när det upplånade kapitalet faktiskt används i en momsfri utgående transaktion (utlåning till moderbolaget) bryts sambandet och avdragsrätten går förlorad. + +**C-437/06 Securenta (2008):** Tvåstegsmodell vid blandad ekonomisk + icke-ekonomisk verksamhet: först fördelning mellan ekonomisk och icke-ekonomisk (medlemsstatens diskretion), sedan pro rata. + +## 3. Svensk HFD-praxis + +**HFD 2014 ref. 18 (I och II):** Skälig grund vid blandad verksamhet. "Uppdelningen ska så långt som möjligt motsvara resursförbrukningen." Senare delvis nedtonad av HFD 2023 ref. 45. + +**HFD 2017 ref. 20 ("Sveaskog"):** Mål 5311-5312-15. Moderbolag med skogsrörelse + dotterbolagsförvaltning sålde dotterbolagsaktier som ett led i omstrukturering för att frigöra kapital till egen momspliktig verksamhet. **Avdrag medgavs** för konsultkostnaderna som allmänna omkostnader. Bröt med RÅ 2010 ref. 56 SKF och RÅ 2003 ref. 36. + +**HFD 2021 ref. 52 ("VicMik"):** Skatteverkets registrering är inte konstitutiv för avdragsrätt, men ett bolag som registrerats i god tro kan inte med retroaktiv verkan nekas avdrag enbart pga att verksamheten inte uppfyller kraven på ekonomisk verksamhet (skydd för berättigade förväntningar). Senare begränsad av HFD 2024 ref. 34 I-II. + +**HFD 2023 ref. 41 ("AB Volvo"):** Mål 1041-1043-22. Bekräftade Sveaskog-doktrinen för försäljning av dotterbolagsaktier som led i omstrukturering. SKV ställningstagande dnr 8-2596368 (2023-10-19) implementerar. + +**HFD 2023 ref. 45 ("VW Finans"):** Mål 7254-7255-22. Direkt effekt av art. 173.1/174 momsdirektivet. Skatteverket kan inte mot den skattskyldiges vilja tvinga fram sektoriserad metod. + +**HFD 2024 ref. 18 ("Lamiflex"):** Mål 3204-23. Moderbolag har avdragsrätt även när management fees endast faktureras till dotterdotterbolag (inte direkta dotterbolag). SKV rättsfallskommentar 2024-03-21. + +## 4. Praktiska kriterier för att vara aktivt holdingbolag + +För att klassas som aktivt och få avdragsrätt krävs: + +1. **Avtal om management fees** med dotterbolagen, undertecknat innan eller i samband med förvärvet. +2. **Faktisk fakturering** mot ersättning: symbolisk eller noll-fakturering räcker inte. +3. **Tjänsterna ska vara momspliktiga**: administrativa, finansiella, kommersiella, tekniska. Inte rena ägartillsynsfunktioner. +4. **Marknadsmässig prissättning**: annars risk för uttagsbeskattning och underkännande som ekonomisk verksamhet. +5. **Tjänsterna ska faktiskt utföras** med dokumentation (tidsredovisning, rapporter, mötesprotokoll). + +Om endast vissa dotterbolag erhåller management → bolaget bedriver **blandad verksamhet**: aktivt avseende fakturerade, passivt avseende övriga. Tvåstegsmodell krävs. + +## 5. Skatteverkets ställningstaganden + +| Dnr | Datum | Status | Innehåll | +|---|---|---|---| +| 202 377677-17/111 | 2017-12-19 | Delvis överspelad | Holdingbolag avdragsrätt, exempel 2 (riskkapitalbolag) ersatt 2024-02-02 dnr 8-2756161 | +| 8-2596368 | 2023-10-19 | Aktuell | Avdrag vid försäljning av dotterbolagsaktier (post-Volvo) | +| 8-2756161 | 2024-02-02 | Aktuell | Riskkapitalbolag, ersätter del av 202 377677-17/111 | + +## 6. Beräkningsexempel: blandat holdingbolag + +Företag M äger 3 dotterbolag. M tillhandahåller management till D1 (aktiv förvaltning, momspliktiga tjänster 5 mkr/år). M äger D2 och D3 passivt utan management. + +Steg 1: Fördelning ekonomisk/icke-ekonomisk (Securenta): +- Antag baserat på resursanalys: 70 % ekonomisk verksamhet (avseende D1) / 30 % icke-ekonomisk (passivt ägande D2+D3). + +Steg 2: Pro rata inom ekonomisk del (Cibo): +- All ekonomisk omsättning är momspliktig (5 mkr management fee) → 100 % avdragsrätt inom ekonomisk del. + +Total avdragsrätt på gemensamma kostnader = 70 % × 100 % = **70 %**. + +Gemensam kostnad 1 000 000 kr + moms 250 000 kr. Bokföring: +- Löpande: D 2649 250 000. +- Bokslut: D 2650 175 000 / D 6999 75 000 / K 2649 250 000. + +Utdelningar från D2/D3 exkluderas helt från pro rata-beräkningen (Cibo). +$gb$, + 'modifier/mixed-verksamhet', + 2, + 1 + ), + ( + 'modifier/mixed-verksamhet/jamkning-mechanics', + 'modifier', + 'Jämkning (justering) av ingående moms på investeringsvaror', + $gb$Jämkning (justering) av ingående moms på investeringsvaror: reference for Blandad verksamhet (moms-split)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1829, + '.claude\skills\modifier\mixed-verksamhet\references\jamkning-mechanics.md', + $gb$# Jämkning (justering) av ingående moms på investeringsvaror + +Lagstöd: ML (2023:200) **15 kap** (NML), motsv. ML (1994:200) **8a kap** (GML). EU-rätt: momsdirektivet 2006/112/EG art. 184-192. Skatteverkets rättsliga vägledning under "Mervärdesskatt → Avdragsrätt → Justering av avdrag". Terminologi i NML: "justering" istället för "jämkning"; "justeringsperiod" istället för "korrigeringstid"; "justeringshandling" istället för "jämkningshandling". Substansen är oförändrad. + +## 1. Investeringsvara: definition och tröskelvärden (15 kap 4 § NML) + +| Typ | Tröskelvärde ingående moms | Motsvarande anskaffning exkl moms | +|---|---|---| +| Maskiner, inventarier, anläggningstillgångar (lös egendom) | ≥ **50 000 kr** per vara | ≥ 200 000 kr | +| Fastighet: ny-, till- eller ombyggnad | ≥ **100 000 kr** summerat under räkenskapsåret | ≥ 400 000 kr | +| Uttagsbeskattad fastighet/lägenhet | ≥ 100 000 kr | ≥ 400 000 kr | +| Hyresrätt/bostadsrätt där hyresgäst/innehavare utfört byggåtgärd | ≥ 100 000 kr | ≥ 400 000 kr | + +Förvärv av tjänster med direkt samband med ny-/till-/ombyggnad räknas in i beloppsgränsen. Verksamhetstillbehör räknas som lös egendom (5-årig justeringsperiod) trots fastighetsbegreppet. + +## 2. Justeringsperiod (15 kap 10 § NML) + +| Typ | Period | Räknas från | +|---|---|---| +| Fastighet, hyresrätt, bostadsrätt | **10 år** | Räkenskapsår då åtgärden gjordes / tillgången togs i bruk | +| Lös egendom | **5 år** | Räkenskapsår då förvärvet skedde | + +I justeringsperioden räknas ALLTID in det räkenskapsår då åtgärden/förvärvet skedde och det räkenskapsår då händelsen inträffar. + +## 3. Justeringsutlösande händelser (15 kap 6-9 §§ NML) + +1. Avdragsrätten **ökar** (ändrad användning till mer momspliktig verksamhet). +2. Avdragsrätten **minskar** (ändrad användning till mer momsfri verksamhet). +3. Avyttring av lös egendom där tidigare förvärv endast delvis medfört avdragsrätt och försäljningen är skattepliktig. +4. Fastighetsöverlåtelse under justeringsperioden (säljaren slutjämkar efter Sögård; köpare övertar EJ vid ren fastighetsöverlåtelse). +5. Verksamhetsöverlåtelse (TOGC) inklusive investeringsvara: förvärvaren övertar via justeringshandling (15 kap 20 §). +6. Övergång till frivillig beskattning (12 kap NML), positiv justering. +7. Frivillig beskattning upphör, negativ justering. +8. Konkurs. +9. Övergång till skattebefrielse för småföretagare. +10. Hyresgäst lämnar lokal där hyresgästen gjort avdrag enligt slussningsregeln. + +**Förenklingsregel:** Justering sker INTE om förändringen i avdragsrätt understiger **5 procentenheter** jämfört med vid anskaffandet. + +**Undantag:** Uttagsbeskattning sker i stället; justeringsperioden har gått ut. + +## 4. Beräkningsformel (15 kap 12, 16-19 §§ NML) + +**Årligt justeringsbelopp (löpande vid ändrad användning):** + +``` +Årligt belopp = Ursprungsbelopp × (Δ avdragsrätt i procentenheter) × 1/N +``` + +där N = 10 (fastighet) eller 5 (lös egendom). + +**Slutjustering (vid överlåtelse, konkurs, övergång till skattebefrielse):** + +``` +Slutjustering = Ursprungsbelopp × Δ avdragsrätt × (återstående år inkl innevarande / N) +``` + +**KRITISKT:** "Ursprungsbelopp" = **total ingående moms vid förvärvet/byggåtgärden**, inte "ursprungligen avdragen moms". Detta är avgörande för positiv justering: även om 0 % drogs av vid förvärvet kan ändrad användning till 100 % momspliktig verksamhet ge rätt till positiv justering beräknat på hela ursprungsbeloppet. + +**Spärregel vid försäljning av lös egendom (motsv. 8a kap 9 § GML):** Positivt justeringsbelopp får inte överstiga utgående momsen på försäljningen (25 % av priset exkl moms). + +## 5. Tre worked examples + +### Exempel A: Verksamhetsöverlåtelse + senare ändrad användning hos förvärvaren + +Företag A bygger om industrifastighet år 1 för 4 000 000 kr + moms 1 000 000 kr. 100 % avdrag (frivillig beskattning, momspliktig hyresgäst). + +- Ursprungsbelopp = **1 000 000 kr**, justeringsperiod 10 år (år 1-10). +- År 4: A säljer som **verksamhetsöverlåtelse** till B (TOGC, art. 19 momsdirektivet). B fortsätter momspliktig uthyrning. A utfärdar justeringshandling. A justerar inte. B övertar med återstående period år 4-10 (7 år). +- År 6: B börjar använda 40 % av ytan till bostadsuthyrning (momsfri). Avdragsrätt 100 % → 60 %. Δ = **40 procentenheter**. +- Årligt justeringsbelopp hos B = 1 000 000 × 40 % × 1/10 = **40 000 kr/år negativ justering** i 5 år (år 6-10) = totalt **200 000 kr återbetalas**. +- Redovisning i första period efter respektive räkenskapsårs utgång. + +### Exempel B: Lokal omvandlas till bostäder mitt i justeringsperioden + +Fastighetsbolag bygger om kontorslokal år 1, 2 000 000 kr + moms 500 000 kr; 100 % avdrag (frivillig beskattning). År 5 omvandlas lokalen till bostadsuthyrning (momsfri). + +- Ursprungsbelopp = **500 000 kr**, justeringsperiod 10 år. +- Δ avdragsrätt = 100 − 0 = **100 procentenheter**. +- Återstående år inkl år 5 = **6 år** (år 5-10). +- Årligt belopp = 500 000 × 100 % × 1/10 = **50 000 kr/år**. +- Totalt **300 000 kr återbetalas** över 6 år. +- Bokföring varje år: D 7820 (eller fastighetskostnad) 50 000 / K 2650 50 000. Redovisas i första redovisningsperiod efter räkenskapsårets utgång. +- Frivillig beskattning för lokalen upphör automatiskt: separat justeringsgrundande händelse men i praktiken samma beräkning. + +### Exempel C: Lokal som tidigare hyrdes momsfritt får momspliktig hyresgäst (positiv justering) + +Bolag äger lokal sedan år 1. Byggåtgärd år 1 för 1 600 000 kr + moms 400 000 kr. Hyresgästen var momsfri → 0 % avdrag drogs vid byggåtgärden. År 3 byter hyresgäst till momspliktigt företag och bolaget beviljas/påbörjar frivillig beskattning. + +- Ursprungsbelopp = **400 000 kr** (oavsett att inget drogs av). +- Δ avdragsrätt = 100 − 0 = **100 procentenheter ökning**. +- Återstående år inkl år 3 = **8 år** (år 3-10). +- Årligt belopp = 400 000 × 100 % × 1/10 = **40 000 kr/år positiv justering**. +- Totalt **320 000 kr ytterligare avdrag** över 8 år. + +**Alternativ:** Retroaktivt avdrag enligt 12 kap NML (motsv. 9 kap 8 § GML) om lokalen ännu inte tagits i bruk: hela momsen dras omedelbart, men då sker ingen justering för dessa kostnader därefter. Val mellan justering och retroaktivt avdrag är strategiskt och ofta gynnsamt för retroaktivt avdrag när investeringen är stor och frivillig beskattning kommer tidigt. + +## 6. Justeringshandling: obligatoriskt innehåll (15 kap 22-23 §§ NML, SKV dnr 8-2349336) + +1. Ursprungsbelopp (ingående moms på förvärvet/åtgärden). +2. Del av ursprungsbeloppet som överlåtaren efter eventuell tidigare justering gjort avdrag för. +3. Tidpunkt för förvärv/åtgärd och avdragstidpunkt. +4. Fördelning per lokal vid fastighet/hyresrätt/bostadsrätt. +5. Uppgift om handling från tidigare överlåtare (om fastigheten gått i flera led). +6. Överlåtarens och förvärvarens namn och adress. +7. Transaktionens art (köp, byte, verksamhetsöverlåtelse). +8. Överlåtarens momsregistreringsnummer. +9. Övrigt av betydelse (avvikande räkenskapsår, tidigare justeringar). + +**Tidsfrist:** Senast vid överlåtelsen (i praktiken senast vid köpekontrakt). Brister kan läkas i efterhand; allvarliga brister gör att handlingen anses inte utfärdad → justeringsskyldigheten kvarstår hos överlåtaren. + +**Arkivering:** 7 år efter utgången av det kalenderår då justeringsperioden löpte ut (9 kap 1 § 2 st SFF) = upp till **17 år** efter förvärvet för fastigheter. +$gb$, + 'modifier/mixed-verksamhet', + 2, + 1 + ), + ( + 'modifier/single-shareholder-ab-fmb', + 'modifier', + 'Aktiebolag med en aktieägare (fåmansbolag)', + $gb$Aktiebolag där en fysisk person äger > 50% av kapitalet (eller där < 4 personer tillsammans äger > 50%) klassas som fåmansbolag och omfattas av 3:12-reglerna. Den enskilda ägaren är samtidigt anställd ("verksam i betydande omfattning") och styr själv balansen mellan lön och utdelning. Avgörande för ekonomin men trivialt i löpande bokföring: modifern flaggar för agenten att 3:12, gränsbelopp, K10 och löneunderlagsregeln måste vara med i rådgivningen.$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 919, + '.claude\skills\modifier\single-shareholder-ab-fmb\SKILL.md', + $gb$--- +id: modifier/single-shareholder-ab-fmb +tier: modifier +title: "Aktiebolag med en aktieägare (fåmansbolag)" +description: > + Aktiebolag där en fysisk person äger > 50% av kapitalet (eller där < 4 personer + tillsammans äger > 50%) klassas som fåmansbolag och omfattas av 3:12-reglerna. + Den enskilda ägaren är samtidigt anställd ("verksam i betydande omfattning") och + styr själv balansen mellan lön och utdelning. Avgörande för ekonomin men trivialt + i löpande bokföring: modifern flaggar för agenten att 3:12, gränsbelopp, K10 + och löneunderlagsregeln måste vara med i rådgivningen. +trigger_signals: + ownership: "single_shareholder" + bas_account_patterns: ["2898", "2899", "2091", "2098", "2099"] +version: 1 +--- + +> **POC test content.** Replace with deep research material before relying on +> this for production-quality advice. + +# Single-shareholder AB (fåmansbolag) + +## When this applies + +The active company is an aktiebolag where one natural person owns > 50% of +the shares. This is the most common form among Accounted's AB users. The owner +is typically also a full-time anställd in the company and "verksam i betydande +omfattning", which triggers 3:12-reglerna (53 kap. IL). + +This modifier composes with: +- [[horizontal/swedish-tax-planning]]: for 3:12, gränsbelopp, löneunderlag detail +- [[horizontal/swedish-payroll]]: for owner-as-employee salary mechanics +- [[horizontal/swedish-year-end-closing]]: for resultatdisposition (lön vs. utdelning) +- [[horizontal/swedish-financial-reporting]]: för K2/K3-årsredovisning + +## Implications + +1. **Lön vs. utdelning**: ägaren styr själv. Under gränsbeloppet beskattas + utdelning som kapital (20%). Över gränsbeloppet beskattas det överskjutande + som tjänsteinkomst (kommunal + statlig + arbetsgivaravgifter, högsta marginalskatt). + Lön ger socialförsäkringsrätt och pension; utdelning gör det inte. +2. **Löneunderlagsregeln** (3:12-reglernas favorit): genom att ägaren tar ut + minst en viss årslön (cirka 6 IBB + 5% av total löneunderlag, max 9,6 IBB) + adderas en stor del av bolagets totala lönesumma till gränsbeloppet. +3. **K10**: ägaren ska lämna K10-blankett varje år där gränsbelopp, + sparade utdelningsutrymmen och utdelningen själv redovisas. +4. **2026-års 3:12-reform**: vissa parametrar är reviderade (löneunderlag, + förenklingsregel). Verifiera mot aktuell version av swedish-tax-planning innan + konkret rådgivning. + +## BAS-konton + +| Konto | Användning | +|-------|------------| +| 2091 | Balanserad vinst eller förlust (utdelningsutrymme efter bokslut) | +| 2098 | Vinst eller förlust föregående år (innan resultatdisposition) | +| 2099 | Årets resultat (innan bokslutsdisposition) | +| 2898 | Outtagen vinstutdelning till delägare | +| 2899 | Övriga skulder till delägare (t.ex. revers från ägartillskott) | +| 7210 | Lön till företagsledare (ofta separat från andra löner för K10-spår) | +| 7510 | Arbetsgivaravgifter på 7210 | + +## Regulatoriska kantfall + +- **Förbjudet lån från bolaget** (21 kap. ABL): ägaren får inte låna pengar + av bolaget. Bryts förbudet beskattas hela lånet som tjänsteinkomst (53 kap. IL). +- **Stoppregler för uthyrning av bostad till eget bolag**: marknadshyra och + saklig grund krävs. +- **Karens vid avstämning av karensbolag**: när bolaget vilar måste det vila + i 5 hela kalenderår innan ägaren kan ta ut ackumulerade gränsbelopp som + kapitalinkomst utan tjänstebeskattning. +- **Närståendetransaktioner**: utdelning till barn/make beräknas mot ägarens + K10, inte mottagarens. + +## References + +- Planned reference (not yet authored): a step-by-step K10 walkthrough example. +- Planned reference (not yet authored): the 2026 reformed löneunderlag parameters. +$gb$, + NULL, + 4, + 1 + ), + ( + 'vertical/bygg-hantverk', + 'vertical', + 'Bygg & hantverk (SNI 41-43)', + $gb$Svensk bokföringsskill för bygg- och hantverksföretag i SNI 41 (uppförande av byggnader), 42 (anläggningsarbeten) och 43 (specialiserad bygg- och installationsverksamhet). Distinkta arbetsflöden: omvänd betalningsskyldighet på byggtjänster B2B (ML 2023:200 16 kap. 13 §), ROT-fakturering enligt fakturamodellen, elektronisk personalliggare/ID06 (SFL 39 kap. 11 a §), successiv vinstavräkning vs färdigställandemetoden (K3 23.18-23.37, K2 6.13-6.26, IL 17 kap. 23-32 §§) och ackordslön + branschpension enligt Byggavtalet/Installationsavtalet/Måleriavtalet. Använd när konteringen rör UE-fakturor, ROT-poster, byggarbetsplats, entreprenadkontrakt AB 04/ABT 06/ABS 18, à conto-fakturering, pågående arbeten, eller bygg-/installation-/måleri-CBA.$gb$, + ARRAY['41.10', '41.20', '42.11', '42.12', '42.13', '42.21', '42.22', '42.91', '42.99', '43.11', '43.12', '43.13', '43.21', '43.22', '43.29', '43.31', '43.32', '43.33', '43.34', '43.39', '43.91', '43.99']::text[], + $gb${}$gb$::jsonb, + 9800, + '.claude\skills\industry\bygg-hantverk\SKILL.md', + $gb$--- +id: vertical/bygg-hantverk +tier: vertical +title: "Bygg & hantverk (SNI 41-43)" +description: > + Svensk bokföringsskill för bygg- och hantverksföretag i SNI 41 (uppförande av byggnader), 42 (anläggningsarbeten) och 43 (specialiserad bygg- och installationsverksamhet). Distinkta arbetsflöden: omvänd betalningsskyldighet på byggtjänster B2B (ML 2023:200 16 kap. 13 §), ROT-fakturering enligt fakturamodellen, elektronisk personalliggare/ID06 (SFL 39 kap. 11 a §), successiv vinstavräkning vs färdigställandemetoden (K3 23.18-23.37, K2 6.13-6.26, IL 17 kap. 23-32 §§) och ackordslön + branschpension enligt Byggavtalet/Installationsavtalet/Måleriavtalet. Använd när konteringen rör UE-fakturor, ROT-poster, byggarbetsplats, entreprenadkontrakt AB 04/ABT 06/ABS 18, à conto-fakturering, pågående arbeten, eller bygg-/installation-/måleri-CBA. +sni_prefixes: ["41.10", "41.20", "42.11", "42.12", "42.13", "42.21", "42.22", "42.91", "42.99", "43.11", "43.12", "43.13", "43.21", "43.22", "43.29", "43.31", "43.32", "43.33", "43.34", "43.39", "43.91", "43.99"] +trigger_signals: + text_patterns: + - "omvänd betalningsskyldighet" + - "omvänd skattskyldighet" + - "ROT-avdrag" + - "rotarbete" + - "fakturamodellen" + - "ID06" + - "personalliggare" + - "byggarbetsplats" + - "akontofaktura" + - "à conto" + - "UE-faktura" + - "underentreprenör" + - "ÄTA-arbete" + - "slutbesiktning" + - "AB 04" + - "ABT 06" + - "ABS 18" + - "pågående arbete" + - "successiv vinstavräkning" + - "byggherre" + - "fastighetsbeteckning" + - "Byggnads" + - "ackord" + - "Målerifakta" + - "Mätföretaget" + bas_account_signals: + - "1471" + - "1478" + - "1513" + - "1620" + - "2340" + - "2450" + - "2614" + - "2617" + - "2647" + - "3231" + - "4415" + - "4425" + - "4600" + - "4970" + - "5480" + - "6330" + - "6360" + - "6810" + - "7010" +estimated_tokens: 9800 +version: 1 +--- + +# Bygg och hantverk: vertikalspecifik bokföringsskill + +## 1. När denna skill ska laddas + +Ladda när företaget har huvudsaklig verksamhet inom SNI 41-43 (uppförande av byggnader, anläggningsarbeten, specialiserad bygg- och installationsverksamhet), eller när konteringsärendet innehåller någon av följande markörer: leverantörsfaktura med texten "omvänd betalningsskyldighet/skattskyldighet"; kund- eller leverantörsfaktura där arbetskostnad är separerad och hänvisar till ROT/skattereduktion; verifikat märkt ID06/personalliggare/byggarbetsplats; entreprenadkontrakt enligt AB 04, ABT 06 eller ABS 18; à conto-fakturering kopplad till uppdragsmilstolpar; närvaro av BAS-kontona 1620/2450, 1471/2450, 2614/2617/2647, 3231, 4415/4425 eller 4600. Denna skill täcker ENDAST vertikalspecifika avvikelser: generella moms-, BFL-, SIE-, lön- och bokslutsregler dras från horisontella skills. + +## 2. Typiska arbetsflödesmönster + +**Fakturering.** Bygg- och installationsbolag fakturerar nästan aldrig som rena varuförsäljare. Tre fakturatyper dominerar och kräver olika kontering: **akontofakturor (à conto)** under entreprenadens gång enligt avtalad betalplan; **slutfaktura** efter godkänd slutbesiktning enligt AB 04 kap. 7 / ABT 06 kap. 7; och **ÄTA-fakturor** för Ändrings-, Tilläggs- och Avgående arbeten enligt AB 04 kap. 2 §§ 6-9. För B2B mellan byggföretag ställs samtliga fakturor ut **utan moms** med text "Omvänd betalningsskyldighet" och hänvisning till **16 kap. 13 § ML (2023:200)** eller artikel 199.1 a momsdirektivet; köparens VAT-nummer är obligatoriskt på fakturan (17 kap. 24 § ML). Mot privatperson eller icke-byggföretag debiteras 25 % moms och ROT-avdrag tillämpas via **fakturamodellen** (67 kap. 11-19 §§ IL + lag 2009:194): arbetskostnad separeras, preliminär skattereduktion (30 % normalt, 50 % 2025-05-12 till 2025-12-31, åter 30 % från 2026-01-01) dras direkt på fakturan, utföraren begär utbetalning från Skatteverket via e-tjänst senast 31 januari året efter betalningsåret. + +**Utgiftsrytm.** Materialinköp från byggvaruhus (Beijer, Optimera, Ahlsell) flödar dagligen och bokförs på 4010 eller 5460; större beställningar är ofta projekt-specifika. UE-tjänster bokförs i 46-serien (4600-gruppen) med särskild moms-mekanik vid omvänd betalningsskyldighet. ID06-kort, fortbildning säkerhet på väg, fallskydd, ställningsutbildning är återkommande poster (bokförs typiskt på 6991: det finns inget dedikerat ID06-konto i BAS 2025). Verktyg under brytpunkten (½ pbb, 2025 = 29 400 kr) går på 5410 Förbrukningsinventarier; över brytpunkten aktiveras på 1220-serien. + +**Avstämning.** Avstämning sker **per projekt/objekt** snarare än per period: varje projekt har egen kostnadssamlingskonto i 1471 (alternativregeln) eller behandlas via 1620/2450 (huvudregeln/PoC enligt K3 23.18). UE-skulder stäms av per leverantör och per projekt vid varje månadsslut: om à conto-fakturor från UE inte är slutfakturerade vid bokslut ska reservationen för upparbetat men ej fakturerat hanteras. ROT-utbetalningar från Skatteverket stäms av på 1513 Kundfordringar, delad faktura: differensen mellan kundens betalning och Skatteverkets utbetalning ska gå mot noll per avslutad faktura inom 60 dagar. + +**Lönerytm och kollektivavtal.** Löneutbetalning sker **vecko- eller månadsvis beroende på CBA**. Yrkesarbetare lönesätts ofta med ackord (resultatlön) i tillägg till tidlön. Kollektivavtal per sub-vertikal mappas grovt så här: Byggavtalet (Byggnads + Byggföretagen) täcker SNI 41, 42, 43.11, 43.12, 43.31, 43.32, 43.33, 43.39, 43.99; Installationsavtalet (SEF + Installatörsföretagen) täcker 43.21; Teknikinstallationsavtalet VVS & Kyl (Byggnads + Installatörsföretagen) täcker 43.22; Plåt- och Ventilationsavtalet (Byggnads + Plåt & Vent Företagen) täcker plåt- och ventilationsdelarna av 43.22/43.29/43.91; Måleriavtalet (Byggnads + Måleriföretagen) täcker måleri-delen av 43.34; Glasmästeriavtalet (Byggnads + Glasbranschföreningen) täcker glasmästeri-delen av 43.34. Alla avtal har period **2025-05-01 till 2027-04-30** med märket 6,4 %. Försäkringspaket: AGS, AGB, TFA, TGL och Avtalspension SAF-LO via Fora för kollektivanställda; ITP via Collectum för tjänstemän. Se `references/kollektivavtal.md` för CBA-detaljer per sub-vertikal. + +## 3. BAS 2025-kontomönster (verifierat mot bas.se) + +| Konto | Exakt titel BAS 2025 | Branschkontext | +|-------|----------------------|----------------| +| 1181 | Pågående ny-, till- och ombyggnad | Egen byggnation av anläggningstillgång (byggherre i egen regi). | +| 1471 | Pågående arbeten, nedlagda kostnader | Aktiverade utgifter per uppdrag, alternativregeln (färdigställandemetoden) K3/K2. | +| 1478 | Pågående arbeten, fakturering | À conto-fakturering bokförd under pågående uppdrag, alternativregeln. **OBS: ej "Förskott till leverantörer".** | +| 1513 | Kundfordringar, delad faktura | Skatteverkets ROT-del av ROT-fakturor; saldot ska gå mot noll när Skatteverket utbetalar. | +| 1620 | Upparbetad men ej fakturerad intäkt | Successiv vinstavräkning (PoC) huvudregeln K3 23.18 ff; positiv differens upparbetat ÷ fakturerat per uppdrag. | +| 2340 | Byggnadskreditiv | Långfristig byggkredit; kortfristig del separeras till 2412. | +| 2420 | Förskott från kunder | Mottagna förskott som inte motsvarar upparbetat värde. | +| 2431 | Pågående arbeten, fakturering | Skuldsidans à conto-konto för alternativregeln (motpart till 1471). | +| 2450 | Fakturerad men ej upparbetad intäkt | PoC-skuldsida (motpart till 1620). | +| 2614 | Utgående moms, omvänd betalningsskyldighet, 25 % | Säljarens redovisningskonto vid B2B-bygg (rapporteras i ruta 41). | +| 2617 | Utgående moms omvänd betalningsskyldighet (köparen) | Köparens beräknade utgående moms vid UE-tjänsteinköp (ruta 30). | +| 2645 | Beräknad ingående moms på förvärv från utlandet | Endast vid utländska UE; ej för svenska omvänd-byggmoms. | +| 2647 | Ingående moms, omvänd betalningsskyldighet varor och tjänster i Sverige | Köparens avdragsgilla ingående moms vid omvänd byggmoms (ruta 48). | +| 3231 | Försäljning inom byggsektorn, omvänd betalningsskyldighet moms | Centralt försäljningskonto vid B2B-bygg utan moms (ruta 41). | +| 4415 | Inköpta varor i Sverige, omvänd betalningsskyldighet, 25 % moms | Vid varuleveranser inom omvänd (sällsynt i bygg, främst skrot/metallhandel). | +| 4425 | Inköpta tjänster i Sverige, omvänd betalningsskyldighet, 25 % moms | **Huvudkontot för UE-tjänster** vid omvänd betalningsskyldighet (ruta 24). | +| 4600 | Legoarbeten och underentreprenader (gruppkonto) | Strukturkonto; underkonton per UE-leverantör eller projekt vanligt. | +| 4970 | Förändring av pågående arbeten, nedlagda kostnader | Motpart till 1471 vid in-/utbokning av pågående arbete alternativregeln. | +| 5410 | Förbrukningsinventarier | Verktyg under ½ pbb (2025 = 29 400 kr). | +| 5460 | Förbrukningsmaterial | Småmaterial under skäliga gräns (skruv, spik, fogmassa). | +| 5480 | Arbetskläder och skyddsmaterial | Hjälm, skor S3, hörselskydd, fallskydd, avdragsgillt enligt SKV. | +| 5611-5613, 5615, 5616, 5619 | Personbilskostnader | Servicebil personbil; OBS 50 % moms-avdrag på leasing/hyra (ML). | +| 5620 | Lastbilskostnader | Servicebil lätt lastbil: 100 % moms-avdrag om uppfyller skåp-/öppet flak-krav. | +| 6330 | Förluster i pågående arbeten | Reservering av befarad förlust per K3 23.32. | +| 6360 | Garantikostnader (med 6361, 6362) | Garantiavsättning för AB 04/ABT 06 garantitid. | +| 6510 | Mätningskostnader | Mätningsarvode till Målerifakta, Mätföretaget i Sverige (Byggavtalet § 2 / Installationsavtalet). | +| 6810 | Inhyrd produktionspersonal | Skild från övriga konsulttjänster; ofta bokföringsmässigt felklassificerat som UE. | +| 6991 | Övriga externa kostnader, avdragsgilla | Standardkonto för ID06-avgifter (inget dedikerat konto finns). | +| 6992 | Övriga externa kostnader, ej avdragsgilla | Kontrollavgift för bristande personalliggare (50 kap. SFL), ej avdragsgill. | +| 7010 | Löner till kollektivanställda | Yrkesarbetare. **OBS: ej 7210**, 7210 är tjänstemän. | +| 7510 | Arbetsgivaravgifter 31,42 % | Underkonton 7511-7519. | +| 7570 | Premier för arbetsmarknadsförsäkringar | TFA, AGS, AGB, TGL via Fora. **Konto 7560 finns inte i BAS 2025.** | +| 7411 | Premier för kollektiva pensionsförsäkringar | Avtalspension SAF-LO via Fora. | + +Konton som vanligtvis EJ existerar med förväntade namn: **6541 (ID06-kort kostnader)** finns inte: använd 6991. **3232 (Utbetald ROT Skatteverket)** finns inte: ROT-fordran hanteras via 1513. **7560** finns inte: använd 7570. **5614** är vakant. Verifiera alltid mot kundens lokala kontoplan eftersom företag ofta lägger upp egna underkonton. + +## 4. Regelmässiga gränsfall (huvudvärdet i denna skill) + +### 4a. Omvänd betalningsskyldighet på byggtjänster + +**Lagrum efter 2023-07-01.** Bestämmelsen flyttades från 1 kap. 2 § första stycket 4 b ML (1994:200) till **16 kap. 13 § ML (2023:200)** (ikraftträdande 2023-07-01). Materiellt oförändrad: första stycket = köparkravet, andra stycket = tjänstekatalogen (punkt 1 byggtjänster, punkt 2 byggstädning, punkt 3 personaluthyrning för punkterna 1-2). Terminologin är ändrad från "omvänd skattskyldighet" till **"omvänd betalningsskyldighet"**: BAS 2025 har uppdaterat kontotexterna med ändringsstreck men det är samma regel. Faktureringsregler i 17 kap. 24 § ML (fullständig faktura); förenklad faktura (17 kap. 28 §) får inte användas. Skatteverket har explicit förklarat att alla äldre ställningstaganden om "omvänd skattskyldighet inom byggsektorn" gäller vidare; endast paragrafhänvisningarna är inaktuella. + +**Vilka tjänster triggar omvänd.** Skatteverket vägleds av SNI 2002 huvudgrupp 45: (a) mark- och grundarbeten, (b) bygg- och anläggningsarbeten, (c) bygginstallationer (el, VVS, ventilation, isolering, larm), (d) slutbehandling (puts, snickeri, golv, måleri, glasmästeri), (e) uthyrning av bygg-/anläggningsmaskiner **med förare**, plus byggstädning och personaluthyrning för dessa. Skatteverkets uttömmande A-Ö-förteckning ligger på `skatteverket.se/foretag/moms/sarskildamomsregler/byggverksamhet`. Tjänsten måste avse fastighet enligt ML (2 kap. 11 §). + +**Köparkravet.** Köparen är betalningsskyldig endast om denne är en beskattningsbar person som **"inte endast tillfälligt"** tillhandahåller sådana tjänster (= byggföretag i vid mening), eller är mellanman som säljer vidare till sådan. "Inte endast tillfälligt" tolkas brett: t.ex. en kökstillverkare med monteringsverksamhet på 0,06 % av omsättningen och ~40 tillfällen/år omfattas (SRN 2014). Köparens SNI-kod är **inte avgörande**: det är faktisk verksamhet som räknas. Status upphör först vid avveckling av byggdelen. Stat och kommun kan vara byggföretag (Skatteverket dnr 8-1148796 omarbetad till dnr 8-2718597; dnr 8-1228116 staten). + +**Gränsfall.** Material som ingår i byggtjänst → allt räknas som tjänst (RÅ 2010 ref. 50 I/II förblir ledande). Markupplåtelse och fastighetsförsäljning är undantagna enligt 10 kap. 35 § ML, ej byggtjänst. Byggstädning omfattas; lokalstädning, snöskottning och bortforsling av byggavfall omfattas inte. Maskinuthyrning med förare = omvänd; utan förare = ej omvänd. Projektering/arkitekt som självständig tjänst = ej omvänd; men som del av entreprenad → omvänd. 12 % moms på reparation av cyklar/skor/lädervaror/kläder/hushållslinne (9 kap. 7 § ML) har ingen överlappning med byggtjänster: dessa varor blir aldrig fastighet. Försäljning till privatperson eller icke-byggföretag → 25 % moms, ej omvänd; ROT påverkar inte momssatsen. + +**Ställningstaganden senaste 5 åren.** Inga materiella nyheter 2024-2026; flera ställningstaganden från 2017 är omarbetade för att uppdatera paragrafhänvisningar. Centrala: dnr 131 101175-17/111 (FoS A allmänna förutsättningar), 131 101180-17/111 (FoS B arbete på byggnader), 131 101225-17/111 (FoS C mark), 131 101266-17/111 (FoS D bedömningsfrågor), 202 157785-19/111 (lyftarbeten, byggkran, bygghiss), 202 448424-19/111 (fastighetsbegreppet), 8-1148796 (kommun, omarb. 8-2718597), 8-1228116 (staten), 8-724682 (fakturatext). Se `references/momsregler.md` för fullständig lista och URL. + +### 4b. Pågående arbeten och entreprenadavtal + +**K3 (BFNAR 2012:1) kapitel 23, inte 2017:1.** Brukstexten i uppgiftsbrevet hänvisade till BFNAR 2017:1; det korrekta är **BFNAR 2012:1** (K3, allmänna råd om årsredovisning och koncernredovisning), kapitel 23 "Intäkter". Tillämpningsområde i 23.1; definitioner i 23.9; **huvudregeln successiv vinstavräkning (PoC) i 23.18-23.27**: tillämpas när uppdragets ekonomiska utfall kan beräknas tillförlitligt (kriterier i 23.18). Färdigställandegrad enligt 23.22 (cost-to-cost mest vanlig). Om utfallet inte kan beräknas tillförlitligt → nollavräkning (23.23). **Alternativregeln färdigställandemetoden i 23.31-23.37**: får tillämpas i **juridisk person** för uppdrag i bygg-, anläggnings-, hantverks- eller konsultrörelse enligt 17 kap. 23 § IL (kopplingsregeln). Befarad förlust ska redovisas omedelbart oavsett metod (23.32). I koncernredovisning gäller **endast PoC**: färdigställandemetoden är förbjuden där. + +**K2 (BFNAR 2016:10) kapitel 6.** Tjänsteuppdrag och entreprenaduppdrag i punkterna 6.13-6.26. Löpande räkning enligt 6.13-6.14: intäkt redovisas i takt med utförande och materialleverans, alternativt enligt fakturering (kopplingen till IL 17 kap. 26 §). Fast pris enligt 6.15: företaget väljer **antingen huvudregeln (PoC) eller alternativregeln (färdigställandemetoden)** och tillämpar samma metod på samtliga fastprisuppdrag. Pågående arbete i BR enligt 6.24: bruttoredovisning per uppdrag obligatorisk (Srf U 14); kvittning mellan uppdrag uttryckligen förbjuden för räkenskapsår som inleds efter 2025-12-31 (BFN-beslut 2025-06-16). Se `references/pagaende-arbeten.md` för flödesexempel. + +**IL (1999:1229) 17 kap. 23-32 §§.** Kopplingsregeln i **17 kap. 23 §**: redovisning av pågående arbeten i bygg-, anläggnings-, hantverks- eller konsultrörelse följs vid beskattningen om inte 24-32 §§ avviker. **17 kap. 24 §** definierar löpande räkning (≥ 90 % av arvodet baserat på tidsenhet/utgifter enligt SKV A 2016:7). **17 kap. 26 §** = faktureringsmetoden för löpande räkning: värdet behöver inte tas upp som tillgång; istället utgör fakturerat belopp intäkt. **17 kap. 27 § första stycket** = huvudregeln för fast pris (lägsta värdets princip mellan anskaffningsvärde och nettoförsäljningsvärde); **andra stycket = 97 %-regeln/alternativregeln** för byggnads-, anläggnings- och hantverksrörelse (men **inte konsultrörelse**). SKV A 2016:6 ger värderingsvägledning. **HFD 2011 ref. 20 (Skanska)** förblir ledande prejudikat för faktureringsmetoden och frikoppling skatt↔redovisning vid löpande räkning. + +### 4c. ROT-avdrag (skattereduktion för rotarbete) + +**Lagrum.** IL 67 kap. 11-19 §§ med definition av rotarbete i **13 a §** (reparation, underhåll, om-/tillbyggnad av småhus, bostadsrätt, ägarlägenhet) och uttömmande undantag i **13 c §** (installationer/service på maskiner och inventarier; arbete med försäkringsersättning). Krav på utförare har F-skatt (67 kap. 16 § 1). Krav på elektronisk betalning (67 kap. 19 §) sedan 2020-01-01. Förfarandet regleras i lag (2009:194) om förfarandet vid skattereduktion för hushållsarbete (HUSFL), särskilt 4, 6, 7, 8, 11 §§. + +**Belopp och subventionsgrad.** Ordinarie tak 50 000 kr/person/år för ROT 2025-2026, inom ett gemensamt utrymme på 75 000 kr/person/år (max 50 000 kr ROT). Subventionsgrad **30 % av arbetskostnaden** ordinärt, tillfälligt höjt till **50 %** under perioden **2025-05-12 till 2025-12-31** enligt prop. 2024/25:156 (FiU32); återgång till 30 % från 2026-01-01. Avgörande för procentsatsen är **betalningsdatum**, inte fakturadatum. Under 2024 var taket tillfälligt höjt till 75 000 kr separat för ROT: det är inte längre fallet. + +**Fakturamodellen och dokumentation.** Utföraren drar preliminär skattereduktion på fakturan; kund betalar elektroniskt; utföraren begär utbetalning från Skatteverket senast 31 januari året efter betalningsåret. Begäran ska innehålla org.nr, kunds personnummer, fastighetsbeteckning eller lägenhetsnr + brf-org.nr, antal arbetstimmar, art av arbete, arbetskostnad och debiterad reduktion, samt betalningsdatum (sedan 2015-01-01 efter prop. 2014/15:10). + +**Gränsfall.** Endast arbetskostnad; material, resor, maskinhyra ger inte ROT. Nybyggnation av småhus < 5 år ger inte ROT. Ekonomibyggnader, fritidshus där sökanden inte bor, och bostadsrätt där annan än sökanden bor permanent omfattas inte. UE kan utföra arbetet om huvudutförare har F-skatt. SRN 2023-07-19 dnr 83-22/D drog gränsen mellan ROT och skattereduktion för grön teknik (separata utrymmen). Försäkringsersättning utesluter ROT (SKV dnr 131 338276-10/111). + +### 4d. Personalliggare, ID06 och kontrollavgift + +**Lagrum.** Skatteförfarandelagen (2011:1244) **39 kap. 11 a-11 b §§ och 12 §**, med ikraftträdande 2016-01-01 efter prop. 2014/15:6 (SFS 2014:1474). Anmälningsplikt för byggarbetsplats i 7 kap. 2 a § SFL. Kontrollbesök i 42 kap. 8 §; kontrollavgift i **50 kap. 3-6 §§** med befrielsegrund i 51 kap. 1 §. Tekniska krav i 9 kap. 5 § skatteförfarandeförordningen (2011:1261) och SKVFS 2015:6. Lag (2018:744) är en ändringslag som utvidgade personalliggarplikt till andra branscher: huvudlagen är fortsatt SFL. + +**Tröskel och plikt.** Byggherren ska tillhandahålla elektronisk personalliggare endast om **sammanlagd kostnad för byggverksamheten (arbete + material exkl. moms) antas överstiga 4 prisbasbelopp** (39 kap. 11 b § andra stycket). 2025: 4 × 58 800 = **235 200 kr**. Privat byggherre som inte bedriver näringsverksamhet är undantagen. Byggherren kan via skriftligt avtal överlåta ansvaret till general-/totalentreprenör (men ej vid delad entreprenad eller till UE). Uppgifter bevaras 2 år efter beskattningsårets utgång. + +**Kontrollavgifter.** 12 500 kr vid bristande personalliggare, +2 500 kr per oregistrerad verksam person på platsen, 25 000 kr om byggarbetsplatsen inte anmälts, 12 500 kr om byggherren inte tillhandahåller utrustning, förhöjd till 25 000 kr vid ny överträdelse inom 1 år. **Kontrollavgift är ej skattemässigt avdragsgill**: bokförs på 6992. + +**ID06.** Inget lagkrav, men branschens de facto-standard. ID06 AB är branschägt (Byggföretagen m.fl.). Kortet identifierar individ, kopplar till arbetsgivare och fungerar som inpassering + närvaroregistrering i personalliggaren. ID06-avgifter bokförs på 6991 (inget dedikerat BAS-konto finns). + +### 4e. Sektorlagar och standardavtal + +**AB 04** (utförandeentreprenad) och **ABT 06** (totalentreprenad), utgivna av Byggandets Kontraktskommitté (BKK), är standardavtal som gäller när de åberopas. Bokföringsmässigt relevanta klausuler: **slutbesiktning** (kap. 7) utgör avlämnande och startpunkt för garantitid + 10-årig ansvarstid; **ÄTA-arbeten** (AB 04 kap. 2 §§ 6-9) ska beställas skriftligen och faktureras separat; **garantitider** är AB 04 = 5 år arbetsprestation + 2 år material, ABT 06 = 5 år hela entreprenaden (med 2 år för beställarspecificerat fabrikat); entreprenörens fordran preskriberas 6 månader efter godkännande (kap. 6 § 19): kritisk deadline för slutfakturering. Innehållna belopp för garantitid ska periodiseras. BKK arbetar på **AB 25 och ABPU 25** med planerad lansering sommaren 2026: verifiera vid uppdatering. + +**ABS 18** (allmänna bestämmelser för småhusentreprenader till konsument), Konsumentverket m.fl. 2018, ersatte ABS 09. Kräver **färdigställandeskydd** enligt lag (2014:227). 2-årig garantipresumtion enligt KtjL § 59. + +**Konsumenttjänstlagen (1985:716)** vid arbete åt konsument: § 17 reklamation inom skälig tid (max 2 mån alltid i tid; yttersta gräns 3 år lös sak / **10 år för fast egendom**). § 36 **15 %-regeln**: ungefärligt pris får överskridas med max 15 %. §§ 51-61 särregler för småhusentreprenad: § 51 "kunden har alltid rätt"-presumtionen vid otydligt avtal; § 59 2-årig garantipresumtion efter godkänd slutbesiktning; § 60-61 slutbesiktning och 6 mån granskningsfrist. Längre reklamationsfrist för fast egendom motiverar **garantiavsättning** på 2220/6360 vid bokslut. + +### 4f. HFD-domar och Skatteverkets ställningstaganden 2020-2026 + +Området är relativt stabilt: få nya HFD-prejudikat. Mest relevanta: **HFD 2023 ref. 10 (mål 651-22, JM AB)** om byggnadsrörelse och uttagsmoms vid successiv avyttring av ägarlägenheter; **HFD 2022 ref. 28** om gränsdragning vara/tjänst. **RÅ 2010 ref. 50 I/II** förblir ledande för material-i-tjänst-doktrinen; **HFD 2011 ref. 20** för faktureringsmetoden vid löpande räkning; **HFD 2016 ref. 29** för ROT (betalning från annan än köparen). **SRN 2023-07-07 dnr 83-22/D** ROT vs grön teknik. **SRN 2023-07-03** byggnadsrörelse-klassificering av drivmedelsanläggning. För kontrollavgifter avgörs de flesta målen på kammarrätts-nivå utan att nå HFD; befrielsegrunder tolkas restriktivt. Se `references/praxis.md` för full lista. + +## 5. De tre vanligaste felmönstren + +### 5.1 UE-faktura bokförs med ingående moms i stället för omvänd betalningsskyldighet + +**Fel.** Bokföraren tar emot en UE-faktura inom bygg (4 000 kr utan moms, med text "omvänd betalningsskyldighet") och bokför som om det vore ordinär moms: Debet 4010 4 000 / Debet 2641 1 000 (uppfunnen moms) / Kredit 2440 5 000. Konsekvens: säljarens nollmomsfaktura matchas mot uppfunnen ingående moms; ingen utgående förvärvsmoms i ruta 30; avdrag i ruta 48 är ogiltigt. Vid skatterevision återkrävs ingående moms + skattetillägg. + +**Rätt.** Säljaren fakturerar 4 000 kr utan moms med hänvisning till 16 kap. 13 § ML. Köparens bokföring: Debet **4425** Inköpta tjänster Sverige omvänd 25 % 4 000 / Kredit **2440** Leverantörsskulder 4 000; samtidigt Debet **2647** Ingående moms omvänd 1 000 / Kredit **2617** Utgående moms omvänd 1 000. Momsdeklaration: beskattningsunderlag i ruta 24, utgående i ruta 30, ingående i ruta 48. Nettot mot Skatteverket är noll vid full avdragsrätt, men måste redovisas. Lagref: 16 kap. 13 § och 17 kap. 24 § ML (2023:200). + +### 5.2 ROT-faktura konteras utan delning mellan kund och Skatteverket, eller ROT räknas på materialdelen + +**Fel.** Hela fakturan (arbete + material + moms) bokas på 1510 Kundfordringar; när Skatteverket utbetalar bokas det som ny intäkt på 3010, dubbelintäkt. Eller: bokföraren räknar 30 % ROT på hela fakturan inklusive material: för stor begäran om utbetalning leder till delvist avslag och korrigeringsfaktura mot kund. + +**Rätt.** Exempel: arbete 24 500 + material x + moms 25 %; ROT-grund = endast arbete; reduktion 30 % × 24 500 = 7 350 (eller 50 % × 24 500 = 12 250 under 2025-05-12 till 2025-12-31). Vid fakturering: Debet 1511 (kundens del exkl. ROT) / Debet **1513** Kundfordringar, delad faktura (ROT-del) / Kredit 2611 (utgående moms 25 %) / Kredit 3011 (arbete) / Kredit 3041 (material). Vid kundens betalning: Debet 1930 / Kredit 1511. Vid Skatteverkets utbetalning: Debet 1930 / Kredit **1513**: saldot på 1513 ska gå mot noll. Lagref: 67 kap. 11-19 §§ IL; lag 2009:194 §§ 6-12. Se `references/rot-faktura-exempel.md` för komplett verifikationsexempel. + +### 5.3 Pågående arbeten saknas eller felklassificeras vid bokslut + +**Fel.** K3-bolag med entreprenader till fast pris periodiserar inte: endast fakturerat ligger i resultatet, vinster skjuts framåt eller dolda förluster. Eller: K2-bolag med alternativregeln glömmer bruttoredovisa per uppdrag och nettar fel uppdrag mot varandra. Eller: förskott från beställare hamnar på 2420 i stället för 2450 vid PoC-redovisning, vilket bryter mot BR-uppställningen. + +**Rätt: K3 huvudregeln/PoC.** Vid bokslut bokas upparbetad-men-ej-fakturerat: Debet **1620** Upparbetad men ej fakturerad intäkt / Kredit eget intäktskonto i 30-/31-serien för uppdragsintäkt. Om beställaren betalat mer än upparbetat: Debet bank / Kredit **2450** Fakturerad men ej upparbetad intäkt. Befarad förlust: Debet **6330** / Kredit avsättning 2220. Lagref: BFNAR 2012:1 K3 punkt 23.18-23.32; ÅRL 4 kap. 10 §. + +**Rätt: K2/alternativregeln (färdigställandemetoden).** Aktivera nedlagda utgifter: Debet **1471** / Kredit **4970**. À conto-fakturering: Debet 1510 / Kredit **2431** Pågående arbeten, fakturering (eller 1478 i tillgångsklass beroende på saldo). Bruttoredovisas per uppdrag (Srf U 14). För räkenskapsår som inleds efter 2025-12-31 är kvittning mellan uppdrag uttryckligen förbjuden (BFN-beslut 2025-06-16). Lagref: BFNAR 2016:10 K2 punkt 6.13-6.26; 17 kap. 23, 26, 27 §§ IL. + +## 6. Öppna frågor och osäkerheter + +Brukstexten i ursprungsuppgiften hade flera fel som denna skill rättar: K3 är **BFNAR 2012:1** inte 2017:1; **1478** är "Pågående arbeten, fakturering" inte "Förskott till leverantörer" (det senare är 1480/1489); **6541** och **7560** finns inte i BAS 2025; **7210** är tjänstemän, kollektivanställda är **7010**; **3232** existerar inte (ROT-fordran går via 1513); **5614** är vakant; den nya ML (2023:200) använder "omvänd betalningsskyldighet" inte "omvänd skattskyldighet" (terminologisk ändring, materiellt oförändrad). HFD-praxis 2020-2026 specifikt på omvänd byggmoms, pågående arbeten och kontrollavgift är **tunn**: området regleras främst genom Skatteverkets ställningstaganden och kammarrätts-domar; revisor bör verifiera vid behov i JUNO/Karnov. Skatteverkets ställningstaganden om ROT-gränsfall 2022-2026 är inte uttömmande täckta här: konsultera `skatteverket.se/rattsligvagledning` listan "Ställningstaganden: Rot- och rutarbete". AB 25 och ABPU 25 förväntas från BKK sommaren 2026: verifiera om de har ikraftträtt och om garantitiderna ändras. ROT-subventionsgraden 50 % avser perioden 2025-05-12 till 2025-12-31; vid ärenden från 2026 verifiera att återgång till 30 % har skett enligt plan. SNI 2007 användes i SCB:s äldre indelning: SCB har 2025 migrerat till SNI 2025 där t.ex. takarbeten flyttats från 43.91 till 43.41; denna skill bygger på SNI 2007 enligt uppgift, men vid integration mot moderna SCB-tjänster kan kodmappning behövas. Verifiera alltid lokala kontoplansavvikelser: företag lägger ofta upp egna underkonton i 1470-/2430-/4600-/4970-serierna. + + +--- + +## Loadable references + +The reference files named above are NOT included in this body. When a question genuinely needs that depth, load the specific one on demand with `gnubok_load_skill`, and only then: + +- `references/kollektivavtal.md` → `gnubok_load_skill("vertical/bygg-hantverk/kollektivavtal")`: Kollektivavtal per sub-vertikal inom SNI 41-43 +- `references/momsregler.md` → `gnubok_load_skill("vertical/bygg-hantverk/momsregler")`: Omvänd betalningsskyldighet inom byggsektorn: fördjupning +- `references/pagaende-arbeten.md` → `gnubok_load_skill("vertical/bygg-hantverk/pagaende-arbeten")`: Pågående arbeten (K3, K2, IL): flödesexempel +- `references/praxis.md` → `gnubok_load_skill("vertical/bygg-hantverk/praxis")`: HFD-domar och Skatteverkets ställningstaganden 2020-2026: bygg-vertikalen +- `references/rot-faktura-exempel.md` → `gnubok_load_skill("vertical/bygg-hantverk/rot-faktura-exempel")`: ROT-fakturering enligt fakturamodellen: flöde och kontering +$gb$, + NULL, + 3, + 1 + ), + ( + 'vertical/bygg-hantverk/kollektivavtal', + 'vertical', + 'Kollektivavtal per sub-vertikal inom SNI 41-43', + $gb$Kollektivavtal per sub-vertikal inom SNI 41-43: reference for Bygg & hantverk (SNI 41-43)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1343, + '.claude\skills\industry\bygg-hantverk\references\kollektivavtal.md', + $gb$# Kollektivavtal per sub-vertikal inom SNI 41-43 + +Samtliga avtal har period **2025-05-01 till 2027-04-30** med märket 6,4 % över 24 månader (3,4 % år 1 + 3,0 % år 2). Försäkringspaket via **Fora** för kollektivanställda: AGS, AGB, TFA, TGL och Avtalspension SAF-LO. Tjänstemän har ITP via Collectum. + +## Byggavtalet + +- **Parter:** Svenska Byggnadsarbetareförbundet (Byggnads) + Byggföretagen. +- **SNI:** 41.10, 41.20, 42.x, 43.11, 43.12, 43.31, 43.32, 43.33, 43.39, 43.99. +- **Yrkesgrupper:** träarbetare, betongarbetare, murare, plattsättare, ställningsbyggare, isolerare, takmontörer, golvläggare (ingen separat CBA), maskinförare, anläggningsarbetare. +- **Lön:** Ackord är grundregel; tidlön kan avtalas. Grundlön yrkesarbetare 2025-05-01: 196 kr/h / 34 104 kr/mån; 2026-05-01: 203 kr/h / 35 322 kr/mån. +- **Helglön:** Ersättning för fridagar och helgdagar baserat på garantilön vid ackord. +- **Traktamente/reskostnad:** Egna avtalsnivåer för bortavarareregler, endagstraktamente och övernattningstraktamente; överskott jämfört med Skatteverkets schablon förmånsbeskattas. +- **Pension:** Avtalspension SAF-LO + extra kompletterande pensionsavsättning (1,09 % på SGI upp till 7,5 IBB sedan 2020-12-01); +0,2 procentenheter under avtalsperioden. +- **Försäkringar:** AGS, AGB, TFA, TGL, föräldrapenningtillägg. +- **Källa:** https://www.byggnads.se/49ec78/siteassets/kollektivavtal/byggavtalet-2025-digital-utgava-1.pdf + +## Installationsavtalet + +- **Parter:** Svenska Elektrikerförbundet (SEF) + Installatörsföretagen (IN). +- **SNI:** 43.21 elinstallationer; även hissmontörer, svagströms-/starkströmsinstallationer. +- **Lön:** Egen ackordsmodell, mätning via **Mätföretaget i Sverige**. Ackord primär, tidlön möjlig. +- **Pension:** Avtalspension SAF-LO + extra avsättning. +- **Reseregler:** Specifika i avtalet (utedygnsersättning, traktamente, milersättning). +- **Källa:** https://www.in.se/globalassets/dokument/arbetsgivarguiden/publik/kollektivavtal/installationsavtalet-2025-2027.pdf + +## Teknikinstallationsavtalet VVS & Kyl + +- **Parter:** Byggnads + Installatörsföretagen. +- **SNI:** 43.22 (VVS, värme, kyla, ventilation). +- **Omfattar:** ca 30 000 anställda i kyl-, VVS- och värmepumpbranschen. +- **Lärlingar:** Handledartillägg 7 kr/tim (1 218 kr/mån) från 2027-01-01. +- **Pension:** +0,2 % avsättning år 1. +- **Källa:** https://www.in.se/aktuellt/nyheter/2025/05/nytt-avtal-med-byggnads/ + +## Plåt- och Ventilationsavtalet + +- **Parter:** Byggnads + Plåt & Ventföretagen. +- **SNI:** 43.22 ventilation, 43.29 övriga installationer, byggnadsplåtslageri (delar av 43.91). +- **Lön:** Lägstalön yrkesarbetare grupp 1: 194,50 kr/tim / 33 843 kr/mån (2025-05-01). Ackordsmultiplikator 75,80 % byggnadsplåt och 50,95 % ventilation år 1. +- **Reseersättning:** 27 kr/mil år 1, 28 kr/mil år 2; bilersättning 35/39 kr/mil. +- **Pension:** +0,3 % extra avsättning år 1. +- **Källa:** https://www.byggnads.se/4a76c4/siteassets/kollektivavtal/plat--och-ventilationsavtalet-2025---2027.pdf + +## Måleriavtalet + +- **Parter:** Byggnads (Målareförbundet uppgick i Byggnads maj 2024) + Måleriföretagen i Sverige. +- **SNI:** 43.34 måleri. +- **Lön:** Ackord eller tidlön: endast dessa två former tillåtna. Ackord enligt riksprislista, mätning via **Målerifakta** (huvudsakligen distansmätning på ritning). +- **Helglön:** Reglerad i § 2. +- **Pension:** +0,1 % år 1, +0,2 % år 2; måleribranschen integreras i Svenskt Byggkontroll från 2026-01-01. +- **Berör:** ca 14 000 yrkesarbetare. +- **Källa:** https://www.byggnads.se/4a4f6e/siteassets/kollektivavtal/kollektivavtal-for-maleriyrket-2025-2027.pdf + +## Glasmästeriavtalet + +- **Parter:** Byggnads + Glasbranschföreningen (GBF). +- **SNI:** 43.34 glasmästeri (även bilglas, fasadentreprenad). +- **Lön:** Tidlön + rörlig ackordsdel; ackordsöverenskommelse skriftlig. Ordinarie arbetstid 160 h/4 veckor. +- **Pension:** +0,3 % år 1, +0,2 % år 2. Semesterersättning höjd till 13,2 %; semestertillägg månadsavlönade 1,1 %. +- **Berör:** ca 2 500 yrkesarbetare. +- **Källa:** https://www.byggnads.se/4a728f/siteassets/kollektivavtal/glasmasteriavtalet-2025-2027.pdf ; https://gbf.se/glasbranschen/Avtal2025 + +## Anmärkningar + +- **Golvavtalet finns inte som separat CBA**: golvläggare (SNI 43.33) omfattas av Byggavtalet med egen yrkeskategori och egna mätnings-/prislistor. +- SNI-mappning är approximativ: CBA-tillämpningsområdet bestäms av faktisk arbetsuppgift, inte formell SNI-kod. +- Tjänstemän (arbetsledare, projektingenjörer, kalkylatorer) följer vanligen **Tjänstemannaavtalet Byggnadsämnesindustrin** eller motsvarande Unionen/Sveriges Ingenjörer-avtal med ITP via Collectum. + +## Bokföringsmässiga noter + +- **Mätningsarvode** till Målerifakta/Mätföretaget bokförs på **6510 Mätningskostnader**; ofta också som löneavdrag i 2795. +- **Avtalspension SAF-LO**: premie bokförs på **7411** Premier för kollektiva pensionsförsäkringar; debiteras via Fora. +- **TFA, AGS, AGB, TGL**: bokförs på **7570** Premier för arbetsmarknadsförsäkringar (underkonton 7571, 7572). Konto 7560 finns inte i BAS 2025. +- **Ackord** löneslag separeras typiskt med eget löneartsnummer för PAYE/AGI-rapportering. +- **Traktamente bygg**: skattefri del enligt Skatteverkets schablon (inrikes 2025: dagtraktamente 290 kr, nattraktamente 145 kr); avtalsmässig överskjutande del är skattepliktig lön på 7081/7082 (motsv. konto för bilersättning/traktamente skattepliktig del). +$gb$, + 'vertical/bygg-hantverk', + 2, + 1 + ), + ( + 'vertical/bygg-hantverk/momsregler', + 'vertical', + 'Omvänd betalningsskyldighet inom byggsektorn: fördjupning', + $gb$Omvänd betalningsskyldighet inom byggsektorn: fördjupning: reference for Bygg & hantverk (SNI 41-43)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1620, + '.claude\skills\industry\bygg-hantverk\references\momsregler.md', + $gb$# Omvänd betalningsskyldighet inom byggsektorn: fördjupning + +## Paragrafmappning gammal vs ny ML + +| Sakfråga | ML 1994:200 (t.o.m. 2023-06-30) | ML 2023:200 (fr.o.m. 2023-07-01) | +|---|---|---| +| Köparkravet + tjänstekatalog för byggsektorn | 1 kap. 2 § 1 st 4 b + 2 st 1-3 | **16 kap. 13 §** (1 st = köparkravet, 2 st = tjänsterna p. 1-3) | +| Återbetalning ingående skatt | 10 kap. | 14 kap. | +| Fullständig faktura | 11 kap. 8 § | **17 kap. 24 §** | +| Förenklad faktura (förbjuden vid omvänd) | 11 kap. 9 § | 17 kap. 28 § | +| Definition faktura / e-faktura | 1 kap. 17-17 a § | 2 kap. 9-10 § | +| Fastighetsbegreppet | 1 kap. 11 § | 2 kap. 11 § (hänvisar till art. 13 b genomförandeförordning 282/2011) | +| Normalskattesats 25 % | 7 kap. 1 § | 9 kap. 2 § | +| Reducerad 12 % (cyklar, skor, lädervaror, kläder, hushållslinne) | 7 kap. 1 § 3 st 11 | 9 kap. 7 § (höjd från 6 % till 12 % 2023-04-01) | + +Terminologin ändrades från "omvänd skattskyldighet" till **"omvänd betalningsskyldighet"** i samband med ny ML, eftersom köparen är "betalningsskyldig" inte "skattskyldig". Skatteverket har explicit förklarat att alla äldre ställningstaganden gäller vidare med oförändrad rättslig bedömning; endast paragrafhänvisningar är inaktuella. + +Källor: riksdagen.se SFS 2023:200; Skatteverket "Kommunerna och bestämmelserna om omvänd betalningsskyldighet…" https://www4.skatteverket.se/rattsligvagledning/461583.html ; FAR Online "Byggmoms". + +## Tjänster som triggar omvänd betalningsskyldighet (16 kap. 13 § 2 st ML 2023:200) + +Tjänsten måste avse fastighet enligt ML 2 kap. 11 §. Kategorierna fastställs efter SNI 2002 huvudgrupp 45 (prop. 2007/08:25 s. 215 f.): + +**Punkt 1, fastighetsanknutna byggtjänster:** +- **(a) Mark- och grundarbeten** (SNI 45.1 / svenska SNI 2007 42.11-42.13, 43.11-43.13): schaktning, utfyllning, sprängning, dikning, rivning av hus, byggplatsdränering, markundersökning, borttagande av jordlager, sprängning för utvinning av sten/grus. +- **(b) Bygg- och anläggningsarbeten** (SNI 45.2 / 41.10, 41.20, 42.x): uppförande av hus, anläggning av vägar, takarbeten, akvedukter, växthus, lyftarbeten på byggplats. +- **(c) Bygginstallationer** (SNI 45.3 / 43.21, 43.22, 43.29): el-, isolering-, VVS-, ventilation-, kyl-, värme-, hiss-, sprinkler-, larm-, antenninstallationer. Brandlarm inkl. driftsättning ingår (RÅ 2008 not. 152). +- **(d) Slutbehandling av byggnader** (SNI 45.4 / 43.31-43.34, 43.39): puts, byggsnickeri, golvbeläggning, måleri, glasmästeri. +- **(e) Uthyrning av bygg-/anläggningsmaskiner med förare** (SNI 45.5 / 43.991): kran, grävmaskin, lyftutrustning **med operatör**. + +**Punkt 2, byggstädning:** städning av nybyggda/nyrenoverade hus före inflyttning + löpande städning under byggtiden. Insamling/bortforsling av byggavfall ingår **inte**. + +**Punkt 3: personaluthyrning** för aktiviteter i punkt 1 eller 2. + +## Köparkravet "byggföretag som inte endast tillfälligt" + +(16 kap. 13 § 1 st ML; art. 199.1 a momsdirektivet; prop. 2005/06:130 s. 65.) + +- "Inte endast undantagsvis eller vid enstaka tillfällen" omsätter sådana tjänster. +- Köparens SNI-kod och huvudverksamhet saknar betydelse. +- Sidoverksamhet räcker (SRN 2014, kökstillverkare med 0,06 % monteringsverksamhet). +- Köpare som uppfyller kravet är betalningsskyldig för **alla** sina inköp av byggtjänster, även de som inte säljs vidare. +- Status upphör först när byggdelen är avvecklad. +- Stat och kommun kan omfattas (dnr 8-1148796 / omarb. 8-2718597 kommun; dnr 8-1228116 staten). +- Utländska köpare omfattas vid arbete på svensk fastighet. +- Samfällighetsförening som bara förvaltar gemensamhetsanläggning är inte byggföretag. + +## Fakturakrav + +Fakturan utfärdas utan moms. Fullständig faktura enligt 17 kap. 24 § ML ska innehålla: utfärdandedatum, löpnummer, säljarens VAT-nr, **köparens VAT-nr (obligatoriskt)**, säljarens och köparens namn och adress, varors/tjänsters art och omfattning, datum för tillhandahållandet, beskattningsunderlag (utan momsbelopp), och uppgiften **"Omvänd betalningsskyldighet"** eller "Reverse charge" (Skatteverket dnr 8-724682). Hänvisning kan göras till 16 kap. 13 § ML eller art. 199.1 a momsdirektivet. Förenklad faktura får ej användas. + +Momsdeklaration: säljaren rapporterar i **ruta 41**. Köparen rapporterar beskattningsunderlag i **ruta 24**, utgående moms i **ruta 30**, avdragsgill ingående moms i **ruta 48**. + +## Gränsfall + +- **Material i tjänsteleverans:** Allt räknas som tjänst om transaktionen är blandad (RÅ 2010 ref. 50 I/II: köksleverans+montering ses som tjänst även när varudelen är 85-90 %). +- **Markupplåtelse och fastighetsförsäljning:** Undantagna enligt 10 kap. 35 § ML; ej omvänd. Markarbete på upplåten mark är dock byggtjänst. +- **Städning:** Byggstädning JA omvänd; lokalstädning, fönsterputs, fastighetsskötsel, snöskottning av tak NEJ. +- **Maskinuthyrning:** Med förare JA; utan förare NEJ (dnr 202 157785-19/111). +- **Projektering/arkitekt:** Som självständig tjänst NEJ; som integrerad del av entreprenad JA. +- **Reparation av cyklar/skor/kläder/hushållslinne (9 kap. 7 § ML, 12 %):** Ingen överlappning: dessa varor blir aldrig fastighet. + +## Skatteverkets ställningstaganden (relevanta, fortsatt gällande) + +| Dnr | Datum | Ämne | URL | +|-----|-------|------|-----| +| 131 101175-17/111 | 2017-06-14 | FoS A allmänna förutsättningar | https://www4.skatteverket.se/rattsligvagledning/362024.html | +| 131 101180-17/111 | 2017-06-14 | FoS B arbete på byggnader | https://www4.skatteverket.se/rattsligvagledning/edition/2024.3/362076.html | +| 131 101225-17/111 | 2017-06-14 | FoS C mark | https://www4.skatteverket.se/rattsligvagledning/edition/2024.2/362156.html | +| 131 101266-17/111 | 2017-06-14 | FoS D bedömningsfrågor | N/A | +| 202 157785-19/111 | 2019-12-17 | Lyftarbeten, strålkastare, manskapsbodar, ställningar, byggkran, bygghiss | N/A | +| 202 448424-19/111 | 2019-11-22 | Fastighetsbegreppet | N/A | +| 131 554069-16/111 | 2016-12-22 | Montering/installation av utrustning, fastighet eller vara | N/A | +| 8-1148796 / 8-2718597 | 2021/2024 | Kommun som byggföretag | https://www4.skatteverket.se/rattsligvagledning/461583.html | +| 8-1228116 | 2021-10-26 | Staten som byggföretag | https://www4.skatteverket.se/rattsligvagledning/397336.html | +| 8-724682 | 2021-01-27 | Fakturatext "omvänd betalningsskyldighet" / "reverse charge" | N/A | +| 8-1832503 | 2022-09-16 | Fakturans innehåll (namn/adress) | N/A | + +Inga materiella nyheter 2024-2026; de flesta är omarbetningar för paragrafhänvisning till ML 2023:200. +$gb$, + 'vertical/bygg-hantverk', + 2, + 1 + ), + ( + 'vertical/bygg-hantverk/pagaende-arbeten', + 'vertical', + 'Pågående arbeten (K3, K2, IL): flödesexempel', + $gb$Pågående arbeten (K3, K2, IL): flödesexempel: reference for Bygg & hantverk (SNI 41-43)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1668, + '.claude\skills\industry\bygg-hantverk\references\pagaende-arbeten.md', + $gb$# Pågående arbeten (K3, K2, IL): flödesexempel + +## K3 (BFNAR 2012:1) kapitel 23 + +**Tillämpningsområde**, 23.1: gäller intäkter från (a) varor, (b) tjänsteuppdrag och entreprenadavtal, (c) ränta/royalty/utdelning. Uppdrag definieras i 23.9 som tjänsteuppdrag eller entreprenadavtal. + +**Huvudregeln: successiv vinstavräkning (PoC)**, 23.18-23.27: +- 23.18 kriterier: uppdragsinkomsten kan mätas tillförlitligt; sannolikt att ekonomiska fördelar tillfaller företaget; färdigställandegrad på balansdagen kan mätas tillförlitligt; uppdragsutgifter och återstående utgifter kan mätas tillförlitligt. +- 23.22 färdigställandegrad bestäms med metod som mest tillförlitligt mäter utfört arbete (cost-to-cost vanligast). +- 23.23 om utfallet inte kan beräknas tillförlitligt → intäkt enbart upp till uppkomna utgifter som sannolikt kommer ersättas (nollavräkning). +- 23.27 upparbetade intäkter ska minskas med fakturerade belopp; kvittning bara inom samma uppdragsgivare och samma tidsperiod. +- 23.30 större företag upplyser om upparbetade intäkter, fakturerade belopp och innehållna belopp. + +**Alternativregeln: färdigställandemetoden**, 23.31-23.37: +- 23.31: Får tillämpas i juridisk person för uppdrag enligt 17 kap. 27 § IL (bygg, anläggning, hantverk). Intäkt redovisas senast när arbetet väsentligen är fullgjort. Fram till dess: utgifter redovisas som tillgång, fakturerade belopp som skuld. Företaget måste tillämpa metoden på **samtliga** sådana uppdrag. +- 23.32 befarad förlust redovisas omedelbart oavsett metod. +- 23.37 byte från färdigställandemetoden till PoC är tillåtet; omvänt byte endast vid särskilda skäl. +- I koncernredovisning är endast PoC tillåten. + +## K2 (BFNAR 2016:10) kapitel 6 + +Punkterna 6.13-6.26 reglerar tjänsteuppdrag och entreprenaduppdrag: +- 6.13-6.14 löpande räkning: intäkt i takt med utförande och materialleverans; alternativt i takt med fakturering (kopplingen till IL 17 kap. 26 §). +- 6.15 fast pris: företaget väljer huvudregeln (PoC) eller alternativregeln (färdigställandemetoden) och tillämpar samma metod på samtliga fastprisuppdrag. +- 6.16-6.21 huvudregelns mekanik. +- 6.22-6.23 alternativregeln: intäkt när väsentligen fullgjort; positiv justeringspost för uppdragsutgifter som hade kunnat aktiveras vid egentillverkning. +- 6.24 BR-redovisning i posten "Pågående arbete för annans räkning"; bruttoredovisning per uppdrag obligatorisk (Srf U 14). + +BFN beslutade 2025-06-16 om uppdatering av K2 gällande räkenskapsår som inleds efter 2025-12-31; från då är kvittning mellan uppdrag uttryckligen förbjudet. Pre-2026 räkenskapsår använder fortsatt de citerade punktnumren; verifiera mot 2025-utgåvan vid behov. + +## IL 17 kap. 23-32 §§ + +- **17 kap. 23 §** kopplingsregel: redovisning av pågående arbeten i byggnads-, anläggnings-, hantverks- eller konsultrörelse följs vid beskattningen om inte 24-32 §§ avviker. +- **17 kap. 24 §** definierar löpande räkning: ≥ 90 % av arvodet baserat på tidsenhet/utgifter (SKV A 2016:7). +- **17 kap. 26 §** faktureringsmetoden för löpande räkning: värdet behöver inte tas upp som tillgång; fakturerat belopp utgör intäkt. Om fakturering systematiskt underlåts → skäligt belopp tas upp. +- **17 kap. 27 § 1 st** huvudregel fast pris: lägsta värdets princip (anskaffningsvärde vs nettoförsäljningsvärde). +- **17 kap. 27 § 2 st** alternativregeln/97 %-regeln: byggnads-, anläggnings- och hantverksrörelse får ta upp pågående arbeten till lägst 97 % av sammanlagt anskaffningsvärde. **Gäller ej konsultrörelse** (SFS 2003:1102). +- **17 kap. 28-30 §§** värdering av anskaffningsvärde. +- **17 kap. 31 §** skattemässigt värde. +- **17 kap. 32 §** förlustreserveringar. + +SKV A 2016:6 (värdering) och SKV A 2016:7 (gränsdragning löpande räkning vs fast pris) är centrala allmänna råd. HFD 2011 ref. 20 (Skanska) förblir ledande prejudikat. + +## Konteringsflöde: K3 huvudregeln (PoC), fastprisentreprenad + +Förutsättning: avtalat fast pris 10 000 000 kr. Per balansdagen är 6 000 000 kr upparbetat (60 % cost-to-cost). Fakturerat enligt betalplan 5 500 000 kr. + +Löpande under året: +- Nedlagda utgifter bokas på 4xxx/5xxx/7xxx (lön, material, UE) som vanligt. +- À conto-fakturering: Debet 1510 / Kredit 30xx Försäljning (eller 3001) + 2611 utgående moms (om kund är icke-byggföretag) eller 2614/3231 vid B2B-bygg omvänd. + +Vid bokslut: +- Upparbetad intäkt 6 000 000, fakturerat 5 500 000 → differens 500 000 är upparbetad men ej fakturerad. +- Debet **1620** Upparbetad men ej fakturerad intäkt 500 000 / Kredit eget intäktskonto (t.ex. 3060) 500 000. + +Om fakturerat överstigit upparbetat (t.ex. 7 000 000 fakturerat, 6 000 000 upparbetat): +- Differens 1 000 000 bokas på skuldsidan: Debet intäktskonto / Kredit **2450** Fakturerad men ej upparbetad intäkt 1 000 000. + +Befarad förlust (t.ex. återstående utgifter 6 000 000 mot återstående intäkt 4 000 000, total förlust 2 000 000 varav 800 000 redan i PoC): +- Debet **6330** Förluster i pågående arbeten 1 200 000 / Kredit **2220** Avsättningar för garantier eller separat avsättning 1 200 000. + +## Konteringsflöde: K2 / K3 alternativregel (färdigställandemetoden) + +Samma fastprisentreprenad. Inga intäkter eller utgifter i resultaträkningen löpande under uppdraget. + +Löpande: +- Utgifter bokas på 4xxx/5xxx/7xxx som vanligt: ingen särbehandling under året. + +Vid bokslut, om uppdraget ej avslutat: +- Aktivera nedlagda utgifter: Debet **1471** Pågående arbeten, nedlagda kostnader 6 000 000 / Kredit **4970** Förändring av pågående arbeten, nedlagda kostnader 6 000 000. +- À conto-fakturering under året: Debet 1510 5 500 000 / Kredit **2431** Pågående arbeten, fakturering 5 500 000 (+ moms enligt regel). + +Bruttoredovisning per uppdrag krävs (Srf U 14): uppdragets nettoposition presenteras antingen som tillgång ("Pågående arbete för annans räkning" om 1471 > 2431) eller som skuld ("Pågående arbete för annans räkning" om 2431 > 1471). För räkenskapsår som inleds efter 2025-12-31 förbjuds kvittning mellan uppdrag (BFN-beslut 2025-06-16). + +Vid slutförande (godkänd slutbesiktning enligt AB 04 kap. 7): +- Återför 1471 mot resultatet och faktura: Debet **4970** 6 000 000 / Kredit **1471** 6 000 000. +- Slutfaktura: Debet 1510 / Kredit 30xx + moms; samtidigt återförs 2431. + +## Källor + +- BFNAR 2012:1 (K3) https://www.bfn.se/wp-content/uploads/vl12-1-k3-kons.pdf +- BFNAR 2016:10 (K2 ÅR) bfn.se +- IL (1999:1229) 17 kap. https://www.riksdagen.se/sv/dokument-och-lagar/dokument/svensk-forfattningssamling/inkomstskattelag-19991229_sfs-1999-1229/ +- SKV A 2016:6 och 2016:7 +- Skatteverket rättslig vägledning 2025.1 https://www4.skatteverket.se/rattsligvagledning/edition/2025.1/324730.html +- Srf U 14, Srf U 15 +- BAS "Nya bokföringsexempel avseende pågående arbeten" bas.se +$gb$, + 'vertical/bygg-hantverk', + 2, + 1 + ), + ( + 'vertical/bygg-hantverk/praxis', + 'vertical', + 'HFD-domar och Skatteverkets ställningstaganden 2020-2026: bygg-vertikalen', + $gb$HFD-domar och Skatteverkets ställningstaganden 2020-2026: bygg-vertikalen: reference for Bygg & hantverk (SNI 41-43)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1096, + '.claude\skills\industry\bygg-hantverk\references\praxis.md', + $gb$# HFD-domar och Skatteverkets ställningstaganden 2020-2026: bygg-vertikalen + +## HFD-prejudikat (urval) + +| Avgörande | Område | Innebörd | +|-----------|--------|----------| +| **RÅ 2010 ref. 50 I och II** | Omvänd byggmoms: material vs tjänst | Leverans + montering av kök respektive hiss ses i sin helhet som byggtjänst → omvänd skattskyldighet tillämplig. Ledande prejudikat för material-i-tjänst-doktrinen. | +| **RÅ 2008 not. 152** | Omvänd byggmoms | Brandlarm inkl. driftsättning är bygginstallation. | +| **HFD 2011 ref. 20 (Skanska)** | Pågående arbeten löpande räkning | Faktureringsmetoden enligt 17 kap. 26 § IL gäller; frikoppling skatt↔redovisning vid löpande räkning. | +| **HFD 2016 ref. 29** | ROT-avdrag | Betalning från annan än köparen accepteras under vissa förutsättningar. | +| **HFD 2018 ref. 49** | ROT: fakturahandel | Skatteverket kan vägra utbetalning vid fakturahandel/skenavtal där fakturerande företag inte faktiskt utfört arbetet. | +| **HFD 2022 ref. 28** | Vara vs tjänst | Anställdas inköp som förvärv i bolagets verksamhet; relevant för gränsdragning vara/tjänst. | +| **HFD 2023 ref. 10 (mål 651-22, JM AB)** | Byggnadsrörelse, uttagsmoms | Skattskyldigheten för uttag av tjänster vid uppförande av ägarlägenhetsfastigheter som lagertillgångar upphör vid kontraktstidpunkten. | +| **HFD 2023 ref. 24** | Frivillig skattskyldighet / fastighetsuthyrning | Parallella hyresgäster, stadigvarande användning. Indirekt relevant för fastighetsbolag inom bygg. | + +## Skatterättsnämnden (förhandsbesked) + +| Datum | Dnr | Område | +|-------|-----|--------| +| 2023-07-03 | N/A | Byggnadsrörelse-klassificering av företag som uppför obemannade drivmedelsanläggningar | +| 2023-07-07/19 | **83-22/D** | Avgränsning skattereduktion ROT vs grön teknik, separata utrymmen | +| 2014 | N/A | Köksmonteringsföretag med 0,06 % monteringsverksamhet ändå "byggföretag": köparkravet i 16 kap. 13 § ML uppfyllt | + +## Skatteverkets ställningstaganden + +### Omvänd betalningsskyldighet bygg + +| Dnr | Datum | Område | +|-----|-------|--------| +| 131 101175-17/111 | 2017-06-14 | FoS A allmänna förutsättningar | +| 131 101180-17/111 | 2017-06-14 | FoS B arbete på/i byggnader | +| 131 101225-17/111 | 2017-06-14 | FoS C mark | +| 131 101266-17/111 | 2017-06-14 | FoS D bedömningsfrågor | +| 202 157785-19/111 | 2019-12-17 | Lyftarbeten, byggkran, bygghiss, ställningar | +| 202 448424-19/111 | 2019-11-22 | Fastighetsbegreppet (ersätter 131 558080-16/111) | +| 131 552367-16/111 | 2016-12-22 | Fastighetsbegreppet FoS 1 (köksinredning, larm m.m.) | +| 131 554069-16/111 | 2016-12-22 | Montering/installation, fastighet eller vara | +| 8-1148796 | 2021-10-25 | Kommun som byggföretag | +| 8-2718597 | 2024 | Omarbetning av ovanstående till ML 2023:200 | +| 8-1228116 | 2021-10-26 | Staten som byggföretag | +| 8-724682 | 2021-01-27 | Fakturatext "omvänd betalningsskyldighet" / "reverse charge" | +| 8-1832503 | 2022-09-16 | Fakturans innehåll (namn/adress) | + +### ROT-avdrag + +| Dnr | Datum | Område | +|-----|-------|--------| +| 131 338276-10/111 | 2010-05-27 | Försäkringsersättning utesluter ROT | + +(Aktuella ROT-ställningstaganden 2022-2026 ej uttömmande inventerade: konsultera https://www4.skatteverket.se/rattsligvagledning under "Ställningstaganden: Rot- och rutarbete".) + +### Pågående arbeten + +Inga nya ställningstaganden 2020-2026 har identifierats. Centralt: + +- **SKV A 2016:6**: allmänna råd om värdering av pågående arbeten i byggnads-, anläggnings-, hantverks- eller konsultrörelse +- **SKV A 2016:7**: gränsdragning löpande räkning vs fast pris (90 %-regeln) +- **SKV M 2005:4**: meddelande, fortsatt åberopat + +### Personalliggare / ID06 + +Inga nya HFD-prejudikat 2020-2026 identifierade på området. Området hanteras främst på kammarrätts-nivå. Befrielsegrunder i 51 kap. 1 § SFL tolkas restriktivt: okunskap, stress eller hög arbetsbelastning godtas vanligen inte. + +## Källor + +- https://www.domstol.se/hogsta-forvaltningsdomstolen/avgoranden/ +- https://lagen.nu/dom/hfd/ +- https://skatterattsnamnden.se/publicerade-forhandsbesked/ +- https://www4.skatteverket.se/rattsligvagledning/ + +## Flaggor + +Sökningarna har gett få nya HFD-prejudikat 2020-2026 inom denna vertikal. Detta är troligen ett tecken på att området är stabilt (regleras främst via Skatteverkets förteckningar/ställningstaganden och kammarrätts-domar), men användare bör verifiera direkt i JUNO/Karnov för en uttömmande lista. +$gb$, + 'vertical/bygg-hantverk', + 2, + 1 + ), + ( + 'vertical/bygg-hantverk/rot-faktura-exempel', + 'vertical', + 'ROT-fakturering enligt fakturamodellen: flöde och kontering', + $gb$ROT-fakturering enligt fakturamodellen: flöde och kontering: reference for Bygg & hantverk (SNI 41-43)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 871, + '.claude\skills\industry\bygg-hantverk\references\rot-faktura-exempel.md', + $gb$# ROT-fakturering enligt fakturamodellen: flöde och kontering + +## Regelverk + +- **IL 67 kap. 11-19 §§**: Skattereduktion för hushållsarbete; rotarbete definierat i 13 a §; undantag i 13 c §. +- **Lag (2009:194)** om förfarandet vid skattereduktion för hushållsarbete (HUSFL) §§ 4, 6, 7, 8, 11, 12. +- **Skatteverkets rättsliga vägledning** "Skattereduktion för rot- och rutarbete" https://www4.skatteverket.se/rattsligvagledning/edition/2024.4/339102.html +- **Krav på elektronisk betalning** sedan 2020-01-01 (67 kap. 19 § IL). + +## Belopp och subventionsgrad 2025-2026 + +- Ordinarie tak: **50 000 kr/person/år** ROT (gemensamt utrymme med RUT på 75 000 kr, varav max 50 000 kr ROT). +- Ordinarie subventionsgrad: **30 % av arbetskostnaden**. +- Tillfällig höjning **50 %** under perioden **2025-05-12 till 2025-12-31** enligt prop. 2024/25:156 / FiU32. Avgörande är **betalningsdatum**, inte fakturadatum. +- Återgång till 30 % från 2026-01-01. + +## Dokumentationskrav vid utbetalningsbegäran (9 § HUSFL) + +- Utförarens organisationsnummer + F-skatt +- Köparens personnummer/samordningsnummer +- Fastighetsbeteckning (småhus) eller lägenhetsnummer + brf-organisationsnummer (bostadsrätt) +- Antal arbetade timmar +- Art av arbete +- Arbetskostnad och debiterad skattereduktion +- Datum för betalning + +Begäran lämnas via Skatteverkets e-tjänst senast **31 januari** året efter betalningsåret (8 § HUSFL). + +## Kompletterande verifikationsexempel (utöver SKILL.md) + +**Förutsättning:** Måleriarbete i privatbostad. Arbete 30 000 kr ex moms. Material 5 000 kr ex moms. Moms 25 % på allt. Faktura ställs ut 2025-09-15 och betalas 2025-10-01 (omfattas av 50 %-perioden). + +- Arbete: 30 000 × 1,25 = 37 500 kr brutto +- Material: 5 000 × 1,25 = 6 250 kr brutto +- ROT-grund: arbete brutto = 37 500 → reduktion 50 % = **18 750 kr** (ej över taket 50 000 kr/år) +- Kund betalar: 37 500 + 6 250 − 18 750 = **25 000 kr** +- Skatteverket utbetalar senare: 18 750 kr + +**Vid fakturering (2025-09-15):** +- Debet **1511** Kundfordringar (kunddel) 25 000 +- Debet **1513** Kundfordringar, delad faktura (ROT-del) 18 750 +- Kredit **2611** Utgående moms 25 % 8 750 +- Kredit **3011** Försäljning tjänster 25 % moms 30 000 +- Kredit **3041** Försäljning varor 25 % moms 5 000 + +**Vid kundens betalning (2025-10-01):** +- Debet 1930 25 000 / Kredit 1511 25 000 + +**Vid Skatteverkets utbetalning (typiskt 2 veckor senare):** +- Debet 1930 18 750 / Kredit 1513 18 750 + +**Saldokontroll:** 1513 ska gå mot noll. Om Skatteverket vägrar (t.ex. tak överskridet eller köparen ej kvalificerad) → korrigeringsfaktura mot kund: Debet 1511 / Kredit 1513. + +## Vanliga gränsfall (efter SKV vägledning) + +- **Nybyggnation av småhus < 5 år:** Ger inte ROT. +- **Ekonomibyggnader (lantbrukstaxering):** Ger inte ROT. +- **Fritidshus som inte ägs av sökanden:** Ger inte ROT. +- **Bostadsrätt där annan än sökanden bor permanent:** Ger inte ROT. +- **Service/installation av maskiner och inventarier:** Ger inte ROT (67 kap. 13 c § IL). +- **Arbete där försäkringsersättning lämnats:** Ger inte ROT (SKV dnr 131 338276-10/111). +- **Material, frakt, maskinhyra, resor:** Aldrig ROT-grund: endast arbetskostnad. +- **UE utför arbetet:** OK om huvudutförare har F-skatt och faktiskt utfört uppdraget (skenavtal vägras, jfr HFD 2018 ref. 49). +- **Betalning kontant:** Inte ROT-grundande sedan 2020-01-01 (67 kap. 19 § IL). +- **Avgränsning mot grön teknik:** SRN 2023-07-19 dnr 83-22/D: ROT och grön teknik har separata utrymmen; arbete kan inte räknas dubbelt. +$gb$, + 'vertical/bygg-hantverk', + 2, + 1 + ), + ( + 'vertical/e-handel', + 'vertical', + 'E-handel & näthandel (SNI 47.91 / 47.99)', + $gb$Svensk e-handelsbokföring (SNI 47.91, 47.99) med OSS/IOSS, plattformsclearing Stripe/Klarna/Adyen/PayPal/Shopify Payments, dropshipping-kedjetransaktioner, marketplace deemed supplier enligt 5 kap. 5-6 §§ ML 2023:200 och DAC7-rapportering. Trigga vid frågor om payouts, OSS-deklaration, IOSS-import ≤ 150 EUR, distansförsäljning till EU-konsumenter, reverse charge på Klaviyo/Meta/Google Ireland-fakturor, dropshipping från Kina via Shopify, försäljning via Amazon/eBay/Etsy/CDON/Fyndiq, presentkort/vouchers, ångerrätt, Lager- och E-handelsavtalet, payout-rekonciliering brutto/netto, FX-differens, eller kontoplanmappning för 1580/1581/2670/3106/4515/4535/4545/6040/6050. Distinkta arbetsmönster: brutto/netto-rekonciliering, OSS-tröskelövervakning (99 680 SEK/kalenderår), reverse charge på SaaS/ads, FX-redovisning per provider, periodisering av marketplace-provisioner.$gb$, + ARRAY['47.91', '47.99']::text[], + $gb${}$gb$::jsonb, + 11000, + '.claude\skills\industry\e-handel\SKILL.md', + $gb$--- +id: vertical/e-handel +tier: vertical +title: "E-handel & näthandel (SNI 47.91 / 47.99)" +description: > + Svensk e-handelsbokföring (SNI 47.91, 47.99) med OSS/IOSS, plattformsclearing Stripe/Klarna/Adyen/PayPal/Shopify Payments, dropshipping-kedjetransaktioner, marketplace deemed supplier enligt 5 kap. 5-6 §§ ML 2023:200 och DAC7-rapportering. Trigga vid frågor om payouts, OSS-deklaration, IOSS-import ≤ 150 EUR, distansförsäljning till EU-konsumenter, reverse charge på Klaviyo/Meta/Google Ireland-fakturor, dropshipping från Kina via Shopify, försäljning via Amazon/eBay/Etsy/CDON/Fyndiq, presentkort/vouchers, ångerrätt, Lager- och E-handelsavtalet, payout-rekonciliering brutto/netto, FX-differens, eller kontoplanmappning för 1580/1581/2670/3106/4515/4535/4545/6040/6050. Distinkta arbetsmönster: brutto/netto-rekonciliering, OSS-tröskelövervakning (99 680 SEK/kalenderår), reverse charge på SaaS/ads, FX-redovisning per provider, periodisering av marketplace-provisioner. +sni_prefixes: ["47.91", "47.99"] +trigger_signals: + text_patterns: + - "Stripe payout" + - "Klarna settlement" + - "Shopify Payments" + - "Adyen settlement" + - "PayPal payout" + - "OSS-deklaration" + - "omvänd betalningsskyldighet" + - "distansförsäljning" + - "Amazon FBA" + - "IOSS" + - "dropshipping" + - "marketplace" + bas_account_signals: + - "1580" + - "1581" + - "1980" + - "2421" + - "2614" + - "2615" + - "2645" + - "2670" + - "3106" + - "3108" + - "4515" + - "4535" + - "4545" + - "5440" + - "5710" + - "6040" + - "6050" +estimated_tokens: 11000 +version: 1 +--- + +# E-handel (SNI 47.91 / 47.99) + +## 1. När denna skill ska laddas + +Ladda denna skill när huvudboken visar minst två av: (a) konton 1580/1581/2670/3106/4535/6040/6050, (b) leverantörsfakturor från Stripe/Klarna/Adyen/PayPal/Shopify/Klaviyo/Meta/Google Ireland/Amazon Services, (c) OSS-deklaration i agendan, (d) klientens SNI börjar på 47.91 eller 47.99, eller (e) order-/payout-flöden från Shopify, Centra, WooCommerce, Magento eller marketplace-feed. Ladda EJ för ren fysisk butik (SNI 47.1x-47.7x utan distansförsäljning): använd då `detaljhandel`-skillen. För hybrid (butik + e-handel) ladda båda. + +## 2. Typiska arbetsmönster + +**Faktureringskadens.** Order-driven: en intäktsrad per order vid leveransdatum (BFNAR 2013:2 5 kap., leveransprincipen, ej orderdatum eller betalningsdatum). Vid förskottsbetalning bokförs mottaget belopp på **2420 Förskott från kunder** tills leveransen sker. Vid Klarna Pay Later/Slice it är fordran kvar på **1580/1513** tills Klarna godkänner och betalar ut. Plattformspayouts grupperas typiskt: Stripe dagligen (T+2 SEK, T+7 EUR/USD), Klarna 1-2 gånger/vecka (varierar per avtal), Shopify Payments dagligen, Adyen veckovis, PayPal manuellt eller veckovis, Amazon var 14:e dag (eller efter reserve). + +**Kostnadsrytm.** Plattformsavgifter dagligen (per transaktion, debiteras netto från payout), CPC-marknadsföring dagligen (Google/Meta/TikTok faktureras månadsvis i efterhand mot tröskel), fulfilment och utgående frakt per order, SaaS-prenumerationer månadsvis i förskott (Shopify, Klaviyo, Gorgias, Sendcloud, Centra). **Reverse charge på i princip all EU-SaaS och ads**: Klaviyo (IE), Meta Ireland, Google Ireland, Stripe Technology Europe (IE), Shopify International (IE) levererar B2B-tjänster enligt huvudregeln 6 kap. 33 § ML 2023:200; kunden förvärvsbeskattar i Sverige (2614+2645, nettoeffekt 0 vid full avdragsrätt). + +**Rekonciliering.** Tre matchningssteg behövs och måste byggas in i avstämningsroutinen: (1) order ledger (Shopify/Centra) ↔ payment provider gross (Stripe/Klarna), (2) provider gross minus avgifter ↔ payout till bank, (3) FX-differens mellan order-kursen och payout-kursen bokas på **3960/7960** vid settlement. Aggregerade dagsbokningar (1 verifikation/dag) tillåtna enligt BFNAR 2013:2 3 kap. 4 § om underlag bevaras digitalt; **kombinerade verifikationer för flera dagar är otillåtna**. + +**Lön och kollektivavtal.** Lager- och E-handelsavtalet mellan **Svensk Handel** och **Handelsanställdas förbund**, avtalsperiod **2025-04-01 till 2027-03-31** (tecknat 2025-04-04). Arbetstid kan förläggas må-sö 05-24, begränsningsperiod max 13 veckor, mertidsersättning för deltidsanställda (nyhet 2025), arbetstidsförkortning vid tidiga/sena/helger-pass. Detta är ett *annat* avtal än Detaljhandelsavtalet: e-handelslager som drivs som självständig enhet (även hos hybridföretag) ska ligga under Lager- och E-handelsavtalet. + +## 3. BAS 2025: konton denna vertikal lutar sig tungt mot + +Tabellen avser BAS 2025 v.1.0 (bas.se/kontoplaner/bas-2025). **Genomgående namnändring 2025: "omvänd skattskyldighet" → "omvänd betalningsskyldighet"** på 2614/2624/2634/2647 och 442x-konton. + +| Konto | Officiellt namn (BAS 2025) | E-handel-kontext | +|---|---|---| +| 1580 | Fordringar för kontokort och kuponger | **Clearingkonto Stripe/Klarna/Adyen/PayPal/Shopify Payments**: ej 1684. Lägg upp underkonton 1581-1589 per provider. Saldo = orderintäkt mottagen av provider men ej utbetald till bank. | +| 1513 | Kundfordringar, delad faktura | Klarna Pay Later/Slice it innan settlement, B2B-avbetalningsplaner. | +| 1930 | Företagskonto / checkkonto | Mottagarkonto för payout efter clearing från 1580. | +| 1980 | Valutakonton | EUR/USD-konton för Stripe/PayPal-payouts som ligger kvar i FX innan växling: krav på månadsslutsvärdering till balansdagskurs (ÅRL 4 kap. 13 §). | +| 2420 | Förskott från kunder | Betald order ej levererad: får ej intäktsföras (BFNAR 2013:2 leveransprincipen). | +| 2421 | Ej inlösta presentkort | Skuld för MPV (flerfunktionsvoucher) tills inlösen eller civilrättslig preskription. SPV (enfunktionsvoucher) bokförs som intäkt + moms redan vid försäljning av kortet. | +| 2614 | Utgående moms, omvänd betalningsskyldighet, 25 % | EU-tjänster från Meta/Google/Klaviyo/Shopify (reverse charge) + EU-varuförvärv 4515, **ej** OSS-distansförsäljning. | +| 2615 | Utgående moms import av varor, 25 % | Importmoms vid tullklarering från tredjeland: motbokas mot 2645. | +| 2645 | Beräknad ingående moms på förvärv från utlandet | Motkonto till 2614/2615: nettoeffekt 0 vid full avdragsrätt. | +| 2647 | Ingående moms, omvänd betalningsskyldighet varor och tjänster i Sverige | **Endast** inhemsk omvänd moms (bygg, mobiltelefoner ≥ 100 tkr), sällsynt i ren e-handel. | +| 2650 | Redovisningskonto för moms | Nollställs vid momsdeklaration. | +| 2670 | Utgående moms på försäljning inom EU, OSS | **Kritiskt**: avstämningskonto för OSS-deklarerad moms. Bygg underkonton per destinationsland och momssats för OSS-rapportgenerering. Tillkom i BAS 2024. | +| 3001 / 3002 / 3003 | Försäljning inom Sverige 25/12/6 % | Standard B2C i Sverige; 3003 för e-böcker/digital prenumeration (sänkt 6 % sedan 2019). | +| 3105 | Försäljning varor till land utanför EU | **Export**: UK efter Brexit, USA, Norge, Schweiz. Momsfritt, kräver exportbevis (tulldeklaration eller leveransbevis). | +| 3106 | Försäljning varor till annat EU-land, momspliktig | **OSS-försäljningskontot**: destinationslandets moms redovisas via 2670. | +| 3108 | Försäljning varor till annat EU-land, momsfri | **B2B intracommunity supply**: kräver giltigt VAT-nr i VIES och periodisk sammanställning enligt 35 kap. SFL (materiellt villkor sedan 2020-01-01, 10 kap. 43 § ML). | +| 3305 / 3308 | Försäljning tjänster utanför EU / inom EU | Digital tjänst/SaaS-export; B2C digitala tjänster går via OSS, B2B reverse charge hos kunden. | +| 3520 / 3521 / 3522 | Fakturerade frakter (SE / EU / export) | Kunddebiterad frakt: följer huvudvarans momssats och destinationsregler. | +| 3740 | Öres- och kronutjämning | Avrundningsdifferenser Shopify/Centra → bokföring. | +| 3960 / 7960 | Valutakursvinster/-förluster på fordringar och skulder av rörelsekaraktär | FX-effekt vid Stripe/PayPal-payout-växling. | +| 4515-4518 | Inköp av varor från annat EU-land 25/12/6 %/momsfri | EU-grossistinköp till lager: triggar 2614+2645. | +| 4531 | Inköp av tjänster från ett land utanför EU, 25 % | Reverse charge på US-SaaS (AWS, Cloudflare, Shopify US-fakturering): triggar 2614+2645. | +| 4535 | Inköp av tjänster från annat EU-land, 25 % | **Vanligaste reverse charge-kontot för e-handel**: Klaviyo (IE), Stripe (IE), Meta Ireland, Google Ireland, Shopify International (IE). | +| 4545 | Import av varor, 25 % | Underlag för importmoms vid tullklarering: triggar 2615+2645. | +| 5440 | Förbrukningsemballage | Kartonger, fyllmaterial, tejp, polypåsar, fraktsedeletiketter. | +| 5710 | Frakter, transporter och försäkringar vid varudistribution | PostNord, DHL, Bring, Instabox, Budbee, Schenker: utgående frakt till slutkund. | +| 5720 | Tull- och speditionskostnader | Tullavgifter och DHL/UPS clearance fees, **ej** själva importmomsen. | +| 5970 | Film-, radio-, TV- och Internetreklam | Google/Meta/TikTok/YouTube ads: konceptuellt rätt (5910 också vanlig praxis). | +| 5980 | PR, institutionell reklam och sponsring | Influencer marketing-arvoden. | +| 6040 | Kontokortsavgifter | **Stripe/Adyen/Klarna/PayPal transaktionsavgifter**: konceptuellt korrekt (många bokföringsbyråer använder felaktigt 6570). | +| 6050 | Försäljningsprovisioner | **Marketplace-provisioner**: Amazon referral fees, CDON/Fyndiq, eBay final value, Etsy listing fees. | +| 6062 | Inkasso och KFM-avgifter | Klarna/Qliro-kreditfees, inkasso på obetalda fakturor. | + +**Avgörande korrigeringar mot vanliga felmappningar i andra skill-bibliotek:** 1684 är *inte* clearingkontot (det är "fordringar hos leverantörer"): använd **1580**. 2614/2624/2634 är reverse charge, inte OSS: OSS går på **2670 + 3106**. 3108 är EU-B2B *momsfritt*, inte export: export är **3105**. Kontona 4056 och 7920 finns inte i BAS 2025; korrekt är **4535** respektive **6040**. 561x-serien är personbilskostnader, inte logistik: logistik är **57x-serien**. + +## 4. Regulatorisk hårddel (högst informationstäthet) + +### 4.1 Momsregler unika för e-handel + +**OSS: unionsintern distansförsäljning av varor (B2C).** Definition i 2 kap. 7 § ML 2023:200. Leveransort = destinationsland enligt 6 kap. 7 § ML. **Tröskelvärde 99 680 SEK / 10 000 EUR** per **kalenderår** (ej rullande 12 mån) i 6 kap. 62 § ML: gäller endast säljare etablerad enbart i Sverige och avser sammanlagd unionsintern distansförsäljning av varor **plus** TBE-tjänster till alla EU-länder. Tröskeln måste vara underskriden både innevarande och närmast föregående kalenderår. Vid överskridande från och med den transaktion som överskrider: antingen lokal momsregistrering i varje destinationsstat eller unionsordningen (OSS) i 22 kap. ML. Frivillig OSS under tröskeln är möjlig (bindande minst två kalenderår). Ikraftträdande för den EU-gemensamma tröskeln: 2021-07-01 (genom prop. 2019/20:122); överförd till nuvarande paragrafnumrering 2023-07-01. + +**IOSS: importordningen.** Definition i 2 kap. 8 § ML. Leveransort i 6 kap. 11 § ML (Sverige om transporten avslutas här och momsen redovisas via IOSS). 22 kap. ML reglerar själva ordningen. Gäller försändelser med **verkligt värde ≤ 150 EUR** (≈ 1 700 SEK enligt Tullverkets TFS 2022:5) exkl. punktskattepliktiga varor. Vid IOSS blir själva importen momsbefriad (10 kap. 65 § ML, art. 143.1 ca direktivet) och säljaren tar ut destinationslandets moms vid kassan. **22 EUR-import-frigränsen avskaffades 2021-07-01.** EU-grund: rådets direktiv (EU) 2017/2455 och 2019/1995. Saknas IOSS-nummer tas importmomsen ut av Tullverket vid gränsen från mottagaren/transportören. + +**Marketplace deemed supplier.** Två fall i ML 2023:200: **5 kap. 5 §**: plattform anses ha köpt och sålt vid distansförsäljning av importerade varor ≤ 150 EUR via elektroniskt gränssnitt; **5 kap. 6 §**: plattform anses ha köpt och sålt vid leverans inom EU från icke-EU-etablerad säljare till EU-konsument (oavsett om transporten är gränsöverskridande eller inom samma EU-land). Transportallokering i 6 kap. 17 § ML. Beskattningsgrundande händelse = när betalningen godkänns (7 kap. ML, art. 66a direktivet). Bakomliggande säljarens leverans till plattformen är undantagen (10 kap. ML, art. 136a). **Skatteverkets ställningstagande dnr 8-1293055 (2021-10-29, uppdaterat 2023-06-26)**: deemed supplier-reglerna omfattar inte förmedling i eget namn (då gäller 5 kap. 4 § ML); varorna måste fysiskt befinna sig inom EU när betalningen godkänns för 5 kap. 6 §; vid flerstegsförsäljning av importerade varor ≤ 150 EUR hänförs transporten till sista ledet. Se även **HFD mål nr 5815-22 (2023-02-24)** för kriterier kring "förmedling i eget namn". + +**Dropshipping och kedjetransaktioner.** 6 kap. 14-17 §§ ML 2023:200 (motsvarar tidigare GML 5 kap. 2 e §). Huvudregel i 6 kap. 15 §: transporten hänförs till leveransen *till* mellanhanden. Undantag: om mellanhanden meddelat säljaren sitt VAT-nr **i avgångslandet** hänförs transporten till leveransen *från* mellanhanden. Detta är "Quick Fixes"-regeln (direktiv (EU) 2018/1910, art. 36a), ikraft i Sverige **2020-01-01** genom prop. 2018/19:160. Förenklingsregeln för trepartshandel kräver att alla tre parter är momsregistrerade i var sitt EU-land (10 kap. ML, art. 141 direktivet). Vid dropshipping från tredjeland direkt till EU-konsument med plattform i kedjan: se dnr 8-1293055: transporten hänförs till sista ledet. + +**Returer och kreditfakturor (cross-border).** 8 kap. 14 § ML 2023:200 (prisnedsättning efter tillhandahållande minskar beskattningsunderlaget). 8 kap. 15 § ML (återtagande av vara vid avbetalningsköp). 17 kap. ML (kreditnotans formkrav). Vid OSS-försäljning korrigeras OSS-deklarationen genom justering i en senare period med hänvisning till ursprunglig deklaration enligt 22 kap. ML och kommissionens genomförandeförordning (EU) 2020/194. EU-grund: art. 90.1 direktivet 2006/112/EG. + +**Vouchers: enfunktion vs flerfunktion.** 2 kap. 26-27 §§ ML (definitioner). 5 kap. 40-44 §§ ML (beskattningsbara transaktioner): kontrollera konsoliderad version efter SFS 2024:942-renumreringen från 2025-01-01. **SPV (enfunktion)**: beskattningsland och momssats kända vid utställandet → moms vid varje överlåtelse. **MPV (flerfunktion)**: moms först vid inlösen. Distributionstjänster för MPV är separat momspliktiga. EU-grund: rådets direktiv (EU) 2016/1065 (voucher-direktivet), implementerat i Sverige **2019-01-01**. Skatteverkets vägledning: **dnr 202 488720-18/111 (2018-11-26)** och **dnr 202 508158-18/111 (2018-12-06)**: fortsatt giltiga med paragrafnyckel till ML 2023:200. + +**B2B-identifiering via VIES.** 10 kap. 42-43 §§ ML 2023:200: momsfri unionsintern leverans kräver (1) köpare beskattningsbar/juridisk person med momsregistrering i annat EU-land, (2) **giltigt VAT-nr verifierat i VIES**, (3) korrekt periodisk sammanställning enligt 35 kap. SFL. Dessa är **materiella** villkor sedan 2020-01-01 (Quick Fixes, direktiv (EU) 2018/1910), ej längre enbart formella. Saknas giltigt VAT-nr → svensk moms ska tas ut. + +### 4.2 Bokföringsregler unika för e-handel + +**Tidpunkt för intäktsredovisning.** BFNAR 2013:2 (om bokföring) 5 kap.: leveransprincipen styr; det är inte orderdatum eller betalningsdatum. För K2-företag preciserat i BFNAR 2016:10 3 kap. 4-7 §§ (rätten till ersättning övergår vid leverans/utförande). Vid förskott (betald order, ej levererad): **2420 Förskott från kunder**, ingen intäkt och ingen utgående moms vid mottagandet (moms uppkommer först vid leverans, undantag: enfunktionsvoucher beskattas vid utställandet). + +**Kassaregister-undantaget.** Lag (2007:592) **upphävdes 2012-01-01** av SFS 2011:1244: gällande regler i **39 kap. skatteförfarandelagen (2011:1244)**. **39 kap. 5 § SFL undantar ren e-handel** (distansavtal enligt 2005:59). Hybridfall: självständiga verksamheter bedöms var för sig: om fysisk butik tar emot kontant/kort/Swish över 4 prisbasbelopp/år krävs kassaregister för butiksdelen, men e-handelsdelen är undantagen. Click-and-collect där betalning sker online räknas som distansavtal; betalning vid hämtning i butik räknas som fysisk handel. + +**Periodisering av plattformsavgifter.** Procentbaserade avgifter (Stripe 1,4 % + 1,80 kr för EEA-kort etc.) periodiseras till samma period som transaktionen genererades, även om de debiteras netto i nästa payout. Månatliga SaaS-avgifter och fasta plattformsavgifter periodiseras månadsvis (interimsskuld eller -fordran om faktureringsperiod ej följer kalendermånad). + +**Lagerredovisning vid dropshipping.** Säljaren äger aldrig lagret → ingen lagervärdering enligt BFNAR 2016:10 (K2) eller BFNAR 2012:1 (K3). Vid hybridmodell (eget lager + dropship-sortiment) ska dropship-sortimentet inte ingå i lagervärdet vid bokslut. + +**Plattformsclearing: brutto vs netto.** Bokföringsmässigt och momsmässigt **brutto-princip krävs**: full försäljning på 3001/3106 etc., utgående moms separat, plattformsavgift som separat kostnad på 6040 eller 6050. Detta är inte förhandlingsbart: Skatteverket kräver bruttoredovisning för moms (1 kap. ML; jfr även BFL 5 kap. 6 § om netto-bokning bara där intäkt och kostnad har klart samband med samma transaktion och nettot är obetydligt). Stripe-avgifter har inte momsmässigt samband med varuförsäljningen. + +### 4.3 Sektorlagar + +**Distansavtalslagen: lag (2005:59) om distansavtal och avtal utanför affärslokaler.** Ångerrätt 14 dagar (**2 kap. 10 §**), fristens början (2 kap. 12 §), förlängd frist upp till 12 mån vid informationsbrist (2 kap. 2 §), undantag från ångerrätt (2 kap. 11 §: specialtillverkade, livsmedel, lösnummer, plomberade hygienartiklar, evenemangsbiljetter, digitalt innehåll efter levererad fullgörelse). Återbetalning inom 14 dagar (2 kap. 14 §). Värdeminskningsavdrag (2 kap. 15 §). Online-marknadsplatser har särskilda informationskrav i 2 kap. 2 a § (näringsidkare vs privatperson, rankningskriterier). **SFS 2026:246** inför 19 juni 2026 krav på "ångerknapp" i onlinegränssnitt. + +**Konsumentköplagen (2022:260).** Ikraft 2022-05-01, ersätter KKL 1990:932. Genomför direktiv (EU) 2019/771 och 2019/770. Reklamationstid/näringsidkaransvar **3 år från avlämnandet** (4 kap. 14 §). **Omvänd bevisbörda 2 år** (4 kap. 17 §): fel som visar sig inom 2 år presumeras ha funnits vid avlämnandet (höjt från 6 månader). Uppdateringsskyldighet på varor med digitala delar (4 kap. 4 §). 9 kap. reglerar digitalt innehåll/digitala tjänster, inkl. avtal där betalningen utgörs av personuppgifter (9 kap. 7 §). + +**E-handelslagen: lag (2002:562) om elektronisk handel.** Informationskrav om tjänsteleverantören i 8-9 §§ (namn, org.nr, gatuadress, e-post, momsregnr, ev. registrering). Beställningskrav i 10-11 §§ (tekniska steg, möjlighet att upptäcka och rätta inmatningsfel, språk, sparbar varaktig form av villkor). Bekräftelse utan dröjsmål (12 §). Påföljd via marknadsföringslagen (15 §). + +**GDPR (EU) 2016/679** + kompletterande lag (2018:218). Rättslig grund för kundregister: avtalsuppfyllelse (köp): art. 6.1 b; berättigat intresse (befintliga kunder, marknadsföring): art. 6.1 f; samtycke (nyhetsbrev till nya kontakter, cookies utanför funktionella): art. 6.1 a. Lagringsbegränsning art. 5.1 e: kundregister får inte sparas längre än nödvändigt; **bokföringslagens 7-årskrav på räkenskapsinformation (BFL 7 kap. 2 §) är specialregel** och tar över för fakturor/orderdata. Biträdesavtal (art. 28) med Shopify, Klaviyo, Stripe, fraktbolag, ESP. Cookies regleras via LEK (2022:482). + +**Marknadsföringslagen (2008:486).** 5 § (god marknadsföringssed), 7 § (aggressiv), 8 § (transaktionstest), 10 § (vilseledande), 12 § (köperbjudande). Omnibus-ändringar **ikraft 2022-09-01** (ej 2023-01-01, vanligt felaktigt datum): **12 c §** transparenskrav vid konsumentrecensioner; svarta listan p. 23a-23c (förbud mot falska/manipulerade recensioner, oavslöjade betalda placeringar). **Prisinformationslagen (2004:347) 7 a §**, 30-dagars-regeln: vid prissänkning ska lägsta pris under senaste 30 dagarna anges. Sanktionsavgift upp till **4 % av årsomsättningen** för flagranta överträdelser (Omnibus). + +**Penningtvättslagen (2017:630).** **Ren varuförsäljning omfattas normalt INTE**: tröskeln 15 000 EUR för varuförsäljning togs bort genom SFS 2019:608/774. Plattform som tillhandahåller betaltjänster, escrow, peer-to-peer-överföringar eller e-pengar omfattas dock som verksamhetsutövare (1 kap. 2 § p 8/9). Konstförmedling ≥ 10 000 EUR omfattas alltid. Krypto-tillgångar omfattas. + +**Produktsäkerhet.** **GPSR: förordning (EU) 2023/988** tillämpas **från 2024-12-13** och är direkt tillämplig; ersätter direktiv 2001/95/EG. Lag (2004:451) gäller fortsatt för tjänster och för varor som släpptes ut på marknaden före 2024-12-13. För e-handel: krav på spårbarhet av säljare (artikel 9), informationskrav vid distansförsäljning (artikel 19), återkallelse­procedurer. + +### 4.4 EU-regler (utöver moms-paketet) + +**DAC7: direktiv (EU) 2021/514.** Svensk transponering: **lag (2022:1681)** om plattformsoperatörers inhämtande av vissa uppgifter (POL) + **lag (2022:1682)** om automatiskt utbyte + förordningar 2022:1692 och 2022:1693 + **22 c kap. skatteförfarandelagen**. Ikraft 2023-01-01; första rapportering **2024-01-31** för år 2023. Omfattar plattformar som förmedlar uthyrning av fast egendom, personliga tjänster, försäljning av varor, uthyrning av transportmedel. Säljarundantag för varor: **färre än 30 transaktioner OCH högst 2 000 EUR** per kalenderår (båda måste vara uppfyllda). Plattformsavgift **2 500-12 500 kr** per utebliven/felaktig kontrolluppgift. Dokumentationsbevarande 7 år (POL 6 kap. 14 §). + +**Geoblocking: förordning (EU) 2018/302** + kompletterande lag (2019:59). + +**P2B: förordning (EU) 2019/1150.** Krav på online-marknadsplatser gentemot säljare: tydliga villkor (art. 3), 15 dagars notice vid ändring, 30 dagars varsel vid suspension (art. 4), rankningstransparens (art. 5), internt klagomålssystem (art. 11). + +**DSA: förordning (EU) 2022/2065.** Tillämpas fullt ut **från 2024-02-17**. Marknadsplatser som möjliggör B2C-avtal har särskilda krav: KYBC (art. 30, spårbarhet av säljare), transparens om reklam, mekanismer för rapportering av olagligt innehåll/produkter. Sanktion upp till 6 % av global årsomsättning. Tillsyn: PTS (samordnare), Mediemyndigheten, Konsumentverket. + +**Omnibus-direktivet (EU) 2019/2161.** Genomfört genom prop. 2021/22:174: ikraft **2022-09-01** (vissa delar 2022-05-28 via svarta listan). + +### 4.5 Skatteverket-ställningstaganden och HFD (2020-2025) + +| Typ | Dnr / Mål nr | Datum | Ämne | +|---|---|---|---| +| SKV ställningstagande | **8-1293055** | 2021-10-29 (uppd. 2023-06-26) | Plattformsförsäljning / deemed supplier 5 kap. 5-6 §§ ML: transportallokering vid flerstegsförsäljning av importerade varor ≤ 150 EUR | +| SKV ställningstagande | **8-2059749** | 2022-12-19 | Elektroniska tjänster via marknadsplatser: presumtion om förmedlare som säljare (art. 9a genomförandeförordning 282/2011) | +| SKV ställningstagande | **8-5507** | 2020-01-13 | Betaltjänster och undantaget från skatteplikt: momsfri endast vid rättsliga/ekonomiska förändringar mellan betalare och mottagare; rena tekniska/administrativa tjänster är momspliktiga (avgör avdragsrätt på Stripe/Klarna/Adyen-avgifter) | +| SKV ställningstagande | **8-314934** | 2020-09-25 | Förmedling av tjänster i eget vs annans namn | +| SKV ställningstagande | **8-498120** | 2020-09-25 | Förmedling av varor i annans namn | +| SKV ställningstagande | **202 488720-18/111** | 2018-11-26 | Vouchers (SPV/MPV): fortsatt giltigt under ML 2023:200 | +| SKV ställningstagande | **202 508158-18/111** | 2018-12-06 | Fakturering och redovisning av vouchers | +| SKV ställningstagande | **8-155570-2025** | 2025-05-02 | Betalningsskyldig för importmoms: deklaranten i tulldeklarationen redovisar i sin momsdeklaration (gemensamt SKV/Tullverket) | +| HFD-dom | **Mål nr 5815-22** | 2023-02-24 | Vårdplattform: kriterier för "förmedling i eget namn" (analogt tillämpbart på e-handelsplattformar) | +| HFD-dom | **Mål nr 4610-21** | 2022-01-07 | Mellanbanksavgifter / kortinlösen: inlösentjänst momsfri; mellanbanksavgift ej ersättning för tjänst | +| HFD 2023 ref. 45 | **Mål nr 7254-7255-22** | 2023-10-16 | Omsättningsbaserad fördelningsgrund vid blandad verksamhet: direkt effekt av art. 173-174 direktivet | + +## 5. De tre högsta felfrekvensscenarierna + +### 5.1 OSS-tröskel överskriden: fortsatt svensk moms i kassan +**Fel:** Säljaren passerar 99 680 SEK i samlad EU-B2C-omsättning (varor + TBE-tjänster) och fortsätter ta ut 25 % svensk moms på order till EU-konsumenter. Bokföring kvar på 3001 + 2611. +**Rätt:** Från och med **den transaktion som överskrider tröskeln** beskattas i destinationsland (6 kap. 7 § + 6 kap. 63 § ML 2023:200). Antingen registrera i unionsordningen (OSS, 22 kap. ML) via Skatteverket e-tjänst eller momsregistrera i varje destinationsstat. Bokföringsmässigt: bruttointäkt på **3106** per destinationsland, destinationslandets moms på **2670** med underkonto per land/sats. Kvartalsvis OSS-deklaration i SEK omräknad till EUR enligt ECB-kursen sista dagen i deklarationsperioden. Korrigering vid retur sker i senare OSS-period med referens till ursprunglig deklaration (kommissionens genomförandeförordning (EU) 2020/194). +**Lagstöd:** 6 kap. 7, 62-65 §§ ML 2023:200; 22 kap. ML; prop. 2019/20:122. + +### 5.2 Plattformspayouts (Stripe/Klarna/Adyen) bokförda netto +**Fel:** Daglig payout om 87 600 SEK (efter 2 400 SEK Stripe-avgift på 90 000 brutto) bokförs i sin helhet som 3001 + 2611 → omsättning underskattas, ingående moms på den momspliktiga delen av Stripe-tjänsten missas, marketplace-provisioner från Amazon/CDON syns inte i resultaträkningen som kostnad. +**Rätt:** Brutto-redovisning krävs. Stegvis: (a) vid orderbekräftelse/leverans bokas brutto försäljning 3001 (eller 3106 för OSS) + utgående moms 2611/2670 mot fordran **1580/1581** per provider; (b) avgiften bokas separat som kostnad på **6040** (kontokortsavgifter, Stripe/Adyen/Klarna) eller **6050** (marketplace-provisioner Amazon/CDON/Fyndiq/eBay): reverse charge på EU-providers (Stripe Technology Europe IE, Klarna SE → ingen RC, Adyen NL) tillämpas på den momspliktiga komponenten enligt dnr 8-5507; (c) faktisk bankpayout bokas mot 1580 → 1930; (d) FX-differens på fordringskontot vid settlement bokas på 3960/7960. **HFD mål 4610-21 (2022-01-07)** stödjer att kortinlösen är momsfri men närliggande tekniska tjänster är momspliktiga: uppdelning krävs ofta. Vid fakturaspecifikation från providern följ deras momsklassificering per komponent. +**Lagstöd:** Bruttoprincip 1 kap. ML 2023:200; BFL 5 kap. 6 §; dnr 8-5507 (2020-01-13); HFD mål 4610-21. + +### 5.3 Dropshipping från tredjeland direkt till EU-konsument utan korrekt kedjeanalys +**Fel:** Svensk säljare via Shopify har leverantör i Kina som skickar varan direkt till tysk konsument. Säljaren bokför som svensk inhemsk försäljning med 25 % svensk moms, eller alternativt som momsfri export. Inget av detta är korrekt. +**Rätt:** Tre scenarier kräver olika hantering. **(A) Varuvärde > 150 EUR, ingen plattform som deemed supplier:** importen sker i destinationslandet (Tyskland), tysk importmoms erläggs av mottagaren eller av säljaren om DDP-leverans: kan trigga tysk momsregistreringsskyldighet. Säljarens "leverans" är gjord utomlands (6 kap. 3 § ML, transport börjar utanför EU) och ligger utanför svensk moms. **(B) Varuvärde ≤ 150 EUR, säljaren använder IOSS:** moms tas ut vid kassan med destinationslandets sats, redovisas månatligt via importordningen (22 kap. ML); själva importen är momsbefriad (10 kap. 65 § ML). Bokföringsmässigt: intäkt 3106 + utgående moms 2670 per destinationsland. **(C) Försäljning sker via deemed supplier-plattform (Amazon, Etsy, eBay) ≤ 150 EUR:** plattformen blir momsskyldig enligt 5 kap. 5 § ML, säljarens leverans till plattformen är undantagen (10 kap. ML, art. 136a direktivet). Vid kedjetransaktion inom EU tillämpas 6 kap. 14-17 §§ ML (Quick Fixes): VAT-nr i avgångslandet styr transporttilldelningen. +**Lagstöd:** 5 kap. 5-6 §§, 6 kap. 3, 11, 14-17 §§, 10 kap. 65 § ML 2023:200; dnr 8-1293055 (2021-10-29); direktiv (EU) 2017/2455, 2018/1910, 2019/1995. + +## 6. Öppna frågor (flaggade för mänsklig granskning) + +- **Amazon FBA och PAN-EU FBA**: Ingen specifik dnr-baserad vägledning från Skatteverket per 2025-05. Överföring av egna varor till annat EU-lager utlöser lokal momsregistreringsskyldighet (förvärv lika med) och OSS kan användas parallellt för försäljning från utländskt lager till andra EU-länder, men gränsdragningen och rapporteringen i bokföringssystemet kräver klientspecifik granskning. +- **Triangulär handel via deemed supplier-plattform**: ingen separat ställningstagande: analys måste göras genom kombination av dnr 8-1293055 och kedjetransaktionsreglerna i 6 kap. 14-17 §§ ML. +- **Aktörsspecifika momsbedömningar Stripe/Klarna/Adyen/PayPal/Mollie**: Skatteverket har inte publicerat aktörsspecifika ställningstaganden. Bedömning sker per komponent på respektive fakturaspecifikation utifrån dnr 8-5507. Klarnas svenska entitet (Klarna Bank AB) faktureras utan reverse charge; Stripe Technology Europe (IE) och Adyen NV (NL) faktureras med reverse charge: verifiera per aktuell faktura. +- **Värdering vid 150 EUR-gränsen (rabattkoder, frakt, valutaomräkning)**: ingen tydlig SKV-vägledning per 2025-05. Tullverkets praxis: verkligt värde exkl. frakt/försäkring/skatter motsvarar tullfrihetsförordningens definition. +- **6040 vs 6570 vs 6050** för payment provider fees: branschpraxis är delad. Denna skill rekommenderar 6040 för Stripe/Adyen/Klarna (kontokortsavgifter, konceptuellt korrekt) och 6050 för marketplace referral fees, men 6570 förekommer brett och är försvarbart om klienten redan konsekvent använder det. +- **SFS 2024:942-renumrering** av voucher-paragrafer i 5 kap. ML från 2025-01-01: verifiera konsoliderad version på riksdagen.se före produktionsdeploy. +- **BAS 2026**: BAS-intressenternas Förening har aviserat större ändringar 2026 (Framtidens kontoplan). Versionshantera kontoplanen i koden. +- **Reverse charge-tillämpning på Klarna-avgifter**: Klarna Bank AB (SE) fakturerar inkl. svensk moms; Klarna Inc/övriga utländska entiteter med RC. Identifiera entiteten per faktura, inte per varumärke. + +## Referensfiler + +- `references/oss-ioss-mekanik.md`: fullständig OSS-/IOSS-deklarationsmekanik, ECB-kurs, korrigeringar, registreringsförfarande +- `references/payment-providers.md`: provider-för-provider-mapping (Stripe/Klarna/Adyen/PayPal/Shopify Payments/Mollie/Qliro) av fee-struktur, payout-cykel, momsbehandling per komponent, BAS-konton +- `references/dropshipping-kedjetransaktioner.md`: beslutsschema för dropshipping (varuvärde × destinationsland × plattformsstatus → korrekt momsbehandling) +- `references/marketplace-deemed-supplier.md`: Amazon FBA/PAN-EU, eBay, Etsy, CDON, Fyndiq, när 5 kap. 5-6 §§ ML triggas, säljarens bokföring +- `references/dac7-rapportering.md`: POL/LAUP-mekanik, vilka plattformar omfattas, kontrolluppgifter KU90-KU93 +- `references/vouchers-presentkort.md`: SPV/MPV-beslutsmatris, BAS-konton, redovisningstidpunkt +- `references/konsumentratt.md`: DAL 2005:59, KKL 2022:260, MFL/Omnibus, prisinformation 30-dagars, ångerknapp SFS 2026:246 +- `references/kollektivavtal-lager-e-handel.md`: fullständigt 2025-2027-avtal, OB-tabell, arbetstidsregler, mertidsersättning +- `references/skv-stallningstaganden-katalog.md`: fullständig katalog över relevanta dnr 2018-2025 med paragrafnyckel GML↔ML 2023:200 + + +--- + +## Loadable references + +The reference files named above are NOT included in this body. When a question genuinely needs that depth, load the specific one on demand with `gnubok_load_skill`, and only then: + +- `references/dac7-rapportering.md` → `gnubok_load_skill("vertical/e-handel/dac7-rapportering")`: DAC7: plattformsoperatörers rapporteringsskyldighet +- `references/dropshipping-kedjetransaktioner.md` → `gnubok_load_skill("vertical/e-handel/dropshipping-kedjetransaktioner")`: Dropshipping och kedjetransaktioner: beslutsschema +- `references/kollektivavtal-lager-e-handel.md` → `gnubok_load_skill("vertical/e-handel/kollektivavtal-lager-e-handel")`: Lager- och E-handelsavtalet 2025-2027 +- `references/konsumentratt.md` → `gnubok_load_skill("vertical/e-handel/konsumentratt")`: Konsumenträtt: distansavtalslagen, KKL, MFL, prisinformation, GPSR +- `references/marketplace-deemed-supplier.md` → `gnubok_load_skill("vertical/e-handel/marketplace-deemed-supplier")`: Marketplace deemed supplier: 5 kap. 5-6 §§ ML 2023:200 +- `references/oss-ioss-mekanik.md` → `gnubok_load_skill("vertical/e-handel/oss-ioss-mekanik")`: OSS- och IOSS-mekanik +- `references/payment-providers.md` → `gnubok_load_skill("vertical/e-handel/payment-providers")`: Payment Provider: bokföringsmappning per aktör +- `references/skv-stallningstaganden-katalog.md` → `gnubok_load_skill("vertical/e-handel/skv-stallningstaganden-katalog")`: Skatteverkets ställningstaganden och HFD-domar: e-handelskatalog +- `references/vouchers-presentkort.md` → `gnubok_load_skill("vertical/e-handel/vouchers-presentkort")`: Vouchers och presentkort: SPV vs MPV +$gb$, + NULL, + 3, + 1 + ), + ( + 'vertical/e-handel/dac7-rapportering', + 'vertical', + 'DAC7: plattformsoperatörers rapporteringsskyldighet', + $gb$DAC7: plattformsoperatörers rapporteringsskyldighet: reference for E-handel & näthandel (SNI 47.91 / 47.99)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1177, + '.claude\skills\industry\e-handel\references\dac7-rapportering.md', + $gb$# DAC7: plattformsoperatörers rapporteringsskyldighet + +## Lagstöd + +- **Direktiv (EU) 2021/514** (DAC7), ikraft 2023-01-01. +- **Lag (2022:1681)** om plattformsoperatörers inhämtande av vissa uppgifter på skatteområdet (POL). +- **Lag (2022:1682)** om automatiskt utbyte av upplysningar om inkomster genom digitala plattformar. +- **Förordning (2022:1692)** och **förordning (2022:1693)**. +- **22 c kap. skatteförfarandelagen (2011:1244)**. + +## Vem omfattas + +**Rapporteringsskyldig plattformsoperatör**: operatör som driver eller utvecklar mjukvara som låter "säljare" ansluta sig till andra användare för att utföra "berörda aktiviteter" mot ersättning. + +**Etableringskoppling**: +- Skatterättsligt hemvist i Sverige, eller +- Registrerad i Sverige, eller +- Plats för faktisk företagsledning i Sverige, eller +- Fast driftställe i Sverige (utan att vara kvalificerad i annan EU-stat). + +Icke-EU-operatörer kan rapportera frivilligt till en vald EU-stat. + +## Berörda aktiviteter + +1. **Uthyrning av fast egendom** (boende, parkeringsplatser, kommersiella lokaler). +2. **Personliga tjänster** (tid-/uppgiftsbaserade tjänster, fysiska eller virtuella). +3. **Försäljning av varor**. +4. **Uthyrning av transportmedel**. + +E-handelsrelevans: punkt 3 (varuförsäljning via marketplace). + +## Vilka plattformar berörs i e-handelskontexten + +- Tradera, Blocket Marketplace, Sellpy → varuförsäljning. +- Amazon, eBay, Etsy, CDON Marketplace, Fyndiq, Tictail-typ-aktörer. +- TikTok Shop, Temu, om de når DAC7-anknytning. +- Egen Shopify-butik som **endast** säljer egna varor → INTE rapporteringsskyldig (operatören är inte en plattform i DAC7:s mening). +- Shopify som tjänsteleverantör → INTE rapporteringsskyldig på den nivån (det är butiksägaren som är säljare). + +## Säljarundantag: varor + +Säljare av varor undantas från rapportering om **båda** villkoren är uppfyllda under kalenderåret: +- **Färre än 30 berörda transaktioner**, OCH +- **Total ersättning högst 2 000 EUR**. + +Om en av tröskelvärdena passeras → hela årets transaktioner rapporteras. + +## Datum + +- Lagen ikraft **2023-01-01**. +- Första rapportering avseende rapporteringspliktiga aktiviteter 2023 → **2024-01-31**. +- Plattformen rapporterar årligen via Skatteverkets e-tjänst med specifika XML-schemas (motsvarar EU:s gemensamma format). + +## Kundkännedom (POL 4 kap.) + +Plattformen ska samla in och verifiera: +- För fysisk säljare: namn, primär adress, skatteregistreringsnummer (TIN) eller motsvarande, födelsedatum. +- För juridisk säljare: officiellt namn, primär adress, TIN, momsregistreringsnummer, registreringsnummer i bolagsregister. +- Vid uthyrning fast egendom: även adress för varje rapporterad fastighet. + +Verifiering ska ske med rimliga åtgärder, t.ex. mot offentliga register, samt revideras vid förändringar. + +## Rapporterade data per säljare (sammanfattning) + +- Identifierande uppgifter (namn, adress, TIN, momsregnr). +- Totalt ersättningsbelopp per kvartal och per typ av aktivitet. +- Antal aktiviteter per kvartal. +- Avgifter, provisioner och skatter som plattformen tagit ut/innehållit. +- För fast egendom: adress, antal hyresdagar. +- Finansiellt konto för utbetalning. + +## Sanktioner + +- Plattformsavgift **2 500-12 500 kr** per säljare där rapportering är felaktig eller utebliven. +- Föreläggande och vite enligt skatteförfarandelagen kan tillkomma. + +## Dokumentationsbevarande + +- **7 år** efter utgången av rapporteringsperioden (POL 6 kap. 14 §). + +## Konsekvenser för e-handelsklienter + +### Säljare via marketplace +- **Kontrolluppgifter KU90 (varuförsäljning) finns inte i DAC7-systemet**: DAC7-rapporten är ett eget format som plattformen lämnar direkt. Säljaren får inte alltid en kopia; rekommendation är att begära den årligen från plattformen för avstämning mot egen bokföring. +- Skatteverket kan jämföra rapporterad omsättning med säljarens egen deklaration. Diskrepans triggar revision. +- DAC7-omsättning är inte automatiskt momspliktig svensk omsättning: det kan vara deemed supplier-fall där plattformen är momsskyldig. Skatteverket har båda underlagen för korsavstämning. + +### Säljare som driver egen plattform +- Marketplace-operatörer (Tradera, Blocket Marketplace) → fullständig DAC7-rapportering, kräver KYC-process och teknisk integration mot Skatteverkets API. +- Egen Shopify-butik som **endast** säljer egna varor → undantagen. +- Hybrider (egen butik + tredjepartssäljare som listar via plattformen) → typiskt rapporteringsskyldig. + +### GDPR-samspel +- Säljarens personuppgifter samlas in baserat på **rättslig förpliktelse** (art. 6.1 c GDPR): DAC7 är lagstadgad skyldighet. +- Rätt till radering enligt GDPR begränsas under 7-årsperioden. +- Plattformen ska informera säljarna om rapporteringen (transparenskrav GDPR art. 13-14). +$gb$, + 'vertical/e-handel', + 2, + 1 + ), + ( + 'vertical/e-handel/dropshipping-kedjetransaktioner', + 'vertical', + 'Dropshipping och kedjetransaktioner: beslutsschema', + $gb$Dropshipping och kedjetransaktioner: beslutsschema: reference for E-handel & näthandel (SNI 47.91 / 47.99)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1707, + '.claude\skills\industry\e-handel\references\dropshipping-kedjetransaktioner.md', + $gb$# Dropshipping och kedjetransaktioner: beslutsschema + +## Dimensioner + +Varje dropship-scenario klassificeras längs fem dimensioner: + +1. **Avgångsland**: EU-medlemsstat eller tredjeland (Kina, USA, UK, Turkiet vanligast). +2. **Destinationsland**: SE, annat EU-land, eller tredjeland. +3. **Varuvärde**: ≤ 150 EUR eller > 150 EUR (avgör IOSS-tillämplighet). +4. **Kanal**: egen butik (Shopify/WooCommerce) eller marketplace (Amazon/eBay/Etsy/Temu/Wish). +5. **Köparstatus**: B2B med giltigt VAT-nr i VIES eller B2C. + +## Lagstöd + +- **6 kap. 14-17 §§ ML 2023:200**: kedjetransaktionsregler (Quick Fixes, direktiv (EU) 2018/1910, ikraft SE 2020-01-01). +- **5 kap. 5-6 §§ ML**: deemed supplier (plattform anses ha köpt och sålt). +- **6 kap. 3 § ML**: leveransort vid transport från tredjeland. +- **6 kap. 11 § ML**: leveransort vid IOSS-tillämpning. +- **10 kap. 65 § ML**: undantag för IOSS-import. +- **10 kap.** + **art. 136a direktivet**: undantag för säljarens leverans till deemed supplier-plattform. +- **dnr 8-1293055** (2021-10-29, uppd. 2023-06-26): SKV:s ställningstagande om transportallokering. + +## Beslutsmatris + +### Scenario A: Svensk säljare, leverantör i EU, B2C-kund i annat EU-land +Exempel: Svensk Shopify-butik, leverantör i Polen, kund i Tyskland. + +- Två leveranser i kedjan: PL-leverantör → svensk säljare → DE-konsument. +- Transport hänförs som huvudregel till leveransen *till* mellanhanden (svensk säljare) enligt 6 kap. 15 § ML. +- **Undantag**: om svensk säljare meddelar PL-leverantören sitt **polska VAT-nr**, hänförs transporten till leveransen *från* svensk säljare. I praktiken har svensk säljare normalt inte polskt VAT-nr → huvudregeln gäller. +- Resultat: PL-leverantör säljer momsfritt EU-B2B till svensk säljare (kräver VIES-giltigt svenskt VAT-nr). Svensk säljare gör förvärv i SE (4515 + 2614/2645). Försäljningen till DE-konsument är **distansförsäljning av varor** från SE till DE: OSS gäller om över tröskeln 99 680 SEK eller frivilligt registrerad (3106 + 2670-DE). +- Praktiskt problem: varan transporteras direkt PL → DE, men momsmässigt anses den ha rört sig PL → SE → DE. Krav på korrekt fakturering och bevisning. + +### Scenario B: Svensk säljare, leverantör i EU, B2B-kund i annat EU-land (trepartshandel) +Exempel: Svensk säljare, leverantör i Polen, kund (företag) i Tyskland med tyskt VAT-nr. + +- **Förenklingsregeln för trepartshandel** (10 kap. ML, art. 141 direktivet) kan tillämpas om alla tre parter är momsregistrerade i var sitt EU-land. +- Resultat: PL-leverantör säljer momsfritt till svensk säljare; svensk säljare säljer momsfritt till DE-kund som beskattar förvärvet i Tyskland. Svensk säljare rapporterar via periodisk sammanställning med kod för trepartshandel. +- Fakturakrav: hänvisning till "Trepartshandel: moms skall redovisas av köparen, art. 141 direktivet" eller motsvarande svensk formulering. + +### Scenario C: Svensk säljare, leverantör i tredjeland (Kina), B2C-kund i SE +Exempel: Svensk Shopify-butik, AliExpress-leverantör i Kina, svensk konsument. + +**C1: Varuvärde ≤ 150 EUR, säljaren använder IOSS**: +- Säljaren tar ut svensk moms (25 %) vid kassan, redovisar månatligt via IOSS (2670 + 3001 om vald registreringsstrategi; alternativt 3106 om annan modell). +- Importen är momsbefriad (10 kap. 65 § ML). +- Bokföringsmässigt: ingen importmoms (2615/2645). + +**C2: Varuvärde ≤ 150 EUR, ingen IOSS**: +- Tullverket tar ut moms av mottagaren vid gränsen (eller via transportörens förmedling). +- Säljaren bokför försäljningen som vanlig svensk omsättning **endast om varan anses levererad i Sverige**. Vid direktleverans från Kina med säljaren som importör (DDP) → säljaren importerar och säljer i SE (4545 + 2615/2645 vid import, 3001 + 2611 vid försäljning). Vid DAP/DDU → mottagaren importerar, säljarens leverans sker utanför EU och faller utanför svensk moms. + +**C3: Varuvärde > 150 EUR**: +- IOSS ej tillämpligt. Standard importförfarande. +- Vid DDP: säljaren importerar → 4545 + 2615/2645 + 3001 + 2611. +- Vid DAP/DDU: mottagaren importerar → säljarens transaktion sker utanför EU, ej svensk moms. + +### Scenario D: Svensk säljare, leverantör i tredjeland, B2C-kund i annat EU-land +Exempel: Svensk Shopify-butik, leverantör i Kina, kund i Tyskland. + +**D1: Varuvärde ≤ 150 EUR med IOSS**: +- Tysk moms tas ut vid kassan, redovisas månatligt via IOSS, importen är momsbefriad. 3106-DE + 2670-DE-19. + +**D2: Varuvärde > 150 EUR, DDP-leverans**: +- Säljaren importerar i Tyskland → kräver tysk momsregistrering eller indirekt representant. +- Försäljningen är inhemsk tysk omsättning (ej OSS: OSS gäller bara unionsintern distansförsäljning där transport börjar i EU). Tysk moms hanteras direkt i tysk momsdeklaration. + +**D3: Varuvärde > 150 EUR, DAP/DDU**: +- Tysk konsument importerar och betalar tysk importmoms vid gränsen. +- Säljarens transaktion sker utanför EU → faller utanför svensk moms. + +### Scenario E: Försäljning via marketplace som är deemed supplier +Exempel: Säljaren listar på Amazon, varan skickas från Kina till tysk konsument, värde 80 EUR. + +- **5 kap. 5 § ML** tillämpas: Amazon anses ha köpt och sålt eftersom (i) säljaren är icke-EU-etablerad alt. det är distansförsäljning av importerade varor ≤ 150 EUR via elektroniskt gränssnitt. +- Amazon redovisar moms i destinationslandet via sitt IOSS. +- **Säljarens fiktiva leverans till Amazon är undantagen** (10 kap. ML, art. 136a): säljaren har ingen omsättning att redovisa i SE för denna transaktion. +- Bokföring hos säljaren: marketplace-payout (1580-AMZ) kommer netto. Provisioner Amazon bokas på 6050. Försäljning bokas på t.ex. 3990 (övrig försäljning) eller ej alls, beroende på K2/K3-tolkning: flagga för byråstandard. + +### Scenario F: Direktleverans där säljaren har VAT-nr i avgångslandet +Exempel: Svensk säljare har även registrerat sig i Polen (lokal momsreg). Leverantör i Polen, kund i Tyskland. + +- Genom att meddela PL-leverantören sitt **polska** VAT-nr triggar säljaren undantaget i 6 kap. 16 § ML (Quick Fixes). +- Transporten hänförs till leveransen *från* säljaren (mellanhanden). +- PL-leverantör fakturerar med polsk inhemsk moms (säljaren har polskt VAT-nr, ses som inhemsk B2B-omsättning). +- Säljaren gör momsfri unionsintern leverans från PL till DE (eller distansförsäljning DE-konsument via OSS): kräver alltid bevisad transport och VIES-koll om B2B. +- Säljarens polska momsregistrering ger avdragsrätt för polsk ingående moms via polsk momsdeklaration eller 13:e direktivet. + +## Bevisning och dokumentation +- **Transport-bevis** vid momsfri EU-B2B-leverans: CMR, fraktsedel, leveransbevis från kund (Quick Fixes-kravet enligt art. 45a genomförandeförordning 282/2011: två oberoende handlingar). +- **VAT-nr-verifiering**: VIES-kontroll vid leveransdatum, sparas i ordersystemet. Materiellt villkor sedan 2020-01-01. +- **Tullhandlingar** vid import: tulldeklaration, importmomssedel. +$gb$, + 'vertical/e-handel', + 2, + 1 + ), + ( + 'vertical/e-handel/kollektivavtal-lager-e-handel', + 'vertical', + 'Lager- och E-handelsavtalet 2025-2027', + $gb$Lager- och E-handelsavtalet 2025-2027: reference for E-handel & näthandel (SNI 47.91 / 47.99)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1056, + '.claude\skills\industry\e-handel\references\kollektivavtal-lager-e-handel.md', + $gb$# Lager- och E-handelsavtalet 2025-2027 + +## Parter och avtalsperiod + +- **Arbetsgivarpart**: Svensk Handel. +- **Arbetstagarpart**: Handelsanställdas förbund. +- **Period**: 2025-04-01 till 2027-03-31 (24 månader). +- **Tecknat**: 2025-04-04. +- **Avtalsstatus**: Riksavtal med möjlighet till lokala överenskommelser. + +## Skillnad mot Detaljhandelsavtalet + +- **Detaljhandelsavtalet**: fysisk butik (säljpersonal i butik). +- **Lager- och E-handelsavtalet**: lagerpersonal och e-handelsanställda (plock, pack, returhantering, kundservice för e-handel). + +Vid hybridföretag (butik + e-handel): självständig e-handelsenhet ska ligga under Lager- och E-handelsavtalet även om huvudverksamheten är butik. Klassificeringen sker per arbetsuppgifter och organisatorisk tillhörighet, inte per företag. + +## Löneökningar 2025-2027 + +- **Total löneökning**: 12,04 SEK/timme (cirka 6,7 % över 24 mån, beroende på utgångsnivå). +- **Steg 1, 2025-04-01**: 6,02 SEK/timme. +- **Steg 2, 2026-04-01**: 6,02 SEK/timme. +- Tarifflöner och garanterade nivåer enligt bilaga till avtalet. + +## Arbetstid (avtalsmässigt) + +- **Ordinarie arbetstid**: 38,25 tim/vecka i genomsnitt (8 tim 30 min/dag i 4,5 dagar, eller motsvarande). +- **Förläggning**: må-sö, kl. **05.00-24.00**. +- **Begränsningsperiod**: max **13 veckor**. Arbetstid kan variera inom perioden så länge genomsnittet håller. +- **Nattarbete** (00.00-05.00): kräver lokal överenskommelse. + +## OB-tabell (huvuddrag, kontrollera aktuell bilaga) + +- Vardagar **18.15-22.00**: OB-tillägg. +- Vardagar efter 22.00 och söndagar: högre OB. +- Storhelger (jul, nyår, midsommar, påsk): extra storhelgs-OB. +- Exakta belopp uppdaterade per 2025-04-01. + +## Mertidsersättning för deltidsanställda (nyhet 2025) + +- Tidigare gick deltidsanställda upp till heltidsmått innan övertid utlöstes. +- Från 2025: mertidsersättning aktiveras vid arbete utöver schemalagd tid för deltidsanställda, även innan heltidsmått nås. +- Ersättningsnivå: enligt avtalsbilaga (typiskt OB-baserat tillägg). + +## Arbetstidsförkortning + +- Vid arbete på "obekväma" pass (tidigt, sent, helger) räknas en del av tiden som arbetstidsförkortning som kan tas ut i ledighet eller som tillägg. +- Detta är en strukturell avtalsdel som påverkar lönehantering: kräver tidskonto i lönesystemet. + +## Lokala överenskommelser + +Riksavtalet tillåter lokala anpassningar för: +- Förläggning av arbetstid vid säsongstoppar (Black Friday, Mellandagsrea). +- Skiftarbete vid 24/7-lager. +- Justering av OB vid helgöppning. + +## Försäkringar och kollektiva avtal + +- **Avtalspension SAF-LO**: 4,5 % av lönen under tak, 30 % över taket (2025). +- **Trygghetsförsäkring TFA**: Folksam. +- **Sjukförsäkring AGS**. +- **Föräldrapenningtillägg** (FPT). +- **Omställningsavtalet**. + +Premier hanteras via Fora och bokas på 7570/7580 m.fl. + +## Bokföringspåverkan + +### Konton (BAS 2025) +- 7010: Löner kollektivanställda. +- 7011: Löner kollektivanställda lager/E-handel (egen underkonto för rapportering). +- 7090: Förändring semesterlöneskuld. +- 7510: Lagstadgade sociala avgifter. +- 7570: Premier Fora (avtalsförsäkringar). +- 2940: Upplupna lagstadgade sociala avgifter. +- 2941: Upplupna avtalsenliga avgifter Fora. +- 2920: Upplupna semesterlöner. + +### Periodisering +- OB och mertidsersättning bokförs i samma månad som arbetet utförts. +- Storhelgs-OB kan kräva interimsavsättning om utbetalning sker månaden efter. +- Arbetstidsförkortning som sparas → skuld på 2920 (semesterlöneskuld) eller separat 2925. + +### Vid avtalspaussättning +- AGI (Arbetsgivardeklaration på individnivå) lämnas månadsvis till Skatteverket: kollektivavtalsdelen är inte specifik DAC-rapportering utan ingår i ordinarie löneskatte-flöde. + +## Praktiska e-handelsspecifika tillämpningar + +- **Black Friday/Cyber Monday-toppar**: lokala överenskommelser möjliggör tillfälligt utökad arbetstid. +- **Returshantering januari**: hög arbetsbelastning post-Jul → planera kapacitet med 13-veckors-perspektiv. +- **Kundservice för e-handel**: omfattas av avtalet om organisatoriskt placerad i lager/e-handelsfunktion, inte under tjänsteavtal. + +## Källor +- Avtalstexten publiceras av Svensk Handel och Handelsanställdas förbund. +- Kontrollera senaste justeringar via parternas webbplatser och Fora för försäkringspremier. +$gb$, + 'vertical/e-handel', + 2, + 1 + ), + ( + 'vertical/e-handel/konsumentratt', + 'vertical', + 'Konsumenträtt: distansavtalslagen, KKL, MFL, prisinformation, GPSR', + $gb$Konsumenträtt: distansavtalslagen, KKL, MFL, prisinformation, GPSR: reference for E-handel & näthandel (SNI 47.91 / 47.99)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 2261, + '.claude\skills\industry\e-handel\references\konsumentratt.md', + $gb$# Konsumenträtt: distansavtalslagen, KKL, MFL, prisinformation, GPSR + +## Distansavtalslagen (2005:59) + +Full namn: Lag om distansavtal och avtal utanför affärslokaler. Genomför direktiv 2011/83/EU (konsumenträttighetsdirektivet) + Omnibus-direktivet (EU) 2019/2161 i tillämpliga delar. + +### Tillämpningsområde +- Distansavtal = avtal som ingås uteslutande genom kommunikation på distans utan att näringsidkare och konsument träffats fysiskt under förhandlingen. +- E-handel via webbutik och app omfattas. + +### Informationskrav före köp (2 kap. 2 §) +- Pris inkl. skatter, leverans- och övriga avgifter. +- Betalningssätt, leveransvillkor, fullgörandetid. +- Ångerrätt och dess undantag. +- Varans/tjänstens väsentliga egenskaper. +- Säljarens identitet och kontaktuppgifter. +- Reklamationsrätt och garanti. +- Vid online-marknadsplatser: information enligt 2 kap. 2 a § om huruvida tredje part är näringsidkare eller konsument, och vilka rankningskriterier som använts. + +### Ångerrätt (2 kap. 10 §) +- **14 dagar** från det att konsumenten fått varan (eller, vid tjänst, från avtalets ingående). +- Vid digitalt innehåll som inte levereras på fysiskt medium: 14 dagar från avtalets ingående, men ångerrätten upphör om konsumenten samtyckt till påbörjat fullgörande och informerats om att ångerrätt går förlorad (2 kap. 11 § p 13). +- Vid informationsbrist om ångerrätt: förlängd frist till **upp till 12 månader och 14 dagar** (2 kap. 12 §). + +### Undantag från ångerrätt (2 kap. 11 §) +- Specialtillverkade/personligt utformade varor (p 4). +- Varor som snabbt försämras eller har kort hållbarhetstid (p 5, t.ex. färska livsmedel). +- Plomberade varor som av hygien- eller hälsoskäl ej kan returneras efter plombering brutits (p 6, t.ex. underkläder, kosmetika). +- Lösnummer av tidningar/tidskrifter (p 8). +- Evenemangsbiljetter med specifikt datum (p 12). +- Digitalt innehåll om fullgörelse har påbörjats med konsumentens samtycke (p 13). +- Online-auktioner som även kan besökas fysiskt (p 11). + +### Återbetalning (2 kap. 14 §) +- Inom **14 dagar** från att näringsidkare fått ångerbeskedet. +- Samma betalmedel som konsumenten använde, om inte annat överenskommits. +- Näringsidkaren får hålla inne återbetalningen tills varan kommit tillbaka eller konsumenten visat att den skickats. + +### Värdeminskningsavdrag (2 kap. 15 §) +- Näringsidkare får dra av belopp motsvarande värdeminskning **endast** om värdeminskningen beror på att konsumenten hanterat varan mer än nödvändigt för att fastställa egenskaper och funktion. +- Praxis: kläder som provats fritt är OK; kläder med tagg avlägsnad eller använt med synliga spår kan motivera avdrag. + +### SFS 2026:246: Ångerknappen +- Ikraft **2026-06-19**. +- Krav på "ångerknapp" tydligt synlig i onlinegränssnitt under hela ångerfristen. +- Knappen ska initiera elektroniskt ångermeddelande och näringsidkaren ska bekräfta mottagandet utan dröjsmål. + +## Konsumentköplagen (2022:260) + +Ikraft **2022-05-01**, ersätter KKL 1990:932. Genomför direktiv (EU) 2019/771 och 2019/770. + +### Felansvar +- **Reklamationstid 3 år** från avlämnandet (4 kap. 14 §). +- Konsumenten ska reklamera **inom skälig tid** efter upptäckt: minst 2 månader anses alltid skäligt (4 kap. 13 §). + +### Omvänd bevisbörda +- **2 år** (4 kap. 17 §). Fel som visar sig inom 2 år presumeras ha funnits vid avlämnandet om inte näringsidkaren bevisar motsatsen. +- Höjd från tidigare 6 månader. + +### Påföljder (4 kap. 18 §) +- Avhjälpande eller omleverans (näringsidkarens val, ska ske utan väsentlig olägenhet för konsumenten). +- Prisavdrag eller hävning vid utebliven/otillräcklig avhjälpning. +- Skadestånd. + +### Varor med digitala delar (4 kap. 4 §) +- Smarta klockor, uppkopplade hushållsapparater etc. +- **Uppdateringsskyldighet** under den tid konsumenten skäligen kan förvänta sig (vanligtvis 3 år för enstaka leverans, hela avtalsperioden för löpande tjänst). + +### Digitala tjänster (9 kap.) +- Streaming, molntjänster, appar. +- Inkluderar avtal där "betalningen" består av att konsumenten lämnar personuppgifter (9 kap. 7 §). + +### Bokföringskoppling +- Vid prisavdrag → kreditnota → momsbasen minskar (8 kap. 14 § ML 2023:200). +- Vid hävning → full kreditering → varan återförs till lager. +- Vid omleverans → varuväxling i bokföringen, ingen netto-effekt. + +## Marknadsföringslagen (2008:486) + +### Generella krav +- **5 §**: God marknadsföringssed. +- **8 §**: Marknadsföring som påverkar konsumentens förmåga att fatta välgrundat affärsbeslut. +- **10 §**: Vilseledande marknadsföring (inkl. om pris, jämförelser). + +### Omnibus-ändringar (ikraft 2022-09-01) + +- **12 c §**: Vid presentation av konsumentrecensioner ska näringsidkaren ange om och hur det säkerställs att recensionerna kommer från konsumenter som faktiskt köpt eller använt varan. +- **Svarta listan p. 23a-23c** (förbjudna marknadsföringsåtgärder): + - p 23a: Påstå att recensioner kommer från konsumenter utan rimliga åtgärder för att verifiera. + - p 23b: Lämna eller anlita någon för att lämna falska konsumentrecensioner. + - p 23c: Manipulera konsumentrecensioner (t.ex. radera negativa). + +### Sanktion +- Marknadsstörningsavgift upp till **4 % av årsomsättningen** för flagranta överträdelser (Omnibus-höjning). +- Vid distansförsäljning från utländsk näringsidkare till svenska konsumenter: 4 % beräknas på omsättning i Sverige. + +## Prisinformationslagen (2004:347) + +### 30-dagars-regeln (7 a §, ikraft 2022-09-01) +- Vid prissänkning ska näringsidkaren ange **lägsta pris under de senaste 30 dagarna** före sänkningen. +- Undantag: produkter med snabbt minskande hållbarhet (livsmedel). +- Vid första erbjudande efter introduktion: 30-dagars-regeln tillämpas på normalt försäljningspris. +- Vid stegvis sänkning (t.ex. mellandagsrea med ytterligare nedsättning): referenspriset behåller 30-dagars-grunden för hela kedjan. + +### Praktisk bokföringspåverkan +- Felaktig prismarknadsföring → marknadsstörningsavgift bokas som extraordinär kostnad (8000-serien). +- Sanktionerna är ej avdragsgilla skattemässigt (16 kap. 17 § IL). + +## E-handelslagen (2002:562) + +### Informationsskyldigheter (8-9 §§) +- Namn, organisationsnummer/registrering, gatuadress där näringsidkare är etablerad, e-postadress. +- Momsregistreringsnummer. +- Yrkesregistrering om relevant. + +### Beställningsprocess (10-11 §§) +- Tekniska steg innan slutförd beställning. +- Möjlighet att upptäcka och rätta inmatningsfel. +- Språk för beställning. +- Avtalsvillkor i sparbar varaktig form. + +### Bekräftelse (12 §) +- Mottagningsbekräftelse utan dröjsmål, på elektronisk väg. + +## GPSR: förordning (EU) 2023/988 + +Ikraft **2024-12-13**, direkt tillämplig. Ersätter direktiv 2001/95/EG och svensk lag (2004:451) för varor utsläppta på marknaden från 2024-12-13. + +### Krav för e-handel +- **Artikel 9**: Spårbarhet: produkter ska kunna identifieras via typ/parti/serienummer. +- **Artikel 19**: Informationskrav vid distansförsäljning: tillverkarens uppgifter, importör om från tredje land, kontaktuppgifter, produktbild, eventuella varningar. +- **Artikel 22**: Onlinemarknadsplatser har särskilda förpliktelser: utse kontaktpunkt för myndigheter, registrera säljare med rimlig due diligence, samarbeta vid återkallelser. +- **Återkallelseprocedur**: direktkontakt till alla identifierade köpare, fortsatt notis på e-handelssida tills åtgärd vidtagits. + +### Sanktioner +- Sanktioner enligt nationell lag: i Sverige genom kompletterande lag (förslag, ev. nya regler under 2026). + +## Penningtvättslagen (2017:630): e-handelsrelevans + +Ren varuförsäljning omfattas **normalt inte**. Tröskeln 15 000 EUR för kontant betalning av varor togs bort genom SFS 2019:608/774. + +**Omfattas i e-handelskontext** om verksamheten: +- Tillhandahåller betaltjänster, e-pengar, escrow → verksamhetsutövare (1 kap. 2 § p 8/9). +- Konstförmedling ≥ 10 000 EUR per transaktion eller sammanhängande transaktioner → alltid. +- Krypto-tillgångar (handel, växling, plånbokstjänster) → omfattas. + +## GDPR (EU) 2016/679 + kompletterande lag (2018:218) + +### Rättslig grund för e-handel +- **Art. 6.1 b**: Avtalsuppfyllelse: kunduppgifter för köpet. +- **Art. 6.1 f**: Berättigat intresse: marknadsföring till befintliga kunder (med opt-out), bedrägeribekämpning. +- **Art. 6.1 a**: Samtycke: nyhetsbrev till nya kontakter, icke-funktionella cookies, profilering. +- **Art. 6.1 c**: Rättslig förpliktelse: bokföringsdata (BFL 7 kap. 2 §). + +### Lagringstid +- Kunddata: så länge nödvändigt för relationen, sedan radering eller anonymisering. +- **Bokföringsdata: 7 år** efter räkenskapsårets slut (BFL 7 kap. 2 §), specialregel. +- Marknadsföringsdata utan samtycke efter avslutad kundrelation: vanligtvis 2-3 år. + +### Personuppgiftsbiträden +- Shopify, Klaviyo, Stripe, fraktbolag, ESP, customer service-verktyg → biträdesavtal (art. 28) krävs. +- Tredjelandsöverföringar (USA-baserade verktyg) → SCC + transfer impact assessment + ev. ytterligare skyddsåtgärder (Schrems II). + +### Cookies (LEK 2022:482) +- Funktionella cookies → ingen samtycke. +- Statistik, marknadsföring, profilering → aktivt samtycke krävs. +- Cookie banner ska tillåta nej-alternativ lika lätt som ja-alternativet. +$gb$, + 'vertical/e-handel', + 2, + 1 + ), + ( + 'vertical/e-handel/marketplace-deemed-supplier', + 'vertical', + 'Marketplace deemed supplier: 5 kap. 5-6 §§ ML 2023:200', + $gb$Marketplace deemed supplier: 5 kap. 5-6 §§ ML 2023:200: reference for E-handel & näthandel (SNI 47.91 / 47.99)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1427, + '.claude\skills\industry\e-handel\references\marketplace-deemed-supplier.md', + $gb$# Marketplace deemed supplier: 5 kap. 5-6 §§ ML 2023:200 + +## När triggas reglerna + +**5 kap. 5 § ML**: distansförsäljning av **importerade varor ≤ 150 EUR** via elektroniskt gränssnitt. Plattformen anses ha köpt och sålt varan. Tillämpas oavsett säljarens etableringsland. + +**5 kap. 6 § ML**: leverans **inom EU** från en **icke-EU-etablerad säljare** till en EU-konsument via elektroniskt gränssnitt. Tillämpas både vid gränsöverskridande och inom samma EU-land. + +**Fakta-test**: +1. Är försäljningen via elektroniskt gränssnitt (online marketplace, plattform, portal)? +2. Är säljaren EU-etablerad eller icke-EU-etablerad? +3. Är varan importerad och ≤ 150 EUR? (5 §) +4. Eller är varan redan i EU-lager men säljaren är icke-EU-etablerad? (6 §) + +## Konsekvenser för säljaren + +- Säljarens leverans till plattformen är **undantagen** (10 kap. ML, art. 136a direktivet). Ingen momsregistrering i destinationsstaten för säljaren genom denna transaktion. +- Säljaren ska inte ta ut moms av plattformen. +- Plattformen redovisar destinationslandets moms via sitt IOSS (för 5 §) eller via OSS/lokal registrering (för 6 §). +- Transport hänförs till plattformens leverans (6 kap. 17 § ML). + +## Per plattform + +### Amazon + +**EU-marknadsplatser**: Amazon.de, Amazon.fr, Amazon.it, Amazon.es, Amazon.nl, Amazon.se, Amazon.pl, Amazon.com.be. +**Deemed supplier-aktivering**: +- Säljare utanför EU (B2C-omsättning från EU-lager) → 5 kap. 6 § ML triggas. +- Säljare med varor från tredjeland direkt till konsument ≤ 150 EUR → 5 kap. 5 § ML triggas (Amazon kör IOSS). +- Säljare etablerad i EU med EU-lager → reglerna triggas INTE; säljaren redovisar moms själv (OSS eller lokal reg). + +**FBA (Fulfilment by Amazon)**: Egna varor i Amazon-lager. Säljaren är "owner of record". +**PAN-EU FBA**: Amazon kan flytta säljarens varor mellan EU-lager (DE, FR, IT, ES, PL, CZ, NL, SE) för optimering. **Varje flytt utlöser lokal momsregistreringsskyldighet** i mottagande land (förvärv lika med, art. 17 direktivet). OSS kan inte ersätta dessa lokala registreringar. + +**Rapporter att tolka momsmässigt**: +- *VAT Transactions Report*: visar varje transaktion med plattformens deemed supplier-status. +- *Amazon VAT Calculation Service (VCS)*: Amazon räknar och samlar in moms. +- *Settlement Report*: payout-detaljer för bokföring (brutto, refunds, fees). + +**BAS-mappning säljarens bokföring**: +- 1580-AMZ-DE, 1580-AMZ-FR etc. per marketplace. +- 6050: Amazon Referral Fee, FBA Fulfilment Fee (RC: Amazon EU S.à r.l., LU → 4535 + 2614/2645). +- 3990: Övrig försäljning (deemed supplier-fall där säljarens leverans är undantagen) eller normal 3001/3106 om säljaren bär momsen själv. + +### eBay +- Deemed supplier för icke-EU-säljare och importerade varor ≤ 150 EUR enligt samma logik. +- Final value fee (provisionen) bokas på 6050 (eBay Marketplaces GmbH, CH-baserat för EU, RC kan tillämpas; eller eBay Commerce Inc, US, RC). + +### Etsy +- Etsy Ireland UC (IE) → RC på provisioner. +- Listing fees, transaction fees, Offsite Ads-fees → 6050 + 4535 RC. + +### CDON Marketplace +- CDON AB (SE, org.nr 556406-1702) → svensk moms på fakturan, ingen RC. +- Referral fee per kategori → 6050 + 2611 (ingående svensk moms avdragsgill). + +### Fyndiq +- Fyndiq AB (SE) → svensk moms, ingen RC. +- Provisioner → 6050. + +### TikTok Shop +- Säljare måste vara EU-etablerade för EU-marknader (per 2025). Deemed supplier-frågan begränsad. +- TikTok Information Technologies UK Ltd (UK) eller TikTok Technology Limited (IE) beroende på avtal: verifiera entiteten på faktura. + +### Temu och Wish +- Operationsmodell varierar. Säljare via Temu är ofta kinesiska entiteter; Temu kan agera deemed supplier för importerade varor ≤ 150 EUR. +- Svensk säljare via Temu: ovanligt scenario, kräver klientspecifik analys. + +## Säljarens bokföringspraxis vid deemed supplier + +Vid scenarier där 5 kap. 5 eller 6 § triggas och säljarens leverans till plattformen är undantagen: + +1. Bruttoförsäljning enligt plattformens settlement report bokas på fordringskonto (1580-AMZ etc.) mot **3990 Övrig försäljning** eller separat konto (t.ex. 3091 "Försäljning via marketplace, deemed supplier") för att skilja från egen omsättning som faller under momslagen. +2. Provisioner och fees bokas separat på 6050 (RC tillämpas om plattformens entitet är utanför SE). +3. Refunds bokas som negativ försäljning, ej som kostnad. +4. **Ingen utgående moms** redovisas av säljaren för dessa transaktioner i svensk momsdeklaration. +5. **Periodisk sammanställning**: dessa transaktioner ingår inte i VIES-rapporteringen: det är plattformen som rapporterar. +6. För blandad verksamhet (egen omsättning + marketplace-omsättning som deemed supplier-skyddas): se HFD 2023 ref. 45 om proportionell avdragsrätt vid blandad verksamhet. + +## Bevisning vid revision +- Plattformens VAT-rapport eller motsvarande underlag som styrker att plattformen redovisar momsen. +- Settlement reports per period. +- Klassificering av varje order: vilken paragraf (5 kap. 5 §, 6 §, eller utanför deemed supplier). +- Avgöranden grundade på dnr 8-1293055 (transportallokering vid flerstegsförsäljning). + +## Öppen fråga: PAN-EU FBA + OSS + +Skatteverket har inte publicerat aktörsspecifik vägledning. Praktisk hantering: +- Flytt av egna varor mellan EU-lager → lokal momsregistrering i varje destinationsland för förvärv. +- Försäljning från utländskt EU-lager till konsument i annat EU-land → kan rapporteras via OSS (eftersom OSS täcker unionsintern distansförsäljning oavsett startland inom EU). +- Försäljning från utländskt EU-lager till konsument i **samma** land som lagret → lokal momsregistrering krävs, OSS täcker inte detta. + +Kombinationen genererar typiskt 3-7 lokala momsregistreringar för PAN-EU FBA-säljare. Kräver klientspecifik analys. +$gb$, + 'vertical/e-handel', + 2, + 1 + ), + ( + 'vertical/e-handel/oss-ioss-mekanik', + 'vertical', + 'OSS- och IOSS-mekanik', + $gb$OSS- och IOSS-mekanik: reference for E-handel & näthandel (SNI 47.91 / 47.99)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 976, + '.claude\skills\industry\e-handel\references\oss-ioss-mekanik.md', + $gb$# OSS- och IOSS-mekanik + +## OSS: unionsordningen för distansförsäljning + +### Registreringsförfarande +- Anmälan via Skatteverkets e-tjänst "Moms: särskilda ordningar" (kräver BankID och momsregistrering i Sverige). +- Ikraftträdande: från första dagen i nästkommande kalenderkvartal efter anmälan. +- Frivillig anmälan under tröskeln 99 680 SEK: bindande i minst två kalenderår. +- Vid passerande av tröskeln 6 kap. 62 § ML 2023:200: anmälan ska göras senast den 10:e i månaden efter den månad då tröskeln passerades; OSS kan tillämpas retroaktivt från överskridandetransaktionen. +- Identifieringsstat = Sverige för svenska säljare. Vid flytt av etableringsstat krävs avregistrering + omregistrering. + +### Deklarationsperiod +- **Kvartalsvis**: Q1 (jan-mar) → deklaration senast 30 april; Q2 → 31 juli; Q3 → 31 oktober; Q4 → 31 januari. +- Betalning samtidigt med deklaration till Skatteverkets särskilda OSS-bankgiro. +- Noll-deklaration krävs även om ingen omsättning skett under perioden. + +### Valutaomräkning +- Deklareras i EUR oavsett faktureringsvaluta. +- Omräkningskurs: ECB:s referenskurs **sista dagen i deklarationsperioden** (eller närmast föregående bankdag om sista dagen ej är bankdag). +- Bokföringen får hållas i SEK med löpande omräkning per transaktion till destinationslandets momssats; vid deklaration sker konsoliderad omräkning till EUR. + +### Korrigeringar +- Korrigering av tidigare period görs i en senare deklaration (max 3 år bakåt) med referens till ursprunglig deklarationsperiod. +- Lagstöd: kommissionens genomförandeförordning (EU) 2020/194. +- Retur eller kreditnota = negativ post per destinationsland och momssats i den period kreditnotan ställs ut. + +### Underkontostruktur i BAS för OSS +Rekommenderad struktur på **2670**: +- 2670-DE-19 (Tyskland 19 %) +- 2670-DE-7 (Tyskland 7 %) +- 2670-FR-20 (Frankrike 20 %) +- 2670-FR-10 (Frankrike 10 %) +- 2670-FR-5.5 (Frankrike 5,5 %) +- 2670-NL-21, 2670-NL-9, etc. per land och sats. + +Motsvarande underkontostruktur på **3106** för försäljningssidan. + +## IOSS: importordningen + +### Tillämpningsområde +- Försändelser från tredjeland till EU-konsument, **verkligt värde ≤ 150 EUR** exkl. punktskattepliktiga varor. +- Verkligt värde = pris exkl. transport, försäkring och skatter (Tullverkets praxis enligt TFS 2022:5, Unionstullkodexen art. 23). +- Frivilligt: alternativ är standardimportförfarande där mottagaren betalar moms vid gränsen. + +### Registreringsförfarande +- IOSS-nummer (IM-prefix) tilldelas av Skatteverket vid registrering. +- Försäljare utanför EU måste utse en EU-baserad förmedlare (mellanman): den blir solidariskt ansvarig för momsen. + +### Deklarationsperiod +- **Månadsvis**: deklaration + betalning senast sista dagen i månaden efter rapporteringsmånaden. +- Noll-deklaration krävs vid utebliven omsättning. + +### Tullhantering +- IOSS-numret anges i tulldeklarationen (H7 standardförfarande för försändelser ≤ 150 EUR). +- Importen blir momsbefriad (10 kap. 65 § ML, art. 143.1 ca direktivet). +- Saknas IOSS-nummer på paketet → standard importmomshantering, Tullverket tar ut moms av mottagaren (eller transportören som agerar förmedlare). + +### Bokföring +- Intäkt på **3106** med underkonto per destinationsland. +- Utgående moms på **2670** med destinationslandets sats. +- Inget importmomskonto (2615/2645) används: själva importen är momsbefriad vid korrekt IOSS-tillämpning. + +## Samspel med ordinarie momsdeklaration +- OSS-omsättning ska **inte** redovisas i ordinarie momsdeklaration (Ruta 35 är för B2B intra-EU varor, ej OSS). +- Periodisk sammanställning (VIES) krävs inte för OSS-försäljning (B2C). +- Ingående moms på inköp i destinationslandet återbetalas via 13:e direktivet (utländsk MOSS-återbetalning, ej via OSS-deklarationen). + +## Avregistrering +- 15 dagars notice till identifieringsstaten innan tillämpning upphör. +- Vid avregistrering pga upphört användande av OSS: karantäntid 2 år innan återanmälan tillåten. +$gb$, + 'vertical/e-handel', + 2, + 1 + ), + ( + 'vertical/e-handel/payment-providers', + 'vertical', + 'Payment Provider: bokföringsmappning per aktör', + $gb$Payment Provider: bokföringsmappning per aktör: reference for E-handel & näthandel (SNI 47.91 / 47.99)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1607, + '.claude\skills\industry\e-handel\references\payment-providers.md', + $gb$# Payment Provider: bokföringsmappning per aktör + +Per provider: jurisdiktion, reverse charge-status, faktureringsmodell, payout-cykel, BAS-konton, fee-struktur. + +## Stripe + +**Faktureringsentitet (EEA)**: Stripe Technology Europe Ltd, Dublin, Irland. +**Reverse charge**: JA (B2B-tjänst från IE till SE, 6 kap. 33 § ML, huvudregeln). Konto 4535 + 2614/2645. +**Faktureringsmodell**: Avgifter debiteras netto från payout. Månatlig faktura med specifikation laddas ner från Dashboard → Documents. +**Payout-cykel**: T+2 för SEK, T+7 för EUR/USD (default; konfigurerbart per konto). +**BAS-konton**: +- 1581: Fordringar Stripe (clearingunderkonto till 1580) +- 6040: Kontokortsavgifter (transaktionsavgifter) +- 4535: Inköp av tjänster från annat EU-land 25 % (reverse charge på den momspliktiga delen) +- 2614 + 2645: utgående/ingående RC-moms +- 3960/7960: FX vid USD/EUR-payout +**Fee-struktur (EEA-kort, default 2025)**: 1,4 % + 1,80 SEK; non-EEA: 2,9 % + 1,80 SEK; valutaväxling +2 %; Klarna via Stripe +1,99 %. +**Momsbedömning per komponent** (dnr 8-5507): processing fee = momspliktig teknisk tjänst (RC tillämpas); interchange/scheme fees = vidaredebiterad pass-through, normalt momsfri. Stripe specificerar inte alltid uppdelning: i praktiken behandlas hela transaktionsavgiften som RC-tjänst om Stripe inte tydligt anger annat. + +## Klarna + +**Faktureringsentitet**: Klarna Bank AB, Stockholm, Sverige (org.nr 556737-0431). +**Reverse charge**: NEJ, svensk entitet, svensk moms på faktura (eller momsfri finansiell tjänst där tillämpligt). +**Faktureringsmodell**: Settlement reports veckovis (måndagar för föregående vecka, kan variera). Avgifter debiteras netto från payout. +**Payout-cykel**: 1-2 gånger per vecka, varierar per avtal (kan vara 14 dagar för nya merchants under verifikation). +**BAS-konton**: +- 1582: Fordringar Klarna (clearingunderkonto) +- 1513: Klarna Pay Later/Slice it (kundfordran innan settlement) +- 6040: Kontokortsavgifter (transaktionsdelen) +- 6062: Kreditfees, ej-godkända faktorerade fakturor +- 2611: Svensk utgående moms (Klarna är svensk entitet, ingen RC) +**Fee-struktur**: Pay Now ~1,49 % + 2,50 SEK; Pay Later (faktura/delbetalning) 2,49-3,29 % + 2,50 SEK; Financing varierar. +**Momsbedömning**: Klarnas kreditbedömning är momsfri finansiell tjänst (3 kap. 9 § ML 2023:200), transaktionsdelen är momspliktig teknisk tjänst. Klarnas faktura ska specificera. **Varning**: Klarna Inc (US) och Klarna AB-dotterbolag i andra länder fakturerar med RC: verifiera entiteten per faktura, inte per varumärke. + +## Adyen + +**Faktureringsentitet (EEA)**: Adyen N.V., Amsterdam, Nederländerna. +**Reverse charge**: JA. Konto 4535 + 2614/2645. +**Faktureringsmodell**: Månatlig invoice; transaktionsavgifter kan debiteras antingen netto från payout eller separat. +**Payout-cykel**: Konfigurerbart: veckovis vanligast, dagligt möjligt med tillägg. +**BAS-konton**: Som Stripe. +**Fee-struktur**: 0,11 EUR processing fee + interchange + scheme fee + payment method fee (transparent pricing). +**Anmärkning**: Adyens fakturaspecifikation är tydligare än Stripes: uppdelningen mellan processing fee (RC-momspliktigt) och interchange (RC-momsfritt) ska följas per komponent. + +## PayPal + +**Faktureringsentitet (EEA)**: PayPal (Europe) S.à r.l. et Cie, S.C.A., Luxemburg (banklicensierad). +**Reverse charge**: NEJ för rena betalningstjänster (banklicens → momsfri finansiell tjänst enligt 3 kap. 9 § ML). JA för icke-finansiella tilläggstjänster. +**Faktureringsmodell**: Avgifter debiteras netto från transaktionen direkt. Månatlig statement. +**Payout-cykel**: Manuell utbetalning från PayPal-konto till bank, eller veckovis automatisk om aktiverat. +**BAS-konton**: +- 1583: Fordringar PayPal +- 6040: PayPal-avgifter (momsfri finansiell tjänst) +- 3960/7960: FX (PayPals interna växling är ofta sämre än ECB; kursdifferens bokas här) +**Fee-struktur**: 1,9-3,4 % + 3,25 SEK + valutaväxling 3-4 %. +**Anmärkning**: PayPals momsbedömning är komplex: kontrollera per fakturarad om RC ska tillämpas. + +## Shopify Payments + +**Faktureringsentitet (EEA)**: Shopify International Ltd, Dublin, Irland (för Payments). Plattformsavgifter (subscription) från samma entitet. +**Reverse charge**: JA. Konto 4535 + 2614/2645. +**Faktureringsmodell**: Avgifter debiteras netto från payout. Månatlig invoice för subscription (Basic/Shopify/Advanced). +**Payout-cykel**: Daglig (default), konfigurerbar till veckovis eller månadsvis. +**BAS-konton**: +- 1584: Fordringar Shopify Payments +- 6040: Transaktionsavgifter Payments +- 4535: Subscription (Basic Shopify-prenumeration etc.) + RC +- 6540: Övriga IT-tjänster (om annan klassificering föredras för subscription) +**Fee-struktur**: 1,6 % + 0,25 EUR för EEA-kort på Basic-planen; varierar med plan och kortregion. +**Anmärkning**: Shopify Payments använder Stripe som underliggande processor men fakturerar i eget namn: behandlas som Shopify, inte Stripe, i bokföringen. + +## Mollie + +**Faktureringsentitet**: Mollie B.V., Amsterdam, Nederländerna. +**Reverse charge**: JA. Konto 4535 + 2614/2645. +**Payout-cykel**: Daglig (T+1) som default. +**BAS-konton**: +- 1585: Fordringar Mollie +- 6040: Avgifter +**Anmärkning**: Stark i Benelux och EU-marknader, mindre vanlig i Sverige. + +## Qliro + +**Faktureringsentitet**: Qliro AB, Stockholm, Sverige. +**Reverse charge**: NEJ, svensk entitet. +**Payout-cykel**: Varierar per avtal, vanligen veckovis. +**BAS-konton**: +- 1586: Fordringar Qliro +- 1513: Faktura/delbetalning innan settlement +- 6040 / 6062: Avgifter / kreditfees +- 2611: Svensk moms på fakturan +**Anmärkning**: Nordisk konkurrent till Klarna. Faktura/delbetalning vanligast. + +## Generella rekonciliationsmönster + +1. **Order ledger (Shopify/Centra/WooCommerce) ↔ provider gross**: matcha per orderID och brutto-belopp innan avgifter. Diff = öresavrundning (3740) eller felaktig orderstatus. + +2. **Provider gross − avgifter ↔ bankpayout**: matcha per payout-batch och netto-belopp. Diff = chargebacks, refunds eller reserves som provider håller. + +3. **FX-omräkning fordringskonto**: om provider håller saldo i EUR/USD och payout sker i samma valuta till valutakonto 1980, ingen FX-diff vid payout: diffen uppstår först vid växling till SEK på 1930. Om provider växlar internt vid payout, bokas diff på 3960/7960 vid varje payout. + +4. **Reserves och hold**: vissa providers håller en del av payouten i reserve (vanligt första 6 mån för nya merchants). Reserve-saldot ska synas separat på underkonto till 1580. +$gb$, + 'vertical/e-handel', + 2, + 1 + ), + ( + 'vertical/e-handel/skv-stallningstaganden-katalog', + 'vertical', + 'Skatteverkets ställningstaganden och HFD-domar: e-handelskatalog', + $gb$Skatteverkets ställningstaganden och HFD-domar: e-handelskatalog: reference for E-handel & näthandel (SNI 47.91 / 47.99)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1594, + '.claude\skills\industry\e-handel\references\skv-stallningstaganden-katalog.md', + $gb$# Skatteverkets ställningstaganden och HFD-domar: e-handelskatalog + +Komplett katalog över relevanta avgöranden 2018-2025. Paragrafnyckel från GML 1994:200 till ML 2023:200 anges där tillämpligt (ML 2023:200 ikraft 2023-07-01). + +## Skatteverkets ställningstaganden + +### Plattformsförsäljning och deemed supplier + +**dnr 8-1293055**: Plattformsförsäljning, deemed supplier +- **Datum**: 2021-10-29, uppdaterad 2023-06-26. +- **Innehåll**: Tillämpning av 5 kap. 5-6 §§ ML 2023:200 (motsvarar tidigare GML 5 kap. 2 g §). Deemed supplier-reglerna omfattar inte förmedling i eget namn (då gäller 5 kap. 4 § ML). Varorna måste fysiskt befinna sig inom EU när betalningen godkänns för att 5 kap. 6 § ML ska tillämpas. Vid flerstegsförsäljning av importerade varor ≤ 150 EUR hänförs transporten till sista ledet. +- **Status**: Gällande. + +**dnr 8-2059749**: Elektroniska tjänster via marknadsplatser +- **Datum**: 2022-12-19. +- **Innehåll**: Presumtion om förmedlare som säljare enligt art. 9a genomförandeförordning 282/2011. Tillämpning för digitala tjänster (appar, prenumerationer) som säljs via plattformar (Apple App Store, Google Play, Steam). +- **Status**: Gällande. + +**dnr 8-314934**: Förmedling av tjänster i eget vs annans namn +- **Datum**: 2020-09-25. +- **Innehåll**: Kriterier för att avgöra om förmedlare agerar i eget eller annans namn. Påverkar både digital och fysisk e-handel. +- **Status**: Gällande. + +**dnr 8-498120**: Förmedling av varor i annans namn +- **Datum**: 2020-09-25. +- **Innehåll**: Komplement till 8-314934, specifikt för varuförmedling. Distinktionen mellan agentförhållande och egenhandel. +- **Status**: Gällande. + +### Betaltjänster och kortinlösen + +**dnr 8-5507**: Betaltjänster och undantaget från skatteplikt +- **Datum**: 2020-01-13. +- **Innehåll**: Tjänster som är undantagna från moms enligt 10 kap. 16 § ML (motsvarar GML 3 kap. 9 §): momsfri endast vid rättsliga/ekonomiska förändringar mellan betalare och mottagare. Rena tekniska/administrativa tjänster är momspliktiga. Avgörande för momsklassificering av Stripe/Klarna/Adyen-avgifter per komponent. +- **Status**: Gällande. + +### Vouchers och presentkort + +**dnr 202 488720-18/111**: Vouchers SPV/MPV +- **Datum**: 2018-11-26. +- **Innehåll**: Tillämpning av voucher-direktivet i svensk rätt. Definitioner SPV vs MPV, redovisningstidpunkt. +- **Status**: Fortsatt giltigt under ML 2023:200 (paragrafer omnumrerade till 2 kap. 26-27 §§ och 5 kap. 40-44 §§). + +**dnr 202 508158-18/111**: Vouchers, fakturering och redovisning +- **Datum**: 2018-12-06. +- **Innehåll**: Praktisk hantering av fakturering vid voucher-transaktioner, distributörsledet, redovisning av distributörsprovision. +- **Status**: Fortsatt giltigt. + +### Import och tullhantering + +**dnr 8-155570-2025**: Betalningsskyldig för importmoms +- **Datum**: 2025-05-02. +- **Innehåll**: Gemensamt ställningstagande från Skatteverket och Tullverket. Den som anges som deklarant i tulldeklarationen är betalningsskyldig och redovisar importmomsen i sin momsdeklaration. Praktisk vägledning för spedition och DDP-leveranser. +- **Status**: Gällande (det senaste i kategorin). + +## HFD-domar + +### Mål nr 5815-22: Förmedling i eget namn +- **Avgjort**: 2023-02-24. +- **Område**: Vårdplattform, men kriterierna är analogt tillämpbara på e-handelsplattformar. +- **Rättsfråga**: Vad krävs för att en plattform ska anses förmedla "i eget namn" enligt 5 kap. 4 § ML (med påföljden att plattformen blir momsskyldig som om den vore säljare)? +- **Princip**: HFD lyfter fram kontroll över prissättning, fakturering, betalningsflöde och kundkontakt som centrala kriterier. Plattform som agerar "i annans namn" (klar agentstatus) faller utanför 5 kap. 4 § ML. + +### Mål nr 4610-21: Mellanbanksavgifter och kortinlösen +- **Avgjort**: 2022-01-07. +- **Rättsfråga**: Är kortinlösentjänster momsfria? Är mellanbanksavgifter (interchange) ersättning för en tjänst eller en intern allokering? +- **Princip**: Inlösentjänst klassificeras som momsfri finansiell tjänst (3 kap. 9 § ML, nu 10 kap. 16 § ML 2023:200). Mellanbanksavgiften är ej ersättning för en separat tjänst utan en kostnadsfördelning mellan kortnätverk. Innebörd för bokföring: vid uppdelad fakturaspecifikation från payment provider följs klassificeringen per komponent: pure inlösen är momsfri, tilläggstjänster är momspliktiga. + +### HFD 2023 ref. 45: Mål nr 7254-7255-22: Blandad verksamhet +- **Avgjort**: 2023-10-16. +- **Rättsfråga**: Vilken fördelningsgrund ska användas vid beräkning av avdragsrätt vid blandad verksamhet (momspliktig + momsfri)? +- **Princip**: Omsättningsbaserad fördelningsgrund är huvudregel med direkt effekt från art. 173-174 i direktivet 2006/112/EG. Tillämpas i e-handelskontext vid kombination av momspliktig varuförsäljning och momsfri finansiell verksamhet (t.ex. egen Buy Now Pay Later-finansiering, försäkringserbjudanden) eller vid blandad verksamhet inom samma juridiska person. + +## Paragrafnyckel GML 1994:200 → ML 2023:200 (urval relevant för e-handel) + +| Område | GML 1994:200 | ML 2023:200 | +|---|---|---| +| Voucher-definition | 1 kap. 20 § | 2 kap. 26 § | +| SPV/MPV beskattningstid | 2 kap. 9 a-b § | 5 kap. 40-44 § | +| Leveransort distansförsäljning | 5 kap. 2 a § | 6 kap. 7 § | +| Tröskeln distansförsäljning | 5 kap. 2 § | 6 kap. 62 § | +| OSS/unionsordningen | 4 a kap. | 22 kap. | +| IOSS/importordningen | 4 b kap. | 22 kap. | +| Deemed supplier marknadsplats | 6 kap. 9-10 § | 5 kap. 5-6 § | +| Förmedling i annans namn | 6 kap. 7 § | 5 kap. 4 § | +| Kedjetransaktioner | 5 kap. 2 e § | 6 kap. 14-17 § | +| Reverse charge huvudregeln | 5 kap. 5 § | 6 kap. 33 § | +| Momsfria finansiella tjänster | 3 kap. 9 § | 10 kap. 16 § | +| Undantag IOSS-import | 3 kap. 30 c § | 10 kap. 65 § | +| Periodisk sammanställning | 35 kap. SFL (oförändrat) | 35 kap. SFL | +| Förenkling trepartshandel | 3 kap. 30 b § | 10 kap. (art. 141 direktivet) | +| Prisnedsättning efter leverans | 7 kap. 6 § | 8 kap. 14 § | + +## Status och uppdatering + +- Skatteverket publicerar ställningstaganden löpande på skatteverket.se → Rättslig vägledning → Ställningstaganden. +- Vid ML 2023:200-övergången 2023-07-01: Skatteverket har översatt äldre dnr genom paragrafnyckel; nya dnr använder direkt nya paragrafer. +- Bevaka 2025-2026: SFS 2024:942 omnumrering av 5 kap. ML från 2025-01-01, konsoliderad version på riksdagen.se. +- Bevaka BAS 2026 ("Framtidens kontoplan") från BAS-intressenternas Förening. +$gb$, + 'vertical/e-handel', + 2, + 1 + ), + ( + 'vertical/e-handel/vouchers-presentkort', + 'vertical', + 'Vouchers och presentkort: SPV vs MPV', + $gb$Vouchers och presentkort: SPV vs MPV: reference for E-handel & näthandel (SNI 47.91 / 47.99)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1088, + '.claude\skills\industry\e-handel\references\vouchers-presentkort.md', + $gb$# Vouchers och presentkort: SPV vs MPV + +## Lagstöd + +- **2 kap. 26-27 §§ ML 2023:200**: definitioner av voucher, SPV, MPV. +- **5 kap. 40-44 §§ ML 2023:200**: beskattningsbara transaktioner kring vouchers. Kontrollera konsoliderad version efter renumrering enligt SFS 2024:942 (ikraft 2025-01-01). +- **Rådets direktiv (EU) 2016/1065** (voucher-direktivet), implementerat i Sverige 2019-01-01. +- **Skatteverkets ställningstagande dnr 202 488720-18/111** (2018-11-26): fortsatt giltigt. +- **Skatteverkets ställningstagande dnr 202 508158-18/111** (2018-12-06): fakturering och redovisning. + +## Definitioner + +**Voucher**: Instrument som måste tas emot som vederlag (helt eller delvis) för leverans av varor eller tjänster, där varorna/tjänsterna eller säljarens identitet anges på instrumentet eller i tillhörande dokumentation. + +**SPV (Single-Purpose Voucher), enfunktionsvoucher**: Voucher där **både** följande är kända vid utställandet: +- Platsen för leverans (beskattningsland). +- Den moms som ska betalas (momssats). + +**MPV (Multi-Purpose Voucher), flerfunktionsvoucher**: Alla andra vouchers (där minst en av platsen eller momssatsen är okänd vid utställandet). + +## Beslutsmatris + +| Scenario | SPV/MPV | Skäl | +|---|---|---| +| Gift card för en specifik svensk e-handelsbutik som säljer enbart 25 %-momsade varor | **SPV** | Land (SE) och sats (25 %) känd | +| Gift card för butik som säljer både 25 % (varor) och 6 % (e-böcker) | **MPV** | Sats okänd | +| Gift card för butik som säljer till både SE och EU-konsumenter | **MPV** | Land okänt | +| Steam Wallet (digitala spel, många länder, olika satser) | **MPV** | Båda okända | +| iTunes-voucher | **MPV** | Lex specialis: separat hantering av e-tjänster vs spel | +| ICA-presentkort (matkedja, blandade satser 12 % och 25 %) | **MPV** | Sats okänd | +| Sommarjobb-bonus i form av butiksvärdesedel (en butik, bara 12 %-livsmedel) | **SPV** | Båda kända | +| Rabattkupong (-100 kr på köp över 500 kr) | **Ingen voucher**: rabattinstrument, ej voucher (2 kap. 27 § ML) | + +## Redovisningsregler + +### SPV +- **Moms vid varje överlåtelse** (5 kap. 40 § ML). +- Vid utställande/försäljning av voucher = momspliktig leverans → 3001 + 2611 direkt. +- Vid faktisk leverans av varan mot inlösen av voucher → ingen ny momspliktig händelse. Voucher-värdet är redan beskattat. +- Bokföring (försäljning av SPV-presentkort 1 000 SEK): + - Dt 1930 (eller 1580) 1 000 + - Kr 3001 800 + - Kr 2611 200 +- Vid inlösen mot vara värt 1 000 SEK: + - Bokföringsmässigt: ingen momseffekt. Vara levereras mot redan registrerad intäkt. + - Lagervärdesminskning bokas normalt (4xxx + 14xx beroende på K2/K3 och lagermetod). + +### MPV +- **Moms först vid inlösen** (5 kap. 41 § ML). +- Vid utställande av MPV-presentkort: ingen utgående moms. Mottaget belopp bokas som skuld (2421 Ej inlösta presentkort). +- Vid inlösen: skulden omklassificeras till intäkt + utgående moms. +- Bokföring (försäljning av MPV-presentkort 1 000 SEK): + - Dt 1930 1 000 + - Kr 2421 1 000 +- Vid inlösen mot vara med 25 % moms: + - Dt 2421 1 000 + - Kr 3001 800 + - Kr 2611 200 + +### Distributörsprovision +- Om voucher säljs via återförsäljare/distributör som tar provision: distributörens tjänst (förmedling) är separat **momspliktig** oavsett om voucher är SPV eller MPV (5 kap. 42 § ML). +- Bokföring hos voucher-utfärdaren: 6050 + RC om utländsk distributör. + +## Preskription och utgångsdatum + +- **Svensk allmän preskription**: 10 år för fordringar mot konsument (preskriptionslagen 1981:130, 2 §). +- Voucher-villkor kan ange kortare giltighetstid; **konsumentskydd** begränsar dock orimligt korta giltighetstider (konsumentavtalsvillkorslagen 1994:1512). +- Vid preskription/förfall: skuld på 2421 vänds till intäkt → 3990 eller 3991 (utan moms, eftersom inlösen aldrig skedde och momsplikt inte triggades). Detta ska bevisas vara giltig preskription, inte unilateral beslutsfattande från företaget. + +## Returer mot MPV-voucher + +Om kund betalat med MPV-voucher och returnerar varan: voucher återställs ofta som ny voucher eller saldo. Bokföringsmässigt återförs intäkt + utgående moms, och 2421-skulden återställs. + +## Cross-border-aspekter + +- Voucher utgiven i SE för inlösen i annat EU-land → momsbedömning enligt landet där voucher löses in. Kan kräva OSS-hantering vid inlösen. +- Voucher från icke-EU-land använd i Sverige → momsplikt i Sverige vid inlösen. +$gb$, + 'vertical/e-handel', + 2, + 1 + ), + ( + 'vertical/konsult-it', + 'vertical', + 'IT-konsult & systemutvecklare (SNI 62)', + $gb$Swedish bookkeeping compliance for IT-konsult och mjukvarubolag (SNI 62.01 Dataprogrammering, 62.02 Datakonsultverksamhet, 62.09 Andra IT- och datatjänster, 63.11 Databehandling/hosting, 63.12 Webbportaler). Distinctive patterns: omvänd betalningsskyldighet vid B2B-tjänster inom och utanför EU, OSS-deklaration för B2C digitala tjänster, inköp av molntjänster/SaaS från USA (AWS, Azure, GitHub, OpenAI, Anthropic), 3:12-fåmansreglerna (IL 57 kap inkl. SFS 2025:1361-reformen), konsult-vs-anställd-klassificering av en-mans-konsult-AB. Load when the GL shows 4531/4535 (utländska tjänster), 2614/2645 (omvänd moms), 5420/6540 (programvaror/IT-tjänster), 3308/3305 (försäljning tjänster EU/utanför EU), 1010/1012/2089 (utvecklingsutgifter/fond), eller 7220 (lön företagsledare) i kombination med få anställda.$gb$, + ARRAY['62.01', '62.02', '62.09', '63.11', '63.12']::text[], + $gb${}$gb$::jsonb, + 9800, + '.claude\skills\industry\konsult-it\SKILL.md', + $gb$--- +id: vertical/konsult-it +tier: vertical +title: "IT-konsult & systemutvecklare (SNI 62)" +description: > + Swedish bookkeeping compliance for IT-konsult och mjukvarubolag (SNI 62.01 Dataprogrammering, 62.02 Datakonsultverksamhet, 62.09 Andra IT- och datatjänster, 63.11 Databehandling/hosting, 63.12 Webbportaler). Distinctive patterns: omvänd betalningsskyldighet vid B2B-tjänster inom och utanför EU, OSS-deklaration för B2C digitala tjänster, inköp av molntjänster/SaaS från USA (AWS, Azure, GitHub, OpenAI, Anthropic), 3:12-fåmansreglerna (IL 57 kap inkl. SFS 2025:1361-reformen), konsult-vs-anställd-klassificering av en-mans-konsult-AB. Load when the GL shows 4531/4535 (utländska tjänster), 2614/2645 (omvänd moms), 5420/6540 (programvaror/IT-tjänster), 3308/3305 (försäljning tjänster EU/utanför EU), 1010/1012/2089 (utvecklingsutgifter/fond), eller 7220 (lön företagsledare) i kombination med få anställda. +sni_prefixes: ["62.01", "62.02", "62.09", "63.11", "63.12"] +trigger_signals: + text_patterns: + - "omvänd betalningsskyldighet" + - "omvänd skattskyldighet" + - "reverse charge" + - "AWS" + - "Azure" + - "GitHub" + - "OpenAI" + - "Anthropic" + - "Microsoft 365" + - "konsultarvode" + - "licensavgift" + - "SaaS-prenumeration" + - "molntjänst" + - "F-skattsedel" + - "K10" + - "gränsbelopp" + - "fåmansföretag" + bas_account_signals: + - "4531" + - "4535" + - "2614" + - "2645" + - "3308" + - "3305" + - "5420" + - "6540" + - "6850" + - "1012" + - "2089" + - "7220" + - "3922" +estimated_tokens: 9800 +version: 2 +--- + +# Konsult-IT: Swedish bookkeeping compliance + +## 1. When to use + +Load this skill when the books belong to a Swedish AB or enskild firma in SNI 62.01-63.12 (IT-konsult, mjukvara, SaaS, hosting, webbportaler). Strong loading signal: simultaneous presence of foreign SaaS-suppliers (AWS/Azure/GitHub/OpenAI/Stripe), reverse-charge moms-konton (2614/2645), tjänsteförsäljning till EU/utland (3305/3308), och en koncentrerad lönelista där `7220 Löner till företagsledare` dominerar (fåmansbolag-signatur). Skip generic VAT/payroll/year-end skills: they are already covered by horizontal skills; this skill only documents what *differs* for the konsult-IT vertical. + +## 2. Typical workflow patterns + +**Invoicing cadence.** Three dominant modes coexist and often within the same client portfolio: (a) **timbaserad löpande räkning** with monthly invoicing of consumed hours (the default for staff-augmentation deals); (b) **månatlig retainer** for managed services/SLA (constant amount, periodiseras linjärt); (c) **fastprisprojekt** with milestone-based delfakturor (requires `1620 Upparbetad men ej fakturerad intäkt` or `2450 Fakturerad men ej upparbetad intäkt` at balansdagen: see successiv vinstavräkning in §4). SaaS adds a fourth: **förskottsfakturerade prenumerationer**, where 12-månadersfakturor periodiseras över avtalstiden mot `2972 Förutbetalda intäkter`. + +**Expense rhythm.** Heavily skewed to **monthly recurring SaaS** (Microsoft 365, Adobe, Figma, JetBrains, Slack, Atlassian, Notion) on `5420 Programvoror`, plus **usage-based cloud** (AWS, Azure, GCP) on `6540 IT-tjänster`. Hardware is comparatively small (laptops via `5410 Förbrukningsinventarier` if under ½ pbb, else aktiveras på `1250 Datorer`). Critical pattern: nearly every recurring expense line triggers **omvänd betalningsskyldighet** because suppliers are non-Swedish. + +**Reconciliation timing.** Monthly close is required to capture (i) reverse-charge moms via 2614/2645 entries, (ii) FX-justeringar on USD/EUR-leverantörsskulder, and (iii) WIP-periodisering on löpande räkning. Periodisk sammanställning för EU-tjänsteförsäljning lämnas **kvartalsvis** med köparens VAT-nr. + +**Payroll cadence & CBA.** Månadsavlöning den 25:e är standard. Tillämpligt kollektivavtal: **Tjänstemannaavtalet IT** (kallas "IT-avtalet") mellan **TechSverige** (tidigare IT&Telekomföretagen, namnbyte 2021-10-21; lämnade Almega 2024/25 och är nu fristående AGO) och **Unionen / Sveriges Ingenjörer / Akavia**. Aktuell period **2025-04-01 till 2027-03-31** (24 mån), totalvärde 6,4 %: löneökning 5,5 % (3,0 + 2,5), arbetstidsförkortning 0,5 %, flexpension +0,4 pe. Tjänstepension ITP1/ITP2 via Collectum (`7410`); särskild löneskatt på pensionskostnader 24,26 % på `7530`. Avtalsförsäkringar TGL/TFA via Fora. + +## 3. BAS 2025 account patterns + +Verifierat mot **Kontoplan BAS 2025 v.1.0** (bas.se/kontoplaner). Endast konton som denna vertical lutar tungt på listas; allmänna konton utelämnas. + +| Konto | Namn (BAS 2025) | Industri-specifik användning | +|---|---|---| +| **1010** *(ej K2)* | Utvecklingsutgifter | Huvudkonto för aktiverade utgifter för intern produktutveckling (K3 aktiveringsmodell); ej tillåtet i K2. | +| **1012** *(ej K2)* | Balanserade utgifter för programvaror | Aktiverad SaaS-kodbas eller köpt programvarukomponent som integreras i egen produkt. | +| **1019** | Ackumulerade avskrivningar på balanserade utgifter | Linjär avskrivning på utvecklingsutgifter, typiskt 5 år (ÅRL 4 kap 4§ 2 st om nyttjandeperiod ej tillförlitligt kan fastställas). | +| **1040** | Licenser | Köpta perpetual-licenser med nyttjandeperiod >1 år (ERP, utvecklingsverktyg, källkodslicens). | +| **1620** | Upparbetad men ej fakturerad intäkt | Mycket vanlig: utförda men ofakturerade timmar/milstolpar på balansdagen vid successiv vinstavräkning eller löpande räkning. | +| **2089** *(ej K2)* | Fond för utvecklingsutgifter | **Obligatorisk vid K3-aktivering** (ÅRL 4 kap 2§); låser fritt eget kapital och därmed utdelningsbart belopp / 3:12-utrymme. | +| **2450** | Fakturerad men ej upparbetad intäkt | Förskottsfakturerad SaaS-prenumeration eller projektmilstolpe utan motsvarande prestation. | +| **2614** | Utgående moms, omvänd betalningsskyldighet, 25 % | Köparens kredit-sida vid inköp av tjänst från utländsk leverantör (AWS, GitHub, EU SaaS). | +| **2645** | Beräknad ingående moms på förvärv från utlandet | Motkonto debet; nettoeffekten 0 vid full avdragsrätt. | +| **3305** | Försäljning tjänster till land utanför EU | Konsultarvode till US/UK kund: utanför momslagens tillämpningsområde, momsruta **40**. | +| **3308** | Försäljning tjänster till annat EU-land | B2B-konsult/SaaS till EU företag: momsruta **39** + periodisk sammanställning. | +| **3922** | Licensintäkter och royalties | SaaS-licensavgifter, white-label-royalty, API-användningsavgift. | +| **3800** *(gruppkonto)* | Aktiverat arbete för egen räkning | K3-aktivering: motkonto till 1010/1012 när intern utvecklartid kapitaliseras. | +| **4531** | Inköp av tjänster från ett land utanför EU, 25 % | AWS US, OpenAI, GitHub, Anthropic, Stripe: utlöser 2614/2645. Momsruta **22+30+48**, **ej** i periodisk sammanställning. | +| **4535** | Inköp av tjänster från annat EU-land, 25 % | Microsoft IE, Atlassian NL, Google IE: utlöser 2614/2645. Momsruta **21+30+48**. | +| **5420** | Programvoror | SaaS-licenser och off-the-shelf-mjukvara (löpande operativ kostnad, skiljs från 6540 enligt bolagets policy). | +| **6540** | IT-tjänster | Molntjänster, IaaS, hosting, CI/CD, MDM, observability. Gränsdragning mot 5420 är policyfråga: tjänst vs licens. | +| **6550** | Konsultarvoden | Köpta konsulttjänster (revision, jurist, övrig icke-IT-konsult). | +| **6556** | Köpta tjänster avseende FoU | Externa FoU-konsulter; kan ingå i aktiveringsunderlag (1010/1012). | +| **6560** | Serviceavgifter till branschorganisationer | TechSverige, Dataföreningen, certifieringsorgan. | +| **6850** | Inhyrd IT-personal | **Sektor-specifikt huvudkonto**: underkonsult AB→AB-kontrakt mot slutkund (klassisk subkontraktering). | +| **6910** | Licensavgifter och royalties | **Utgående** royalty till tredjepart (komponent-/IP-licens som integreras i egen SaaS). | +| **7210** | Löner till tjänstemän | Konsulternas löner: räknas in i lönesumman för 3:12 lönebaserat utrymme. | +| **7220** | Löner till företagsledare | **Kritiskt för 3:12**: ägarens egen kontantlön: måste nå löneuttagskravet (gamla regler t.o.m. 2025). | +| **7811** | Avskrivningar på balanserade utgifter | Periodisk avskrivning av 1010/1012. | + +**Noteringar.** `3001/3041` (försäljning tjänster Sverige 25 %) varierar mellan BAS-grundtabellen och bokföringsprogram (Fortnox/Visma/Bokio adderar 3041 som branschanpassning). Använd det som finns i klientens kontoplan. `2647 Ingående moms omvänd betalningsskyldighet varor och tjänster i Sverige` används endast vid inhemsk omvänd skattskyldighet (mer relevant bygg). + +## 4. Regulatory edge cases + +### 4.1 Momsregler + +**Lagbas.** Ny **Mervärdesskattelag (2023:200)** ikraft **2023-07-01**, ersatte 1994:200 (GML). Paragrafnummer nedan är nya ML; gamla GML-referenser anges parentetiskt för historiska räkenskapsår. + +**B2B huvudregel: säljarperspektiv.** ML **6 kap 33§** (gml. 5 kap 5§): tjänst till beskattningsbar person beskattas där köparen har säte. EU-grund: art. 44 i 2006/112/EG. Praktisk följd för IT-konsult: B2B-försäljning till företag i annat EU-land eller utanför EU → ingen svensk moms, faktura med text **"Omvänd betalningsskyldighet / Reverse charge, Artikel 44 och 196 i rådets direktiv 2006/112/EG"** + köparens VAT-nr. **VIES-validering är säljarens bevisbörda** (SKV ställningstagande dnr 202 460649-17/111, 2018-01-25, uppdaterad för ML 2023:200): spara skärmdump av VIES-kontrollen per kund per faktureringscykel. + +**B2B köparperspektiv: omvänd betalningsskyldighet.** ML **16 kap 9-10§§**, EU-art. 196. Svensk köpare av tjänst från utländsk leverantör är **betalningsskyldig** för svensk moms. Bokföring: kostnadskonto debet, **2614 kredit 25 %**, **2645 debet 25 %**, 2440 kredit; nettoresultat 0 vid full avdragsrätt. Momsdeklaration: **ruta 21+30+48** för EU-leverantör, **ruta 22+30+48** för icke-EU. Periodisk sammanställning gäller endast försäljning (ej inköp). Terminologi: ML 2023:200 bytte "omvänd skattskyldighet" → **"omvänd betalningsskyldighet"**; båda termerna förekommer i praxis. + +**OSS för B2C digitala tjänster.** ML **6 kap 56-58§§** (gml. 5 kap 16-17§§): telekom/broadcasting/elektroniska tjänster (TBE) till EU-konsument beskattas i köparens land. Tröskel **10 000 EUR / 99 680 SEK per kalenderår** för all unionsintern distansförsäljning B2C sammantaget (ML 6 kap 62-63§§). Över tröskel: registrera och deklarera i **OSS-unionsordningen** (ML 22 kap, ersatte upphävda lag 2011:1245 från 2023-07-01), kvartalsvis i EUR, separat från vanliga momsdeklarationen. Bokföring försäljning på 3308 + utgående OSS-moms på **2670**. + +**Konsulttjänst vs elektronisk tjänst: gränsdragning.** Tre kumulativa krav för elektronisk tjänst (EU genomförandeförordning 282/2011 art. 7 + bilaga I): huvudsakligen automatiserad, minimal mänsklig inblandning, kan ej utföras utan IT. Skräddarsydd kod på beställning = konsulttjänst (huvudregel). Standard-SaaS = elektronisk tjänst (OSS för B2C). Förinspelad onlinekurs = elektronisk tjänst; live-undervisning via video = konsulttjänst. Compute/GPU = elektronisk tjänst (Skatterättsnämnden förhandsbesked 2024 om beräkningskapacitet). Se `references/electronic-services-classification.md`. + +**Skatteverkets ställningstaganden om molntjänster: caveat.** **Inget separat heltäckande moms-ställningstagande "SaaS" eller "molntjänster" existerar.** Sökträffar avser typiskt (a) energiskatt på datorhallar (dnr 202 321717-18/111, 2018-09-19, ej moms), eller (b) GDPR/personuppgifter vid tredjelandsöverföring. Klassificering sker via definitionen av elektronisk tjänst i ML 6 kap + 282/2011 art. 7 + Skatterättsnämndens förhandsbesked 2024. **Ange inte fiktiv dnr** i klientdokumentation. + +**Marknadsplats-presumtion.** SKV ställningstagande **dnr 8-2059749, 2022-12-19** ("Försäljning av elektroniska tjänster via marknadsplats/förmedlare på Internet"): app stores och liknande presumeras vara säljare av slutkundstjänsten. Ersätter dnr 131 499122-14/111. Relevant för app-/SaaS-distribution via Apple/Google/Microsoft. + +**Licens, royalty, programvara: vara vs tjänst.** Standardprogram på fysiskt medium = **vara**; standardprogram online (download/cloud) = **elektronisk tjänst**; skräddarsydd programvara = **konsulttjänst** (alltid). Royalty för immaterialrätt = tjänst i "diverse tjänster"-katalogen (ML 6 kap 64-66§§). Skattesats alltid **25 %** för programvara/SaaS (reducerad sats 6 % gäller inte programvara). + +**Lagändring 2025-01-01 (SFS 2024:942).** Virtuella evenemang B2B → köparens land; omsättningsgräns för småföretag höjd till **120 000 SEK**. Påverkar små IT-frilansare under tröskeln. + +**EU-dom C-247/21 Luxury Trust Automobil (2022).** Saknad "reverse charge"-text på faktura kan **inte rättas efteråt**, strikt formalia. Säkerställ korrekt fakturamall från första fakturan till EU B2B-kund. + +### 4.2 Bokföringsregler + +**K3 (BFNAR 2012:1) kap 18: immateriella anläggningstillgångar.** Bolaget **väljer** mellan aktiveringsmodellen och kostnadsföringsmodellen för internt upparbetade immateriella tillgångar (18.7); valet är en redovisningsprincip och tillämpas konsekvent. Aktivering kräver att samtliga sex kriterier i **18.12** uppfylls (teknisk genomförbarhet, avsikt, förmåga, sannolika ekonomiska fördelar, resurser, mätbarhet); forskningsfas kostnadsförs alltid (18.11). Förbud mot aktivering av varumärken, kundregister, "säljande" webbplats (18.5). Avskrivningstid = nyttjandeperiod; om ej tillförlitligt fastställbar → **5 år** (ÅRL 4 kap 4§ 2 st). + +**K2 (BFNAR 2016:10) punkt 10.4: aktiveringsförbud.** "Ett företag får inte aktivera utgifter för egenupparbetade immateriella anläggningstillgångar." Förvärvade får aktiveras. **Praktisk följd**: SaaS-bolag som vill kapitalisera egenutvecklad mjukvara måste välja K3 (tvingande), vilket utlöser revisionsplikt över gränsvärdena, fond för utvecklingsutgifter, och uppskjuten skatt. + +**Fond för utvecklingsutgifter: ÅRL 4 kap 2§.** Aktivering enligt K3 18 tvingar överföring från fritt EK till bunden fond **2089** med motsvarande belopp; fonden upplöses i takt med avskrivning/nedskrivning. **Direkt 3:12-implikation**: aktiverade 5 MSEK utvecklingsutgifter → 5 MSEK låst i 2089 → utdelningsbara medel minskar omedelbart. + +**Successiv vinstavräkning: K3 kap 23.** Huvudregel i K3 (23.17-23.18) när utfallet kan mätas tillförlitligt: intäkter och utgifter periodiseras efter färdigställandegrad. **Alternativregeln (färdigställandemetoden)** tillåten i juridisk person enligt **23.31** för bygg, anläggning, hantverk och **konsultverksamhet**: IT-konsult kvalificerar. I koncernredovisning enligt K3 är endast successiv vinstavräkning tillåten. Befarad förlust kostnadsförs direkt (23.32). + +**Successiv vinstavräkning: K2 kap 6.** Löpande räkning: successiv vinstavräkning är **obligatorisk** (6.16-6.18). Fastpris: **val** mellan huvudregel (successiv) och alternativregel (färdigställande). Skattemässig synk: IL **17 kap 23-32§§** styr pågående arbeten; konsulttjänsteuppdrag till fast pris kan skatteperiodiseras enligt färdigställandemetoden, varför många IT-konsult-AB väljer K2 + färdigställande för enkelhet och senare skattedebitering. + +**RFR 2 / IAS 38 / IFRS 15** (noterade). IAS 38 gör aktivering **tvingande** vid uppfyllda kriterier (skillnad mot K3 där aktivering är frivilligt principval). IFRS 15 tillåter inte färdigställandemetoden: intäkter ska redovisas över tid när art. 35-kriterier uppfylls. + +### 4.3 Sektorlagar och annat + +**3:12-reglerna (IL 57 kap)**: se utförlig behandling i §5 nedan och i `references/3-12-rules.md`. Kritisk reform: **SFS 2025:1361** ikraft 2026-01-01, tillämpas första gången på beskattningsår som börjar efter 2025-12-31 (K10 inlämnad våren 2027). Inkomstår 2025 (K10 våren 2026) följer gamla reglerna fullt ut. + +**F-skatt och underkonsultkontroll.** SFL **10 kap 11§**: utbetalaren får lita på F-skatt-status endast om den anges **skriftligt** i handling upprättad i samband med uppdraget (faktura/avtal). SFL **10 kap 24§**: betalning till icke-F-skattegodkänd juridisk person utlöser skatteavdrag 30 %. **HFD 2019:60** (mål 3978-3979-18 m.fl.): uppdragsavtal med F-skattegodkänd uppdragstagare kan inte åsidosättas annat än vid **skenavtal**: starkt skydd för dokumenterade konsultupplägg. SKV ställningstagande **dnr 8-2386895** (2023-05-25) om F-skattsedelns rättsverkningar. + +**Konsult vs anställd: IL 13 kap 1§** (efter prop. 2008/09:62 från 2009-01-01). Tre särskilt beaktade faktorer: partsavsikten, uppdragstagarens beroende av uppdragsgivaren, och integration i dennes organisation. **HFD 2018 ref. 31**: konsult via eget AB kan ändå klassas "verksam i betydande omfattning" hos kund i 3:12-mening. **HFD 2017 ref. 41**: styrelsearvode beskattas som tjänst även vid fakturering via AB. Se `references/consultant-vs-employee.md`. + +**GDPR: personuppgiftsbiträde.** GDPR (EU 2016/679) **art. 28** + dataskyddslag (2018:218). IT-konsulten är typiskt biträde vid drift, förvaltning, SaaS-hosting och utveckling med produktionsdata; ansvarig (controller) för egen löne-/kund-/leverantörsdata. Tredjelandsöverföring: **EU-US Data Privacy Framework** (kommissionens adekvansbeslut 2023-07-10) återupplivar transatlantiska överföringar till certifierade mottagare; ej certifierade → SCC (beslut 2021/914) + TIA per **Schrems II (C-311/18)** + EDPB rek. 01/2020. Sanktionsavgifter från IMY → **ej avdragsgilla** (IL 16 kap 18§), bokas på 6990/7990. + +**URL (1960:729) 40a§: datorprogram.** Implementerar datorprogramdirektivet 2009/24/EG. Anställdas kod övergår presumtivt till arbetsgivaren (även ideella rättigheter, vidare än direktivet). **Konsulter omfattas inte**: utan explicit IP-överlåtelseklausul behåller konsulten upphovsrätten; köparen får bara begränsad nyttjanderätt enligt tumregeln (AD 2002 nr 87). Klassisk DD-risk vid förvärv. + +**Utlandstjänstgöring: URA gäller INTE privat IT-sektor.** URA-avtalet tecknas av Arbetsgivarverket och gäller endast statligt anställda. Faktiska tillämpliga regler för privata IT-konsulter utomlands: **sexmånadersregeln** (IL 3 kap 9§ 1 st), **ettårsregeln** (IL 3 kap 9§ 2 st), **kortare avbrott max 6 dagar/månad eller 72 dagar/anställningsår** (IL 3 kap 10§; HFD 2011 ref. 40, HFD 2014:9). **SINK** (1991:586): 25 % fast på svensk lön till bosatt utomlands. **Expertskatt** (IL 11 kap 22-23§§ + lag 1999:1305): 25 % av lön + vissa ersättningar skattefria i **7 år** (utökat från 5 år genom lag 2023:880 fr.o.m. vistelse efter 2023-03-31); förenklingsregel från 2025-01-01 = månadsersättning ≥ **1,5 pbb**. **A1-intyg** (förordning 883/2004 art. 12) för utsändning ≤24 mån inom EU/EES/Schweiz/UK: bevarar svensk socialförsäkringstillhörighet. Se `references/cross-border-payroll.md`. + +**Fast driftställe vid hemmakontor.** **HFD 2022 ref. 39** (mål 6446-21): utländsk arbetsgivare får i regel inte fast driftställe i Sverige genom anställds hemmakontor utan arbetsgivarens krav. Backas av SKV ställningstagande **dnr 8-1677220** (2023-05-13). Mer restriktivt än tidigare praxis: relevant för utländska IT-bolag med remote-anställda i Sverige. + +### 4.4 Relevant HFD-praxis 2021-2026 + +| Mål | Område | Innebörd | +|---|---|---| +| HFD 2019:60 (3978-3979-18) | F-skatt / arbetsgivaravgifter | Uppdragsavtal med F-skatt ej åsidosättbart utom vid skenavtal: dominerande prejudikat för IT-konsult-AB. | +| HFD 2018 ref. 31 (3936-3939-17) | 3:12 / verksam i betydande omfattning | Konsultarbete via eget AB kan ändå smitta kundens fåmansbolag. | +| HFD 2021 ref. 40 ("Valedo") | 3:12 / utomståenderegeln | A/B-aktiestruktur med carried interest → särskilda skäl, kvalificerade trots >30 % utomstående. | +| HFD 2023 ref. 11 (5807-22) | 3:12 / samma eller likartad verksamhet | Nyemission från extern investerare smittar inte mottagarens andra bolag om ägarsambandet bryts. | +| HFD 2024 ref. 8 (2887-23) | 3:12 / utomståenderegeln | Villkorade tillskott + vetokrav slår **inte** ut utomståenderegeln: restriktiv tolkning av "särskilda skäl". | +| HFD 2024 ref. 51 (1372-24) | 3:12 / kapitalsmitta | Direkt + indirekt ägande hos samma krets → kapitalsmitta kvarstår; försämring jämfört med 2023 ref. 11. | +| HFD 2022 ref. 39 (6446-21) | Fast driftställe | Hemmakontor utan AG-krav skapar ej fast driftställe. | +| HFD 2024 ref. 42 | Moms / digital plattform | EdTech-plattform ej "bok": standard 25 %. | +| Skatterättsnämnden 2024 | Moms / compute | Beräkningskapacitet/GPU = elektronisk tjänst. | +| EUD C-247/21 (2022) | Moms / fakturaformalia | "Reverse charge"-text kan inte rättas i efterhand. | + +## 5. The 3 highest-error-rate scenarios + +### 5.1 SaaS-prenumerationer från utländska leverantörer (AWS, Azure, GitHub, OpenAI, Anthropic, Stripe) + +**Fel mönster.** Bokföra AWS US-fakturan som om den vore svensk: kostnad 80 % på 6540, ingående moms 20 % på 2641, **eller** kostnad 100 % på 6540 utan motkonto, ignorera momsen. Båda är fel. + +**Rätt mönster.** Inköpet är tjänst från utländsk beskattningsbar person enligt huvudregeln (ML **6 kap 33§**), och köparen är betalningsskyldig (ML **16 kap 9§**). Bokföring: + +- 4531 (icke-EU) eller 4535 (EU) debet: bruttobelopp i SEK +- 2440 kredit: leverantörsskuld +- 2614 kredit 25 %: utgående moms omvänd betalningsskyldighet +- 2645 debet 25 %: beräknad ingående moms (full avdragsrätt vid momspliktig verksamhet → netto 0) + +Momsdeklaration: **ruta 22+30+48** för icke-EU; **ruta 21+30+48** för EU. Ej i periodisk sammanställning. + +**Praktisk fallgrop.** Microsoft fakturerar typiskt via Irland → EU-behandling. AWS, Google Cloud fakturerar via olika entiteter beroende på avtal: **kontrollera fakturafoten** för säljarens etablering. Säkerställ att klientens VAT-nr finns i leverantörens konto: annars debiterar leverantören utländsk moms som **inte är avdragsgill i Sverige** (kräv kreditfaktura). + +**Lagreferens.** ML 6 kap 33§ + 16 kap 9-10§§ (SFS 2023:200, ikraft 2023-07-01); art. 44 + 196 i 2006/112/EG. + +### 5.2 Fakturering av EU B2B-kund med svensk moms + +**Fel mönster.** Svensk IT-konsult fakturerar tyskt eller franskt företag med svenska 25 % moms (försäljning 80 % på 3041, moms 20 % på 2611), eftersom det "känns säkrast" eller fakturamallen inte ändrats. Kunden vägrar betala momsdelen. + +**Rätt mönster.** B2B-tjänst till EU-företag beskattas i köparens land (ML **6 kap 33§**); köparen redovisar via reverse charge (art. 196 i 2006/112/EG). Faktura: **ingen moms**, försäljning på **3308**, fakturatext **"Omvänd betalningsskyldighet / Reverse charge, Artikel 44 och 196 i rådets direktiv 2006/112/EG"**, köparens VAT-nr på fakturan. **VIES-validering krävs och ska sparas** (säljarens bevisbörda enligt SKV ställningstagande dnr 202 460649-17/111, 2018-01-25). Momsdeklaration **ruta 39** + **periodisk sammanställning kvartalsvis** med köparens VAT-nr. + +**Praktisk fallgrop.** Om VAT-nr inte kan verifieras i VIES → behandla som B2C, debitera svensk moms (eller OSS över 10 000 EUR/år). Saknas "reverse charge"-textern → **EUD C-247/21 (2022)**: kan inte rättas efteråt. Korrigera fakturamallen omedelbart. + +**Lagreferens.** ML 6 kap 33§; ML 17 kap (faktureringsskyldighet); art. 44 + 196 i 2006/112/EG; EUD C-247/21 Luxury Trust Automobil. + +### 5.3 3:12 K10: felaktig löneunderlagsberäkning (gäller K10 vår 2026 / inkomstår 2025) + +**Fel mönster.** Ägare av en-mans-IT-konsult-AB tar löneuttag 350 000 kr 2024, deklarerar K10 huvudregeln 2025, beräknar lönebaserat utrymme = 50 % × egen lön = 175 000 kr, och missar att löneuttagskravet inte är uppfyllt, så lönebaserat utrymme blir **0**. Eller: räknar med styrelsearvoden i lönesumman. + +**Rätt mönster.** **IL 57 kap 19§**: för rätt till lönebaserat utrymme måste delägare eller närstående ha tagit ut kontant lön året före beskattningsåret om minst det **lägre** av (a) 6 IBB + 5 % av total kontant lönesumma i AB + dotter, eller (b) 9,6 IBB. För K10 vår 2026 (inkomstår 2025) räknas mot **IBB 2024 = 76 200 kr** → tak (b) = **731 520 kr**, golv (a) = **457 200 kr + 5 % × lönesumman**. För en-mans-AB med ägaren som enda anställd och lön 600 000 kr: (a) = 457 200 + 30 000 = 487 200 kr → kravet uppfyllt. Styrelsearvoden räknas **inte** in (uppdragstagare); skattepliktig del av bilersättning/traktamente räknas in per SKV ställningstagande **dnr 131 764318-09/111** (2009-11-16). Kapitalandelskrav 4 % (IL 57 kap 19a§). + +**När huvudregeln är värdelös, använd förenklingsregeln.** IL 57 kap 11a§: schablon **2,75 × IBB året före** = 2,75 × 76 200 = **209 550 kr för inkomstår 2025** (K10 vår 2026). Restriktion: får användas i **endast ett** företag per delägare per år (parallella konsult-AB:n fälla). + +**Lagreferens.** IL 57 kap 11§ (gränsbelopp), 11a§ (förenklingsregeln), 12§ (huvudregeln), 16-19§§ (lönebaserat utrymme + löneuttagskrav), 19a§ (kapitalandelskrav). + +**Varning för K10 vår 2027 (inkomstår 2026).** **SFS 2025:1361** (ikraft 2026-01-01): löneuttagskrav och 4 %-kapitalandelskrav **slopas**; grundbelopp = **4 × IBB** (2026: 4 × 80 600 = **322 400 kr**, fördelas över andelar och kan inte multipliceras genom parallella AB); lönebaserat utrymme = 50 % × (löneunderlag − schablonavdrag 8 IBB per delägare) = 50 % × (löneunderlag − 644 800 kr); uppräkning av sparat utdelningsutrymme slopas. Tidsperioder 5→4 år tillämpas först bsk-år efter 2026-12-31. Se `references/3-12-rules.md` för fullständig övergång. + +## 6. Open questions (flag for human review) + +1. **3:12-reformens detaljparagrafer.** Exakt §-numrering i IL 57 kap **efter** SFS 2025:1361: förenklingsregeln 11a§ utgår; takbelopp 20/22§§ kan ha omnumrerats. Verifiera mot officiell konsoliderad SFS-text när tillgänglig. Reformen tillämpas från räkenskapsår som börjar efter 2025-12-31; första K10 enligt nya reglerna lämnas våren 2027. +2. **BAS 2026.** BFN beslutade 2025-06-16 och 2025-12-13 om större ändringar i K3/K2; BAS 2026 har följdändringar. Detta SKILL.md är låst till **BAS 2025 v.1.0** för rapportering avseende räkenskapsår 2025. Uppdatera vid övergång till BAS 2026. +3. **3041 vs 3001.** I abbreviated BAS 2025-tabellen finns endast 3001-3004 som standard. Fortnox/Visma/Bokio lägger ofta till 3041 "Försäljning tjänster inom Sverige 25 %". Verifiera klientens specifika kontoplan innan användning. +4. **Tjänsteställe vid distansarbete.** SKV ställningstagande **dnr 8-1283049** (2021-12) om att hem ej blir tjänsteställe när AG tillhandahåller arbetsplats är kontroversiellt och anses av vissa rättskällor strida mot lag: flagga för manuell granskning vid reseavdrag och milersättning för konsulter med blandad arbetsplats. +5. **MicrosoftIE vs MicrosoftUS-fakturering.** Vissa kunder får fakturor från Microsoft Ireland Operations Ltd (EU) men andra från Microsoft Corp (US) beroende på avtalstyp (Enterprise Agreement vs CSP). Bokföringen skiljer (4531 vs 4535) men momsmekaniken är identisk. Verifiera fakturafoten. +6. **Konsult-vs-anställd vid en kund.** HFD 2019:60 ger starkt skydd vid dokumenterad F-skatt, men en-uppdragsgivare-AB:n riskerar fortfarande reklassificering vid bristande självständighetsdokumentation. Inhämta avtalskopior och självständighetschecklista vid årlig review. + +## Reference files + +- `references/3-12-rules.md`: Full IL 57 kap walkthrough, IBB-tabeller 2023-2026, K10-blanketten, SFS 2025:1361-reformbridge. +- `references/electronic-services-classification.md`: Beslutsträd konsulttjänst vs elektronisk tjänst, OSS-tröskel, marknadsplats-presumtion. +- `references/cross-border-payroll.md`: Sexmånadersregeln, ettårsregeln, SINK, expertskatt, A1-intyg. +- `references/consultant-vs-employee.md`: IL 13:1-kriterier, HFD-praxis, dokumentationschecklista. +- `references/software-capitalization.md`: K3/K2/IFRS aktivering, fond för utvecklingsutgifter, bokföringsmönster. +- `references/invoice-templates.md`: Fakturatext-bibliotek B2B EU / icke-EU / B2C / royalty. + + +--- + +## Loadable references + +The reference files named above are NOT included in this body. When a question genuinely needs that depth, load the specific one on demand with `gnubok_load_skill`, and only then: + +- `references/3-12-rules.md` → `gnubok_load_skill("vertical/konsult-it/3-12-rules")`: 3:12-reglerna (IL 57 kap): full reference +- `references/consultant-vs-employee.md` → `gnubok_load_skill("vertical/konsult-it/consultant-vs-employee")`: Consultant vs employee classification (uppdragstagare vs arbetstagare) +- `references/cross-border-payroll.md` → `gnubok_load_skill("vertical/konsult-it/cross-border-payroll")`: Cross-border payroll for IT consultants +- `references/electronic-services-classification.md` → `gnubok_load_skill("vertical/konsult-it/electronic-services-classification")`: Electronic services classification (moms) +- `references/invoice-templates.md` → `gnubok_load_skill("vertical/konsult-it/invoice-templates")`: Invoice text library: IT consulting (Sweden) +- `references/software-capitalization.md` → `gnubok_load_skill("vertical/konsult-it/software-capitalization")`: Software capitalization: K3, K2, IFRS +$gb$, + NULL, + 3, + 1 + ), + ( + 'vertical/konsult-it/3-12-rules', + 'vertical', + '3:12-reglerna (IL 57 kap): full reference', + $gb$3:12-reglerna (IL 57 kap): full reference: reference for IT-konsult & systemutvecklare (SNI 62)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1946, + '.claude\skills\industry\konsult-it\references\3-12-rules.md', + $gb$# 3:12-reglerna (IL 57 kap): full reference + +## IBB-tabell (inkomstbasbelopp) + +| År | IBB (SEK) | Källa | +|---|---|---| +| 2023 | 74 300 | Skatteverket fastställt | +| 2024 | 76 200 | Skatteverket fastställt | +| 2025 | 80 600 | Skatteverket fastställt | +| 2026 | 83 400 | Skatteverket beslut hösten 2025 | + +K10 lämnas året efter inkomståret. K10 vår 2026 avser inkomstår 2025 och använder **IBB 2024 = 76 200**. K10 vår 2027 avser inkomstår 2026 och använder **IBB 2025 = 80 600**. + +## Gränsbelopp: gamla reglerna (t.o.m. inkomstår 2025) + +### Förenklingsregeln (IL 57 kap 11a§) +Schablonbelopp = **2,75 × IBB året före beskattningsåret**, fördelas på andelar. +- Inkomstår 2024: 2,75 × 74 300 = **204 325 SEK** +- Inkomstår 2025: 2,75 × 76 200 = **209 550 SEK** + +Restriktion: en delägare får använda förenklingsregeln i **endast ett** företag per år (motverkar parallella AB:n). + +### Huvudregeln (IL 57 kap 12§) +Gränsbelopp = årets gränsbelopp + sparat utdelningsutrymme uppräknat med SLR + 3 procentenheter. + +Årets gränsbelopp = **omkostnadsbelopp × klyvningsräntan** (SLR + 9 procentenheter) **+ lönebaserat utrymme**. + +### Lönebaserat utrymme (IL 57 kap 16-19a§§) + +**Beräkning.** 50 % av kontant lönesumma i bolaget + dotterbolag året före beskattningsåret. Tak: lönebaserat utrymme för en delägare får inte överstiga **50 × egen kontant lön**. + +**Löneuttagskrav (57:19).** Delägare eller närstående måste ha tagit ut kontant lön året före beskattningsåret om minst det **lägre** av: +- (a) **6 IBB + 5 % av total kontant lönesumma** i AB + dotter, eller +- (b) **9,6 IBB** + +För K10 vår 2026 (inkomstår 2025, IBB 2024 = 76 200): +- Tak (b) = 9,6 × 76 200 = **731 520 SEK** +- Golv (a) = 6 × 76 200 + 5 % × lönesumman = **457 200 + 5 % × lönesumman** + +**Kapitalandelskrav (57:19a).** Delägaren måste äga ≥ **4 %** av kapitalet i bolaget. Avgörs vid årets ingång. + +**Vad räknas in i lönesumman.** +- Kontant lön (inte förmåner) +- Skattepliktig del av bilersättning och traktamente (SKV ställningstagande dnr 131 764318-09/111, 2009-11-16) +- Ej kostnadsersättningar +- Ej styrelsearvoden (uppdragstagare räknas inte som lön) +- Ej arvoden till uppdragstagare med F-skatt + +### Takbelopp för beskattning som inkomst av kapital + +- **Utdelning (57:20):** överskott över **90 IBB** under beskattningsåret beskattas som tjänsteinkomst. +- **Kapitalvinst (57:22):** överskott över **100 IBB** under en femårsperiod beskattas som tjänst. + +För inkomstår 2025: utdelningstak = 90 × 80 600 = **7 254 000 SEK**. + +## SFS 2025:1361: reformen (ikraft 2026-01-01) + +Riksdagsbeslut 2025-12-03. Tillämpas första gången på beskattningsår som **börjar efter 2025-12-31**: alltså inkomstår 2026, K10 vår 2027. Inkomstår 2025 (K10 vår 2026) följer gamla reglerna oförändrat. + +### Huvudförändringar + +1. **Grundbelopp.** Förenklingsregeln och huvudregeln slås ihop. Grundbelopp = **4 × IBB året före**, fördelas på samtliga andelar (kan inte multipliceras genom parallella AB). + - Inkomstår 2026: 4 × 80 600 = **322 400 SEK** totalt för bolaget. + +2. **Lönebaserat utrymme.** Beräknas på **hela** kontanta löneunderlaget (utan tidigare uppdelning), minus **schablonavdrag = 8 IBB per delägare**, gånger 50 %. + - Inkomstår 2026 schablonavdrag/delägare: 8 × 80 600 = **644 800 SEK**. + - Bolag med tre delägare och total lönesumma 5 MSEK: lönebaserat utrymme = 50 % × (5 000 000 − 3 × 644 800) = 50 % × 3 065 600 = **1 532 800 SEK**, fördelas på andelar. + +3. **Löneuttagskrav slopas helt.** Ingen minimi-egen-lön längre. + +4. **Kapitalandelskrav 4 % slopas.** Mindre minoritetsägare får tillgång till lönebaserat utrymme. + +5. **Uppräkning av sparat utdelningsutrymme slopas.** Tidigare uppräkning (SLR + 3 pe) försvinner: sparat utrymme värdesäkras inte längre. + +6. **Karenstid sänks 5 → 4 år.** Tillämpas på beskattningsår efter 2026-12-31. + +7. **Närståendekretsens omfattning utvidgas** (syskonbarn m.fl. inkluderas i vissa fall). + +### Planeringsåtgärder före 2025-12-31 + +- Maximera utdelning på gamla reglerna 2025 om sparat utrymme finns. +- Säkerställ löneuttagskrav uppfyllt för inkomstår 2025 (sista året kravet finns). +- Aktivera lågbeskattade utdelningar för delägare med <4 % kapitalandel **före** 2026 (nya reglerna ger dem tillgång först 2026). +- Granska parallella AB-strukturer: förenklingsregeln 2,75 × IBB i flera bolag försvinner; 4 × IBB-grundbeloppet är per bolag men kan inte multipliceras lika fritt. + +## Utomståenderegeln (IL 57 kap 5§) + +Aktierna är inte kvalificerade om utomstående **direkt eller indirekt** äger **minst 30 %** av andelarna i företaget och har rätt till motsvarande del av utdelning, under förutsättning att förhållandet bestått under hela beskattningsåret och de fem föregående beskattningsåren, om inte **särskilda skäl** föranleder annat. + +### HFD-praxis senaste fem år + +| Mål | Innebörd | +|---|---| +| **HFD 2021 ref. 40 ("Valedo")** | A/B-aktiestruktur med carried interest till nyckelpersoner → särskilda skäl, kvalificerade trots >30 % utomstående. | +| **HFD 2023 ref. 11** (mål 5807-22) | Nyemission från extern investerare smittar inte mottagarens andra bolag om ägarsambandet bryts. Bryter trenden från tidigare smitto-domar. | +| **HFD 2024 ref. 8** (mål 2887-23) | Villkorade tillskott + vetorätt slår **inte** ut utomståenderegeln: restriktiv tolkning av "särskilda skäl"; utomstående krävs ha **verkligt ekonomiskt risktagande**, men inte fullt symmetrisk rösträtt. | +| **HFD 2024 ref. 51** (mål 1372-24) | Direkt + indirekt ägande hos samma närståendekrets → kapitalsmitta kvarstår; konsolidering av smitta-doktrinen efter 2023 ref. 11. | + +## Samma eller likartad verksamhet (IL 57 kap 4§ 1 st p. 1) + +Aktier är kvalificerade om delägaren eller närstående under beskattningsåret eller något av de fem föregående beskattningsåren varit verksam i betydande omfattning **i företaget eller i ett annat fåmansföretag som bedriver samma eller likartad verksamhet**. + +**Klassisk fälla:** flytta verksamhet till nytt AB och låta gamla AB ligga vilande som "5:25-trädabolag". Karenstiden måste löpa ut innan vilande bolagets aktier blir okvalificerade. Reform 2026 sänker 5 → 4 år. + +## K10-blanketten: kritiska fält + +- **Avsnitt A**: omkostnadsbelopp (anskaffningsutgift uppräknad enligt 57:9). +- **Avsnitt B**: gränsbelopp enligt förenklingsregeln (B.1) **eller** huvudregeln (B.2 + lönebaserat utrymme B.3). +- **Avsnitt C**: utdelning under året, fördelning kapital/tjänst. +- **Avsnitt D**: kapitalvinst vid avyttring. +- **Avsnitt E**: sparat utdelningsutrymme uppräknat (försvinner med 2026-reformen). +- **Avsnitt F**: lönesumma, eget löneuttag, löneuttagskravsuppfyllelse (försvinner med 2026-reformen). + +## Beslutsträd: förenklingsregeln vs huvudregeln (inkomstår 2025) + +``` +Lönesumma i AB + dotter ≥ ca 420 000 SEK? +├── NEJ → Förenklingsregeln (2,75 × 76 200 = 209 550) +└── JA → Eget löneuttag ≥ MIN(6×76 200 + 5%×lönesumma, 9,6×76 200)? + ├── NEJ → Förenklingsregeln (löneutrymme = 0) + └── JA → Kapitalandel ≥ 4 %? + ├── NEJ → Förenklingsregeln (löneutrymme = 0) + └── JA → Huvudregeln (lönebaserat utrymme = 50 % × lönesumma) +``` + +Brytpunkt: huvudregeln vinner när 50 % × lönesumman > 209 550 → **lönesumma > 419 100 SEK** *och* löneuttagskravet är uppfyllt. + +## Lagreferenser + +- IL (1999:1229) 57 kap: fåmansföretagsreglerna i sin helhet. +- IL 57 kap 4§: kvalificerade andelar. +- IL 57 kap 5§: utomståenderegeln. +- IL 57 kap 11§: gränsbelopp. +- IL 57 kap 11a§: förenklingsregeln (utgår 2026). +- IL 57 kap 12§: huvudregeln. +- IL 57 kap 16-19a§§: lönebaserat utrymme + löneuttagskrav + kapitalandelskrav. +- IL 57 kap 20§: takbelopp utdelning (90 IBB). +- IL 57 kap 22§: takbelopp kapitalvinst (100 IBB / 5 år). +- SFS 2025:1361: 2026-reformen. +- SKV ställningstagande dnr 131 764318-09/111 (2009-11-16): lönedefinition. +$gb$, + 'vertical/konsult-it', + 2, + 1 + ), + ( + 'vertical/konsult-it/consultant-vs-employee', + 'vertical', + 'Consultant vs employee classification (uppdragstagare vs arbetstagare)', + $gb$Consultant vs employee classification (uppdragstagare vs arbetstagare): reference for IT-konsult & systemutvecklare (SNI 62)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1362, + '.claude\skills\industry\konsult-it\references\consultant-vs-employee.md', + $gb$# Consultant vs employee classification (uppdragstagare vs arbetstagare) + +## Lagbas: IL 13 kap 1§ + +Efter prop. 2008/09:62 (ikraft 2009-01-01) ska tre faktorer **särskilt beaktas** vid bedömningen om en person bedriver näringsverksamhet eller står i ett anställningsförhållande: + +1. **Partsavsikten**: vad parterna avsett enligt avtal +2. **Beroendet**: uppdragstagarens beroende av uppdragsgivaren +3. **Integrationen**: i vilken grad uppdragstagaren är inordnad i uppdragsgivarens verksamhet + +Reformen 2009 syftade till att underlätta starta-eget: F-skatt + flera uppdragsgivare ska normalt räcka. + +## F-skattens rättsverkningar: HFD 2019:60 + +**Mål 3978-3979-18 m.fl.** Uppdragsavtal med F-skattegodkänd uppdragstagare kan inte åsidosättas annat än vid **skenavtal** (avtalet återspeglar inte verkligheten). + +**Praktisk konsekvens:** dominerande prejudikat för IT-konsult via eget AB. Skatteverket kan inte påföra arbetsgivaravgifter på uppdragsgivaren även om uppdraget liknar anställning, så länge: +- F-skatt är registrerad och anges skriftligt i avtalet/fakturan (SFL 10 kap 11§) +- Avtalet är inte fingerat +- Det finns reellt företagande på uppdragstagarens sida + +Backas av SKV ställningstagande **dnr 8-2386895** (2023-05-25) om F-skattsedelns rättsverkningar. + +## 3:12-mening: verksam i betydande omfattning + +**HFD 2018 ref. 31** (mål 3936-3939-17): IT-konsult som via eget AB arbetar för kundföretag kan ändå klassas som "verksam i betydande omfattning" hos kundföretaget i **3:12-mening** (IL 57 kap 4§). Detta är inte samma fråga som arbetsgivaravgifter: skenavtalströskeln gäller där, men 3:12 har lägre tröskel. + +Konsekvens: aktierna i kundföretaget kan bli kvalificerade för konsulten även om konsulten formellt är extern. Sällan praktiskt problem för dagliga konsultupplägg, men relevant vid: +- Equity/options i kundbolaget som ersättning +- Långa eller exklusiva uppdrag med ledningsuppgifter + +## Styrelsearvoden: HFD 2017 ref. 41 + +Styrelsearvode ska normalt beskattas som **inkomst av tjänst** även om fakturering sker via eget AB. Endast vid undantagsfall (få och tidsbegränsade uppdrag, styrelseuppdrag som integrerad del av annan konsultroll) accepteras AB-fakturering. + +Skatteverket har följt upp med **ställningstagande dnr 8-1503440** (2022-02-22). Två villkor måste uppfyllas för AB-fakturering: +1. Uppdraget är begränsat i tid (≤2 år, undantagsvis) +2. Det är en specifik uppgift (omstrukturering, kris-management, M&A-stöd) + +Permanent ordförandeskap eller långsiktig styrelseplats → tjänst, inte näringsverksamhet, oavsett struktur. + +## SFL 10 kap: skatteavdrag och F-skatt + +**SFL 10 kap 11§.** Utbetalaren får lita på F-skatt-status endast om den anges **skriftligt** i handling upprättad i samband med uppdraget. "F-skatt" på fakturafoten räcker; muntliga uppgifter räcker inte. + +**SFL 10 kap 24§.** Betalning till icke-F-skattegodkänd juridisk person utlöser skatteavdrag **30 %** + arbetsgivaravgifter. Praktiskt: kontrollera leverantörens F-skatt vid första fakturan och dokumentera kontrollen. + +**Verifiering:** Skatteverkets e-tjänst "Kontrollera F-skatt" eller affärspartner-API. Lagra resultatet i klientmappen. + +## 24-månadersregeln för uthyrning (LUA) + +Lag (2012:854) om uthyrning av arbetstagare (LUA), uthyrningsdirektivet 2008/104/EG. Gäller bemanningsföretag, inte enmansbolag. **Klargörande:** ren konsultverksamhet (uppdrag mot resultat, ej tidsuthyrning) faller utanför LUA. + +## Dokumentationschecklista för en-mans-IT-AB + +För att stärka konsultupplägget och minimera reklassificeringsrisk: + +- [ ] **Flera uppdragsgivare** under året (eller åtminstone aktiv marknadsföring/sökande) +- [ ] **Fastpriselement** i avtal (resultatbaserat, ej rent timpris) där möjligt +- [ ] **Egen utrustning** (laptop, programvarulicenser, hemmakontor) +- [ ] **Egen lokal eller arbetsplats**, inte permanent skrivbord hos kund +- [ ] **Ansvarsförsäkring** (företagarförsäkring + konsultansvar) +- [ ] **F-skattregistrering** + momsregistrering (verifierad) +- [ ] **Eget aktiekapital** (minimum 25 000 SEK för AB sedan 2020) +- [ ] **Marknadsföring**: webbplats, LinkedIn-företagsprofil, visitkort +- [ ] **Avtal** med uppdragsgivare som inte ser ut som anställningsavtal (inga semesterdagar, ingen lönerevision, ingen rapporteringshierarki) +- [ ] **Tidsbegränsade uppdrag** med tydlig avgränsning +- [ ] **Fakturering med specifikation** av prestation, inte bara timmar + +## Risk-ranking + +| Mönster | Reklassificeringsrisk | +|---|---| +| 1 kund, 100 % av omsättningen, 36+ månader | **Mycket hög** | +| 1 kund, 100 %, 12-36 mån, F-skatt + dokumenterat | Medium: HFD 2019:60 skydd om inte skenavtal | +| 2-3 kunder, växlande, eget kontor | Låg | +| 5+ kunder, egen produktutveckling | Mycket låg | +| Konsult med equity/options i kundbolag | Hög (3:12-smitta) | +| Styrelseuppdrag fakturerat via AB | Mycket hög för tjänsteklassificering | + +## Lagreferenser + +- IL (1999:1229) 13 kap 1§: näringsverksamhet vs anställning +- IL 57 kap 4§: verksam i betydande omfattning (3:12) +- SFL (2011:1244) 10 kap 11§: F-skatt-anteckning +- SFL 10 kap 24§: skatteavdrag vid icke-F-skatt +- Prop. 2008/09:62: F-skattereformen +- Lag (2012:854) om uthyrning av arbetstagare (LUA) +- HFD 2019:60: F-skatt-skydd +- HFD 2018 ref. 31: verksam i betydande omfattning genom AB +- HFD 2017 ref. 41: styrelsearvoden +- SKV ställningstagande dnr 8-2386895 (2023-05-25): F-skattsedelns rättsverkningar +- SKV ställningstagande dnr 8-1503440 (2022-02-22): styrelsearvoden via AB +$gb$, + 'vertical/konsult-it', + 2, + 1 + ), + ( + 'vertical/konsult-it/cross-border-payroll', + 'vertical', + 'Cross-border payroll for IT consultants', + $gb$Cross-border payroll for IT consultants: reference for IT-konsult & systemutvecklare (SNI 62)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1397, + '.claude\skills\industry\konsult-it\references\cross-border-payroll.md', + $gb$# Cross-border payroll for IT consultants + +## URA gäller INTE privat sektor + +URA-avtalet tecknas av Arbetsgivarverket och gäller endast statligt anställda utsändningar. Privata IT-konsulter omfattas av allmänna inkomstskatte- och socialförsäkringsregler. + +## Sexmånadersregeln (IL 3 kap 9§ 1 st) + +Lön från anställning vid utlandstjänstgöring i ett land är skattefri i Sverige om: +- Anställningen och vistelsen utomlands varar i **minst sex månader** +- Inkomsten beskattas i verksamhetslandet +- Beskattningen i verksamhetslandet är inte uppenbart för låg + +Skattefriheten begränsas till den del av inkomsten som beskattats i verksamhetslandet. + +## Ettårsregeln (IL 3 kap 9§ 2 st) + +Lön är skattefri i Sverige om: +- Anställningen och vistelsen utomlands varar i **minst ett år** i samma land +- Inkomsten kunde ha beskattats där men befriats från beskattning genom intern lagstiftning eller administrativ praxis (ej skatteavtal) + +Bredare än sexmånadersregeln: fungerar även för låg- eller nollskatteländer förutsatt befrielsen vilar på intern lagstiftning. + +## Kortare avbrott (IL 3 kap 10§) + +Sverigevistelser och tredjeland-vistelser är tillåtna utan att bryta utlandsvistelsen om de uppgår till **högst 6 dagar per månad** eller **högst 72 dagar per anställningsår** (12-månadersperiod räknad från utresedatum, inte kalenderår). + +**HFD 2011 ref. 40:** dag som påbörjas i Sverige räknas som hel dag i Sverige (även om man reser ut senare på dagen). + +**HFD 2014:9:** semester räknas som arbetsförhållande för 6/72-dagars-räkningen. + +## SINK: särskild inkomstskatt för utomlands bosatta (1991:586) + +- **25 % fast** på bruttolön till person bosatt utanför Sverige men som arbetar för svensk arbetsgivare i Sverige +- Inga avdrag, ingen deklaration, slutskatt +- Begränsat skattskyldig (IL 3 kap 17-18§§): vistelse <6 mån/år eller pendlare med utländsk hemvist +- Ansökan på blankett SKV 4350 inom kort tid efter ankomst: annars vanlig progressiv beskattning + +## Expertskatt (IL 11 kap 22-23§§ + lag 1999:1305) + +**25 % av lön + vissa ersättningar är skattefria** under upp till **7 år** (utökat från 5 år genom **lag 2023:880** för vistelser som påbörjats efter **2023-03-31**; tidigare ankomster bibehåller 5-årsgränsen). + +**Förenklingsregel (från 2025-01-01).** Personer med månadsersättning ≥ **1,5 prisbasbelopp** (2025: 1,5 × 58 800 = 88 200 SEK; 2026: 1,5 × 60 500 = 90 750 SEK) får automatiskt expertskatt om övriga formaliakrav uppfylls. Slipper subjektiv bedömning av forskningsmerit/specialistroll. Ansökan till Forskarskattenämnden inom **tre månader** efter arbetets påbörjande. + +**Kvalifikationer för förenklingsregeln:** +- Utländsk medborgare (eller svensk medborgare som inte varit bosatt i Sverige under de senaste fem åren) +- Arbetsgivaren är svensk eller har fast driftställe i Sverige +- Vistelse i Sverige är **avsedd högst 7 år** +- Ansökan inom 3 månader + +## A1-intyg: socialförsäkringstillhörighet + +**EU förordning 883/2004 art. 12.** Vid utsändning inom **EU/EES/Schweiz/UK** ≤24 månader bevaras svensk socialförsäkring (arbetsgivaravgifter betalas till Sverige, inte värdlandet). Förlängning till 5 år möjlig via art. 16-avtal. + +Ansökan: Försäkringskassan (e-tjänst). Krävs **före** utresan för att vara skydd retroaktivt. + +**Multi-state worker (art. 13).** Person som regelbundet arbetar i ≥2 EU-länder: tillhör hemvistlandet om ≥25 % av arbetet utförs där, annars arbetsgivarens land. Vanligt mönster: svensk IT-konsult med uppdrag i Norge + remote-arbete i Sverige. + +## Bokföringsmönster + +| Konto | Användning | +|---|---| +| 7010 | Lön kollektivanställda: vid utsändning kan ackumuleras separat per land för spårning | +| 7210 | Lön tjänstemän | +| 7510 | Arbetsgivaravgifter: endast om svensk socialförsäkring gäller (A1) | +| 7530 | Särskild löneskatt på pensionskostnader (24,26 %) | +| 7385 | Bilförmån | +| 5800 | Resekostnader: typiskt resor för konsultuppdrag | +| 7392 | Skattefri del av traktamente / utlandsersättning | +| 7382 | Skattepliktig del av traktamente | + +**Skattefri kostnadsersättning (IL 12 kap):** Skatteverkets utlandsnormbelopp per land (uppdateras årligen). Skattepliktig del över normbeloppet bokas separat och rapporteras i AGI. + +## AGI vid sexmånadersregeln/ettårsregeln + +Lön rapporteras i AGI som vanligt men med markering om skatteberäkning. Skatteavdrag görs ofta efter jämkning eller på 0 SEK efter beslut från Skatteverket. Slutskatten regleras vid taxeringen. + +## Fast driftställe vid hemmakontor: för utländsk arbetsgivare + +**HFD 2022 ref. 39** (mål 6446-21) + SKV ställningstagande **dnr 8-1677220** (2023-05-13): utländsk arbetsgivare får i regel inte fast driftställe i Sverige genom anställds hemmakontor om arbetsgivaren inte kräver att arbetet utförs där. Mer restriktivt än tidigare praxis. + +**Praktisk konsekvens för IT-bolag:** remote-anställning av svenska utvecklare av utländskt bolag utlöser typiskt inte fast driftställe → ingen svensk bolagsskatteskyldighet för arbetsgivaren. Däremot socialförsäkring (A1 eller svensk anslutning beroende på upplägg) och PAYE/skatteavdrag för den anställde. + +## Lagreferenser + +- IL (1999:1229) 3 kap 9§: sexmånadersregeln + ettårsregeln +- IL 3 kap 10§: kortare avbrott +- IL 3 kap 17-18§§: begränsat skattskyldig +- IL 11 kap 22-23§§: expertskatt +- Lag (1999:1305) om Forskarskattenämnden +- Lag (1991:586) om särskild inkomstskatt för utomlands bosatta (SINK) +- Lag (2023:880): expertskatt 5 → 7 år +- EU förordning 883/2004 art. 12, 13, 16: socialförsäkring vid utsändning +- HFD 2011 ref. 40: kortare avbrott +- HFD 2014:9: semester och avbrott +- HFD 2022 ref. 39: hemmakontor och fast driftställe +$gb$, + 'vertical/konsult-it', + 2, + 1 + ), + ( + 'vertical/konsult-it/electronic-services-classification', + 'vertical', + 'Electronic services classification (moms)', + $gb$Electronic services classification (moms): reference for IT-konsult & systemutvecklare (SNI 62)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1501, + '.claude\skills\industry\konsult-it\references\electronic-services-classification.md', + $gb$# Electronic services classification (moms) + +## Definition: three cumulative criteria + +EU genomförandeförordning 282/2011 art. 7 + bilaga I: +1. Levereras över Internet eller elektroniskt nät +2. Huvudsakligen **automatiserad** med minimal mänsklig inblandning +3. Kan inte tillhandahållas **utan informationsteknik** + +Misslyckas något kriterium → inte elektronisk tjänst (typiskt konsulttjänst eller annan tjänstekategori). + +## Beslutsträd för IT-konsult-/SaaS-bolag + +``` +Säljs över Internet? +├── NEJ → Konsulttjänst eller varuförsäljning (separat klassificering) +└── JA → Huvudsakligen automatiserad? + ├── NEJ → Konsulttjänst (ML 6 kap 33§ huvudregeln) + └── JA → Kräver IT? + ├── NEJ → Annan tjänstekategori + └── JA → Elektronisk tjänst (ML 6 kap, OSS för B2C) +``` + +## Klassificeringsmatris + +| Erbjudande | Klassificering | Anmärkning | +|---|---|---| +| Skräddarsydd kod på beställning | Konsulttjänst | Mänsklig leverans, huvudregeln gäller | +| Standard-SaaS (Salesforce, Slack-typ) | Elektronisk tjänst | Helautomatiserad | +| Hostad kundspecifik instans med support | Blandad: separera bashysning (elektronisk) från support (konsult) eller bedöm huvudprestation | +| IaaS (AWS EC2, Azure VM) | Elektronisk tjänst | Helautomatiserad self-service | +| Co-location (kundens hardware) | Fastighetstjänst | Annan placeringsregel: ML 6 kap 38§ | +| GPU/compute (HPC/AI training) | **Elektronisk tjänst** | Skatterättsnämnden förhandsbesked 2024 | +| AI-API (OpenAI, Anthropic API) | Elektronisk tjänst | Automatiserad inference | +| Förinspelad onlinekurs | Elektronisk tjänst | Bilaga I till 282/2011 | +| Live-undervisning via video | **Konsulttjänst** | Mänsklig leverans (genomförandeförordning art. 7.3) | +| Virtuellt evenemang B2B (från 2025-01-01) | Konsulttjänst → köparens land | SFS 2024:942 | +| Streamad konferens till konsument | Elektronisk tjänst → konsumentens land | OSS | +| App-/SaaS-distribution via app store | Plattformen presumeras säljare | SKV dnr 8-2059749, 2022-12-19 | +| Standardprogram på fysiskt medium | **Vara** | Inte tjänst | +| Standardprogram för download | Elektronisk tjänst | Online-leverans = tjänst | +| Royalty för immaterialrätt | "Diverse tjänster" | ML 6 kap 64-66§§ | + +## Placeringsregler + +### B2B (köparen är beskattningsbar person) + +Alla tjänster (inkl. elektroniska) beskattas där **köparen** är etablerad (ML 6 kap 33§, art. 44 i 2006/112/EG). Säljaren fakturerar utan moms; köparen reverse-chargar. + +### B2C (köparen är konsument) + +| Säljare | Köpare | Beskattningsland | +|---|---|---| +| Svensk säljare | Svensk konsument | Sverige (svensk moms) | +| Svensk säljare | EU-konsument, total försäljning <10 000 EUR/år | Sverige | +| Svensk säljare | EU-konsument, total försäljning ≥10 000 EUR/år | Konsumentens land via OSS | +| Svensk säljare | Konsument utanför EU | Konsumentens land (ofta undantaget från svensk moms) | + +## OSS-tröskeln + +**Beräkning.** Tröskeln **10 000 EUR / 99 680 SEK** gäller den **sammanlagda** unionsinterna distansförsäljningen av varor + TBE-tjänster B2C (ML 6 kap 62-63§§). Räknas kalenderårsvis. + +**Övergång.** När tröskeln passeras under året → svensk moms upp till tröskeln, OSS-moms (köparlandets sats) från och med fakturan som passerar. + +**Frivillig registrering.** Säljare under tröskeln kan välja att registrera sig i OSS: typiskt fördelaktigt vid försäljning till lågmoms-länder (Luxemburg 17 %, Tyskland 19 %). + +**Deklaration.** OSS-unionsordningen kvartalsvis (Q1 → 30 april, Q2 → 31 juli, Q3 → 31 oktober, Q4 → 31 januari). Allt i EUR. + +## Marknadsplats-presumtion + +**SKV ställningstagande dnr 8-2059749, 2022-12-19** ("Försäljning av elektroniska tjänster via marknadsplats och andra förmedlare på Internet, mervärdesskatt"): + +- Marknadsplats/app store presumeras vara säljare av slutkundstjänsten +- Underleverantören säljer till plattformen (B2B), plattformen säljer till slutkund (B2C eller B2B) +- Praktisk följd för svensk app-utvecklare som säljer via Apple App Store / Google Play / Microsoft Store / Steam: säljer till plattformen i Irland/Luxemburg → svensk faktura utan moms, reverse charge för plattformen +- Ersätter äldre dnr 131 499122-14/111 + +## Konsult vs licens: kombinerade leveranser + +**Princip.** När en leverans innehåller både konsultarbete och licens/SaaS, bedöm vad som är **huvudprestationen** (EU-domstolens CPP-doktrin, mål C-349/96). + +Vanliga mönster för IT-konsult: +- **Implementation av standard-SaaS (60 % konsult + 40 % licens):** sammanhängande tjänst med konsultarbete som huvudprestation → konsulttjänst, B2B-huvudregeln gäller hela beloppet +- **SaaS-licens med support (90 % licens + 10 % support):** elektronisk tjänst hela +- **Skräddarsydd utveckling + drift (50/50):** ofta separera i faktura, utveckling som konsult, drift som elektronisk + +Dokumentera bedömningen i avtal och faktura för att undvika ifrågasättande. + +## Skattesats + +**Programvara och SaaS = alltid 25 %.** Reducerade satser (12 %, 6 %) gäller inte programvara, även om innehållet skulle kunna falla under en reducerad kategori (t.ex. e-bok 6 % gäller bok som elektronisk publikation enligt ML 7 kap 1§ 3 st p. 4, inte SaaS-plattform för bokläsning). + +**HFD 2024 ref. 42:** EdTech-plattform med läromedel ansågs **inte** vara "bok" → standard 25 %. + +## Praxis 2021-2026: moms på digitala tjänster + +| Avgörande | Innebörd | +|---|---| +| EUD C-247/21 Luxury Trust Automobil (2022) | Saknad "reverse charge"-text kan inte rättas i efterhand | +| Skatterättsnämnden 2024 (förhandsbesked) | Beräkningskapacitet/GPU = elektronisk tjänst | +| HFD 2024 ref. 42 | EdTech-plattform ej "bok": 25 % moms | +| SFS 2024:942 (ikraft 2025-01-01) | Virtuella evenemang B2B → köparens land | + +## Lagreferenser + +- ML (2023:200) 6 kap 33§: huvudregeln B2B +- ML 6 kap 56-58§§: elektroniska tjänster B2C +- ML 6 kap 62-63§§: OSS-tröskeln +- ML 22 kap: OSS-deklaration +- 2006/112/EG art. 44 (B2B), art. 58 (B2C TBE) +- Genomförandeförordning (EU) 282/2011 art. 7 + bilaga I: definition elektronisk tjänst +$gb$, + 'vertical/konsult-it', + 2, + 1 + ), + ( + 'vertical/konsult-it/invoice-templates', + 'vertical', + 'Invoice text library: IT consulting (Sweden)', + $gb$Invoice text library: IT consulting (Sweden): reference for IT-konsult & systemutvecklare (SNI 62)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1171, + '.claude\skills\industry\konsult-it\references\invoice-templates.md', + $gb$# Invoice text library: IT consulting (Sweden) + +## B2B inom EU (omvänd betalningsskyldighet) + +**Krav (ML 17 kap):** köparens VAT-nr på fakturan + uttrycklig text om reverse charge + ingen moms. + +**Svensk/engelsk dubbeltext (rekommenderad):** + +``` +Omvänd betalningsskyldighet / Reverse charge +Artikel 44 och 196 i rådets direktiv 2006/112/EG +VAT to be accounted for by the recipient under Article 196 of Directive 2006/112/EC + +Buyer VAT-ID: DE123456789 +``` + +Försäljning bokas på **3308 Försäljning tjänster till annat EU-land**. Momsdeklaration **ruta 39**. Periodisk sammanställning kvartalsvis med köparens VAT-nr. + +**VIES-validering** ska sparas per kund per faktureringscykel (SKV ställningstagande dnr 202 460649-17/111). Skärmdump av VIES-kontroll med datum och VAT-nr i klientmappen. + +## B2B utanför EU + +``` +Outside scope of Swedish VAT +Article 44 Council Directive 2006/112/EC (place of supply: customer's country) +This transaction is not subject to Swedish VAT. +``` + +Försäljning bokas på **3305 Försäljning tjänster till land utanför EU**. Momsdeklaration **ruta 40**. Ej i periodisk sammanställning. + +Behov av lokalt VAT-nr beror på köparlandet (US: typiskt inget krav; UK: VAT-nr om köparen är registrerad). + +## B2C inom Sverige + +Standard 25 % moms: + +``` +Moms 25 % ingår med [belopp] SEK +``` + +Försäljning **3001/3041**, utgående moms **2611**. Momsruta **05+10**. + +## B2C inom EU: under OSS-tröskel (10 000 EUR / 99 680 SEK) + +Behandlas som Sverige-försäljning, svensk moms 25 %. Försäljning på 3001/3041, ruta 05+10. + +## B2C inom EU: över OSS-tröskel (eller frivillig OSS-registrering) + +``` +VAT [köparlandets sats] % +[Sats × belopp] [köparlandets valuta eller SEK] +Reported via the One Stop Shop scheme (Union scheme). +Seller's OSS identification: SE[VAT-nr] +``` + +Försäljning **3308**, utgående OSS-moms **2670**. OSS-deklaration kvartalsvis i EUR, separat från ordinarie momsdeklaration. + +Tabell över relevanta momssatser i EU (uppdateras 2025-2026, kontrollera vid behov): + +| Land | Standardsats | +|---|---| +| DE | 19 % | +| FR | 20 % | +| NL | 21 % | +| DK | 25 % | +| FI | 25,5 % | +| IT | 22 % | +| ES | 21 % | +| PL | 23 % | +| BE | 21 % | + +## Royalty / licensavgift (utgående) + +### Med IP-överlåtelse + +``` +Härmed överlåts samtliga immateriella rättigheter avseende [leveransen] +i enlighet med upphovsrättslagen (1960:729) 27 §. +Köparen erhåller ekonomiska rättigheter; ideella rättigheter förblir hos upphovsmannen +i den omfattning lagen kräver. +``` + +### Utan IP-överlåtelse (endast nyttjanderätt) + +``` +Denna leverans omfattar nyttjanderätt till programvaran enligt bifogade licensvillkor. +Inga immateriella rättigheter överlåts. +URL (1960:729) gäller; alla rättigheter förbehålls upphovsmannen. +``` + +Royaltyintäkt bokas på **3922 Licensintäkter och royalties** eller (om huvudverksamhet) **3001/3041** beroende på affärsmodell. + +## Subkontraktör (underkonsult AB→AB) + +Standardfaktura i Sverige med 25 % moms. F-skatt anges: + +``` +F-skatt: Innehavaren av denna faktura är godkänd för F-skatt. +Org.nr: 556xxx-xxxx +``` + +Mottagaren bokar på **6850 Inhyrd IT-personal**, drar ingående moms 2641. + +## Förskottsfakturering SaaS-prenumeration + +``` +Period: 2026-01-01 till 2026-12-31 +Avgift för årsprenumeration på [tjänst]. +Tjänsten levereras löpande under avtalsperioden. +``` + +Mottagaren bokar fakturan på **2972 Förutbetalda intäkter** (kreditsida) vid utfärdande, periodiserar 1/12 per månad mot 3922/3041. + +## Praktiska fallgropar + +1. **C-247/21 Luxury Trust Automobil (2022).** Saknad "reverse charge"-text kan inte rättas i efterhand. Verifiera fakturamallen innan första fakturan till EU B2B-kund. + +2. **VAT-nr-format.** EU-länderna har olika format (DE 9 siffror, FR 11 tecken, NL 12 tecken inklusive "B01" etc.). VIES validerar formatet: om kunden ger ogiltigt nummer, fråga om uppdaterat eller behandla som B2C. + +3. **Microsoft Ireland vs Microsoft US.** Olika kundavtal får olika faktureringsentiteter. Kontrollera fakturafoten varje månad: kan bytas vid avtalsändring. + +4. **OSS-tröskeln gäller summan av varor + TBE-tjänster B2C inom EU.** Lätt att missa när man säljer både SaaS B2C och fysiska varor. + +5. **Reverse charge-text på engelska räcker.** Säljarens hemspråk är inte tvingande (ML 17 kap), men dubbeltext minskar tolkningsproblem. + +## Lagreferenser + +- ML (2023:200) 17 kap: faktureringsskyldighet och fakturainnehåll +- ML 6 kap 33§: B2B-huvudregeln +- ML 6 kap 56-58§§ + 62-63§§: TBE-tjänster B2C och OSS-tröskeln +- ML 22 kap: OSS-deklaration +- 2006/112/EG art. 44, 196, 226: placeringsregler och fakturainnehåll +- EUD C-247/21 (2022): reverse charge-text kan inte rättas +- SKV ställningstagande dnr 202 460649-17/111 (2018-01-25): VIES-validering bevisbörda +$gb$, + 'vertical/konsult-it', + 2, + 1 + ), + ( + 'vertical/konsult-it/software-capitalization', + 'vertical', + 'Software capitalization: K3, K2, IFRS', + $gb$Software capitalization: K3, K2, IFRS: reference for IT-konsult & systemutvecklare (SNI 62)$gb$, + '{}'::text[], + $gb${}$gb$::jsonb, + 1619, + '.claude\skills\industry\konsult-it\references\software-capitalization.md', + $gb$# Software capitalization: K3, K2, IFRS + +## K3 (BFNAR 2012:1) kap 18: internt upparbetade immateriella tillgångar + +**18.7 Principval.** Företaget **väljer** mellan: +- **Aktiveringsmodellen**: utgifter aktiveras när alla kriterier i 18.12 uppfylls +- **Kostnadsföringsmodellen**: alla utgifter kostnadsförs löpande + +Valet är en redovisningsprincip; tillämpas konsekvent över alla projekt och alla år, ändring kräver byte av redovisningsprincip (K3 10.6). + +### Sex aktiveringskriterier (18.12) + +Samtliga måste uppfyllas, dokumenteras och kunna styrkas: + +1. **Teknisk genomförbarhet** att färdigställa tillgången +2. **Avsikt** att färdigställa och använda/sälja +3. **Förmåga** att använda eller sälja +4. **Sannolika ekonomiska fördelar** (marknad finns eller intern användning ger nytta) +5. **Tillräckliga resurser** för att färdigställa (teknik, finansiering, personal) +6. **Tillförlitlig mätning** av utgifterna under utvecklingsfasen + +### Forskningsfas vs utvecklingsfas (18.11) + +Forskningsfas: ingen säker plan, experimenterande → **kostnadsförs alltid**. Typiska exempel för IT: research-spike, proof-of-concept, alternativbedömningar. + +Utvecklingsfas: efter PoC bekräftat genomförbarhet → kan aktiveras om 18.12 uppfylls. Praktisk vattendelare: när teknisk genomförbarhet är bevisad och produktbeslut fattat. + +### Förbud (18.5) + +Får **inte** aktiveras: +- Internt upparbetade varumärken +- Internt upparbetade utgivningsrättigheter +- Kundregister och liknande +- "Säljande" del av webbplats (marknadsföringsmaterial) + +### Avskrivning + +Avskrivningstid = **nyttjandeperiod**. Om nyttjandeperiod inte kan tillförlitligt fastställas → **5 år** (ÅRL 4 kap 4§ 2 st). Linjär metod är norm för programvara. + +## K2 (BFNAR 2016:10) punkt 10.4: aktiveringsförbud + +> "Ett företag får inte aktivera utgifter för egenupparbetade immateriella anläggningstillgångar." + +**Konsekvens.** K2-bolag kostnadsför all egen utvecklingstid direkt. **Förvärvade** immateriella tillgångar (köpt mjukvara, köpta licenser) får aktiveras enligt 10.6-10.18. + +**Tvingar K3-val** för SaaS-bolag som vill kapitalisera. K3-val utlöser i sin tur: +- Revisionsplikt över gränsvärdena (omsättning ≥ 3 MSEK, balansomslutning ≥ 1,5 MSEK, anställda ≥ 3, två av tre i två år) +- Fond för utvecklingsutgifter (ÅRL 4 kap 2§) +- Uppskjuten skatt (K3 29) +- Större notapparat + +## IAS 38 / RFR 2: noterade bolag + +IAS 38.57 gör aktivering **tvingande** när kriterierna uppfylls (skillnad mot K3 där aktivering är frivilligt principval). Sex kriterier i IAS 38.57 är i sak identiska med K3 18.12. + +**IFRS 15**: intäktsredovisning. Tillåter inte färdigställandemetoden: intäkter ska redovisas över tid när art. 35-kriterier uppfylls, eller vid en tidpunkt (kontrollövergång). + +## Fond för utvecklingsutgifter: ÅRL 4 kap 2§ + +Aktivering enligt K3 18 **tvingar** överföring från fritt EK till bunden fond **2089 Fond för utvecklingsutgifter** med belopp motsvarande aktiveringen. Fonden upplöses i takt med avskrivning/nedskrivning eller försäljning av tillgången. + +**3:12-implikation.** Aktiverade 5 MSEK utvecklingsutgifter → 5 MSEK låst i 2089 → utdelningsbara medel minskar omedelbart. För fåmansbolag med ägare som vill maximera utdelning enligt 3:12 är detta en direkt kostnad. + +**Strategiskt val:** vissa SaaS-bolag väljer K2 eller K3 + kostnadsföringsmodellen specifikt för att hålla fritt EK ofångat. Inverkar negativt på balansomslutningen och kan påverka bolagets attraktivitet vid extern finansiering: investerare vill se aktivering för att se "tillgångsbasen" i mjukvaran. + +## Successiv vinstavräkning + +### K3 kap 23 + +**23.17-23.18 huvudregel.** När utfallet kan mätas tillförlitligt: intäkter och utgifter periodiseras efter färdigställandegrad (input-method med kostnader eller output-method med milstolpar). + +**23.31 alternativregeln** (färdigställandemetoden): tillåten i juridisk person för: +- Bygg +- Anläggning +- Hantverk +- **Konsultverksamhet** (uttryckligen, IT-konsult kvalificerar) + +I koncernredovisning enligt K3 är endast successiv vinstavräkning tillåten. + +**23.32 befarad förlust.** Kostnadsförs direkt och i sin helhet när bedömningen görs. + +### K2 kap 6 + +**Löpande räkning (6.16-6.18):** successiv vinstavräkning är **obligatorisk**. Intäktsredovisas i takt med fakturering, kostnader matchas. + +**Fastpris (6.19-6.20):** **val** mellan: +- Huvudregel: successiv vinstavräkning +- Alternativregel: färdigställandemetoden (intäkt vid leverans) + +### Skattemässig synk (IL 17 kap 23-32§§) + +Pågående arbeten skattemässigt: +- Tjänsteuppdrag till fast pris → kan tas upp enligt **färdigställandemetoden** (IL 17 kap 26§) +- Tjänsteuppdrag på löpande räkning → faktureringsmetoden eller successivt + +Många små IT-konsult-AB väljer **K2 + färdigställandemetoden** för fastprisuppdrag → senare skattedebitering + enklare bokföring. Trade-off: större volatilitet i resultat över bokslutsår. + +## Bokföringsmönster + +### Aktivering av egen utvecklartid (K3) + +``` +1010 Utvecklingsutgifter debet Aktiverat belopp + 3800 Aktiverat arbete för egen räkning kredit Aktiverat belopp + +2099 Årets resultat debet Aktiverat belopp + 2089 Fond för utvecklingsutgifter kredit Aktiverat belopp +``` + +### Aktivering av köpt programvarukomponent + +``` +1012 Balanserade utgifter för programvaror debet Anskaffningsvärde exkl. moms +2641 Ingående moms debet 25 % + 2440 Leverantörsskulder kredit Bruttobelopp +``` + +### Linjär avskrivning (5 år) + +``` +7811 Avskrivningar på balanserade utgifter debet Anskaffning / 5 + 1019 Ackumulerade avskrivningar kredit Anskaffning / 5 +``` + +Upplösning av fonden i takt med avskrivning: + +``` +2089 Fond för utvecklingsutgifter debet Anskaffning / 5 + 2091 Balanserad vinst kredit Anskaffning / 5 +``` + +### Nedskrivning vid produktnedläggning + +``` +7820 Nedskrivningar av immateriella anläggningstillgångar debet Återstående bokfört värde + 1018 Ackumulerade nedskrivningar kredit +``` + +Upplös motsvarande del av 2089. + +## Lagreferenser + +- BFNAR 2012:1 (K3) kap 18: immateriella anläggningstillgångar +- BFNAR 2016:10 (K2) kap 10: immateriella tillgångar (aktiveringsförbud i 10.4) +- ÅRL (1995:1554) 4 kap 2§: fond för utvecklingsutgifter +- ÅRL 4 kap 4§: avskrivning av immateriell anläggningstillgång +- IAS 38: internt upparbetade immateriella tillgångar (RFR 2) +- IFRS 15: intäktsredovisning från kundkontrakt +- IL (1999:1229) 17 kap 23-32§§: pågående arbeten +$gb$, + 'vertical/konsult-it', + 2, + 1 + ), + ( + 'vertical/reklambyra-marknadsforing', + 'vertical', + 'Reklambyrå & marknadsföring (SNI 73.11 / 73.12 / 70.21 / 74.10)', + $gb$Svensk bokföring och skattecompliance för reklambyråer, mediabyråer, PR-byråer och designbyråer (SNI 73.11, 73.12, 70.21, 74.10). Ladda när verifikat innehåller mediainköp, byråprovision/agency fee, royalty- eller licensavgifter, A-SINK-utbetalningar till utländska artister/influencers, sponsringsavtal, eller fakturor från Google Ads, Meta Ads, TikTok Ads med omvänd betalningsskyldighet. Distinkta arbetsflöden: principal-vs-agent-bedömning för mediainköp (brutto vs netto enligt K3 kap 23 och IFRS 15 B34-B38), omvänd betalningsskyldighet på utländska digitala annonseringstjänster (ML 2023:200 6 kap 33 § och 16 kap), royalty och licensintäkter inkl. 25 % moms på reklamalster (undantag från 6 %-satsen), A-SINK 15 % på utländska artister och gränsdragning för influencers (SFS 1991:591), samt sponsringsavdrag med dokumenterad motprestation (RÅ 2000 ref. 31, HFD 2018 ref. 55).$gb$, + ARRAY['73.11', '73.12', '70.21', '74.10']::text[], + $gb${}$gb$::jsonb, + 9800, + '.claude\skills\industry\reklambyra-marknadsforing\SKILL.md', + $gb$--- +id: vertical/reklambyra-marknadsforing +tier: vertical +title: "Reklambyrå & marknadsföring (SNI 73.11 / 73.12 / 70.21 / 74.10)" +description: > + Svensk bokföring och skattecompliance för reklambyråer, mediabyråer, PR-byråer och designbyråer (SNI 73.11, 73.12, 70.21, 74.10). Ladda när verifikat innehåller mediainköp, byråprovision/agency fee, royalty- eller licensavgifter, A-SINK-utbetalningar till utländska artister/influencers, sponsringsavtal, eller fakturor från Google Ads, Meta Ads, TikTok Ads med omvänd betalningsskyldighet. Distinkta arbetsflöden: principal-vs-agent-bedömning för mediainköp (brutto vs netto enligt K3 kap 23 och IFRS 15 B34-B38), omvänd betalningsskyldighet på utländska digitala annonseringstjänster (ML 2023:200 6 kap 33 § och 16 kap), royalty och licensintäkter inkl. 25 % moms på reklamalster (undantag från 6 %-satsen), A-SINK 15 % på utländska artister och gränsdragning för influencers (SFS 1991:591), samt sponsringsavdrag med dokumenterad motprestation (RÅ 2000 ref. 31, HFD 2018 ref. 55). +sni_prefixes: ["73.11", "73.12", "70.21", "74.10"] +trigger_signals: + text_patterns: + - "mediainköp" + - "byråprovision" + - "agency fee" + - "retainer" + - "mark-up" + - "royalty" + - "licensavgift" + - "A-SINK" + - "sponsring" + - "influencer" + - "Google Ads" + - "Meta Ads" + - "kreativ produktion" + - "kampanjproduktion" + bas_account_signals: + - "3922" + - "3921" + - "6910" + - "5970" + - "5980" + - "5420" + - "6540" + - "6559" + - "4535" + - "4531" + - "2614" + - "2645" + - "1620" + - "2450" +estimated_tokens: 9800 +version: 1 +--- + +# Reklambyrå och marknadsföring: vertikal compliance-atom + +## 1. När denna skill används + +Tillämpas när bokföringsobjektet bedriver verksamhet under SNI 73.11 (Reklambyråverksamhet), 73.12 (Mediebyråverksamhet och annonsförsäljning), 70.21 (PR och kommunikation) eller 74.10 (Specialiserad designverksamhet). Triggas också av blandade kreativa konsultverksamheter där intäkter består av en kombination av kreativt arvode, mediainköp för kunds räkning, royalty/licens och influencer-/produktionsarvoden. Vid renodlad bemanning, eventproduktion utan kreativt innehåll, eller publicistisk verksamhet (dagstidning, etermedia): använd annan vertikal. + +## 2. Typiska arbetsflödesmönster + +**Faktureringsrytm**: Tre grundmönster förekommer parallellt och måste hållas isär bokföringsmässigt. **Retainer-arvode** faktureras månatligen i förskott eller efterskott och redovisas i normalfallet som löpande räkning enligt 17 kap 26 § IL (intäkt = fakturerat belopp, frikoppling från redovisning enligt RÅ 2006 ref. 28). **Kampanj-/projektarvode till fast pris** sträcker sig ofta över 2-6 månader och kräver successiv vinstavräkning enligt K3 kap 23.18 eller färdigställandemetoden enligt K3 23.31 / K2 6.22 (juridisk person, konsultrörelse i 17 kap 23 § IL). **Media payout** följer mediets faktureringscykel (ofta månatlig per kanal) och kräver separat avstämning mot kundens kampanjbudget. + +**Kostnadsrytm**: Mediainköp dominerar volymen och måste klassificeras månadsvis som principal-inköp (vidarefaktureras med marginal) eller utlägg (genomgångspost). Frilansararvoden från svenska F-skattare bokas på 6559 Övrig konsultverksamhet (eller 6550). SaaS- och AI-prenumerationer (Adobe Creative Cloud, ChatGPT Teams, Midjourney, Figma, Claude) bokförs löpande på **5420 Programvaror**; externa AI-konsulttjänster eller API-användning på **6540 IT-tjänster**. Stockfoto- och fontlicenser bokförs på **6910 Licensavgifter och royalties**. + +**Avstämningstiming**: Pågående arbeten på löpande räkning (1620 Upparbetad men ej fakturerad intäkt / 2450 Fakturerad men ej upparbetad intäkt) stäms av månatligen. Mediainköpsavräkning mot kund görs vid kampanjavslut eller månatligen vid längre kampanjer. + +**Kollektivavtal**: Samtliga fyra SNI-koder omfattas av **Gröna avtalet**: Tjänstemannaavtalet mellan Almega Tjänsteföretagen/Medieföretagen och Unionen/Akademikerförbunden (Akavia kontaktförbund). Innevarande period **2025-05-01 till 2027-04-30**, avtalsvärde 6,4 % (löneökningar 5,5 %, arbetstidsförkortning 0,5 %, flexpension 0,4 %). Almega Kompetensföretagen tillämpas inte om byrån inte bedriver bemanningsverksamhet. Chefer omfattas av Ledaravtalet mellan Almega och Ledarna. + +## 3. BAS 2025-kontomönster + +Verifierat mot BAS 2025 (Kontoplan-BAS-2025.xlsx, bas.se). Notera att BAS 2025 har bytt terminologi från **"skattskyldighet" till "betalningsskyldighet"** på samtliga moms-konton 2614/2624/2634/2642/2647/4415-4417/4425-4427: kontonumren oförändrade men kontonamnen är nya per 2025-01-01. + +| Konto | BAS 2025-namn | Vertikalspecifik kontext | +|---|---|---| +| **1040** | Licenser | Förvärvade licenser till mjukvara/varumärken som aktiveras (ej egenupparbetade, förbjudet i K2 10.4, stopplista K3 18.5 för internt upparbetade varumärken). | +| **1620** | Upparbetad men ej fakturerad intäkt | Löpande räkning-uppdrag där arbete utförts men ej fakturerats vid balansdagen; alternativmetoden enligt K2/K3. | +| **1471** | Pågående arbeten, nedlagda kostnader | Fast pris-uppdrag (kampanjproduktion) vid färdigställandemetoden: aktiverade utgifter per uppdrag, ej kvittning mellan uppdrag (K2 6.24 efter BFNAR 2025:1). | +| **2450** | Fakturerad men ej upparbetad intäkt | Spegelbild av 1620; à conto/förskott vid retainer eller fast pris (jfr 17 kap 28 § IL). | +| **2614** | Utgående moms, omvänd betalningsskyldighet, 25 % | Google Ads (Google Ireland), Meta Ads, TikTok, LinkedIn: beräknad utgående moms vid tjänsteförvärv från utländsk beskattningsbar person enligt 6 kap 33 § + 16 kap ML 2023:200, rapporteras ruta 30. | +| **2645** | Beräknad ingående moms på förvärv från utlandet | Motpost till 2614; rapporteras ruta 48 (full avdragsrätt för momspliktig byråverksamhet). | +| **3308** | Försäljning tjänster till annat EU-land | B2B-fakturering till EU-kund med omvänd betalningsskyldighet (kundens land), ruta 39 + periodisk sammanställning. | +| **3305** | Försäljning tjänster till land utanför EU | B2B-export till t.ex. UK, US, Norge, ruta 40. | +| **3922** | Licensintäkter och royalties | **Inte 3070**: i BAS 2025 ligger royalty-intäkter på 3922 under huvudgrupp 3920 Provisionsintäkter, licensintäkter och royalties. | +| **3921** | Provisionsintäkter | Mediabyråprovision (agency commission) när byrån är agent: ren nettoredovisning. | +| **3996** | Erhållna reklambidrag | Marknadsföringsbidrag från leverantörer/varumärken. | +| **4531** | Inköp av tjänster från ett land utanför EU, 25 % moms | Kopplingskonto för rapportering ruta 22 (TikTok från icke-EU, Adobe US, OpenAI US). | +| **4535** | Inköp av tjänster från annat EU-land, 25 % | Kopplingskonto ruta 21 (Google Ireland, Meta Ireland, LinkedIn Ireland, Spotify Ireland). | +| **5420** | Programvaror | SaaS- och AI-prenumerationer (Adobe CC, ChatGPT Teams, Midjourney, Claude Pro, Figma). | +| **5970** | Film-, radio-, TV- och Internetreklam | Byråns egna mediainköp för egen marknadsföring (inte kundens kampanjer). | +| **5980** | PR, institutionell reklam och sponsring | **Sponsringsutgifter med dokumenterad motprestation**: separera avdragsgill del från eventuell gåvodel (jfr RÅ 2000 ref. 31). | +| **6071** | Representation, avdragsgill | OBS: I BAS är 6071 *avdragsgill* och 6072 *ej avdragsgill*: vanligt invertfel. Måltidsrepresentation 2025 endast moms-avdragsgill (60 kr/person ink. moms), inte inkomstskattemässigt. | +| **6072** | Representation, ej avdragsgill | Den del av sponsringspaket eller kundbjudningar som inte uppfyller motprestationskrav. | +| **6540** | IT-tjänster | Externa molntjänster, AI-API-användning (OpenAI API, Anthropic API), DevOps. | +| **6559** | Övrig konsultverksamhet | **Frilansande kreatörer med F-skatt** (copywriters, art directors, foto, motion designers). | +| **6860** | Inhyrd marknads- och försäljningspersonal | Bemanningsföretag för marknadsfunktioner. | +| **6910** | Licensavgifter och royalties | **Inte 4070**: royaltykostnader (stockfoto, fonter, musik, varumärkeslicens, royalty till upphovsman) ligger i klass 6, inte klass 4. | +| **7331** | Skattefria bilersättningar | Resor till kundpresentationer/inspelningsplatser (18,50 kr/mil 2025). | + +Konton som **inte** används för denna vertikal trots vanliga missförstånd: 1060 (Hyresrätter, tomträtter, *inte* licenser), 7610 (Utbildning, *inte* frilansare), 7690 (Övriga personalkostnader, *inte* frilansare). Frilansare hör alltid till klass 6, inte klass 7. + +## 4. Regelmässiga gränsfall + +### 4.1 Moms unik för vertikalen + +**Omvänd betalningsskyldighet på utländska digitala annonseringstjänster.** Google Ads (Google Ireland Ltd), Meta Ads (Meta Platforms Ireland Ltd), TikTok Ads (TikTok Ireland), LinkedIn Marketing Solutions (LinkedIn Ireland), X/Twitter Ads omfattas alla av huvudregel B2B i **6 kap 33 § ML 2023:200**: tjänsten är omsatt i Sverige när köparen är beskattningsbar person etablerad här. Betalningsskyldigheten övergår enligt **16 kap ML 2023:200** (motsvarar gamla 1 kap 2 § första stycket 2 ML 1994:200) till svenska köparen. Säljarens faktura ska vara utan moms och innehålla notering "Reverse charge / Omvänd betalningsskyldighet" samt svenska köparens VAT-nummer. Byrån redovisar **25 % utgående moms i ruta 30, beskattningsunderlag i ruta 21 (EU-säljare) eller 22 (icke-EU), ingående moms i ruta 48**. Nettoeffekt = 0 vid full avdragsrätt. Konton: 2614 + 2645 med motkonto 4535 (EU) eller 4531 (icke-EU). Skatteverkets vägledning: skatteverket.se/foretag/moms/sarskildamomsregler/handelmedandralander/momsreglerforutlandskaforetagare. EU-rättslig grund: art. 196 i mervärdesskattedirektivet 2006/112/EG. + +**Mediainköp: utlägg vs vidarefakturering.** Skatteverkets utlägg-doktrin (skatteverket.se/foretag/moms/sarskildamomsregler/utlaggochvidarefakturering) kräver **tre kumulativa villkor** för att mediainköp ska klassas som genomgångspost: (a) slutkunden har eget betalningsansvar mot mediet, (b) inget vinstpålägg, (c) bokförs på balanskonto, inte i resultaträkningen. Underliggande mediafaktura ska vara utställd till slutkunden (eller "c/o byrån"). Vid utlägg har byrån **ingen avdragsrätt för ingående moms**: fakturakopian ska vidareöverlämnas till slutkunden som drar av. I praktiken uppfyller typiska mediabyråmodeller sällan villkoren eftersom byrån är avtalspart mot mediet: det är då **vidarefakturering** (avdrag för ingående moms, påslag av 25 % utgående moms vid vidarefakturering) eller **kostnadskomponent** i en sammansatt byråtjänst. Beskattningsunderlag enligt 8 kap ML 2023:200. + +**Royalty och licensavgifter: moms.** Generell skattesats **25 % enligt 9 kap 2 § ML 2023:200**. Reducerad sats 6 % för vissa upphovsrättsöverlåtelser enligt 1, 4 eller 5 §§ URL i 9 kap ML 2023:200 (motsvarar gamla 7 kap 1 § tredje stycket 8 ML 1994:200): men **reklamalster är uttryckligen undantagna från 6 %-satsen**. Reklamfilm, reklamfoton, copy, layouts och kampanjmaterial som upplåts eller överlåts utlöser därför alltid 25 % moms även när royalty/licensavgift utgör ersättning. Licens (upplåtelse) och fullständig överlåtelse behandlas momsmässigt identiskt. Vid royalty till utländsk rättighetshavare: omvänd betalningsskyldighet 25 % (B2B, 6 kap 33 § ML), Sverige tar inte ut kupongskatt på royalty. + +**Influencer-marketing: moms.** Tre statusscenarier: **(1) privatperson / hobby** (omsättning ≤ 80 000 kr enligt 18 kap 2 § ML 2023:200): ingen moms, byrån gör skatteavdrag 30 % och betalar arbetsgivaravgifter om influencern saknar F-skatt; **(2) F-skattad / momsregistrerad svensk**: 25 % moms på marknadsföringstjänst, avdragsgill för byrån; **(3) utländsk beskattningsbar person**: omvänd betalningsskyldighet 25 % enligt 16 kap ML 2023:200. **Barter (varor mot exponering)** utgör byte = två omsättningar enligt Skatteverkets generella tolkning: företaget anses ha sålt produkten till marknadsvärde med 25 % moms, influencern har sålt marknadsföringstjänst till samma värde. Skatteverket har bedrivit specialgranskning av branschen 2024-2025; portal skatteverket.se/influencer. Inget enskilt numrerat ställningstagande dedikerat enbart till "influencer-moms" har publicerats: frågan styrs av generella momsprinciper. + +**Sponsring och moms.** Ingående moms avdragsgill enligt **13 kap 6 § ML 2023:200** endast i den utsträckning utgiften hänförs till momspliktig verksamhet och uppfyller följande **kumulativa villkor** (Skatteverkets ställningstagande dnr 130 702489-04/113, **2005-06-27**, fortfarande gällande per Rättslig vägledning edition 2025.3): (i) dokumenterad motprestation i skriftligt sponsoravtal, (ii) motprestationen värderad till marknadsvärde, (iii) motprestationen faktiskt utnyttjad, (iv) varje del av sponsringspaketet bedöms separat (reklamskyltar = avdragsgillt; biljetter/representation = begränsat; rena gåvor = inget avdrag), (v) ren goodwill-/imagesponsring utan motprestation = gåva = inget momsavdrag. Kompletterande skrivelse om kultursponsring: dnr 131 476491-09/111, 2009-05-20. + +**OSS: sällan tillämpligt.** OSS enligt 22 kap ML 2023:200 aktualiseras endast om byrån säljer digitala tjänster B2C till privatpersoner i andra EU-länder (t.ex. egna kurser, mallpaket, prenumerationer) och överskrider tröskeln **99 680 kr (10 000 EUR) per kalenderår sammanlagt**. Typiska B2B-byråtjänster är inte OSS-relevanta. **Flagga vid produktiserade B2C-erbjudanden**. + +### 4.2 Bokföring unik för vertikalen + +**Principal vs agent: K3 kap 23 / IFRS 15 B34-B38.** Avgörande för om mediainköp ska bruttoredovisas (inköp + intäkt) eller nettoredovisas (endast provision = 3921). **K3 punkt 23.2**: endast inflöde "för egen räkning" är intäkt. Vid agentrelation redovisas endast förmedlingsersättning. **IFRS 15 B37-indikatorer på huvudmannaskap** (relevant även som vägledning under K3 och vid RFR 2): (1) primärt ansvar mot kund för leveransen, (2) lager-/avbokningsrisk på medieutrymmet, (3) prissättningsfrihet, (4) kreditrisk mot kund, (5) substituerings-/kontrollmöjlighet. **Mediabyrå är principal** vid eget inköp i eget namn med påslag/marginal, egen kreditrisk och prissättningsfrihet → bruttoredovisning. **Agent** vid fast byråprovision, inköp i kundens namn eller utan kredit-/prissättningsrisk → endast provision intäktsredovisas (3921). Felklassificering påverkar omsättning, momsbas och ratios väsentligt. + +**K2 (BFNAR 2016:10): förbud mot egenupparbetade immateriella tillgångar.** Punkt **10.4**: byrå som tillämpar K2 får **aldrig** redovisa internt upparbetade varumärken, kampanjkoncept, kreativa idéer, varumärkesstrategier, logotyper eller säljdrivande hemsidor som tillgång: alltid direkt kostnad. Smitto-regel 10.4 andra stycket: förvärvad immateriell tillgång som är avsedd att utvecklas vidare blir egenupparbetad och får inte aktiveras. + +**K3 (BFNAR 2012:1): valbar aktivering men stopplista 18.5.** Företaget väljer mellan kostnadsföringsmodellen (18.7) och aktiveringsmodellen vid sex kumulativa kriterier (18.12). **Stopplista 18.5** förbjuder dock alltid aktivering av: internt upparbetade varumärken, utgivningsrätter, kundregister och etableringsutgifter. Vid aktivering krävs avsättning till fond för utvecklingsutgifter enligt **4 kap 2 § andra stycket + 4 kap 8 § ÅRL** (1995:1554). I praktiken aktiverar reklam-/mediabyråer sällan något: kreativa koncept för kund hanteras som tjänsteuppdrag (se nedan), och eget kampanjmaterial faller på stopplistan eller saknar tillförlitligt mätbara framtida ekonomiska fördelar. + +**Pågående arbeten: löpande räkning vs fast pris.** Definitionen i **17 kap 25 § IL** + K2 6.13: löpande räkning = ersättning grundas "uteslutande eller så gott som uteslutande" på på-förhand-bestämt arvode per tidsenhet, faktisk tidsåtgång och faktiska utgifter. Annars fast pris. **Reklam-/mediabyrå räknas som konsultrörelse enligt 17 kap 23 § IL** vilket aktiverar särskilda regler. **17 kap 26 § IL** (löpande räkning): värdet behöver inte tas upp som tillgång; intäkt = fakturerat under beskattningsåret. Frikoppling redovisning-beskattning bekräftad i **RÅ 2006 ref. 28** och Skatterättsnämnden 2010. **17 kap 27 § IL** (fast pris): lägst av anskaffningsvärdet och nettoförsäljningsvärdet, ej slutredovisade uppdrag. **17 kap 28 § IL**: förskott/à conto vid fast pris bokförs som skuld (2450), inte intäkt. Bokföringsmässig huvudregel = successiv vinstavräkning (K3 23.18; K2 6.16); alternativregel i K2 6.22 / K3 23.31 tillåter juridisk person använda färdigställandemetoden konsekvent. **K2 6.24 efter BFNAR 2025:1**: kvittning förbjuden mellan olika uppdrag: uppdrag med positivt saldo redovisas som tillgång, negativt som skuld, separat per uppdrag. Srf U 14 (2020-08-25) reglerar bruttoredovisning; Srf U 15 definierar "väsentligen fullgjort" från kundaccept-/realisationsperspektiv. + +**Kommissionärsförhållanden.** Civilrätten finns i **Kommissionslag (2009:865)**: gamla Lag (1914:45) om kommission **upphävdes 2009-10-01** (ofta felciterat i äldre handböcker). Mediabyrå som köper annonsutrymme i eget namn för annonsörens räkning kan vara handelskommissionär enligt 1 §; tredje man (mediet) får enligt 24 § endast krav mot kommissionären, inte kommittenten. Skatterättsligt är **IL 36 kap "Kommissionärsförhållanden"** ett separat konstrukt med sex kumulativa villkor i 36 kap 3 § (skriftligt avtal, uteslutande för kommittentens räkning, samma räkenskapsår, koncernbidragsrätt enligt 35 kap m.m.): sammanfaller inte med civilrättslig kommission. Momsmässigt har den tidigare möjligheten att flytta momsskyldighet (gamla 6 kap 7 § GML) tagits bort i ML 2023:200; kommissionären är alltid betalningsskyldig för utgående moms, med momsgrupp som möjlig lösning. + +**RFR 2 / IFRS 15**: Om byrån är dotterbolag i noterad koncern tillämpas IFRS 15 direkt: principal-/agent-bedömning sker enligt B34-B38, intäktsredovisning enligt 5-stegsmodellen, performance obligation-identifiering kritisk vid kombinerade kreativa + media-uppdrag. + +### 4.3 Sektorlagar + +**Upphovsrättslag (1960:729, URL).** Sverige saknar **uttrycklig presumtionsregel** för reklambyrå-uppdrag: 31 § URL gäller förlagsavtal, inte reklam (vanlig felcitering). Förhållandet regleras genom 27-28 §§ URL (avtalsfrihet om överlåtelse, begränsning av rätt att ändra/vidareöverlåta), branschpraxis enligt **NJA 2010 s. 559** (avtalad användning på produktförpackning utvidgas till marknadsföring "på vedertaget sätt") och tumregeln i **AD 2002 nr 87** (arbetsgivaren får inom sitt verksamhetsområde utnyttja verk skapade av anställd som ett led i arbetsuppgifter). **40 a § URL** är den enda kodifierade arbetstagar-presumtionen och gäller endast datorprogram. **39 § URL** stadgar filmpresumtion. **DSM-direktivet (EU) 2019/790** implementerat genom **Lag (2022:1712)**, i kraft **2023-01-01**, infogade bl.a. 15 a-15 c §§ URL (TDM-undantag relevant för AI-träning, med opt-out på "lämpligt sätt"), 29 § URL (skälig ersättning + bästsäljarklausul), 29 d-29 e §§ (hävningsrätt utom filmverk), 48 b-48 d §§ (presspublikationsrätt, art. 15 DSM) och 52 i-52 u §§ (OCSSP-ansvar, art. 17 DSM). + +**A-SINK: Lag (1991:591) om särskild inkomstskatt för utomlands bosatta artister m.fl.** Skattesats **15 % definitiv enligt 9 § A-SINK**, oförändrad 2025-2026. "Artistisk verksamhet" definieras i 3 § som **personligt framträdande inför publik eller vid ljud-/bildupptagning med sång, musik, dans, teater, cirkus eller liknande**. Scenpersonal, tekniska biträden, regissörer och koreografer omfattas inte: för dem gäller SINK. **Influencers**: ingen publicerad Skatteverkets ställningstagande placerar influencers under A-SINK; rådande praxis behandlar dem som näringsverksamhet (svensk F-skatt) eller SINK om utomlands bosatta: eftersom social-media-innehåll inte är personligt framträdande inför publik i traditionell mening. **Voice actors/dubbning**: troligen A-SINK (ljud-/bildupptagning inom teater/liknande). **Modeller**: SINK, inte A-SINK. Tax treaty (OECD modellavtal art. 17) ger normalt Sverige källskatterätt för artister: A-SINK består. Betalaren (byrån) gör 15 %-avdrag vid utbetalning och rapporterar på **individnivå i arbetsgivardeklarationen (AGI)** månadsvis enligt skatteförfarandelagen (2011:1244). + +**SINK: Lag (1991:586) om särskild inkomstskatt för utomlands bosatta.** Skattesats **25 % under 2025**, **22,5 % från 2026-01-01** (Lag 2025:1355), **20 % från 2027-01-01** (Lag 2025:1356). Tillämpas på utländska kreativa konsulter som inte är artister (copywriters, regissörer, art directors, models, influencers utan personligt scenframträdande). Kräver SINK-beslut från Skatteverket per arbetsgivare och inkomstår. + +**EU AI Act: förordning (EU) 2024/1689.** I kraft 2024-08-01. Tidsplan: förbjudna AI-praktiker + AI-litteracitetskrav (art. 4) gäller från **2025-02-02**; GPAI-skyldigheter från **2025-08-02**; full tillämpning **2026-08-02**; högrisk-AI i reglerade produkter från 2027-08-02 (justerat genom AI Omnibus, politisk överenskommelse 2026-05-07). **Operativ relevans för byråer**: art. 50 transparens: deployers av GPAI för deepfake/syntetiskt innehåll måste märka AI-genererat material från 2026-08-02; art. 4 kräver personalutbildning sedan 2025-02-02; loggning av GPAI-output i kampanjer. + +**Kontrolluppgifter.** Royalty till juridisk person eller F-skattad enskild näringsidkare: **KU70 (SKV 2316) "Näringsbidrag och royalty"**, deadline **31 januari året efter inkomståret**. Royalty till privatperson som engångsersättning för konstnärligt arbete → KU10 (inkomst av tjänst). Royalty till utomlands bosatt utan svensk beskattning → KU70 med utländskt TIN. A-SINK rapporteras **inte** på separat KU utan på individnivå i månatlig AGI. + +### 4.4 Praxis och Skatteverkets ställningstaganden + +**RÅ 2000 ref. 31 I (Procordia/Operan)**: grundbulten för sponsring. Aktiebolagspresumtion under 16 kap 1 § IL gäller, men gåvoförbudet i 9 kap 2 § andra stycket IL är lex specialis. Test: krav på **direkt motprestation** eller **stark anknytning** mellan sponsorns och den sponsrades verksamheter (indirekt omkostnad). Utfall: skönsmässig uppdelning, ca hälften avdragsgillt. **RÅ 2000 ref. 31 II (Falcon/Pilgrimsfalken)**: full avdragsrätt vid stark verksamhetsanknytning (falksymbol som varumärke sedan 1896). + +**HFD 2018 ref. 55 (Arla Foods, klimatkompensation)**: **inte** HFD 2018 ref. 11 (vanlig felcitering). HFD biföll Arlas avdrag för ~5,8 MSEK i klimatkompensation 2013 eftersom utgifterna specifikt kompenserade utsläpp från bolagets ekologiska produkter: klassad som **marknadsföringskostnad enligt 16 kap 1 § IL**, inte gåva. Åtskild från **HFD 2014 ref. 62 (Saltå Kvarn)** där generell trädplantering i Uganda saknade motprestation och direkt anknytning. + +**Kammarrätten i Göteborg, dom december 2024**: bolag medgavs avdrag för sponsring av Frölunda HC och Göteborgsoperan; Skatteverkets krav på dokumenterat datum och person för biljettnyttjande underkändes; Skatteverket kan inte kräva mer än motprestationens marknadsvärde med skäligt underlag. + +**Skatteverkets ställningstagande dnr 130 702489-04/113, 2005-06-27** (Riktlinjer för avdragsrätt för sponsring): fortfarande gällande tolkningsstöd per Rättslig vägledning edition 2025.3. Kompletterande skrivelse om kultursponsring dnr 131 476491-09/111, 2009-05-20. + +**SOU 2026:5 "Utvidgad avdragsrätt för sponsring m.m."** lämnades 2026-01-19. Förslag om ny **16 kap 11 § IL** som tillåter avdrag för utgifter "som kan antas få betydelse för näringsverksamhetens särskilda eller allmänna anseende ... om utgiften är kommersiellt betingad": föreslås gälla från **2027-01-01**. **Inte gällande rätt 2026-05**: flagga för bevakning. + +## 5. Tre felmönster med högst frekvens + +**Felmönster 1: Mediainköp bruttoredovisat när byrån är agent.** Reklambyrå med fast byråprovision på 5 % bokför hela mediainköpet (t.ex. 2 MSEK för en kampanj hos Bonnier) på 4-konto med motsvarande 3-konto-intäkt, vilket uppblåser omsättning, momsbas och resultatmått. **Rätt mönster**: när byrån saknar prissättningsfrihet, lager-/avbokningsrisk och primärt ansvar mot kunden för medieleveransen är den agent enligt K3 punkt 23.2 och IFRS 15 B37: endast provisionen (100 000 kr) intäktsredovisas på 3921, mediakostnaden hanteras som genomgångspost eller utlägg om Skatteverkets tre kriterier är uppfyllda (faktura ställd till slutkund, inget påslag, balanskonto). Lagrum: K3 punkt 23.2; IFRS 15 B34-B38; Skatteverkets utlägg-vägledning; 5 kap + 8 kap ML 2023:200. + +**Felmönster 2: Google Ads/Meta Ads-fakturor bokförda utan omvänd betalningsskyldighet.** Faktura från Google Ireland på 50 000 kr bokförs som inhemsk kostnad utan momsberäkning, eller med felaktig svensk 25 % moms som dras av: leder till underrapportering av utgående moms i ruta 30 och felaktig avdragspost. **Rätt mönster**: bokföring på 4535 (motkonto 2440 leverantörsskuld), beräkning av 12 500 kr utgående moms 2614 (ruta 21 beskattningsunderlag, ruta 30 utgående moms) och motsvarande ingående moms 2645 (ruta 48). Säljarens faktura ska visa "Reverse charge" och svenska byråns VAT-nummer; saknas det = begär korrigerad faktura. Lagrum: 6 kap 33 § + 16 kap ML 2023:200; mervärdesskattedirektivet art. 196. + +**Felmönster 3: Sponsringsavdrag taget utan dokumenterad motprestation.** Byrå sponsrar idrottsklubb med 200 000 kr och bokför hela beloppet på 5980 med 25 % momsavdrag, utan skriftligt sponsoravtal som specificerar och värderar motprestationer (reklamskyltar, biljetter, exponering). Vid revision underkänns avdraget helt eller delvis och klassas som gåva enligt 9 kap 2 § andra stycket IL: både inkomstskatt- och momsavdrag återförs med skattetillägg. **Rätt mönster**: skriftligt sponsoravtal med specificerad motprestation, marknadsvärdering per komponent (jämförelse med reklamprislista, lokalhyra, biljettpris), separat hantering av eventuell representations- eller gåvodel (6072), dokumentation av faktiskt utnyttjande. Lagrum: 16 kap 1 § IL; 9 kap 2 § andra stycket IL; 13 kap 6 § ML 2023:200; Skatteverkets dnr 130 702489-04/113 (2005-06-27); RÅ 2000 ref. 31; HFD 2018 ref. 55. + +## 6. Öppna frågor: flaggas för manuell granskning + +**AI-genererat innehåll och upphovsrätt 2025-2026**: Inget svenskt PMD/PMÖD-avgörande har publicerats om upphovsrättsligt skydd för rent AI-genererade verk per 2026-05. Konsensus följer EU-praxis (Infopaq, Painer, Cofemel) att verkshöjd kräver mänsklig kreativ insats; AI-assisterade verk kan skyddas vid "icke obefintlig kreativ medverkan med direkt koppling till slutresultatet". Avtalsklausuler bör explicit reglera (a) AI-användning och disclosure, (b) garanti mot upphovsrättsintrång från träningsdata, (c) ägarskap av AI-genererade element, (d) TDM-opt-out enligt 15 a § andra stycket URL, (e) art. 50 AI Act-märkning från 2026-08-02. Pendant EU-domstolens mål **C-250/25** (Google/Gemini och presspublikationsrätt) väntas hösten 2026 och kan påverka 15 a § URL-tolkningen. + +**A-SINK-gränsdragning för influencers**: Skatteverket har inte publicerat numrerat ställningstagande som placerar influencers under A-SINK. Specialgranskning 2024-2025 har inte resulterat i ny lagstiftning. Gränsdragningen mellan A-SINK (15 %, artister med personligt framträdande) och SINK (22,5 % från 2026) för utländska influencers är inte slutligt klarlagd: försiktighetsprincipen: behandla som SINK om aktiviteten inte involverar personligt scenframträdande inför publik. + +**OSS-tillämpning på hybrida tjänster**: När byrån paketerar kreativa tjänster med digitala leveranser till privatpersoner i EU (t.ex. masterclass-serie, mallpaket, prenumeration) är klassificering som "elektronisk tjänst" vs "konsulttjänst" inte alltid uppenbar. Skatteverkets vägledning ger inte fullständig praxis för hybrid B2C-byråverksamhet. + +**Sponsringsreformen 2027**: SOU 2026:5 föreslår uttrycklig avdragsregel i ny 16 kap 11 § IL från 2027-01-01. Övergångsperiod och retroaktivitet ännu inte beslutat. Bevaka prop. och riksdagsbehandling under 2026. + +**BAS-utvecklingen**: BAS 2025 har bytt terminologi "skattskyldighet" → "betalningsskyldighet" på alla momskonton (2614, 2624, 2634, 2642, 2647, 4415-4417, 4425-4427) med oförändrade kontonummer. Bevaka BAS 2026-utgåvan för ytterligare ändringar relevanta för digitala annonsörer och AI-tjänster. + +--- + +## Overflow-filer (planerad utbyggnad) + +Token-budget för denna SKILL.md är hållen under 15k. Föreslagna overflow-ämnen för djupare detaljer (inga av dessa referensfiler är skapade ännu): + +- **principal-vs-agent-mediainkop**: Beslutsmatris med IFRS 15 B37-indikatorer, K3 23.2-tillämpning, exempelposteringar för principal/agent/utlägg, mall för principal-/agent-analys per kund. +- **a-sink-influencer-utlandsbetalningar**: A-SINK vs SINK-beslut, AGI-rapportering, skatteavtal (OECD art. 17), formulärflöden (SKV 520, SINK-ansökan), KU70 till utländska mottagare. +- **sponsring-motprestationsbedomning**: Mall för sponsoravtal med marknadsvärdering per komponent, checklista för dokumentation, fullständig praxisgenomgång (RÅ 1976 ref. 127 I/II, RÅ 2000 ref. 31 I/II, HFD 2014 ref. 62, HFD 2018 ref. 55, KR Göteborg 2024-12), SOU 2026:5-bevakning. +- **url-upphovsratt-byraavtal**: Branschmallar för upphovsrätts-överlåtelse i byrå-kundavtal, NJA 2010 s. 559-tolkning, DSM-direktivets §§ i URL (15 a-15 c, 29, 29 d-e, 48 b-d, 52 i-u), AD 2002 nr 87. +- **ai-content-och-ai-act-byraer**: EU AI Act-tidslinje (art. 4, art. 50), TDM-opt-out under 15 a § URL, AI-klausulbibliotek för byråavtal, bokföring av AI-prenumerationer och API-konsumtion (5420 vs 6540), C-250/25-bevakning. +- **pagaende-arbeten-konsultrorelse**: K2 6.13-6.24 och K3 23.18-23.37 jämförelse, IL 17 kap 23-32 §§, RÅ 2006 ref. 28 frikoppling, Srf U 14 + U 15, BFNAR 2025:1-kvittningsförbud, exempelflöden för retainer, kampanj fast pris och blandade uppdrag. +$gb$, + NULL, + 3, + 1 + ), + ( + 'vertical/software-saas-ai', + 'vertical', + 'Software, SaaS & AI-produktbolag (SNI 58.21-63.12)', + $gb$Swedish bookkeeping for software, SaaS and AI product companies (SNI 58.21, 58.29, 62.01, 62.03, 63.11, 63.12). Use whenever a Swedish AB or EF has recurring digital product revenue, US/EU cloud and LLM vendors in the supplier ledger (AWS, OpenAI, Anthropic, Stripe, GitHub), runs personaloptioner or KPO programs, books förutbetalda intäkter for annual prepay (2979), capitalizes development costs under K3 chapter 18, files OSS-deklaration, or operates under a US Delaware parent with a Swedish opco. Trigger on indirect cues: GL containing 1010 plus 2089 plus 4531/4535, 3:12-reformen 2026, K2-vs-K3 choice for SaaS, omvänd betalningsskyldighet on API costs, EU AI Act conformity, transfer pricing for cost-plus dev shops. Distinct from konsult-it (hourly billing): prefer this skill when subscription/usage-based digital product revenue dominates.$gb$, + ARRAY['58.21', '58.29', '62.01', '62.03', '63.11', '63.12']::text[], + $gb${}$gb$::jsonb, + 11500, + '.claude\skills\industry\software-saas-ai\SKILL.md', + $gb$--- +id: vertical/software-saas-ai +tier: vertical +title: "Software, SaaS & AI-produktbolag (SNI 58.21-63.12)" +description: > + Swedish bookkeeping for software, SaaS and AI product companies (SNI 58.21, 58.29, 62.01, 62.03, 63.11, 63.12). Use whenever a Swedish AB or EF has recurring digital product revenue, US/EU cloud and LLM vendors in the supplier ledger (AWS, OpenAI, Anthropic, Stripe, GitHub), runs personaloptioner or KPO programs, books förutbetalda intäkter for annual prepay (2979), capitalizes development costs under K3 chapter 18, files OSS-deklaration, or operates under a US Delaware parent with a Swedish opco. Trigger on indirect cues: GL containing 1010 plus 2089 plus 4531/4535, 3:12-reformen 2026, K2-vs-K3 choice for SaaS, omvänd betalningsskyldighet on API costs, EU AI Act conformity, transfer pricing for cost-plus dev shops. Distinct from konsult-it (hourly billing): prefer this skill when subscription/usage-based digital product revenue dominates. +sni_prefixes: ["58.21", "58.29", "62.01", "62.03", "63.11", "63.12"] +trigger_signals: + text_patterns: + - "Stripe Payments" + - "AWS EMEA SARL" + - "Google Cloud EMEA" + - "OpenAI" + - "Anthropic" + - "Vercel" + - "GitHub" + - "MRR" + - "ARR" + - "OSS-deklaration" + - "personaloption" + - "konvertibel" + - "SAFE" + bas_account_signals: + - "1010" + - "1018" + - "2089" + - "2614" + - "2645" + - "2647" + - "2979" + - "3305" + - "3308" + - "4531" + - "4535" + - "6540" + - "6570" +estimated_tokens: 11500 +version: 1 +--- + +# software-saas-ai + +## 1. När detta atom aktiveras + +Bolag med SNI 58.21/58.29/62.01/62.03/63.11/63.12 vars huvudsakliga intäkt är återkommande digital produktförsäljning (SaaS, mjukvara, API, AI-applikation). Trigga också om GL innehåller 1010 + 2089 + (4531 eller 4535) + 2979 i kombination, eller om leverantörsregistret matchar AWS EMEA SARL, Google Cloud EMEA, OpenAI, Anthropic, Stripe, Vercel, GitHub. Ej för IT-konsulttjänst på timme: använd konsult-it. + +## 2. Arbetsflödesmönster + +**Faktureringskadens.** Dominerande mönster: månatlig eller årlig prenumeration förskottsfakturerad, ofta via Stripe/Adyen/Paddle. Sekundärt: usage-/seat-baserad efterskottsfakturering. Reseller- och marketplace-flöden (Apple App Store, Google Play, AWS Marketplace) kräver särskild momsanalys: plattformen är presumerad säljare till slutkund per Art. 9a EU-genomförandeförordning (EU) 282/2011, utvecklaren tillhandahåller B2B-tjänst till plattformen. + +**Kostnadsrytm.** Molnberäkning, API och SaaS-prenumerationer dominerar OPEX och utgör typiskt 25-50% av kostnadsmassan. Övervägande del USD/EUR-fakturerat med valutaexponering. Månadsslut kräver upplupna kostnader på AWS/OpenAI/Anthropic eftersom invoices typiskt anländer 3-10 dagar in i efterföljande månad. + +**Avstämning.** Stripe payout-avstämning kritisk: Stripe Reporting till bankinflöde mot 1930, Stripe-avgift mot 6570, FX-effekt mot 7960/8330. Periodisering av förutbetalda intäkter månadsvis vid bokslut och i månadsbokslut för ARR/MRR-rapportering. + +**Lönekadens och kollektivavtal.** Tjänstemannaavtal dominerar: **TechSverige + Unionen** (tidigare IT&Telekomföretagen), **TechSverige + Sveriges Ingenjörer/Akavia/Ledarna**. IF Metall-avtal endast vid hårdvaruproduktion. Personaloptioner och bonus-avtal komplicerar lönerapportering: bruttolöneväxling, förmånsbeskattning vid icke-kvalificerade optioner (se §4.5). + +## 3. BAS 2025 kontomönster + +Verifierat mot BAS 2025 officiell kontoplan (bas.se/kontoplaner). Avvikelser från vanliga felaktiga referenser flaggade i §6. + +| Konto | Officiellt namn (BAS 2025) | Branschspecifik användning | +|---|---|---| +| **1010** | Utvecklingsutgifter | Aktiverade egenutvecklade utvecklingsutgifter under K3 kap 18. Inte 1020 (= Koncessioner m.m.) | +| **1011** | Balanserade utgifter för forskning och utveckling | Vid uppdelning forskning/utveckling per K3 18.8 | +| **1012** | Balanserade utgifter för programvaror | Specifikt för aktiverad mjukvara | +| **1018** | Ackumulerade avskrivningar på balanserade utgifter | Inte 1029 | +| **2089** | Fond för utvecklingsutgifter [Ej K2] | Bundet EK, krävs vid aktivering i AB per ÅRL 4 kap 2 § | +| **2440** | Leverantörsskulder | Stora månatliga skulder mot AWS, OpenAI, Anthropic, GitHub typiska | +| **2614** | Utgående moms omvänd betalningsskyldighet 25% | Beräknad utg moms på inköp av API/moln från utlandet | +| **2645** | Beräknad ingående moms på förvärv från utlandet | Speglar 2614/2617 vid full avdragsrätt | +| **2647** | Ingående moms omvänd betalningsskyldighet, varor och tjänster i Sverige | Vid byggtjänst, ej API-import | +| **2979** | Övriga förutbetalda intäkter | Förskottsfakturerade årsprenumerationer. Inte 2972 (= förutbetalda medlemsavgifter) | +| **3001** | Försäljning inom Sverige, 25% moms | SaaS-intäkt B2B/B2C inom Sverige. Inte 3041 (existerar ej) | +| **3305** | Försäljning tjänster till land utanför EU | Export digitala tjänster, ingen svensk moms (ML 2023:200 6 kap 33 §) | +| **3308** | Försäljning tjänster till annat EU-land | B2B EU, omvänd hos köparen, rapporteras i periodisk sammanställning | +| **4531** | Inköp av tjänster från annat EU-land, 25% | AWS EMEA SARL (LU), Google Cloud EMEA (IE), Azure Ireland | +| **4535** | Inköp av tjänster från land utanför EU, 25% | OpenAI, Anthropic, Lambda Labs, RunPod, Modal, Cohere, Together AI | +| **4545** | Import av varor 25% | Endast vid hårdvaruimport (GPU). Inte 4541 (existerar ej) | +| **5410** | Förbrukningsinventarier | Datorer under halvt PBB, periferi | +| **6230** | Datakommunikation | Fiber, internet | +| **6540** | IT-tjänster | Löpande SaaS-verktyg, hosting under brytpunkt för aktivering | +| **6570** | Bankkostnader | Stripe-, Adyen-, Paddle-avgifter. Ej moms (finansiell tjänst, ML 10 kap 3 §) | +| **7630/7631/7632** | Personalrepresentation (avdragsgill/ej avdragsgill) | Teamoffsites, kickoff | +| **7699** | Övriga personalkostnader | Personaloptionskostnad K3 26.5a vid kontantreglerade. BAS 2025 har inget standardkonto för aktierelaterade ersättningar; använd 7690-gruppen + tilläggsupplysning | + +**Terminologisk anmärkning.** BAS 2025 har bytt "omvänd skattskyldighet" till "omvänd betalningsskyldighet" till följd av nya mervärdesskattelagen (2023:200). Använd den nya termen i kontotexter och fakturanoteringar. + +## 4. Regulatoriska kantfall + +### 4.1 Intäktsredovisning för prenumerationer + +**Lagrum:** ÅRL 2 kap 4 § (periodiseringsprincipen); BFNAR 2016:10 (K2) p 6.11 + 6.13 + 6.14; BFNAR 2012:1 (K3) kap 23, särskilt 23.2, 23.8, 23.13, 23.17. K3 är **inte** harmoniserat med IFRS 15; BFN:s 2025 års översyn (BFNAR 2025:3, ikraft för räkenskapsår som inleds efter 2025-12-31) behåller RR 11/IAS 18-modellen. + +**Standardiserad SaaS-tjänst är inte tjänsteuppdrag** enligt K3 23.8 utan periodiseras enligt grundprincipen. Förskottsfakturerat årsabonnemang bokas på **2979** vid fakturadag och resolveras månadsvis till **3001/3305/3308**. Löpande räkning under K3 ger huvudregel 23.17 (successiv vinstavräkning). K2 6.13 är huvudregel, K2 6.14 alternativregeln (intäkt i takt med fakturering) får användas konsekvent. + +**Setup/onboarding-fees.** Ej separat reglerat i K3/K2. Bedömning per K3 23.13 (avtalsdelar). Om setup inte ger fristående värde till kund: **periodisera över avtalstid eller förväntad kundlivslängd**. Fristående leverans: engångsintäkt vid leverans. + +**Usage-/metered billing.** Intäkt i takt med faktisk förbrukning per K3 23.17 / K2 6.13. + +**Free trials/freemium.** Ingen intäktsbokning före betalningsförpliktelse uppstår (K3 23.2 + 2.18 grundkriterier). Konverteringstid till betald plan utlöser periodiseringsstart. + +**Reseller-avtal principal vs agent.** Bruttoredovisningsprincipen K3 23.2 + 2.5-2.6. Provisionsbaserat uppdrag K2 6.9: netto. Bedömning sker enligt grundprinciper, ej IFRS 15 control-test. + +**Skatteverket vägledning:** rattsligvagledning, Inkomstskatt, Näringsverksamhet, Uppdrag på löpande räkning resp. fast pris (https://www4.skatteverket.se/rattsligvagledning/edition/2023.16/324730.html). + +### 4.2 Aktivering av egenutvecklad mjukvara + +**K3 BFNAR 2012:1 kap 18** tillåter aktivering om **samtliga sex kriterier i 18.12** är uppfyllda (tekniskt möjligt, avsikt, förmåga, sannolika ekonomiska fördelar, resurser, tillförlitlig utgiftsberäkning). Forskningsfas 18.9 är obligatorisk kostnadsföring. Val mellan kostnadsförings- och aktiveringsmodell ska göras konsekvent på samtliga internt upparbetade immateriella tillgångar (18.7). Pågående tillgångar nedskrivningsprövas årligen oavsett indikation (18.24). + +**K2 BFNAR 2016:10 p 10.4** (inte 5.5 §) innehåller **absolut förbud** mot aktivering av egenupparbetade immateriella anläggningstillgångar. Utgifterna kostnadsförs när de uppkommer. Endast förvärvade immateriella tillgångar får aktiveras under K2. + +**Fond för utvecklingsutgifter.** ÅRL 4 kap 2 §: aktiebolag som aktiverar måste föra över motsvarande belopp från fritt EK till **fond för utvecklingsutgifter** (bundet EK, konto 2089). ÅRL 4 kap 7 §: fonden får tas i anspråk endast för fondemission/nyemission eller förlusttäckning. ÅRL 4 kap 8 §: fonden minskas vid avskrivning/nedskrivning/avyttring med överföring till fritt EK. + +**Avskrivningstid.** ÅRL 4 kap 4 § 2 st: om nyttjandeperiod inte kan fastställas tillförlitligt antas 5 år. I praktiken används 3-5 år för mjukvara. + +**Strategiskt K2 vs K3-val.** Bolag med betydande utvecklingsutgifter och optionsprogram bör välja K3 från start. **Kritisk förändring 2026:** Nya K2 1.1A g (BFNAR 2025:1, ikraft för räkenskapsår som inleds efter 2025-12-31) förbjuder K2 för bolag som förvärvat varor/tjänster mot aktierelaterade ersättningar under räkenskapsåret. SaaS-startups med personaloptioner kan inte längre välja K2. + +**Stoppregel K3 35.16/35.25.** Kostnadsförda utvecklingsutgifter i tidigare räkenskapsår får aldrig retroaktivt aktiveras vid modellbyte. + +Skatteverket: https://www4.skatteverket.se/rattsligvagledning/edition/2025.2/324718.html. + +### 4.3 Moms på digitala tjänster (ML 2023:200) + +**Ny mervärdesskattelag ikraft 2023-07-01** (SFS 2023:200) ersatte ML (1994:200). Strukturen följer EU:s momsdirektiv. "Skattskyldig" har bytts till "beskattningsbar person"/"betalningsskyldig". Äldre referenser till "5 kap ML" är obsoleta. + +| Transaktion | Ny ML 2023:200 | Hantering | +|---|---|---| +| B2B-tjänst inom EU (huvudregel) | **6 kap 33 §** | Omsatt i köparens land, omvänd betalningsskyldighet hos köparen. Krav VIES-validering av köparens VAT-nr; sparat verifikat. Periodisk sammanställning. Faktura: "reverse charge". Konto 3308 | +| B2B-tjänst utanför EU | **6 kap 33 §** | Omsatt utomlands, ej svensk moms. Konto 3305. Faktura: "Outside scope of Swedish VAT" | +| B2C digitala/elektroniska tjänster inom EU | **6 kap 56-57 §§**, tröskel 99 680 kr (10 000 EUR) i **6 kap 62-65 §§** | OSS-deklaration via Skatteverket (unionsordningen), destinationslandets momssats, **22 kap ML** | +| B2C tjänster utanför EU | **6 kap 58-59 §§** | Utanför svensk moms | + +**OSS-valutaomräkning.** Beloppen redovisas i EUR. Vid annan transaktionsvaluta används **ECB-kursen för den SISTA dagen av redovisningsperioden** (kvartalet), eller nästa publicerade kurs om ECB inte publicerar den dagen. Detta följer EU:s momsdirektiv art. 366. + +**App store / marketplace facilitator.** Skatteverkets tidigare ställningstagande 2014-12-04 dnr 131 664810-14/111 **upphävdes 2022-12-19 (dnr 8-2059749)** med motivering att EU-kommissionens förklarande anmärkningar och Skatteverkets rättsliga vägledning täcker frågan. Materiella regeln **kvarstår** via direkt tillämplig **art. 9a EU-genomförandeförordning 282/2011**: plattform (Apple App Store, Google Play) är presumerad säljare till slutkund om plattformen (a) godkänner debiteringen, (b) godkänner leveransen, eller (c) sätter allmänna villkor. Utvecklaren tillhandahåller B2B-tjänst till plattformen och tillämpar omvänd betalningsskyldighet (Apple Distribution Intl, IE-VAT; Google Commerce Ltd, IE-VAT), konto 3308 plus periodisk sammanställning. Marketplace facilitator för **varor** via elektroniskt gränssnitt: ML 2023:200 5 kap 4-6 §§. + +Skatteverket: https://www4.skatteverket.se/rattsligvagledning/edition/2025.1/409182.html. + +### 4.4 API-kostnader och molntjänster + +**Klassificering per leverantörsetableringsland (omvänd betalningsskyldighet, ML 2023:200 6 kap 33 § + 16 kap):** + +| Leverantör | Etablering | Konto inköp | Utg moms | Ing moms | +|---|---|---|---|---| +| AWS EMEA SARL | Luxemburg (EU) | 4531 | 2614 | 2645 (avdrag) | +| Google Cloud EMEA Ltd | Irland (EU) | 4531 | 2614 | 2645 | +| Microsoft Azure (Microsoft Ireland Operations) | Irland (EU) | 4531 | 2614 | 2645 | +| OpenAI LLC | USA (utanför EU) | 4535 | 2614 | 2645 | +| Anthropic PBC | USA (utanför EU) | 4535 | 2614 | 2645 | +| Mistral AI | Frankrike (EU) | 4531 | 2614 | 2645 | +| Cohere | Kanada (utanför EU) | 4535 | 2614 | 2645 | +| Lambda Labs, RunPod, Modal, Together AI | USA | 4535 | 2614 | 2645 | +| GitHub Inc | USA | 4535 | 2614 | 2645 | +| Vercel Inc | USA | 4535 | 2614 | 2645 | + +VIES-validering av EU-leverantörers VAT-nummer ska göras periodiskt och dokumenteras (screenshot/timestamp). Stripe, Adyen, Paddle: betalningstjänst undantagen från moms (ML 10 kap 3 §, finansiell tjänst). Avgift bokas brutto på 6570 utan momsberäkning. + +**Periodisering API-kostnader.** Matcha mot intäkt månadsvis. Vid betydande månads-end-cutoff: upplupna kostnader 2990 baserat på dashboard-rapporter (AWS Cost Explorer, OpenAI Usage). Verifikatet ska referera till underliggande rapport, faktura kommer 3-10 dagar in i nästa månad. + +**Momsdeklaration ruta-rapportering (verifierat oförändrat 2025-2026):** +- Inköp tjänster annat EU-land (4531): beskattningsunderlag i **ruta 21**, utgående moms 25% i **ruta 30**, ingående avdrag i **ruta 48** +- Inköp tjänster utanför EU (4535): beskattningsunderlag i **ruta 22**, utgående moms 25% i **ruta 30**, ingående avdrag i **ruta 48** +- Försäljning tjänster B2B annat EU-land (3308): **ruta 39** plus periodisk sammanställning +- Försäljning tjänster export utanför EU (3305): **ruta 40** + +### 4.5 Personaloptioner + +**Kvalificerade personaloptioner, IL 11 a kap** (SFS 2017:1212, ikraft 2018-01-01; utvidgning prop. 2021/22:25, SFS 2021:1147, ikraft 2022-01-01). **Ingen ytterligare reform genomförd 2023-maj 2026.** 3:12-utredningens slutbetänkande väntades 2026-01-19 om KPO i 3:12-systemet; ingen prop. publicerad ännu (flaggad öppen fråga). + +Aktuella villkor: +- Medelantal anställda (koncern) under 150 (11 a kap 6 §) +- Nettoomsättning eller balansomslutning högst 280 MSEK (11 a kap 6 §) +- Statligt ägande under 25% (11 a kap 7 §) +- Ej noterat på reglerad marknad (Spotlight/NGM Nordic SME OK) (11 a kap 7 §) +- Verksamhet ej inom juridik/skatte/redovisning/revision/bank/finans/försäkring/fastigheter (11 a kap 8 §) +- Verksamhetens ålder högst 10 kalenderår från första årsskiftet (11 a kap 9 §) +- Max optionsvärde per anställd 3 MSEK vid förvärvstidpunkt (11 a kap 13 §) +- Max totalt optionsvärde per bolag 75 MSEK (11 a kap 13 §) +- Innehavstid min 3 år, max 10 år (11 a kap 14 §) +- Min 30 h/vecka anställning; min ersättning 13 IBB under de tre första åren; styrelseledamot min 1,5 IBB/år (11 a kap 15 §) + +Effekt: skatte- och socialavgiftsbefrielse vid förvärv och utnyttjande; vinst beskattas som kapitalvinst hos optionsinnehavaren vid avyttring av aktien. + +**Icke-kvalificerade personaloptioner**, IL 10 kap 11 §: förmånsbeskattning vid utnyttjande som lön (tjänsteinkomst), arbetsgivaravgifter på förmånsvärdet. + +**Teckningsoptioner**, IL 41-44 kap: beroende på utformning antingen kapitalvinst- eller tjänstebeskattning per HFD-praxis. + +**Bokföring K3 kap 26 "Aktierelaterade ersättningar":** +- Egetkapitalreglerade (vanliga personaloptioner, KPO): kostnad redovisas över intjänandeperiod mot eget kapital (26.3, 26.5a, 26.6-26.7). Verkligt värde vid tilldelningstidpunkten, omvärderas ej. Endast antalet förväntat intjänade instrument justeras varje balansdag. +- Kontantreglerade (syntetiska optioner, SARs): skuld baserad på aktiekurs, omvärderas (26.4, 26.5b). +- Sociala avgifter på samma sätt som ersättningen (26.20). +- Värderingsmodell (Black-Scholes, binomial) ej föreskriven i K3 men praxis. + +**K2 (BFNAR 2016:10) saknar regler för aktierelaterade ersättningar.** Nuvarande K2: tolkning utifrån grundprinciper, typiskt ingen kostnad vid equity-settled. **Nya K2 (BFNAR 2025:1) ikraft för räkenskapsår som inleds efter 2025-12-31, p 1.1A g: bolag som under räkenskapsåret förvärvat varor/tjänster mot aktierelaterade ersättningar får inte tillämpa K2.** Byte till K3 obligatoriskt. + +Skatteverket: https://www4.skatteverket.se/rattsligvagledning/edition/2024.3/399929.html (KPO); https://www4.skatteverket.se/rattsligvagledning/edition/2024.3/324733.html (aktierelaterade ersättningar). + +### 4.6 3:12-reglerna efter 2026 års reform + +**REFORM IMPLEMENTERAD 2026-01-01.** Prop. 2025/26:1 (budgetpropositionen, "Enklare och bättre skatteregler för delägare i fåmansföretag"), bet. 2025/26:FiU1, rskr. 2025/26:65. Bygger på SOU 2024:36. Ändringar i IL 57 kap gäller från räkenskapsår som börjar efter 2025-12-31. + +**Huvudförändringar:** +- Förenklingsregeln och huvudregeln slopas, ersätts av **EN beräkningsregel** för årets gränsbelopp = grundbelopp + lönebaserat utrymme + ränta på omkostnadsbelopp +- **Grundbelopp** = 4 IBB året före beskattningsåret (för 2026: 4 × 80 600 = 322 400 kr), fördelas proportionellt mellan delägare +- **Lönebaserat utrymme** = 50% × (delägarens andel av löneunderlaget minus schablonavdrag 8 IBB = 644 800 kr för 2026) +- **Löneuttagskravet (6 IBB plus 5% av total lön) är SLOPAT** och ersätts av schablonavdraget på 8 IBB. Central förändring jämfört med tidigare regelverk +- **4%-spärren (kapitalandelskravet) slopas**, alla delägare oavsett andel kan nyttja lönebaserat utrymme +- 50×-taket på egen lön kvarstår +- Ränta på omkostnadsbelopp = SLR + 9 pe, endast på omkostnadsbelopp över 100 000 kr +- Ränteuppräkning av sparat utdelningsutrymme slopas +- Karenstid (trädabolag, utomståenderegel) förkortas från 5 till 4 år (tillämpas första gången för räkenskapsår som börjar efter 2026-12-31) +- Index- och kapitalunderlagsreglerna slopas (övergångsbestämmelser t.o.m. beskattningsår som börjar före 2029-01-01) +- Tjänstebeskattningstak utdelning 90 IBB; kapitalvinst 100 IBB (oförändrat) + +K10-blankett ska lämnas årligen av varje delägare som äger kvalificerade andelar. + +### 4.7 Investerare och konvertibler + +**Konvertibla skuldebrev (KVL)** regleras av **ABL 15 kap** (emissionsbeslut, riktade emissioner, registrering). Redovisning K3 BFNAR 2012:1 kap 22 "Finansiella instrument": konvertibel uppdelas i skuldkomponent (diskonterat kassaflöde till marknadsränta) och egetkapitalkomponent (residual). K2 saknar uppdelningskrav, redovisas som skuld till nominellt belopp. + +**Investeraravdrag, IL 43 kap.** Oförändrade beloppsgränser 2024-maj 2026; mindre teknisk EU-statsstödsanpassning prop. 2023/24:80, ikraft 2024-07-01: +- Avdrag 50% av betalningen för andelar vid bildande eller nyemission +- Max underlag per fysisk person/år: **1 300 000 kr**, max avdrag 650 000 kr/år +- Skatteeffekt 30% av avdraget = max 195 000 kr/år +- Max per företag/år: 20 MSEK samlat underlag +- Återföring vid avyttring/värdeöverföring inom 5 år (43 kap 22, 25, 26, 27 §§ IL) +- Företaget får ej ha varit verksamt på marknad mer än 7 år efter första kommersiella försäljning (anpassning 2024) +- Juridiska personer får ej avdrag + +Skatteverket: https://www.skatteverket.se/privat/skatter/vardepapper/investeraravdrag. + +**SAFE (Simple Agreement for Future Equity).** Rättslig kvalificering osäker under svensk rätt: kan klassificeras som konvertibel skuld (KVL-regelverk, ABL 15 kap) eller villkorat aktieägartillskott beroende på utformning. Skatteverket har inget publicerat ställningstagande specifikt för SAFE. Bedöm per avtalsutformning: om återbetalningsskyldighet vid t.ex. likvidation, skuldinstrument; om endast konverteringsrätt utan återbetalning, egetkapitalkaraktär. Flaggas för humangranskning vid varje SAFE-avtal. + +### 4.8 Internationell struktur + +**US Delaware C-corp parent + svenskt opco** (YC-/Stripe Atlas-struktur). Vanlig vid YC, US VC-runda eller global enterprise-försäljning. + +**Transfer pricing.** Korrigeringsregeln armlängdsprincipen **IL 14 kap 19-20 §§** (HFD 2016:45 Diligentia). Bedömning enligt OECD TPG. För svenskt opco som utvecklingscentrum: typiskt **cost-plus** med markup 5-12% beroende på funktion/risk; opcot bär kontraktsutvecklarrisk. + +**Dokumentationsskyldighet.** **39 kap 15-16 f §§ skatteförfarandelagen (2011:1244), SFL** (inte IL). Master file/local file-struktur per BEPS Action 13 (prop. 2016/17:47, ikraft för beskattningsår som börjar efter 2017-03-31). Undantag 39 kap 16 a § SFL: intressegemenskap med under 250 anställda och omsättning högst 450 MSEK eller balansomslutning högst 400 MSEK befrias från dokumentation. Land-för-land-rapportering 33 a kap SFL. + +**Fast driftställe (PE-risk).** Bedömning per OECD modellavtal art. 5 och svenska skatteavtal. Risk att US parent har PE i Sverige om svenska anställda har avtalsmandat ("dependent agent PE"). Mitigera genom: skriftliga begränsningar, ingen avtalsslutning i Sverige för USA-räkning, separata kontrakt till svenskt opco. + +Skatteverket: https://www4.skatteverket.se/rattsligvagledning/edition/2025.1/324857.html (korrigeringsregeln). + +### 4.9 FoU-avdrag och växa-stöd + +**FoU-avdrag på arbetsgivaravgifter.** **Lag (2023:747)** om särskilt avdrag vid beräkning av arbetsgivaravgifter och allmän löneavgift för personer som arbetar med FoU, ikraft 2024-01-01 (prop. 2023/24:14). Ersatte tidigare regler i socialavgiftslagen 2 kap 29-31 §§. + +- Avdrag = 20% av avgiftsunderlaget för FoU-personal +- **Sammanlagt tak per koncern och kalendermånad: 3 MSEK** (1,5 MSEK från arbetsgivaravgifterna plus resterande från allmän löneavgift), 8 § lag 2023:747 +- Arbetstidskrav: minst 50% av faktisk arbetstid OCH minst 15 timmar/månad med FoU (7 § lag 2023:747; sänkt från 75% till 50% prop. 2020/21:110 ikraft 2021-07-01) +- Får ej innebära att avgifterna understiger ålderspensionsavgiften 10,21% + +Pågående utredning (dir. 2023:81, tilläggsdir. 2024:104) om återbetalningsbar skattereduktion; delbetänkande 2025-01-15, slutbetänkande 2026-01-19. Ingen prop. publicerad i maj 2026. + +Skatteverket: https://www.skatteverket.se/foretag/arbetsgivare/arbetsgivaravgifterochskatteavdrag/forskningsavdrag. + +**Växa-stöd.** Lag (2016:1053) om särskild beräkning av vissa avgifter för enmansföretag. + +Förändringar: +- **2025-01-01**: utvidgning till **två anställda**, lönetak höjt 25 000 till 35 000 kr/månad +- **2026-01-01**: omlagt till **återbetalningsmodell** (prop. 2025/26:24 "Anpassning av vissa skatte- och avgiftsnedsättningar till EU:s regler om statsstöd"). Arbetsgivaren betalar full avgift och ansöker om återbetalning via Skatteverkets e-tjänst månadsvis. Anpassning till EU de minimis-stödsregistrering. + +Aktuella regler 2026: +- Arbetsgivaravgift sänks till 10,21% på de första 35 000 kr/månad per anställd +- 24 kalendermånader, anställning minst 3 månader och 20 h/vecka +- De minimis-tak 300 000 EUR samlat statsstöd över 3 år +- Övergång: anställningar påbörjade före 2024-05-01 går på gamla regler resten av 24-månadersperioden + +Skatteverket: https://www.skatteverket.se/foretag/arbetsgivare/arbetsgivaravgifterochskatteavdrag/vaxastod/reglerforvaxastod. + +### 4.10 EU AI Act (förordning (EU) 2024/1689) + +Ikraft 2024-08-01. Tillämpningsdatum staggrade per art. 113. + +| Tier | Originaldatum | Status maj 2026 | +|---|---|---| +| Förbjudna AI-praktiker (art. 5) plus AI-kompetens (art. 4) | 2025-02-02 | Tillämpas | +| GPAI-modeller (art. 51-55), governance (kap VII), notified bodies (kap III §4), sanktioner (kap XII) | 2025-08-02 | Tillämpas | +| Annex III high-risk-system plus transparens (art. 50) | 2026-08-02 | **Skjuts upp till 2027-12-02** per Digital Omnibus-överenskommelse 2026-05-07 (preliminär, ej publicerad i OJEU) | +| Annex I high-risk produktsäkerhet (art. 6(1)) | 2027-08-02 | **Skjuts upp till 2028-08-02** per Digital Omnibus | + +Digital Omnibus-tillägg (preliminär överenskommelse 2026-05-07): art. 50(2) vattenmärkning av AI-genererat innehåll övergångsperiod till 2026-12-02; nationella regulatoriska sandlådor 2027-08-02; ny prohibited practice (NCII/nudifier-AI); SMC-kategori (small mid-cap) med lättad börda. **GPAI- och prohibited-practice-deadlines påverkas ej.** + +**Bokföringsmässig hantering.** Conformity assessment-kostnader (notified body-avgift, intern compliance, dokumentation enligt art. 11) ska klassificeras per K3 18.12 / IAS 38: +- Externa avgifter och dokumentationsarbete direkt hänförliga till en specifik AI-systemvariant under utveckling: kan aktiveras som del av utvecklingsutgift om 18.12-kriterierna uppfylls +- Löpande compliance/övervakning post-marknad (art. 72), AI-litterati-träning (art. 4): kostnadsförs som driftskostnad (6540/7510) +- K2-bolag: alltid kostnadsföring (10.4 §) + +EUR-Lex: https://eur-lex.europa.eu/eli/reg/2024/1689/oj. + +Digital Omnibus ej formellt antagen/publicerad maj 2026. Tills OJEU-publikation gäller originaldeadlines formellt. Flaggas som öppen fråga §6. + +## 5. De tre högsta felfrekvens-scenariorna + +### 5.1 Årsprenumeration bokas som intäkt direkt + +**Fel.** Vid fakturering av 12-månaders prenumeration 120 000 kr 2026-01-15: +``` +1510 Kundfordringar 150 000 D + 3001 Försäljning 25% 120 000 K + 2610 Utgående moms 25% 30 000 K +``` + +**Rätt.** Intäkten ska periodiseras över abonnemangsperioden: +``` +2026-01-15 (fakturering): +1510 Kundfordringar 150 000 D + 2979 Övriga förutbetalda intäkter 120 000 K + 2610 Utgående moms 25% 30 000 K + +Månadsvis 2026-01-31, 02-28, ..., 2026-12-31 (12 ggr × 10 000): +2979 Övriga förutbetalda intäkter 10 000 D + 3001 Försäljning 25% 10 000 K +``` + +**Lagrum.** ÅRL 2 kap 4 § (periodiseringsprincipen); BFNAR 2012:1 (K3) 23.2 + 23.13; BFNAR 2016:10 (K2) 6.11 + 6.13. + +**Anmärkning.** Konto **2979** (Övriga förutbetalda intäkter), inte 2972 (Förutbetalda medlemsavgifter). + +### 5.2 OpenAI-faktura bokas utan omvänd betalningsskyldighet + +**Fel.** OpenAI USD-faktura 1 000 USD bokas direkt mot bank utan momsberäkning: +``` +6540 IT-tjänster 1 000 D + 1930 Bank 1 000 K +``` + +**Rätt.** Omvänd betalningsskyldighet ska tillämpas eftersom OpenAI LLC är etablerad utanför EU och tillhandahåller B2B-tjänst till svensk beskattningsbar person: +``` +4535 Inköp tjänster från land utanför EU 25% 1 000 D +2645 Beräknad ingående moms på förvärv 250 D + 1930 Bank 1 000 K + 2614 Utgående moms omv betaln.skyld 25% 250 K +``` + +**Lagrum.** ML 2023:200 6 kap 33 § (huvudregel B2B-tjänst, omsatt i köparens land); ML 2023:200 16 kap (omvänd betalningsskyldighet); art. 196 EU:s momsdirektiv 2006/112/EG. + +**Momsdeklaration.** Beskattningsunderlag i **ruta 22**, utg moms 25% i **ruta 30**, ing moms-avdrag i **ruta 48**. (Ruta 21 plus 30 är korrekt för EU-inköp 4531, fel ruta för 4535 utanför EU.) + +**Anmärkning.** Äldre referens till "ML 5 kap 5 §" gäller gamla mervärdesskattelagen (1994:200). Ny ML 2023:200 har bestämmelsen i 6 kap 33 § (plats för tillhandahållande) och 16 kap (vem är betalningsskyldig). + +### 5.3 Egenutvecklad mjukvara aktiveras i K2-bolag + +**Fel.** K2-bolag bokar 500 000 kr utvecklarlönedel: +``` +1010 Utvecklingsutgifter 500 000 D + 7010 Löner 500 000 K +``` + +**Rätt under K2.** Aktivering förbjuden, hela lönekostnaden kostnadsförs: +``` +7010 Löner till tjänstemän 500 000 D +2730 Lagstadgade soc.avg ca 157 100 D (31,42%) + 1930/2710/2731 Bank/skatte-/avg.skuld 657 100 K +``` + +**Lagrum.** BFNAR 2016:10 (K2) **punkt 10.4**: "Företag som tillämpar K2 får inte redovisa egenupparbetade immateriella anläggningstillgångar som tillgångar i balansräkningen. Utgifterna ska i stället redovisas som kostnad i resultaträkningen." + +**Åtgärd.** Byte till K3 (BFNAR 2012:1) krävs för aktivering. Då tillämpas K3 18.12 (sex aktiveringskriterier), 18.8 (forskningsfas vs utvecklingsfas), och ÅRL 4 kap 2 §: motsvarande belopp överförs från fritt EK till **fond för utvecklingsutgifter** (konto 2089). Stoppregel K3 35.16/35.25: kostnadsförda utvecklingsutgifter i tidigare räkenskapsår får aldrig retroaktivt aktiveras. + +**Bonusvarning från 2026.** Nya K2 1.1A g (BFNAR 2025:1) tvingar redan bolag med personaloptionsprogram över till K3. SaaS-startups med både utvecklingskostnader och optioner bör därför inte starta i K2. + +## 6. Öppna frågor + +1. **3:12-reform SFS-nummer.** Sekundärkälla anger SFS 2025:1361 för ändringen av IL 57 kap. Verifiera direkt mot svenskforfattningssamling.se. Prop., bet., rskr. och ikraftträdande 2026-01-01 är dock bekräftade via flera oberoende rådgivare (PwC, Forvis Mazars, SRF konsulterna). + +2. **KPO-utredning slutbetänkande.** 3:12-utredningens slutbetänkande väntades 2026-01-19 med förslag på hur KPO-aktier ska beskattas under 3:12-reglerna. Per maj 2026: ingen prop. publicerad. Följ regeringen.se. Eftersom 4%-spärren slopades i 3:12-reformen 2026 har vissa friktionspunkter redan adresserats. + +3. **EU AI Act Digital Omnibus.** Preliminär politisk överenskommelse 2026-05-07 om uppskjutna deadlines (Annex III till 2027-12-02). Ej formellt antagen eller publicerad i OJEU per maj 2026. Tills OJEU-publikation gäller originaltidsplanen i (EU) 2024/1689 formellt; Kommissionen har dock signalerat förbearance. Kontrollera EUR-Lex för slutlig text. + +4. **App store-ställningstagande.** Korrekt referens: ställningstagande dnr 131 664810-14/111 (2014-12-04) **upphävt 2022-12-19 dnr 8-2059749**. Materiella regeln gäller via art. 9a EU 282/2011. + +5. **K3 kap 26 värderingsmodell.** K3 föreskriver inte specifik optionsvärderingsmodell. Black-Scholes praxis för publika underliggande aktier; binomial- eller Monte Carlo-modeller vid komplexa villkor. För onoterade SaaS-bolag krävs ofta extern värdering eftersom underliggande aktievärde inte är observerbart. + +6. **SAFE-avtal kvalificering.** Inget Skatteverket-ställningstagande eller HFD-praxis specifikt för SAFE. Bedöms per avtalsutformning enligt allmänna principer; återbetalningsskyldighet vid likvidation indikerar skuld (KVL ABL 15 kap), pur konverteringsrätt utan return-of-capital indikerar egetkapitalkaraktär. Humangranskning per avtal rekommenderad. + +7. **FoU-avdrag återbetalningsbar skattereduktion.** Utredning pågår (slutbetänkande 2026-01-19). Eventuell ny modell tidigast 2027. + +## 7. Modifier: ai-heavy + +Aktiveras när **API-leverantörer (OpenAI, Anthropic, Mistral, Cohere, Lambda Labs, RunPod, Modal, Together AI) över 15% av total kostnad** ELLER **konto 4535 över 15% av totala kostnader**. + +**Token-baserad kostnadsallokering.** API-kostnader allokeras per kund/produkt baserat på faktisk token-konsumtion från leverantörens usage-API: +- OpenAI: organization.usage endpoint +- Anthropic: workspaces usage report +- AWS Bedrock: CloudWatch metrics per modell-ARN + +Lagra kund-ID i request metadata och avstäm månadsvis. Allokering bokas via interna fördelningskonton (4910-4998-gruppen) eller direkt mot kund-/produkt-dimensioner i redovisningssystemet (Fortnox projektdimension, Visma kostnadsbärare). + +**COGS-attribution per kund.** Möjliggör verklig bruttomarginalsanalys per kund/plan, kritiskt för pricing och churn-modellering. Den månatliga matchningen API-cost mot intäkt sker via: +1. Periodiserad intäkt månadsvis från 2979 till 3001/3305/3308 +2. Faktisk API-kostnad månadsvis på 4535 +3. Bruttomarginal per kund = intäkt minus allokerad API-kostnad minus Stripe-avgift (6570) + +**Omvänd betalningsskyldighet bulk-hantering.** Vid många små API-fakturor (t.ex. OpenAI weekly invoicing): batch-bokning per månad mot 4535 plus spegelposter 2614/2645 acceptabelt om underliggande fakturasummering bifogas verifikatet. Verifieringsspår per faktura krävs för Skatteverkets revision. + +**AI Act conformity-kostnader.** För high-risk AI-system (Annex III): notified body-avgifter, riskhanteringssystem (art. 9), data governance-dokumentation (art. 10), teknisk dokumentation (art. 11), kvalitetsledningssystem (art. 17), post-market monitoring (art. 72). Bedömning aktivering vs opex: +- Aktivering tillåten under K3 18.12 endast om kostnader är direkt hänförliga till specifik AI-systemvariant under utveckling och övriga sex kriterier uppfylls +- Övergripande compliance-infrastruktur, governance, AI-litterati (art. 4): kostnadsförs (typiskt 6540, 7610 personalutbildning, 6550 konsultarvoden) +- K2-bolag: alltid kostnadsföring + +**GPU-compute spend.** Stora månatliga GPU-kostnader (Lambda Labs, RunPod, Modal, Together AI) på 4535 plus 2614/2645. Reserved capacity / committed spend ska periodiseras enligt avtalsperioden: förskottsbetalning bokas mot 1790 (övriga förutbetalda kostnader) och resolveras månadsvis till 6540 eller 4535 beroende på behandling i momshänseende. +$gb$, + NULL, + 2, + 1 + ) +ON CONFLICT (id) DO UPDATE SET + tier = EXCLUDED.tier, + title = EXCLUDED.title, + description = EXCLUDED.description, + sni_prefixes = EXCLUDED.sni_prefixes, + trigger_signals = EXCLUDED.trigger_signals, + estimated_tokens = EXCLUDED.estimated_tokens, + body_path = EXCLUDED.body_path, + body = EXCLUDED.body, + parent_atom_id = EXCLUDED.parent_atom_id, + version = EXCLUDED.version, + schema_version = EXCLUDED.schema_version, + updated_at = now(); + +NOTIFY pgrst, 'reload schema'; diff --git a/tests/pg/assets.pg.test.ts b/tests/pg/assets.pg.test.ts index 2c65cf86..b47c1a95 100644 --- a/tests/pg/assets.pg.test.ts +++ b/tests/pg/assets.pg.test.ts @@ -396,15 +396,17 @@ describe('RLS: cross-company isolation', () => { // can't loosen them without us noticing. describe('assets: disposal VAT + jämkning constraints', () => { it('accepts a disposed_vat_treatment from the allowed enum', async () => { + // Disposal attributes are written in the same UPDATE that transitions the + // asset to disposed: once disposed_at is set, the post-disposal + // immutability trigger (20260803226000) freezes them. const assetId = await insertAsset({ userId: companyA.userId, companyId: companyA.companyId, - disposedAt: '2025-12-31', - disposedProceeds: 100_000, }) await getPool().query( `UPDATE public.assets - SET disposed_proceeds_vat = 20000, disposed_vat_treatment = 'standard_25' + SET disposed_at = '2025-12-31', disposed_proceeds = 100000, + disposed_proceeds_vat = 20000, disposed_vat_treatment = 'standard_25' WHERE id = $1`, [assetId], ) @@ -420,12 +422,13 @@ describe('assets: disposal VAT + jämkning constraints', () => { const assetId = await insertAsset({ userId: companyA.userId, companyId: companyA.companyId, - disposedAt: '2025-12-31', - disposedProceeds: 100_000, }) await expect( getPool().query( - `UPDATE public.assets SET disposed_vat_treatment = 'reduced_999' WHERE id = $1`, + `UPDATE public.assets + SET disposed_at = '2025-12-31', disposed_proceeds = 100000, + disposed_vat_treatment = 'reduced_999' + WHERE id = $1`, [assetId], ), ).rejects.toThrow(/check/i) @@ -435,20 +438,36 @@ describe('assets: disposal VAT + jämkning constraints', () => { const assetId = await insertAsset({ userId: companyA.userId, companyId: companyA.companyId, - disposedAt: '2025-12-31', - disposedProceeds: 100_000, }) // Treatment NULL + VAT > 0 must violate the consistency CHECK. await expect( getPool().query( `UPDATE public.assets - SET disposed_proceeds_vat = 20000, disposed_vat_treatment = NULL + SET disposed_at = '2025-12-31', disposed_proceeds = 100000, + disposed_proceeds_vat = 20000, disposed_vat_treatment = NULL WHERE id = $1`, [assetId], ), ).rejects.toThrow(/check|consistency/i) }) + it('freezes disposal attributes once the asset is disposed', async () => { + const assetId = await insertAsset({ + userId: companyA.userId, + companyId: companyA.companyId, + disposedAt: '2025-12-31', + disposedProceeds: 100_000, + }) + await expect( + getPool().query( + `UPDATE public.assets + SET disposed_proceeds_vat = 20000, disposed_vat_treatment = 'standard_25' + WHERE id = $1`, + [assetId], + ), + ).rejects.toThrow(/disposed asset/i) + }) + it('accepts zero VAT with null treatment (legacy / non-VAT disposal)', async () => { const assetId = await insertAsset({ userId: companyA.userId, @@ -469,12 +488,12 @@ describe('assets: disposal VAT + jämkning constraints', () => { const assetId = await insertAsset({ userId: companyA.userId, companyId: companyA.companyId, - disposedAt: '2025-12-31', - disposedProceeds: 60_000, }) await getPool().query( `UPDATE public.assets - SET jamkning_amount = 8000, + SET disposed_at = '2025-12-31', + disposed_proceeds = 60000, + jamkning_amount = 8000, jamkning_remaining_months = 24, jamkning_total_months = 60, jamkning_original_input_vat = 20000 diff --git a/types/index.ts b/types/index.ts index d07a609b..2793a5a5 100644 --- a/types/index.ts +++ b/types/index.ts @@ -3334,6 +3334,9 @@ export type DepreciationMethod = | 'declining_balance_20' | 'restvardesavskrivning_25' +export type AssetDisposalType = 'sale' | 'scrap' | 'business_transfer' +export type AssetJamkningDirection = 'increase' | 'decrease' | 'none' | 'transferred' + /** * K3 component (BFNAR 2012:1 ch 17.4: komponentavskrivning). When a * substantial asset (typically real estate) has significant components with @@ -3378,6 +3381,10 @@ export interface Asset { restvarde_target: number | null disposed_at: string | null disposed_proceeds: number | null + /** How the asset left the register. Null for legacy disposal records. */ + disposal_type?: AssetDisposalType | null + /** Posted voucher that atomically completed the disposal. */ + disposal_journal_entry_id?: string | null /** Output VAT on disposal proceeds (ML 3 kap 3 § / 7 kap 3 §). Defaults to * 0: only nonzero when the sale was momspliktig. The VAT account * (2611/2621/2631) is derived from disposed_vat_treatment. */ @@ -3386,9 +3393,7 @@ export interface Asset { * without VAT data. Constrained by DB CHECK to the same enum as * VatTreatment. */ disposed_vat_treatment: VatTreatment | null - /** Jämkning amount per ML 8a kap 7 §: input VAT paid back on disposal - * inside the correction period. Defaults to 0; positive number = debt - * to the state booked on 2641 credit. */ + /** Absolute input VAT adjustment under ML (2023:200), chapter 15. */ jamkning_amount: number /** Remaining months in the korrigeringstid at disposal date. Audit * metadata only: the booking sits on the journal entry. */ @@ -3399,6 +3404,12 @@ export interface Asset { /** Original input VAT that was deducted at acquisition. Audit metadata * the user supplies (or the system derives from the supplier invoice). */ jamkning_original_input_vat: number | null + /** Current-law adjustment metadata. Old month fields remain for legacy rows. */ + jamkning_direction?: AssetJamkningDirection | null + jamkning_remaining_years?: number | null + jamkning_total_years?: number | null + jamkning_original_deduction_percent?: number | null + jamkning_new_deduction_percent?: number | null /** K3 component depreciation (BFNAR 2012:1 ch.17.4). When non-null, the * depreciation engine sums per-component linear depreciation instead of * applying `depreciation_method` to the asset as a whole. Null for K2