A portal built on the corpus has to pick which laws to put in front of someone. Zorgtoeslag belongs there. The Penitentiaire beginselenwet does not, although the engine runs it for nearly every citizen, because detention suspends the insurance zorgtoeslag requires.
RFC-001 removed the POC field discoverable with the reason “all outputs are public endpoints”. Every output is indeed callable by another law, which is the basis of cross-law execution (RFC-007). Whether a portal should offer an output to a citizen is a different question, and RFC-001 left it unanswered. The demo corpus went on to reintroduce discoverable in a form the schema never validated.
An entry point is an article that produces a beschikking.
Awb article 1:3 defines a besluit as a written decision by an administrative body constituting a public-law legal act (lid 1), a beschikking as a besluit not of general scope (lid 2), and an aanvraag as a request by an interested party that a besluit be taken (lid 3).
Article 2 Wet op de zorgtoeslag gives the insured an aanspraak, claimed from an administrative body and settled by a beschikking. The Penitentiaire beginselenwet establishes when someone is detained, which another law then consumes. No aanvraag, no besluit, nothing to contest.
The schema has carried this distinction since v0.2.0, in produces.legal_character.
produces from the statuteAn article gets legal_character: BESCHIKKING when a beschikking results, one a belanghebbende can contest. An article that establishes a fact gets INFORMATIEF with GEEN_BESLUIT, the pattern Burgerlijk Wetboek Boek 5 already uses, or no produces at all.
The demo corpus did neither. It carried 77 BESCHIKKING tags against the main corpus’s 8, because the POC migration stamped the value on nearly everything, including the Wet BRP and the Penitentiaire beginselenwet, which have no produces in the main corpus. Three laws were tagged BESCHIKKING and discoverable: HIDDEN at once. After the retagging the demo corpus has 41 BESCHIKKING, 25 INFORMATIEF and 13 RECHTSPOSITIE.
RECHTSPOSITIE for positions that arise by operation of lawKieswet article B1 says who is entitled to vote. No administrative body decides it, nobody applies, and there is no besluit to contest, so BESCHIKKING would be false. But the citizen it concerns wants to see it, and calling it INFORMATIEF would file voting rights alongside a register lookup.
Schema v0.5.9 adds RECHTSPOSITIE to legal_character: a legal position of a person arising by operation of law. Voting rights, majority, nationality, and the gezag and curatele provisions of the Burgerlijk Wetboek.
It is the only construct this RFC adds. Thirteen articles in the demo corpus carry it.
discoverableA law belongs on a portal when one of its articles produces a BESCHIKKING or a RECHTSPOSITIE. Which portal follows from the key the law computes on: kvk_nummer or loonheffingennummer for a business, bsn for a citizen.
Delegation laws are recognised by the outputs they supply (heeft_delegaties, subject_ids, delegation_types), the contract delegation.js already consumes. Gezag and curatele are rechtsposities, so without this they would show up as regelingen.
hidden_laws in demo-config.yaml stays. It narrows what a deployment shows, on top of what the law says, and no longer has to contradict it (RFC-022, design principle 6).
The distinction comes from the Awb, and produces is where the corpus already records how a modeller read a statute. A portal reading it gets the same answer the law gives.
The retagging was checked against what the portal showed before: 14 citizen laws and 12 business laws, unchanged after the switch. Where the derivation and the old field disagreed, the old field turned out to be wrong, which is how wet_brp and the Penitentiaire beginselenwet were found tagged as decisions.
Retagging 37 files is a legal reading, one article at a time, and a confident wrong call is worse than the mess it replaces. Nothing keeps it correct afterwards: the schema cannot tell a misapplied BESCHIKKING from a right one, so this rests on review like the rest of the modelling.
Deriving audience from parameter names is the weakest part. It happens to be exact across all 26 portal laws, but loonheffingennummer had to be added when zvw/werkgeversbijdrage fell off the business portal, and the next law with an unusual key will need the same treatment.
Alternative 1: Add discoverable to the schema. Rejected. It answers three questions at once, and RFC-001 removed it for a reason that still holds once the reason is stated correctly.
Alternative 2: Derive entry points from the dependency graph. Rejected after testing. wet_inkomstenbelasting is referenced 36 times and is still something a citizen wants to see; the Penitentiaire beginselenwet is referenced 5 times and should stay hidden.
Alternative 3: Detect it from the statutory wording. Rejected. Article 42 Penitentiaire beginselenwet gives a detainee “recht op verzorging door een aan de inrichting verbonden arts”, a right of a natural person. What separates the cases is whether the right is claimed from an administrative body and settled by a besluit, which no keyword captures.
Alternative 4: Bind produces to the Uniforme Productnamenlijst. Rejected, though the UPL corroborates this RFC: it lists zorgtoeslag with Burger, Aanvraag and a basis of article 2 Wet op de zorgtoeslag, the article named above, and has no entry for the Penitentiaire beginselenwet. It is an administrative catalogue revised quarterly, and it points at the law; having the law point back would make the norm depend on its own packaging. It remains useful for checking a reading against.
The main corpus needed no change. Schema v0.5.9 adds one enum value; the Rust model reads legal_character as a string, so the engine is untouched.
frontend-demo/src/data/entrypoints.js holds the derivation, and the five places that read discoverable now call it: portalLaws and findCase in demoStore.js, delegationProviders in delegation.js, simulationLaws in simulation/runner.js, and a label in ZaaksysteemView.vue. The field is gone from all 49 law files that carried it.
service, the other POC field RFC-001 replaced, is a separate cleanup with an existing answer in RFC-002. All 81 demo laws still carry it; none carries competent_authority.
An exploration by Bureau Architectuur of the Dutch Ministry of Economic Affairs and Climate Policy into the possibilities of transparent, executable legislation.
GitHub repository
How it works
Stay informed
Roadmap (Dutch)
Documentation
Research
Bureau Architectuur
Ministry of Economic Affairs and Climate Policy