Skip to content

Een proof-of-concept voor het uitvoeren van machine-leesbare specificaties van Nederlandse wetgeving.

License

Notifications You must be signed in to change notification settings

MinBZK/poc-machine-law

🤖 Machine-leesbare Wetgeving

GitHub License

Een proof-of-concept voor het uitvoeren van machine-leesbare specificaties van Nederlandse wetgeving.

De burger interface is hier gedeployed: https://ui.lac.apps.digilab.network

💡 Motivatie

Veel Nederlandse wetten zijn in essentie mechanische processen. Dit wordt duidelijk uit deze drie voorbeelden:

1. AOW-opbouw (Pensioenberekening)

→ 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.

2. Huurtoeslag (Inkomensafhankelijke normhuur)

→ 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.

3. Kostendelersnorm (Bijstandsberekening)

→ 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.

🔍 Het Probleem

Deze wetten zijn algoritmes vermomd als tekst. Dit leidt tot drie problemen:

  1. 👩‍💻 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 gegenereerde machine law interpretaties het startpunt kunnen zijn voor juristen.
  2. 🤷 Gebrek aan transparantie voor burgers en ambtenaren ("computer says no")
  3. ⚠️ Moeilijke kwaliteitscontrole van implementaties

🔄 Voortbouwen op regels.overheid.nl

Dit project 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:

  1. Executeerbare Code: regel specificaties zijn niet alleen documentatie, maar daadwerkelijk uitvoerbare code die direct door computersystemen verwerkt kan worden
  2. Ingebouwde Engine: De specificaties komen met een engine die ze kan uitvoeren, valideren en testen
  3. Formele Verificatie: Door de exacte specificatie kunnen we bewijzen dat implementaties correct zijn en resolven.
  4. 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.

📚 Geïmplementeerde Wetten

Vooralsnog zijn deze wetten geïmplementeerd in machine law (met behulp van een LLM).

Zorgtoeslag

AOW

Huurtoeslag

Participatiewet (Bijstand)

Bestuursrecht (AWB)

Kieswet

Overige Wetten

Ondersteunende Wetten

🚀 Aan de slag

Clone deze repository:

git clone git@github.com:MinBZK/poc-machine-law.git
cd poc-machine-law

Installeer uv volgens de documentatie of maak gebruik van asdf (zodat de juiste versie van uv wordt gebruikt):

asdf install

Installeer alle dependencies:

uv sync

Run behavior tests:

script/test-behaviour

Run UI tests

# Install Playwright
playwright install

# Run tests
script/test-ui

Run simulaties:

uv run simulate.py

Run de burger interface:

uv run web/main.py

Dit zou een interface hier http://0.0.0.0:8000 en hier http://0.0.0.0:8000/admin op moeten leveren.

📂 Repository structuur

  • law - Machine-leesbare wetspecificaties
  • engine.py - De wetgevingsengine die specificaties uitvoert

🛣️ Roadmap

In willekeurige volgorde:

  • 📅 Implementatie van referentiedatums
  • 📚 Toevoegen van meer wetten naast de zorgtoeslagwet
  • ⚖️ Onderzoeken hoe algemene wetten (zoals bezwaarrecht) hierin passen
  • 👥 Verbeteren van uitlegbaarheid naar burgers
  • 🙋 Hardheid-by-design
  • 🔧 Ontwikkelen van tools om wetten om te zetten
  • 🔍 Detectie van deadlocks/loops in wetgeving

🤝 Bijdragen

Bijdragen zijn welkom! Zie de issues voor openstaande punten.

About

Een proof-of-concept voor het uitvoeren van machine-leesbare specificaties van Nederlandse wetgeving.

Topics

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks