Loonaangifte filing
LoonaangifteFiling turns the Dutch wage-tax filing obligation into a real
workflow inside HRMQ: a declarative lifecycle, first-class tijdvakcode
data per Belastingdienst LH 210, statutory deadline derivation, and
deadline alerting — all as versioned machine-checkable corpus rules.
Digipoort wire transport (actually submitting the filing to the
Belastingdienst) is explicitly out of scope; HRMQ manages the filing
record and its lifecycle, not the transmission channel.
The filing lifecycle
LoonaangifteFiling carries a declarative x-openregister-lifecycle on
its status field:
concept → klaargezet → bevestigd → verzonden
| Transition | From → to | Notes |
|---|---|---|
klaarzetten | concept → klaargezet | |
bevestigen | klaargezet → bevestigd | |
verzenden | bevestigd → verzonden | Stamps submittedDate and verzondenDoor on the carrying write |
heropenen | klaargezet or bevestigd → concept | |
corrigeren | verzonden → concept | The only way back once sent |
Illegal jumps — for example verzenden straight from concept — are
rejected by OpenRegister's lifecycle engine; there is no concept → verzonden edge.
Tijdvakcode, aangiftenummer, and response fields
Each filing carries:
tijdvakcode— a 4-digit code matching pattern6or7followed by three digits (per Belastingdienst LH 210); malformed codes are rejected by schema validationaangiftenummer,betalingskenmerk— filing reference numbersresponseStatus—geen,ontvangen-ok, orafgekeurdresponseMessage— free-text response detailverzondenDoor— who executed theverzendentransition
Machine-checked rules
Three rules in the payroll corpus (lib/Standards/rules/payroll.json,
domain reporting, framework nl-loonheffingen, sourced to Belastingdienst
LH 210 2026 / AWR art. 19) are enforced by NlWageTaxFilingChecks:
nl-loonaangifte-tijdvakcode— the tijdvakcode must match the filing'speriod+tijdvakper the 2026 code table (for example, period2026-01with tijdvakmaandmust carry tijdvakcode6010). The rule'sparameterscarry the full 2026 code table — the maand prefix rule (60MM), the thirteen vierweken codes, and the jaar code6400— so an annual re-issue is a data-only change, not a code change.nl-loonaangifte-deadline-derivation—deadlinemust equal the last day of the calendar month following the period end, with no weekend or holiday extension (period2026-01derives deadline2026-02-28, even though that Saturday would normally roll to the following Monday in other contexts).nl-loonaangifte-deadline-alert— a filing not yetverzondenviolates when its deadline is in the past, or within 14 days of the audit run date.
Run the audit with:
occ hrmq:rules:audit --jurisdiction=NL
Filing pages
The LoonaangifteFilings index lists period, tijdvakcode, status,
deadline, submittedDate, and responseStatus, sorted by deadline
ascending. LoonaangifteFilingDetail surfaces Status and Deadline in a
prominent widget and exposes the lifecycle actions — Klaarzetten,
Bevestigen, Verzenden, Heropenen, Corrigeren — the same pattern used
throughout HRMQ's approval-driven objects.