Until now a cell recorded two things: a submission, and the decision on one (RFC-046, RFC-047). Art. 11, onder f, of the Leerplichtwet 1969 needs more. The leave asked under art. 13a must fall “buiten de schoolvakanties”. Up to this RFC the head judged that per application (decided_per_case_by). Which days are school holidays is no judgement, though. It follows from three things:
None of these is a submission. Nobody applies for the place where a school is established, and the school sets its own holidays as a rule, the way a school guide does. This RFC adds the recording that was missing, the executogram, and lets a reduction read it next to the law and the school’s policy.
Cell::record_executogram(service, stream, supplied, on) records a fact of a stream the cell keeps. No regulation runs for it. The chronolexogram has kind: EXECUTOGRAM, the stream’s $id under stream, and the stream’s ground as grondslag.corpus/cells/<cell>/executogrammen/<id>.yaml names the stream ($id), the article on whose ground the fact is recorded (grondslag) and the fields, with their types. The cell reads its streams when it opens.source: {executograms: <stream>} (schema v0.8.6) gives one row per executogram of the stream.valid_from). The holiday reduction reads them through source.regulation, as it reads the regeling.combine: ONLY (schema v0.8.6) gives the one result a FOREACH filter leaves: null when it leaves none, an error when it leaves more than one. A reduction picks the record in force on a day with it.Recording an executogram names no Awb article, and records nothing when a value is malformed.
A field is a string, a number, a boolean or a date, and none is named id: the row gives the executogram’s id under that name. The cell refuses an unknown key, a file not named after the $id, and any other entry in executogrammen/ that is not hidden. When it opens, it refuses a reduction that reads a stream it does not keep, and an executogram in its chronicle of such a stream. When it records, it refuses a ground that has no version in force that day, a name the stream does not declare, a value of the wrong type, and a field that cannot be absent and is left out. No law speaks of an incomplete executogram (Awb 4:5 speaks of an application), so the cell records one whole or not at all.
The stream is no rulework and has no $schema. just validate therefore checks only the reductions of a cell (corpus/cells/*/reducties), and the cell checks its streams itself.
Who records stays apart from what is recorded. The school is the cell (recording_actor). Its place is a fact on a time axis: “vestiging op Utrecht sinds 1 augustus 2020”. A move is a new executogram, and the earlier one stays.
| Part | What it does |
|---|---|
| Regeling art. 2 | Declares the place of establishment as three open terms (gemeente_van_vestiging, provincie_van_vestiging, deel_van_gemeente_van_vestiging) and gives regio_van_school. |
| Regeling art. 3 | Gives the region of a municipality: all provinces, and every municipality, former municipality and kern the article names. |
| Regeling art. 5 and 6 | Give the Christmas and May holidays of a school year, and the summer holiday of a year and a region. |
| School policy (fictitious) | fictief_beleid_vakantierooster_obs_de_klimop: the school’s autumn and spring holidays per school year. The version of 1 August 2026 holds those of 2026–2027 and nothing for another year. |
Stream vestiging | Where the school is established, since a day. |
reductie_plaats_van_vestiging | Fills the three terms of art. 2 from the executogram in force on the first and the last leave day: the one with the latest sinds on or before that day. Two executograms, because the school moves within the leave, are refused (combine: ONLY). |
reductie_verlof_valt_buiten_schoolvakanties | Fills verlof_valt_buiten_schoolvakanties of art. 13a. It asks the regeling for the region and its periods, and the school’s policy for the autumn and spring holidays of the school year of the first leave day. It then says whether a leave day falls in one of the six holidays. |
The term of art. 13a is unchanged: required, decided_per_case_by the head, no default. In the school’s cell the reduction answers it, so leave asked during a school holiday is refused without anyone judging it. When the cell does not know a holiday (the regeling fixes none for the region or the year, or the school’s policy in force does not hold the school year), its answer is null. The head decides the term per case, so the engine takes a null answer as silence (RFC-048), and the head judges then. Without a finding the decision fails.
| Choice | Source |
|---|---|
| The Christmas, May and summer holidays, and the region from the place of establishment | The law: the regeling, art. 2, 3, 5 and 6, under WPO art. 15 lid 2 |
| The autumn and spring holidays are the school’s own policy | Own choice. No article grants the bevoegd gezag this power in so many words. WMS art. 11 lid 1 onder l presumes it: the MR may advise on “elk door het bevoegd gezag te nemen besluit” on the “regeling van de vakantie”. That is advice, not consent, and it is not modeled |
| The holidays are policy, not a decision in the chronicle | Owner’s decision (19 October 2026). They are a rule of the school, as in a school guide, not an event in a process |
| One version of the policy per school year | Own choice, after that decision: a school year gets its version from 1 August (valid_from) |
| The place of establishment is an executogram | Owner’s decision (18 October 2026). The paper defines an executogram as “de vastlegging van daadwerkelijke levering of afhandeling” of a zaak or dienst. A place of establishment fits that loosely; the paper calls its three types a first enumeration |
| Streams live in the cell’s directory | Own choice. RFC-022 §1.3 put them in a top-level chronicles/. Reductions already live with the cell (RFC-048), and a stream is read only by them |
| The region on the leave days, not on the day of the decision | Owner’s decision (18 October 2026): what counts is whether the leave falls in the school’s holidays |
| A move within the leave fails the decision, rather than judging each day | Own choice. The regeling gives a school one region (art. 2), so a leave in two regions has no answer in it. Judging each day would need the regeling per leave day, which a reduction cannot call per element |
| The leave days reach the reduction for the vestiging from the question around it | Own choice. Art. 2 of the regeling names no day; the cell passes on what art. 13a asked |
| The school year of the leave is that of the first leave day | Own choice, as in RFC-048 §2 |
| Leave that has one day in a holiday does not fall outside the school holidays | Own choice: art. 11, onder f, says “slechts buiten de schoolvakanties” and does not split a request |
| Gemeente, provincie and deel as three open terms of art. 2 | Own choice. Art. 3 divides by province and municipality, and for four municipalities by a former municipality or a kern |
| The open bodies of Caribisch Nederland in the term for the municipality | Own choice |
| A municipality that art. 3 does not name is in no region | The law. West Betuwe (formed in 2019) is not named; art. 4 covers mergers after publication only |
| Art. 6 keyed by calendar year | The law: “voor de jaren 2026, 2027, 2028, 2029 en 2030” |
| A null answer leaves the term to the head | RFC-048 and the engine: a null answer is silent where the term has a default or is decided per case |
Cell::explain_answer gives the reasoning, down to the place of establishment.CircularReference), so a cycle fails the decision instead of running without end. The guard refuses any nested ask of the same term, also for another day or other parameters.Cell::decide_ex_officio, which recorded the school’s fixing of its holidays as a decretogram without a submission. The owner dropped it (19 October 2026). The rooster existed only as fictitious policy, so recording it ex officio proved nothing the executogram does not already show.chronicles/, as RFC-022 §1.3 has it. Not taken here, see the table above.$rij.0) instead of combine: ONLY. The engine supports the index, the schema does not. An index takes the first of two records silently, while ONLY refuses two.source.executograms, only in a REDUCTIE and alone in its source; combine: ONLY.Source::executograms and CombineOp::Only in law-model; load_check::chronicle_read for both chronicle sources; combine_only in operations.rs; the type checker and the unit inference take the body’s type and unit.packages/cel: stream.rs (Stream, loading executogrammen/), Gram::stream, Cell::record_executogram, Cell::streams, reading::executogram_rows, reading::refuse_unknown_streams; the Reader answers inside its own reductions.eerste_jaar_schooljaar, laatste_jaar_schooljaar); the stream and the two reductions of OBS De Klimop.legal_basis, and art. 1, 8, 9 and 10, which the Leerplichtwet 1969 and the regeling cite in their text.packages/cel/tests/schoolvakanties.rs (Christmas, region, the school’s own autumn holiday, a move) and packages/cel/tests/executograms.rs (recording and reading back an executogram, and a reduction that asks its own answer).packages/poc-chronolexografie, see the PoC portal) records the school’s vestiging whenever the cell of the vakantieverlof case starts, from begin in its case file, through Cell::record_executogram, dated 1 August 2026. Its form no longer asks the head whether the leave falls outside the school holidays. A seventh scenario plays leave in the Christmas holiday, refused without a judgement of the head; kern.rs plays it through the app’s functions.REDUCTIE and source.decisions, then implements on a reduction (v0.8.5), and now source.executograms and combine: ONLY on a FOREACH (v0.8.6). These are constructs for a cell, not for law. They could move to an extension instead: a schema or profile of its own for reductions, or an extension namespace, so that the law format stays about law. Not decided (Tim, 19 October 2026).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