DGA payroll mode
A DGA (directeur-grootaandeelhouder — director-major-shareholder) is generally not verzekeringsplichtig for the werknemersverzekeringen: no Awf (WW), Aof (WIA/WAO), Wko, or Whk premium is levied, employer or employee side. Loonheffing and Zvw still apply in full.
What actually changes — and what does not
Setting Employee.isDga drives verzekeringsplichtig: false into the
calculation, which zeroes all four employer premium lines
(Awf/Aof/Wko/Whk are all drawn from the same capped premieloon bucket —
there is no partial subset). employerCharges reduces to Zvw only.
Netto pay does not change. In this engine nettoPay = gross − loonheffing only — werknemersverzekeringen are employer-borne charges
that never reduced the employee's net pay to begin with, DGA or not.
What changes for a DGA is employerCharges, which drops by exactly the
zeroed premium amount. Any UI copy or support conversation about this
feature should say "the employer no longer pays werknemersverzekeringen
for this DGA" — never "the DGA's net pay increases," which is simply
false in this engine.
Payslip.isDga is stamped as a denormalized copy of Employee.isDga,
so downstream consumers can see why werknemersverzekeringen read
zero for a given payslip.
The gebruikelijkloonregeling
A DGA is instead subject to the customary-salary rule (Wet LB 1964 art. 12a): the BV must pay at least a norm salary, verified at €58.000 per jaar in 2026 (up from €56.000 in 2024/2025). This figure is versioned, sourced table data.
A machine-checked, auto-discovered rule flags a DGA paid below the norm — unless a justification is on file:
- Vacuous when
isDgais not true - Vacuous when
gebruikelijkloonJustificationis non-empty (MVP: presence-only exemption; validating the justification's content against the statutory grounds is a named follow-up) - Otherwise satisfied only when
grossMonthlySalary × 12 ≥the loaded gebruikelijkloon norm
occ hrmq:rules:audit
Named non-goals
- Doorbetaaldloonregeling (one payer paying loon across multiple linked BVs on a DGA's behalf) is not modelled — each Employee/ PayrollRun stays single-administration.
- Multiple-BV aggregation for the gebruikelijkloon norm — the check evaluates one Employee record in isolation.
- 30%-ruling interaction — a DGA with a granted 30%-ruling reduces the effective gebruikelijkloon norm; this is not wired in. The check compares against the raw norm only.
DGA handling applies automatically inside the normal run — there is no separate command.