Law Format

The article-based YAML format for machine-readable law, conforming to the official JSON schema.

Laws in RegelRecht are stored as YAML files conforming to the law schema. Each file represents one law at a specific point in time.

File Organization

corpus/regulation/nl/ ├── wet/ # Formal laws (wetten) │ ├── wet_op_de_zorgtoeslag/ │ │ └── 2025-01-01.yaml │ ├── participatiewet/ │ │ └── 2022-03-15.yaml │ └── burgerlijk_wetboek_boek_5/ │ └── 2024-01-01.yaml ├── ministeriele_regeling/ # Ministerial regulations │ └── regeling_standaardpremie/ │ ├── 2024-01-01.yaml │ └── 2025-01-01.yaml └── gemeentelijke_verordening/ # Municipal ordinances ├── amsterdam/ │ └── apv_erfgrens/ │ └── 2024-01-01.yaml └── diemen/ └── afstemmingsverordening_participatiewet/ └── 2015-01-01.yaml

Structure of a Law File

Header Metadata

$schema: https://raw.githubusercontent.com/.../refs/tags/schema-v0.5.2/schema/v0.5.2/schema.json $id: zorgtoeslagwet regulatory_layer: WET publication_date: '2025-01-01' valid_from: '2025-01-01' bwb_id: BWBR0018451 url: https://wetten.overheid.nl/BWBR0018451/2025-01-01 name: Wet op de zorgtoeslag
FieldRequiredDescription
$idYesMachine identifier (snake_case)
regulatory_layerYesWET, AMVB, MINISTERIELE_REGELING, GEMEENTELIJKE_VERORDENING, etc.
publication_dateYesOfficial publication date (ISO 8601)
valid_fromNoEffective date
bwb_idConditionalRequired for national laws (format: BWBR + 7 digits)
gemeente_codeConditionalRequired for municipal ordinances (format: GM + 4 digits)

Articles

Each article mirrors a real article in Dutch law:

articles: - number: '2' text: | 1. De verzekerde heeft aanspraak op een zorgtoeslag... 2. De hoogte van de zorgtoeslag is het verschil... url: https://wetten.overheid.nl/.../artikel/2 machine_readable: definitions: DREMPELINKOMEN: value: 2500000 # €25,000 in eurocent execution: parameters: - name: bsn type: string required: true input: - name: toetsingsinkomen type: amount source: regulation: algemene_wet_inkomensafhankelijke_regelingen output: toetsingsinkomen parameters: bsn: $bsn output: - name: hoogte_zorgtoeslag type: amount type_spec: unit: eurocent actions: - output: hoogte_zorgtoeslag value: operation: MAX values: - 0 - operation: SUBTRACT values: - $standaardpremie - $normpremie

Key Concepts

Definitions

Constants used in calculations:

definitions: norm_alleenstaande: value: 109171 # €1,091.71 in eurocent PERCENTAGE_LID_5: value: 100

Operations

Operations are the building blocks of law logic:

CategoryOperationsSyntax
ArithmeticADD, SUBTRACT, MULTIPLY, DIVIDEvalues: [...]
AggregateMIN, MAXvalues: [...]
ComparisonEQUALS, GREATER_THAN, LESS_THAN, GREATER_THAN_OR_EQUAL, LESS_THAN_OR_EQUALsubject:, value:
LogicalAND, OR, NOTAND/OR: conditions: [...]; NOT: value: (wraps a single operation)
CollectionIN, LISTIN: subject: + value: or values: [...]; LIST: items: [...]
ConditionalIF (alias SWITCH)cases: [{when:, then:}], default:
DateAGE, DATE_ADD, DATE, DAY_OF_WEEKAGE: date_of_birth:, reference_date:; DATE_ADD: date: + years:/months:/days:; DATE: year:, month:, day:; DAY_OF_WEEK: date:

These 21 operations make up the schema. The engine also accepts the compat aliases NOT_EQUALS, IS_NULL, NOT_NULL, and NOT_IN for backward compatibility, but they are outside the schema, so prefer wrapping the positive operation in NOT. See RFC-004: Uniform Operation Syntax for the full specification.

Variable References

  • $variableName - reference inputs, outputs, definitions, or parameters
  • $referencedate.year - dot notation for property access
  • #output_name - internal reference (same law)

Cross-Law References

Laws reference outputs from other laws via source:

input: - name: toetsingsinkomen type: amount source: regulation: algemene_wet_inkomensafhankelijke_regelingen output: toetsingsinkomen parameters: bsn: $bsn

See RFC-007: Cross-Law Execution for details.

Open Terms and Delegation (IoC)

Higher laws declare open_terms that lower regulations implement:

# In the wet (higher law) open_terms: - id: standaardpremie type: amount required: true delegated_to: minister delegation_type: MINISTERIELE_REGELING legal_basis: artikel 4 Wet op de zorgtoeslag default: actions: - output: standaardpremie value: 211200 # In the ministerial regulation (lower law) implements: - law: zorgtoeslagwet article: '4' open_term: standaardpremie gelet_op: Gelet op artikel 4 van de Wet op de zorgtoeslag

The engine resolves implementations at runtime using lex superior / lex posterior rules.

See RFC-003: Inversion of Control for the full pattern.

Articles can declare what kind of legal product they produce:

execution: produces: legal_character: BESCHIKKING # Administrative decision decision_type: TOEKENNING # Grant

This enables the Awb procedure hooks (RFC-008).

Type Specifications

Fields can have detailed type information:

output: - name: hoogte_zorgtoeslag type: amount type_spec: unit: eurocent precision: 0

Corpus Contents

The corpus is still small and growing. At the time of writing it spans three regulatory layers:

LayerLawsExamples
WET~15Participatiewet, Zorgtoeslag, Zorgverzekeringswet, Awb, BW Boek 5
MINISTERIELE_REGELING1Regeling standaardpremie (2 versions)
GEMEENTELIJKE_VERORDENING2Amsterdam APV erfgrens, Diemen afstemmingsverordening

For the authoritative, current set, see corpus/regulation/ in the repository.

Next Steps

RegelRecht

An exploration by Bureau Architectuur of the Dutch Ministry of the Interior into the possibilities of transparent, executable legislation.

Links

GitHub repository
How it works
Stay informed
Documentation

Contact

regelrecht@minbzk.nl

Part of

Bureau Architectuur
Ministry of the Interior and Kingdom Relations