RFC-045: The Application as Something the Awb Hooks Onto

ProposedPartially implemented
Depends onRequired by

Context

A specific law says that someone may apply for a decision. The Algemene wet bestuursrecht (Awb) says what every application contains and what follows once it is received. For vakantieverlof:

  • Leerplichtwet 1969 art. 13a lid 1: the head of the school grants leave “op aanvraag” of the parents.
  • Awb 4:2 lid 1: “De aanvraag wordt ondertekend en bevat ten minste: a. de naam en het adres van de aanvrager; b. de dagtekening; c. een aanduiding van de beschikking die wordt gevraagd.”
  • Awb 4:13: the decision is due within the statutory period or, without one, within a reasonable period “na ontvangst van de aanvraag”. Lid 2 puts the outer limit of that reasonable period at eight weeks.

Article 13a does not mention the Awb, and it does not need to.

RFC-007 lets an article hook onto another, filtered on the legal character of a decision. An application is not a decision, so there was nothing to hook onto. RFC-008 has an AANVRAAG stage in the procedure of a beschikking, but a hook there only fires when a caller executes the decision from that stage, and none does.

Decision

An article can say that it establishes an application, and a hook can apply to one. Executing the article fires those hooks.

An article establishes an application

produces gets an optional block submission:

# Leerplichtwet 1969, art. 13a execution: produces: submission: kind: AANVRAAG

kind names what the belanghebbende submits. Schema v0.8.0 allows AANVRAAG (Awb 1:3 lid 3). A bezwaarschrift can later be a second kind. The block sits next to legal_character and does not change the article’s own outputs.

An article that also decides on the application writes produces as a list (schema v0.8.1, RFC-047). The application is then an item of its own, with type: AANVRAAG, the parameters it contains, and requests, the article whose decision it asks for:

# 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]

A hook applies to an application

applies_to gets two fields:

FieldMatches
submissionproduces.submission.kind of the executing article, or the type of one of its items
established_bythe executing article itself, <regulation>#<article> without a paragraph
# Awb 4:2 hooks: - hook_point: pre_actions applies_to: submission: AANVRAAG
  • A hook names legal_character or submission, not both. The schema says so with oneOf, and the engine refuses such a law when it loads it.
  • A hook on a submission takes no stage or decision_type. It fires whenever the establishing article runs.
  • established_by narrows the hook to the application of one article, for policy that works out one law’s application.

The RFC-007 hooks index gets a second kind of key, (hook_point, kind), next to (hook_point, legal_character).

What the application contains

The application holds the parameters of the establishing article plus those of the hooks that fire on it. When produces is a list, those of the article are the ones its item lists under parameters; in the object form, all of them. For vakantieverlof that is bsn_jongere, eerste_verlofdag and laatste_verlofdag from art. 13a, and the name, address, date and signature from Awb 4:2. The parameter a hook names in produces.moment, such as datum_ontvangst from Awb 4:13, holds the moment the body establishes and is no part of what the application contains. What the administrative body needs to decide, such as the judgement under art. 11 onder f, is a parameter of the decision, not of the application.

The moment that counts

produces.moment says which moment counts in law for what an article produces. Its legal_basis cites the provision that says so, in the same form as the legal_basis on a field or an action:

# Awb 4:13 produces: moment: parameter: datum_ontvangst legal_basis: law: Algemene wet bestuursrecht bwb_id: BWBR0005537 article: '4:13' paragraph: '1' url: https://wetten.overheid.nl/BWBR0005537/2024-01-01#Artikel4:13

The engine does not read it. It is there for a runtime that records the application as a dated fact.

The engine names the articles that take part

LawExecutionService::submission(law_id, article, date) returns the kind and the articles that take part: the establishing article, then each hook in the order the engine fires it. RuleResolver::find_submission_hooks answers the same question for one hook point. Both use the index and filters that execution uses. Unlike an execution, they do not report a hook whose declaration comes from another version of its law.

Why

Benefits

  • The application exists on its own, as in the Awb. It does not need a decision to be modeled first.
  • No specific law names the Awb, and every application gets the same Awb core.
  • A change to Awb 4:2 reaches every application through one new Awb version.

Tradeoffs

  • More hooks fire: every run of art. 13a now fires Awb 4:2 and 4:13.
  • Afdeling 4.1.1 of the Awb concerns applications for a beschikking. Without a filter on the decision taken on the application, Awb 4:2 also fires on an application for another kind of decision. The list form names that decision with requests; a hook filter on it is left for later.
  • A hook parameter that the caller does not pass must be required: false, or the execution of the specific law fails.
  • A hook on a submission has no stage. An article with both a staged procedure and produces.submission fires Awb 4:2 and 4:13 at every execute_stage call. No article in the corpus has both yet. The slice that adds the decision on the application decides at which stage they fire. (Note, October 2026: RFC-047 fires them at the stage named after the kind, AANVRAAG.)

Alternatives Considered

The application as the first stage of the decision (RFC-008 as it stands). Rejected: the hooks never fire.

The specific law names the Awb (includes: algemene_wet_bestuursrecht#4:2). The text does not say it, and a law that forgets it loses the Awb fields without notice.

legal_character: AANVRAAG. An application is not a decision, and the legal character is decision vocabulary (Awb 1:3).

A string form for the provision behind the moment (algemene_wet_bestuursrecht#4:13 lid 1). Rejected: the schema already cites provisions with legal_basis, and a second notation would mean two ways to say the same thing.

A field on each parameter that says who supplies it (origin). Rejected: who supplies a value is process information, not law. The rulework says which data are needed; the structure above says which of them the application holds.

Implementation

  • Schema v0.8.0: produces.submission, produces.moment, and applies_to.submission and established_by. Schema v0.8.1: the application as a list item with type, parameters and requests.
  • packages/law-model reads them and refuses an established_by with a paragraph.
  • packages/engine files hooks on a submission in the hooks index, fires them when the establishing article runs, and refuses a hook that names both a decision and a submission.
  • Leerplichtwet 1969 art. 13a establishes an AANVRAAG; Awb 4:2 and 4:13 hook onto it. A scenario next to the Leerplichtwet proves the result.
  • Not built: a filter on the decision taken on the application, and other kinds of submission.

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