Loonbeslag (wage garnishment)
A court or deurwaarder can order a periodic deduction from an
employee's net pay to satisfy a debt. Dutch law (Wetboek van
Burgerlijke Rechtsvordering art. 475b–475e, and from 2021 the Wet
vereenvoudiging beslagvrije voet) guarantees the employee keeps at
least the beslagvrije voet — the protected minimum. Loonbeslag
models the order; the deduction folds into the payslip as a fourth
current-run, post-tax component — alongside sick pay, retro
adjustments, and leave buy/sell — never a fifth code path inside
PayrollCalculator, which stays pure and untouched.
The floor is hard, by construction
The deduction is computed as:
deduction = min(orderedAmount, max(0, nettoPay − beslagvrijeVoet))
against nettoPay after every other current-run fold (sick-pay
substitution, retro-adjustment, leave-buy-sell) is already applied — by
construction it can never push net pay below the voet. A machine-checked
rule, nl-loonbeslag-beslagvrije-voet-floor, independently re-derives
this and flags any Payslip whose recorded nettoPay falls below its
referenced Loonbeslag's beslagvrijeVoet — catching a tampered or
otherwise inconsistent figure that the fold formula itself would
otherwise prevent.
The beslagvrije voet is a stored input, not a computed figure
Loonbeslag.beslagvrijeVoet is a required, HR-entered field, trusted
as the authoritative figure the deurwaarder is legally required to
state on the garnishment order. HRMQ does not compute the protected
minimum from income and household composition per the Wet
vereenvoudiging beslagvrije voet (partner income, co-residents, housing
costs, health-insurance premium) — that computation is a named
fast-follow. The stored value is used as-is.
Single-active-beslag is the MVP scope
HRMQ selects at most one actief Loonbeslag per employee per
period. Priority/preferente-vordering ordering across multiple
simultaneous garnishments for the same employee (BW art. 475d) is a
named fast-follow, not silently glossed over: nl-loonbeslag-single-active
flags any employee with more than one overlapping actief Loonbeslag.
Should selection ever encounter more than one active match despite the
check, the earliest effectiveFrom wins deterministically — never a
silent drop, never a double deduction.
Admin/HR-only, guarded transitions
A garnishment order is legally sensitive — it exposes an employee's
debt situation, and a wrong floor computation is a labour-law
violation. Loonbeslag.status (concept/actief/voldaan/
ingetrokken) carries no bare lifecycle-button surface: activating,
settling, and withdrawing a garnishment are sensitive, caller-role-gated
writes through a guarded controller endpoint only.
Machine-checked audit
occ hrmq:rules:audit
Reports both nl-loonbeslag-beslagvrije-voet-floor (the floor never
breached) and nl-loonbeslag-single-active (no overlapping active
garnishments per employee).