Skip to content

MinBZK/napp-poc

Napp — Nederlandse autoriteit politieke partijen

Proof of concept. Deze repository is een demonstratie met fictieve gegevens; de Napp bestaat niet en de Wet op de politieke partijen is nog een wetsvoorstel. Aan deze omgeving kunnen geen rechten worden ontleend.

End-to-end demonstratie van wetsuitvoering als code: het subsidieproces van de Nederlandse autoriteit politieke partijen (Napp) uit het wetsvoorstel Wet op de politieke partijen (kamerstuk 36742), uitgevoerd door de regelrecht-engine.

De wet is een uitvoerbare reconstructie (werkversie); zodra de definitieve tekst er is, wordt het YAML-bestand vervangen zonder dat de rest verandert.

Wat zit erin

Onderdeel Beschrijving
law/ Machine-leesbare wetten: Wpp (twee subsidietracks + betaalopdracht-hook), regeling met bedragen (IoC), AWB-subset (procedure + hooks 3:46/6:7/6:8), Algemene termijnenwet (weekend-verlenging)
scenarios/ 21 Gherkin-scenario's die vastleggen hoe de wet hoort te werken
backend/ Axum-orchestratielaag: aanvragen, besluiten (RFC-008 besluit-state), betaalopdrachten, openbaar register; SQLite; SSO Rijk via regelrecht-auth (OIDC) met demo-fallback
backend/data/ Partijregister-snapshot uit open data: TK2025- en GR2026-uitslagen (Kiesraad, data.overheid.nl) en inwoneraantallen (CBS StatLine). Regenereren: uv run scripts/bouw_register.py
frontend/ Drie gescheiden ingangen (Vue 3 + NLDD design system): publiek (landing + register), subsidieportaal voor partijen (mock-eHerkenning), beoordelingsomgeving voor de Napp (incl. in-browser scenario-runner op de WASM-engine)

Draaien

Vereist: Rust (incl. wasm32-unknown-unknown target + wasm-bindgen), Node.js, just, en een checkout van regelrecht naast deze repo (of zet REGELRECHT_DIR).

just law-validate   # wetten valideren tegen het regelrecht-schema
just bdd            # 21 scenario's op de Rust-engine
just wasm           # engine naar WASM bouwen (voor de scenario-runner)
cd frontend && npm install
just dev            # backend (:8400) + frontend (:5400)

Ingangen:

SSO Rijk wordt actief zodra de OIDC_*-omgevingsvariabelen zijn gezet (zelfde configuratie als regelrecht's editor-api).

Deployen

Eén container met alles erin (backend serveert de gebouwde frontend zelf):

just docker-build   # backend + frontend + WASM-engine in één image
just docker-run     # draait op :8400, database in named volume napp-data

De build clonet regelrecht (main) als path-dependency; pin een ref met --build-arg REGELRECHT_REF=<tag-of-sha>.

.github/workflows/deploy.yml bouwt en pusht het image naar ghcr.io/minbzk/napp-poc bij elke push naar main, en deployt naar ZAD zodra de repository variable ZAD_PROJECT_ID en het secret RIG_API_KEY gezet zijn (component napp, deployment productie).

Omgevingsvariabelen (defaults in het image):

Variabele Default Betekenis
NAPP_PORT 8400 luisterpoort
DATABASE_URL sqlite:/data/napp.db?mode=rwc SQLite op het persistente volume
NAPP_LAW_DIR /app/law wetscorpus
NAPP_STATIC_DIR /app/frontend/dist frontend-assets
OIDC_* (leeg) SSO Rijk; zonder configuratie is de demo-login actief

Hoe het werkt

  1. Een partij dient een aanvraag in; de backend persisteert de besluit-state (stage BEHANDELING, conform RFC-008: de engine is stateless, de orchestratielaag bewaart de toestand).
  2. De beoordelaar ziet de uitkomst die de wet berekent (recht, bedrag, motivering met artikelverwijzingen) en stelt het besluit vast. Bij toekenning vuurt artikel 16 (post_actions-hook) en ontstaat een betaalopdracht naar het (gemockte) betaalsysteem.
  3. Bij bekendmaking berekent AWB 6:8 de bezwaartermijn; de Algemene termijnenwet verlengt een einddatum die in het weekend valt naar de eerstvolgende werkdag (feestdagen zijn als untranslatable gemarkeerd, RFC-012).
  4. Het bekendgemaakte besluit verschijnt in het openbare register met statistieken.

Zetelaantallen komen uit de echte verkiezingsuitslagen (Kiesraad: TK2025 en GR2026 als CSV, PS2023 en AB2023 uit de officiele Resultaat-EML's) en inwoneraantallen van het CBS; aanvragers declareren die niet zelf. De KvK-koppeling is synthetisch: die koppeling (rechtspersoon naar geregistreerde aanduiding) is precies wat de Napp bij registratie vastlegt en is geen open data.

De aanvraag volgt de rechtspersoon, conform de twee organisatiemodellen uit de Wpp (MvT bij art. 27). Een centraal georganiseerde partij (een vereniging, een KvK) dient een samengestelde jaaraanvraag in met al haar aanspraken als onderdelen: landelijk plus elk decentraal orgaan/gebied (gemeenteraad, provinciale staten, waterschap) waar de Kiesraad haar zetels toewees. Een decentraal georganiseerde partij heeft afdelingen met eigen rechtspersoonlijkheid; elke afdeling logt zelf in en vraagt alleen haar eigen gebied aan. De wet rekent per onderdeel; de som, de specificatie en de ene betaalopdracht aan de rechtspersoon zijn orchestratie. Onderdelen die al lopen of zijn toegekend voor het subsidiejaar zijn geblokkeerd voor herhaalaanvraag; na een afwijzing kan het opnieuw. Tijdens het invullen toont het formulier een indicatieve uitkomst, live berekend door dezelfde wet-engine.

De scenario-runner in de beoordelingsomgeving draait dezelfde 21 scenario's live in de browser op de naar WASM gecompileerde engine: het bewijs dat de wet doet wat hij moet doen, naast elke beoordeling.

About

Demo van wetsuitvoering als code: het Wpp-subsidieproces van de Nederlandse autoriteit politieke partijen op de regelrecht-engine

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors