Een proof-of-concept voor het omzetten van Nederlandse wetgeving naar machine-leesbare specificaties
Veel Nederlandse wetten zijn in essentie mechanische processen. Dit wordt duidelijk uit deze drie voorbeelden:
→ Algemene Ouderdomswet, Artikel 13, lid 1-3
1. De oppbouw van het ouderdomspensioen vindt plaats over een tijdvak van 50 jaren.
2. Voor elk jaar wordt 2 percent van het ouderdomspensioen opgebouwd.
3. Bij een korter tijdvak dan 50 jaren wordt het ouderdomspensioen evenredig verlaagd.
Wat maakt dit mechanisch?
Dit is een pure rekenkundige formule: uitkering = basispensioen × (opbouwjaren ÷ 50) × 0.02
. Elke variabele is exact
gedefinieerd en de berekening is deterministisch.
→ Wet op de Huurtoeslag, Artikel 19, lid 2-3
Voor elk rekeninkomen boven het minimum-inkomenspunt geldt de formule:
(a x Y²) + (b x Y)
waarbij:
Y = het rekeninkomen
a, b = factoren per type huishouden, vast te stellen bij ministeriële regeling
De uitkomst wordt naar boven afgerond op hele eurocenten.
Wat maakt dit mechanisch? Dit is een pure wiskundige formule met kwadratische en lineaire termen. De wetgever heeft hier expliciet gekozen voor een algebraïsche notatie - inclusief variabelen, machten en constanten. Dit is één-op-één om te zetten naar code.
→ Participatiewet, Artikel 22a, lid 2-3
De kostendelersnorm wordt berekend volgens de formule:
(40% + A × 30%) × N
waarbij:
A = aantal kostendelende medebewoners
N = gehuwdennorm genoemd in artikel 21, onderdeel b
Wat maakt dit mechanisch? Dit is letterlijk een wiskundige formule met variabelen, constanten en een exacte berekeningswijze. Het is een algoritme dat direct om te zetten is naar code.
Deze wetten zijn algoritmes vermomd als tekst. Dit leidt tot drie problemen:
- 👩💻 Interpretatie door programmeurs zonder juridische achtergrond.
- MERK OP: wetten in deze PoC zijn nu grotendeels door een programmeur (met behulp van een LLM) omgezet naar
machine law
. Uiteindelijk zouden dit soort gegenereerdemachine law
interpretaties het startpunt kunnen zijn voor juristen.
- MERK OP: wetten in deze PoC zijn nu grotendeels door een programmeur (met behulp van een LLM) omgezet naar
- 🤷 Gebrek aan transparantie voor burgers en ambtenaren ("computer says no")
⚠️ Moeilijke kwaliteitscontrole van implementaties
Dit experiment bouwt voort op regels.overheid.nl. Waar regels.overheid.nl zich vooral richt op het documenteren en publiceren van wetten, gaan wij een stap verder:
- Executeerbare Code: regel specificaties zijn niet alleen documentatie, maar daadwerkelijk uitvoerbare code die direct door computersystemen verwerkt kan worden
- Ingebouwde Engine: De specificaties komen met een engine die ze kan uitvoeren, valideren en testen
- Formele Verificatie: Door de exacte specificatie kunnen we bewijzen dat implementaties correct zijn en resolven.
- Directe Implementatie: Overheidsorganisaties kunnen (uiteindelijk) de specificaties direct in hun systemen gebruiken.
Dit maakt het mogelijk om wetten niet alleen te beschrijven, maar ook te testen en valideren voordat ze in productie gaan.
Vooralsnog zijn deze wetten geïmplementeerd in machine law
(met behulp van een LLM).
- Hoofdwet - Berekening zorgtoeslag
- Verzekeringsstatus - Bepaling verzekeringsstatus
- Hoofdwet - Berekening AOW-uitkering
- Leeftijdsbepaling - Bepaling AOW-leeftijd
- Wet BRP - Persoonsgegevens
- Wet Inkomstenbelasting - Toetsingsinkomen
- SUWI - Verzekerde jaren
- CBS - Levensverwachting
git clone [email protected]:MinBZK/poc-machine-law.git
cd poc-machine-law
uv sync
uv run behave features --no-capture -v --define log_level=DEBUG
/law
- Machine-leesbare wetspecificaties/engine.py
- De wetgevingsengine die specificaties uitvoert
In willekeurige volgorde:
📅 Implementatie van referentiedatums📚 Toevoegen van meer wetten naast de zorgtoeslagwet- ⚖️ Onderzoeken hoe algemene wetten (zoals bezwaarrecht) hierin passen
- 🔧 Ontwikkelen van tools om wetten om te zetten
- 🔍 Detectie van deadlocks/loops in wetgeving
- 👥 Verbeteren van uitlegbaarheid naar burgers
Bijdragen zijn welkom! Zie de issues voor openstaande punten.