Why a payroll value looks wrong
Why a payroll line amount is often smaller than the receipt, why a löneart (payroll code) is blank or wrong and how to correct it, and why a personnummer or employee number comes out empty in an export.
When a value on a payroll file does not look the way you expected, it is almost always one of a few intentional rules at work, not a mistake. A line amount can be smaller than the receipt, a löneart (payroll code) can be blank or wrong, or an employee's personnummer or employee number can come out empty. This article explains what the figure on the file represents and how to correct the codes and identifiers behind it.
The payroll line reports the covered amount
The amount on a payroll line is what the benefit allowance actually covered for an expense, not necessarily the full sum on the receipt. Every payroll line carries the covered amount: the part of an expense that the employee's benefit allowance paid for, VAT included. If a receipt fits entirely inside the remaining allowance and the category is tax-free, the covered amount equals the receipt total and the two match. As soon as one of the rules below applies, they diverge.
This covered amount is what fills the Pris inklusive moms column in the Excel export. The matching VAT-exclusive figure in Pris exklusive moms is derived from it, never from the raw receipt.
A taxable benefit line excludes the social fee
For a benefit-in-kind (BIK) category, the amount drawn from the allowance is the receipt total plus the 31.42% social fee (arbetsgivaravgift). The payroll line does not report that inflated debit. It reports only the benefit value the employee receives, with the social fee stripped out.
- The reimbursement (and the Förmånsvärde for a BIK line) is the receipt amount minus the social fee.
- The social fee is paid to Skatteverket by the employer. It is never paid to the employee and does not get its own payroll row.
So a BIK line is smaller than the figure that left the allowance, by exactly the 31.42% fee. For the full breakdown, see how BIK (förmånsvärde) is reported in payroll.
Receipt overshoot is not paid back
When a receipt is larger than what the remaining allowance and the category rules allow, the part that does not fit is the employee's own cost on an uploaded receipt. It is not reimbursed and it is not on the payroll file at all.
- For a tax-free category, the allowance covers what it can up to the remaining balance; anything above that is the employee's loss.
- For a BIK category, the allowance has to reserve the social fee first, so the covered benefit value can be smaller still; the part beyond it is again the employee's loss.
Uploaded receipts and Benefit Store purchases handle the uncovered remainder differently. On an uploaded receipt the remainder is the employee's loss and never appears in payroll. On a Benefit Store purchase the remainder becomes a salary deduction, which is handled outside the export files.
A Benefit Store purchase reports only the allowance portion
For a Benefit Store purchase, CLVR or the provider fronts the cost, and the allowance covers what it can. The payroll line reports only that allowance-covered portion. The remainder needed to recover the rest of the provider invoice is taken as a salary deduction, and salary deductions are not part of these export files. So the line amount is smaller than the order price by the salary-deduction remainder.
Where the VAT-exclusive figure comes from
The Pris exklusive moms column is not a separate number you set anywhere. CLVR takes the covered (VAT-inclusive) amount and removes VAT at the expense's own VAT rate:
- Pris exklusive moms = covered amount divided by (1 + VAT rate). For a 25% VAT receipt covered at 1 250 kr, that is 1 250 / 1.25 = 1 000.00 kr.
Because it is derived from the covered amount, it shrinks for all the same reasons the line above it does (social fee removed, overshoot excluded, salary remainder excluded). The reimbursement, social fee, and salary-deduction logic behind every payroll figure follows one source of truth: CLVR's expense reimbursement and payroll rules, together with the per-category benefit settings your HR team configured.
Why a löneart is blank or wrong
Every line in a payroll export carries a löneart (payroll code) that tells your payroll system how to book the amount. CLVR does not invent that code: it reads it from the payroll-code settings you configure for each benefit category and benefit. If a line shows a blank or unexpected löneart, the cause is almost always a code that is missing or set incorrectly on the matching category or benefit.
You set payroll codes under Settings, on the Benefit Settings page (the page that lets you manage categories and benefit visibility, BIK, and payroll codes). Each line looks up its code from there, using two levels:
- The benefit's own payroll-code setting is used first, if it has one.
- Otherwise the line falls back to the category's payroll-code setting.
So a benefit-level code overrides its category code. If neither the benefit nor its category has the relevant code filled in, the line has no löneart and the code column comes out empty.
Most companies see a single Payroll Code field per category and per benefit. Companies set up for the Flex HRM layout see separate fields instead, one per code type (Löneart netto, Löneart brutto, Löneart förmånsvärde, and a deductible-VAT field), because Flex HRM expects a different code for each kind of line. Your Benefit Settings page shows whichever applies to your company.
When several code types are configured, CLVR picks the one that matches the kind of line it is writing:
- Net payout and net deduction lines use the netto code. This covers ordinary reimbursements and net deductions.
- Salary-sacrifice and gross lines use the brutto code. Salary sacrifice to pension, paid through a gross salary deduction, is reported on this code.
- BIK (benefit-in-kind) lines use the förmånsvärde code. If a benefit is marked as BIK but has no förmånsvärde code, the line falls back to the netto code rather than coming out blank.
- The deductible-VAT split row uses the avdragsgill-moms code. A non-BIK expense report can split into a net row plus a separate VAT row when the category has a deductible-VAT code set and the receipt has VAT above zero. The VAT row carries the avdragsgill-moms code.
For more on the two-row split, see how deductible VAT is split on payroll lines.
Some lines never carry a löneart, and that is expected, not a configuration error. Overused-allowance deductions have no payroll code configured at all, so they never produce a code row in a Flex HRM or Fortnox export, though they still appear in the readable Excel export. Lines whose benefit and category both lack the matching code are skipped in the import-ready files, because the line cannot be built without a code.
How to correct a code
Saving a code does not rewrite a report you have already downloaded. CLVR builds each monthly report once and reuses that stored file, so a closed month does not quietly change between downloads. To make a recent month pick up your corrected codes, rebuild it: open Settings, then Payroll Settings, and save the page (this clears the stored reports for the most recent months), then go back to the Reports page, open the month, and download it again. The new file is generated from scratch with the corrected codes.
Re-saving Payroll Settings only refreshes the most recent months, not your full history. Older closed months keep their stored file so past exports stay stable.
Why a personnummer or employee number is blank
When you download a payroll report, CLVR identifies each employee using fields from their employee profile. If a profile is missing the Employee Number or Personnummer, that field can come out blank in the file. The two export formats use these fields differently, so a blank in one is not always a blank in the other.
Fortnox (PAXML) carries two identifiers for every employee:
- Employee Number becomes the
anstid(employee id). If an employee has no Employee Number set, CLVR falls back to their internal CLVR id so the line still has an identifier. That fallback is a long internal reference, not the number your payroll system expects, which is usually why a Fortnox import does not match the right person. - Personnummer becomes the
persnrfield. If the Personnummer is missing, or is stored in a form CLVR cannot read as a valid Swedish personnummer, thepersnris left out of the file for that employee.
Flex HRM (both the xlsx and the dta variants) is simpler. Its first column, Anstnr, is the employee number, taken straight from the Employee Number on the profile. If that field is empty, the Anstnr cell is empty too.
The Flex HRM export does not contain a personnummer column at all. If you only export to Flex HRM, a missing Personnummer never shows up as a blank in the file. It still matters for Fortnox, so it is worth keeping complete either way.
Both fields live on the employee profile, so the fix is the same for either format:
Catch this when you add people, not at download time. When you add an employee, both Employee Number and Personnummer are required fields, so a complete add keeps your exports clean from the start.
Personnummer is part of the Swedish profile, so it only applies to companies set up for Sweden. The Employee Number applies to every employee regardless of country. If your company is not Swedish, you will not have a personnummer field to fill in, and only the Employee Number drives the identifier in your export.
Troubleshooting
Line amounts that look too small:
- The line is smaller than the receipt total. For a BIK category that is the 31.42% social fee being removed. For any category it can also mean the receipt was larger than the remaining allowance, so only the covered part is reported.
- The line is smaller than the order price on a purchase. The remainder is a salary deduction recovered outside the export file; only the allowance-covered portion lands on the payroll line.
- Pris exklusive moms looks off. It is the covered VAT-inclusive amount with VAT removed at the expense's VAT rate, not the receipt minus VAT. A different VAT rate on the expense changes the result.
- There is no row for the difference. Receipt overshoot and purchase salary remainders are intentionally excluded from the export. The export files report only the benefit value the employer credited that period.
Wrong or blank löneart:
- A code column is blank. The matching code is not set on either the benefit or its category. Add it under Benefit Settings, then rebuild the month.
- A BIK line uses the wrong code. Check the förmånsvärde code for that benefit or category. If it is empty, the line falls back to the netto code, which may not be what you want.
- A salary-sacrifice line is on the wrong code. Salary sacrifice uses the brutto code, not the netto one. Set the brutto code on that benefit.
- The corrected code is still not in the file. The report is a stored copy from before your change. Re-save Payroll Settings to clear the recent months, then download again.
- An overused-allowance line has no code. That is by design. These deductions carry no löneart and appear only in the Excel export.
Blank personnummer or employee number:
- The Fortnox file shows a long code instead of a number. That is the internal CLVR id, used because the employee has no Employee Number. Set the Employee Number and download again.
- The personnummer is set but still missing from Fortnox. Check the format on the profile. CLVR needs a readable Swedish personnummer (10 or 12 digits); an incomplete or mistyped value is left out.
- Flex HRM shows an empty Anstnr. The employee has no Employee Number. Add it on the profile, then re-download.
- I fixed the profile but the file still looks the same. Re-download from the Payroll reports page so a fresh file is generated with the updated details.