Leerplichtwet 1969 art. 13a lid 1: a claim to exemption for a holiday under art. 11 onder f “kan slechts worden gedaan indien het hoofd op aanvraag van de in artikel 2, eerste lid, bedoelde personen verlof heeft verleend”. Lid 2: the head grants it “slechts eenmaal voor ten hoogste tien dagen per schooljaar”, and never for “de eerste twee lesweken van het schooljaar”.
One article, two legal facts. The parents apply, and the head decides. RFC-045 made art. 13a establish the application, with Awb 4:2 and 4:13 hooked onto it. It left one problem open: a hook on a submission has no stage, so an article that is also a decision would fire the hooks on the application at every stage. The decision also needs values the application does not hold: when the school year starts, and whether the two facts of art. 11 onder f hold.
Art. 13a stays one article, and it produces two things: the application and the decision on it. produces lists them (schema v0.8.1). Each item says what it is with type and names what belongs to it. The application says what it contains and which decision it asks for; the decision names its outputs. The decision follows the Awb procedure for a beschikking (RFC-008), whose first stage is AANVRAAG.
produces as a listtype is a kind of submission (AANVRAAG) or a legal character (BESCHIKKING, TOETS and the rest). An article lists one item per type at most.parameters names the article’s parameters the item contains. For an application these are its fields, with those of the hooks on it.outputs names the article’s outputs the item yields. A submission without it yields none, so at AANVRAAG nothing of the decision is computed. The decision without it yields every output no other item lists.requests, on a submission only, names the article whose decision it asks for: <regulation>#<article>, also when that is the same article (Awb 1:3 lid 3, 4:2 lid 1 onder c).decision_type and procedure_id belong to a decision, as in the object form.The engine refuses a list with two items of one type, a parameter or output the article lacks, an output given to two items or to none, and requests on a decision. A requests to an article of the same law must name an article that takes a decision; one to another law is checked when it is used, since that law may load later.
An article that produces one thing keeps the object form, with legal_character and submission. Its meaning has not changed, and the corpus keeps it.
No item has a name of its own. An article and a type name one item, and an article reference is what the law itself uses to point at a decision.
When an article runs at one stage of its procedure, the stage named after the kind of submission (AANVRAAG) computes the outputs of the submission and fires the hooks on it. Every other stage computes the outputs of the decision, with the hooks on the decision at the stages they name: Awb 3:46 and 6:7 at BESLUIT, 6:8 at BEKENDMAKING.
| Stage | What runs |
|---|---|
| AANVRAAG | Awb 4:2 and 4:13; the application of art. 13a has no outputs |
| BESLUIT | the decision of art. 13a, Awb 3:46 and 6:7 |
| BEKENDMAKING | Awb 6:8 |
An article in the object form computes every output at every stage, as before. The rule for the hooks on a submission holds for it too: run at a stage of its procedure, an object with both submission and a legal character fires those hooks only at the stage named after the kind of submission. LawExecutionService::submission returns an error when that procedure has no such stage, because the hooks would then never fire. Run outside a procedure (evaluate_law, a BDD scenario, the editor), the article fires every hook, as before.
LawExecutionService::execute_stage_at runs one stage on a fresh state. Without a list of outputs it computes the outputs of that stage; with an empty list, only the hooks run. LawExecutionService::execute_stage walks the procedure the same way, so recording the application does not ask the head’s judgement. LawExecutionService::procedure_stage names what the stage requires and the articles that take part. Submission::stage names the stage at which the hooks on the application fire.
The application holds the parameters its item lists. What the head needs on top of it are open terms of art. 13a:
The law says what is needed. Who supplies it is decided by the process. In order of preference:
requests this decision.implements. The first lesdag comes from a fictitious policy of the school (fictief_beleid_schooljaar_obs_de_klimop).decided_per_case_by. The engine takes the judgement from the parameters under the term’s id. A filling regulation wins, because it is the general rule, and the trace records that the judgement was set aside and by which regulation. A regulation that returns null for the case is silent, and then the judgement applies. The judgement wins over a default.A date the stage requires (besluit_datum, bekendmaking_datum) is the day of the decision.
Cell::decide records one chronolexogram of kind BESCHIKKING, with refers_to set to the application’s chronolexogram. That application is one under the article whose submission requests this decision. The outputs of art. 13a and of Awb 3:46, 6:7 and 6:8 land in the chronolexogram.
The chronolexogram does not repeat the law. Its grondslag is the deciding article. Which provision asks a field, which article computed an output and which policy article filled a term all follow from the law in force on recorded_on, so it has no basis per field or output. Where a value came from follows from the law and refers_to: from the application if the application holds it, from policy if a regulation in force on recorded_on fills it with implements, otherwise from the deciding authority or the cell.
The cell refuses a decision on a chronolexogram that is not an application requesting it, on an application already decided on, and a value from the caller that comes from elsewhere. The chronicle’s clock keeps the decision on or after the application.
specifieke_aard_beroep_ouder), and the leave falls outside the school holidays (verlof_valt_buiten_schoolvakanties). Leave is refused unless both hold.verlof_verleend: false. Awb 3:46 and 6:7 still apply.Not modeled: “eenmaal per schooljaar” (it needs the chronicle read back), and lid 2’s second sentence for a young person who is kwalificatieplichtig.
Note: RFC-048 adds “eenmaal per schooljaar”: a reduction of the cell reads the decisions back and asks the school’s policy for the bounds of the school year.
decided_per_case_by that a regulation also fills, the cell accepts the head’s judgement and does not require it; the engine’s precedence decides which value counts. The chronolexogram records the value the engine used.gevraagde_beschikking) is still a field the applicant fills. requests could fill it; nothing in the law format marks that parameter as the one, and the cell does not guess.One object with both submission and legal_character (the first draft of this RFC). The engine then skipped the article’s outputs at AANVRAAG by a rule of its own. The list says it in the law.
List items with submission and legal_character as in the object form (an earlier draft of v0.8.1). The application did not say what it contains or which decision it asks for, and the two items had different shapes.
An id per item, and decides_on from the decision to the application. The ids are names the law does not have. The law points the other way: an application asks for a decision.
A separate article for the decision (PR #1689). Art. 13a has one machine-readable block, and the text does not split.
Decision inputs as parameters of art. 13a. They would become fields of the application, and the applicant does not supply them.
A field on each value that says who supplies it (origin). Rejected in RFC-045: process, not law.
The application must say what it contains and which decision it asks for (Awb 4:2 lid 1 onder c). Three RFCs of others are read differently here; their text is not changed.
produces.legal_character. A hook now also matches an item whose type is that legal character, and applies_to.submission an item whose type is that kind.requests; the stage AANVRAAG remains where its hooks fire.produces.legal_character: BESCHIKKING. It is also one of an item with type: BESCHIKKING.execute_stage_at, procedure_stage, procedure_of, Submission::stage, and decided_per_case_by read from the parameters. The law model reads both forms of produces (Article::get_produced, get_decision, get_submission, outputs_of, parameters_of). LawExecutionService::requested_decision and applications_for follow requests; the loader checks the list.produces as a list; the fictitious school policy in corpus/regulation/nl/uitvoeringsbeleid/.packages/cel: the fields of the application from its item, decision::derive, Cell::decide, refers_to on a chronolexogram (Gram in code), with grondslag and recording_actor as RFC-022 names them.produces as a list of items with type, requests, parameters and outputs.Note: RFC-050 adds objections, with Awb 7:11 as the decision on them.
Note: schema v0.8.4 adds derived to the decision item: the outputs listed there are data derived for the decision. The decision’s stages compute them and they are recorded with the decision, but they are not among the decision’s outputs. Every output still belongs to exactly one item, under outputs or derived. An output that no item lists is refused under every schema version, so a forgotten or misspelt output fails instead of turning into derived data (RFC-050).
An exploration into transparent, executable legislation, and one of the three projects in the starting selection of the Nederlandse Digitale Dienst.
GitHub repository
How it works
Stay informed
Roadmap (Dutch)
Documentation
Research
Nederlandse Digitale Dienst
Ministry of Economic Affairs and Climate Policy