SKAT Z-report + moms rapport — the daily close in plain English.
Every Danish repair shop produces (or should produce) a Z-report every trading day. Every month or quarter that Z-report series rolls up into a moms rapport that goes to SKAT. Here's what each one has to contain, what SKAT does with it, and how to make it a one-click action instead of a Sunday evening.
The Z-report is your daily sales close: total turnover, VAT split by rate, payment-method breakdown, invoice-number range for the day. Produced once per trading day, never altered afterward. The moms rapport is the monthly (or quarterly) VAT return built from the sum of those Z-reports. SKAT reconciles them against each other. A good POS automates both; a spreadsheet-based close hides errors that only surface at inspection.
What a Z-report actually is
Z-reports date back to electronic cash registers from the 1980s, when the "Z key" told the register to print the final totals for the day and reset the daily counters. The word has stuck even though no one is pressing a mechanical key any more. The job it does is unchanged: produce an unalterable, line-by-line summary of a trading day's sales activity.
The Danish Bookkeeping Act and VAT Act don't name "Z-report" specifically — they require complete, chronological, documented bookkeeping. In practice, SKAT inspectors expect to see a daily Z-report series as the proof. Running a POS that doesn't produce one creates a gap in your documentation that you'll have to explain, and the burden is on you.
What goes in a Danish repair-shop Z-report
At a minimum, every day's Z-report needs the following, broken down and totalled:
- Gross turnover for the day (all sales, including VAT where applicable).
- VAT split by rate. Standard rate (25%) and, if applicable, brugtmoms (margin VAT on used-device sales) as a separate line.
- Net turnover ex-VAT by VAT category.
- Payment-method breakdown. Card (split by terminal / provider if more than one), cash, MobilePay, gift card, store credit — anything you accept.
- Transaction count for the day.
- Voids and refunds — both the gross value and the count.
- Deposits taken at ticket intake (treated separately from invoiced sales).
- Invoice number range. First invoice number of the day and last — a key reconciliation checkpoint against the invoice sequence.
- Opening + closing cash drawer balance if cash is handled, including the day's cash variance.
- Date, branch, operator(s) covering the shift.
Z-report for 2 October 2026 · Branch "PCIT Service · Rødovre"
| Line | DKK | |
|---|---|---|
| Standard-rate sales (25% VAT) | repair labour + new parts | 12,400 |
| Ex-VAT | 9,920 | |
| VAT 25% | 2,480 | |
| Brugtmoms sales | 2 refurb phones | 7,000 |
| Gross margin | 2,800 | |
| Brugtmoms (20% of margin) | 560 | |
| Total gross turnover | 19,400 | |
| Dankort | via SumUp | 14,200 |
| MobilePay | 3,100 | |
| Cash | 2,100 | |
| Transaction count | 34 | |
| Voids | 0 | |
| Refunds | 0 | |
| Invoice range | 2026-1041 → 2026-1074 | |
| VAT owed from today | normal + brugtmoms | 3,040 |
Produced once, immutable, retained for 5 years (per bogføringsloven §12 — see the bogføringslov guide). That's the baseline. A good POS does this automatically at end-of-day; a bad one asks you to do it manually, which is where errors creep in.
From daily Z-reports to the monthly moms rapport
The moms rapport is Denmark's VAT return — filed to SKAT via TastSelv Erhverv, either monthly or quarterly depending on turnover. It summarises the VAT activity for the period: output VAT collected on sales, input VAT paid on purchases, and the net VAT owed to (or refundable from) SKAT.
The construction is straightforward if your Z-reports are clean:
- Sum the standard-rate output VAT across every Z-report in the period.
- Sum the brugtmoms output VAT across every Z-report in the period, as a separate line.
- Pull input VAT from your purchase ledger (deductible VAT on parts, overhead, equipment).
- Net VAT owed = output VAT (standard + brugtmoms) − input VAT.
- File through TastSelv Erhverv. Pay via bank transfer or the SKAT payment link.
Filing frequency by turnover
- Under 5 million DKK annual turnover: quarterly. Deadline 1 month + 10 days after period end.
- 5-50 million DKK: monthly. Deadline 25th of the month after period end.
- Over 50 million DKK: monthly with shorter deadlines; large-filer status.
Most independent repair shops sit well under 5 million DKK and file quarterly. Growing chains or busy multi-branch operators sometimes cross into monthly in year 2 or 3. New businesses default to quarterly for the first year.
How SKAT uses the two together
Inspectors reconcile the moms rapport against the daily Z-report series. If the quarterly moms rapport says 85,000 DKK of output VAT, the sum of every Z-report's VAT lines in that quarter should also be 85,000 DKK. When it doesn't match, SKAT has questions.
Common reconciliation failures:
- A trading day with no Z-report (the shop was open but no close was produced).
- A Z-report that was manually edited after production.
- Brugtmoms sales accidentally rolled into standard-rate turnover, inflating output VAT.
- A corrected invoice from month 1 reported in month 2 without a matching correction entry.
- Refunds counted twice (once in the void line, once as a negative sale).
Exporting to your accountant
The four Danish accounting products a repair shop is most likely to run — e-conomic, Dinero, Billy and Uniconta — all import a daily Z-report feed and build the moms rapport for you from the general ledger. The practical requirement is that your POS exports the Z-report in a format one of them can ingest without you re-typing anything.
a1RepairFlow handles all four natively. The daily Z-report posts automatically to the accounting system, with the brugtmoms line correctly flagged. The moms rapport is then produced by the accounting side using data your POS already provided — your accountant files it with one click.
Common Z-report mistakes
Running two POS tills without a merged Z-report
If a shop has two tills — one at the counter, one on a tablet for the tech bench — each till produces its own Z-report. That's fine as long as they merge into a single branch-level daily close. If they stay separate, your invoice sequence has to be branch-shared (so you don't issue invoice 1001 from both tills on the same day). The moms rapport should pull from the merged branch total, not the two individual tills.
Z-reporting over midnight
A long-hours shop that stays open past midnight needs a decision: does the trading day cut at midnight, or at the actual close? Both are valid, but it must be consistent. The Z-report date must match the invoice-sequence date, must match the payment-processor reconciliation date. Mixing conventions over a weekend is the classic source of a reconciliation mismatch nobody can trace.
Credit notes dated to the original invoice period
If a customer disputes an invoice from June and you issue a credit note in August, the credit note goes in August's Z-report — not June's. The accounting-side moms rapport handles the period-shift separately. Backdating the credit to June breaks both the invoice sequence and the Z-report series.
Cash variance ignored
Cash drawer at close is 2,087 DKK, your Z-report says it should be 2,100 DKK. That 13 DKK discrepancy is normal (bad counting, rounding on cash payments, a missed sale). What's not normal: letting it accumulate silently. Over a year, 10 DKK a day becomes 3,650 DKK, which SKAT will treat as suspected unreported revenue. Log the variance on every Z-report, no matter how small.
How a1RepairFlow does the daily close
- Automatic end-of-day Z-report. Scheduled per branch, with manual trigger if the shop closes early. Produced once, immutable, retained 5 years.
- Correct VAT split. Standard rate and brugtmoms are separate lines by design — no manual flagging. Mixed-VAT invoices split correctly across the two.
- Payment-method reconciliation. Card totals auto-match against the SumUp / Stripe daily payout. MobilePay and cash variances surface on the dashboard.
- Invoice-range verification. The Z-report confirms the day's invoice sequence is gap-free before posting. If a cancelled invoice is in the range, it's logged as cancelled, not skipped.
- Multi-branch merge. Each branch runs its own Z-report; the tenant-level dashboard shows the consolidated daily turnover.
- Direct accounting export. e-conomic, Dinero, Billy, Uniconta — the Z-report feed posts automatically overnight.
- Monthly moms rapport. One-click export in SKAT's expected format, with the brugtmoms line separated and the deductible input VAT pulled from your purchase ledger if you've connected it.
The 5-minute checklist
- Every trading day produces a Z-report, automatically or by habit.
- Z-reports are immutable once produced (no manual edits after the fact).
- VAT is split by rate — standard, brugtmoms, zero-rated — as separate lines.
- Payment-method totals reconcile to the daily payout from each terminal/provider.
- The daily invoice range is gap-free; cancelled invoices stay in-sequence as cancellations.
- Cash variance is logged every day, not ignored.
- Monthly or quarterly moms rapport ties exactly to the sum of the Z-reports in the period.