RFC-045: Submissions and Decisions in the Law Format

ProposedPartially implemented
Depends onRequired by

Context

Leerplichtwet 1969 art. 13a lid 1 lets the head of a school grant leave “op aanvraag”. The rest comes from the Algemene wet bestuursrecht (Awb). Awb 4:2 says what an application holds and 4:13 when the decision is due; 7:11 decides an objection. Art. 13a names none of them.

The law format could not express this:

  • RFC-007 hooks filter on a decision’s legal character, and an application is not a decision.
  • RFC-008 has an AANVRAAG stage, but a hook there fires only when a caller runs the decision from that stage.
  • No article could take another article’s decision again.

Decision

The law format says what is submitted and what is decided on it. RFC-046 covers how a cell records it, and Applications, Decisions and Objections shows the pieces together.

  1. produces is a list when an article yields more than one thing: one item per type, a kind of submission (AANVRAAG, BEZWAAR) or a legal character. A submission lists its parameters and names the decision it asks for (requests). A decision lists its outputs and its derived data.

    Every output belongs to at most one item. One that belongs to none is allowed only beside a decision that lists its own outputs, and is not part of that decision. The engine computes an output only when something reads it (RFC-043).

  2. A hook can apply to a submission (applies_to.submission), narrowed to one article with established_by. It takes no stage or decision_type, and names a legal character or a submission, not both.

  3. produces.moment names the parameter that holds the moment the law counts from, with its legal_basis. The engine does not read it; a recording runtime does.

  4. Each item has its own stage. The stage named after the submission kind fires the hooks on the submission and computes no decision output. The other stages compute the decision. Outside a procedure every hook fires, as before.

  5. A decision gets its inputs from the submission, then policy (implements), then the authority’s findings (decided_per_case_by), passed apart from the parameters. Policy wins over a finding; a finding no article asks for is an error. Policy may take a cell’s answer (RFC-048 §2); where the cell answers, that answer sets a finding aside.

  6. A decision can be taken again. The type decision holds a decision value. source.article calls an article’s decision, by reference or by value. The call uses the decision’s own fields and findings, plus findings given anew.

  7. An objection is a second submission. Awb 7:11 establishes it and decides on it by calling the contested decision anew. It is admissible when on time and not against a decision on objection (taken_on). It gives cause when an output differs; derived data does not count.

# Leerplichtwet 1969, art. 13a produces: - type: AANVRAAG requests: leerplichtwet_1969#13a parameters: [bsn_jongere, eerste_verlofdag, laatste_verlofdag] - type: BESCHIKKING outputs: [verlofdagen, verlof_raakt_eerste_twee_lesweken, verlof_verleend]

Why

Benefits

  • The application exists on its own, as in the Awb. A change to Awb 4:2 reaches every application through one Awb version.
  • One article holds application and decision, as the text of art. 13a does.
  • Whether an objection is founded is not up to the runtime. Awb 7:11 calls the contested article again on the facts of that day.
  • A runtime without a chronicle uses the same law.

Tradeoffs

  • Every run of art. 13a also runs Awb 4:2 and 4:13.
  • A hook parameter the caller does not pass must be required: false.
  • To keep application and decision apart, a runtime must run stages.

Open points are listed in Applications, Decisions and Objections.

Alternatives Considered

  • The application as the first stage of the decision (RFC-008 as it stood). Its hooks do not fire on their own.
  • The specific law names the Awb (includes: algemene_wet_bestuursrecht#4:2). The text does not say it, and forgetting it loses the Awb fields silently.
  • legal_character: AANVRAAG. An application is not a decision (Awb 1:3).
  • One object with submission and legal_character. The engine then skipped outputs at AANVRAAG by a rule of its own.
  • An id per item and decides_on (PR #1689). Names the law does not have, pointing the wrong way: an application asks for a decision. For the objection, Awb 6:4 with a link from 7:11 would likewise add a key that requests covers.
  • A separate article for the decision. The text of art. 13a does not split.
  • Decision inputs as parameters. They would become fields of the application.
  • A field per parameter saying who supplies it (origin). That is process, not law.

Deviations from earlier RFCs

Their text is not changed.

  • RFC-007: a hook on a legal character also matches an item with that type.
  • RFC-008: the application is an item of its own, not the first stage of the decision; AANVRAAG remains the stage where its hooks fire.
  • RFC-022: a decretogram is also an item with type: BESCHIKKING.

Implementation

SchemaAdds
v0.8.0produces.submission, produces.moment, applies_to.submission, established_by
v0.8.1produces as a list
v0.8.3BEZWAAR
v0.8.4the type decision, source.article, source.parameters_from, derived

Engine: hooks on a submission in the hooks index, LawExecutionService::execute_stage_at, resolve_article_call, load_check::reject_ambiguous_produces. Corpus: Leerplichtwet 1969 art. 13a, the Awb articles above and BABW art. 49, with scenarios.

References

RegelRecht

An exploration into transparent, executable legislation, and one of the three projects in the starting selection of the Nederlandse Digitale Dienst.

Links

GitHub repository
How it works
Stay informed
Roadmap (Dutch)
Documentation
Research

Contact

regelrecht@minbzk.nl

Part of

Nederlandse Digitale Dienst
Ministry of Economic Affairs and Climate Policy