besluit_soort — waarom de enum-pilot is gepauzeerd
Op 2026-05-11 werd de pilot voor catalogus.besluit_soorten gestart per ADR-0033. De eerste corpus-query voor besluit_kind = 'vaststelling' (14.156 rijen, 61% van het corpus) onthulde dat de enum structureel muddled is — geen enkele Awb-artikel ankert "vaststelling" als een kind van besluit. De pilot is gepauzeerd tot de axis is uitgedacht.
Wat de gebruikers-correctie zei
Verbatim 2026-05-11:
"vaststelling is not a type of decision indeed. It is letting you know a decision was made. vaststellen is the act of in writing confirming the decision has been made and letting you know what it is."
Dus vaststelling is een event / aankondiging, geen taxonomie-entry. Het is de handeling van het formeel-op-schrift-stellen + publiceren dat een besluit is genomen. Dat is metadata óp een besluit (wanneer vastgesteld, door wie, waar bekendgemaakt) — geen kind dat het besluit is.
De diepere bevinding — enum husselt drie axes
De huidige 20-waarden-enum mengt minstens vier verschillende dingen:
| Axis | Voorbeelden | Wat het werkelijk is | Waar het thuishoort |
|---|---|---|---|
| Lifecycle-event (actie genoteerd tegen een besluit) | vaststelling, wijziging, intrekking, heroverwegingsbesluit | Event-log entries — "dit besluit is vastgesteld / gewijzigd / ingetrokken op datum X" | Mogelijk in publicatie.* of in een event-log naast besluit.besluiten |
| Beschikkings-content-type (Awb 1:3 lid 2 familie) | weigering, fictieve_weigering, gedoogbesluit | Echte kinds van beschikking | Een echte besluit_soort (klein, ankerable) |
| Specifiek genoemd besluit (eigen statutaire basis) | voorbereidingsbesluit (Ow 4.14), aanwijzingsbesluit (Pw 121), instructiebesluit, reactieve_aanwijzing (Wro 3.8) | Distinctieve besluit-types elk anker aan één artikel | besluit_soort-rijen OF aparte side-table — open |
| Rechterlijke uitspraak (al verplaatst via ADR-0035) | rechterlijke_uitspraak, tussenuitspraak, einduitspraak, conclusie_pg, rechterlijke_zelfvoorziening | Wet RO + Awb afd. 8 | uitspraak.uitspraken (apart schema) |
| Politieke handeling (deferred in ADR-0033) | motie, amendement, raadsvoorstel, procedurele-mededeling | Volksvertegenwoordiging-handelingen | Open — politiek.* schema of out of scope |
ADR-0032 v3 had al gewezen naar deze richting: "besluit_kind confirmed lifecycle-only with content-type routing through entity_terms" — maar de conclusie was nog niet volledig op de enum toegepast.
De keuze — pause vóór anchoring
Per ADR-0033's anker-protocol: een gesloten-vocab-rij moet ankeren op een corpus-geverifieerd wet-artikel. Anchoring van een muddled enum schendt het "no errors at this level" mandaat — je legt verkeerde claims vast met een correcte-uitziend anker.
Path 1 (gekozen): pause catalogus.besluit_soorten pilot. Pak in een aparte sessie de axis-vraag op. Anchor pas wanneer de enum een coherente axis vertegenwoordigt.
Alternatieve paden (afgewezen):
- Doorgaan met anchoring — riskant, leidt tot anchored-foute-rijen die later moeten worden vernietigd.
- Sneltest-axis-keuze + door — onvoldoende onderzoek, herhaalt vorige axis-fouten.
Open vragen voor de hervatting
- Wat is de juiste axis voor
besluit_soort? Meest verdedigbare lezing: content-type only —besluit_soortenumereert de beschikkings-kinds (Awb 1:3 lid 2 familie) + genoemde besluit-types met eigen wettelijke basis. Lifecycle gaat elders. - Waar wonen lifecycle-events? Drie opties:
- (a) Side-tabel
besluit.lifecycle_events(één rij per (besluit, event, datum) — vaststelling / wijziging / intrekking / heroverweging) - (b) Kolommen op
besluit.besluiten(vaststellingsdatumbestaat al; toevoegenintrekking_op,wijziging_op— maar dat vermengt one-shot updates met multi-event history) - (c) In
publicatie.*(elke lifecycle-event is een publicatie-event) - Lean: (a) — proper event-log laat sequence + provenance noteren zonder kolom-bloat.
- (a) Side-tabel
- Waar wonen genoemde besluit-types? Rijen in
besluit.besluitenmetbesluit_soortop die waarde (optie A), of sidecars zoalsbesluit.voorbereidingsbesluitenomdat statutaire shape echt verschilt (optie B)? - Wat ziet de overgebleven enum eruit na de split? Vermoedelijk ~5-7 waarden: weigering, fictieve_weigering, gedoogbesluit (Awb 1:3 lid 2 content-types), plus eventueel voorbereidingsbesluit / aanwijzingsbesluit / instructiebesluit / reactieve_aanwijzing (als hun shape overeenkomt — anders side-table).
Wat dit raakt aan vandaag's werk (2026-05-12)
De expression_aard-enum die we vandaag hebben ontworpen (zie Expression-aarden) heeft dezelfde discipline gevolgd: lifecycle-positie zit in een aparte as (primaire vs afgeleide Expression), niet in dezelfde enum als content-vorm. De besluit_soort-pauze valideert deze aanpak — wanneer je merkt dat een enum drie axes husselt, splits ze.
Onderliggende ADRs en docs
- ADR-0032 v3 —
besluit_kind confirmed lifecycle-only with content-type routing through entity_terms - ADR-0033 — Schema noun-families + legal-anchor protocol (waarom muddled-enums niet ankerable zijn)
- ADR-0035 — uitspraak-stack (al excised uit besluit-stack)
docs/handoffs/2026-05-11-besluit-soort-enum-restructure.md— de pause-beslissing