How legal delegation is modeled with open terms in higher laws and implementations in lower regulations.
Dutch law has a hierarchy. Parliament passes a wet (formal law), which often delegates specifics to a minister or municipality. The Healthcare Allowance Act says the minister sets the standard premium. The Participation Act says municipalities set sanctions policy.
In RegelRecht, this delegation is modeled through two constructs: the higher law declares an open term (a value it needs but does not define), and the lower regulation declares that it implements that term.
A Dutch ministerial regulation typically opens with a preamble: “Gelet op artikel 4 van de Wet op de zorgtoeslag” (“In consideration of article 4 of the Healthcare Allowance Act”). This is the lower regulation registering itself as the authority that fills in a delegated value.
RegelRecht mirrors this exactly. The higher law does not need to know which lower regulation exists. The lower regulation registers itself.
This says: “I need a value called standaardpremie. The minister should set it via a ministerial regulation. If nobody has set it, use 211200 (EUR 2,112.00).”
The gelet_op field matches the real legal preamble text. The implements block tells the engine: “I fill in the standaardpremie open term from Zorgtoeslagwet article 4.”
When the engine loads all law files, it builds an index of all implements declarations. When it encounters an open_term during execution, it looks up the index, finds the implementing regulation, and executes it to get the value.
The Participation Act delegates sanctions policy to municipalities. Each municipality can set different reduction percentages. The engine uses gemeente_code in the execution parameters to select the right municipal ordinance.
The default of 0 follows the legal logic: article 18(2) says “reduces in accordance with the ordinance.” No ordinance means no reduction.
When executing for a person in Diemen (parameters include gemeente_code: GM0384), the engine uses Diemen’s percentages. For a municipality without an ordinance, the Participation Act’s default applies.
When multiple regulations implement the same open term, the engine resolves conflicts using two rules from legal theory:
valid_from date takes precedenceTemporal filtering ensures the right version applies: only regulations where valid_from <= calculation_date are considered.
Cross-law references and IoC both let laws use values from other laws, but they serve different purposes:
| Cross-law reference | Inversion of Control | |
|---|---|---|
| Who knows whom? | The referencing law names the target law | The higher law does not know which lower regulation exists |
| Direction | Top-down: “give me this value from that law” | Bottom-up: “I fill in this value for that law” |
| Use case | A law needs a specific value from a specific other law | A law delegates a value to whichever lower regulation fills it |
| YAML construct | source: { regulation: ..., output: ... } | open_terms + implements |
An exploration by Bureau Architectuur of the Dutch Ministry of the Interior into the possibilities of transparent, executable legislation.
Bureau Architectuur
Ministry of the Interior and Kingdom Relations