feat(behandelportal): WP-65b beoordeling besluit (decision write)
CI / changes (pull_request) Successful in 17s
CI / lint (pull_request) Failing after 56s
CI / frontend (pull_request) Successful in 2m36s
CI / storybook-a11y (pull_request) Failing after 3m19s
CI / backend (pull_request) Failing after 1m55s
CI / api-client-drift (pull_request) Canceled after 0s
CI / e2e (pull_request) Canceled after 40s
CI / semgrep (pull_request) Canceled after 24s

Adds POST /beoordeling/{id}/besluit: a Besluit enum (Goedkeuren/Afwijzen/
MeerInfoOpvragen) backed by new Aanvraag.BesluitStatus/BesluitToelichting
columns, gated by the same BeoordelingRules.CanDecide the read side's
canBesluiten flag already uses (409 on an illegal transition, 400 on a
missing required toelichting). Mappers.ToStatusDto gains the "a recorded
decision wins" branch. FE: besluit.machine.ts + besluit-form organism
(same form idiom as change-request-form), wired into the beoordeling page
behind the server's canBesluiten flag.

Completes WP-65 (65a + 65b) — verified end-to-end against a running
backend (werkvoorraad -> beoordeling -> besluit -> status reflected back).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
eho
2026-08-03 09:46:20 +02:00
co-authored by Claude Sonnet 5
parent 4133b30e5d
commit af8a011819
20 changed files with 1303 additions and 20 deletions
@@ -3020,6 +3020,54 @@
<source>Opnieuw proberen</source>
<target datatype="html">Try again</target>
</trans-unit>
<trans-unit id="besluit.error.verplicht" datatype="html">
<source>Kies een besluit.</source>
<target datatype="html">Choose a decision.</target>
</trans-unit>
<trans-unit id="besluit.error.toelichtingVerplicht" datatype="html">
<source>Geef een toelichting.</source>
<target datatype="html">Give an explanation.</target>
</trans-unit>
<trans-unit id="besluit.success" datatype="html">
<source>Het besluit is vastgelegd.</source>
<target datatype="html">The decision has been recorded.</target>
</trans-unit>
<trans-unit id="besluit.heading" datatype="html">
<source>Besluit vastleggen</source>
<target datatype="html">Record a decision</target>
</trans-unit>
<trans-unit id="besluit.besluitLabel" datatype="html">
<source>Besluit</source>
<target datatype="html">Decision</target>
</trans-unit>
<trans-unit id="besluit.toelichtingLabel" datatype="html">
<source>Toelichting</source>
<target datatype="html">Explanation</target>
</trans-unit>
<trans-unit id="besluit.failed" datatype="html">
<source>Het vastleggen is niet gelukt:</source>
<target datatype="html">Recording the decision failed:</target>
</trans-unit>
<trans-unit id="besluit.optie.goedkeuren" datatype="html">
<source>Goedkeuren</source>
<target datatype="html">Approve</target>
</trans-unit>
<trans-unit id="besluit.optie.afwijzen" datatype="html">
<source>Afwijzen</source>
<target datatype="html">Reject</target>
</trans-unit>
<trans-unit id="besluit.optie.meerInfoOpvragen" datatype="html">
<source>Meer informatie opvragen</source>
<target datatype="html">Request more information</target>
</trans-unit>
<trans-unit id="besluit.submit" datatype="html">
<source>Besluit vastleggen</source>
<target datatype="html">Record decision</target>
</trans-unit>
<trans-unit id="besluit.submitBezig" datatype="html">
<source>Bezig met vastleggen…</source>
<target datatype="html">Recording…</target>
</trans-unit>
<trans-unit id="beheer.noTables" datatype="html">
<source>Er is geen stamdata om te beheren.</source>
<target datatype="html">There is no stamdata to manage.</target>
+103 -5
View File
@@ -156,6 +156,20 @@
<context context-type="linenumber">47</context>
</context-group>
</trans-unit>
<trans-unit id="besluit.error.verplicht" datatype="html">
<source>Kies een besluit.</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/behandelportal/src/app/behandeling/domain/besluit.machine.ts</context>
<context context-type="linenumber">46</context>
</context-group>
</trans-unit>
<trans-unit id="besluit.error.toelichtingVerplicht" datatype="html">
<source>Geef een toelichting.</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/behandelportal/src/app/behandeling/domain/besluit.machine.ts</context>
<context context-type="linenumber">54</context>
</context-group>
</trans-unit>
<trans-unit id="werkvoorraad.row.ingediend" datatype="html">
<source>ingediend op <x id="datum" equiv-text="formatDatumNl(item.submittedAt)"/></source>
<context-group purpose="location">
@@ -181,35 +195,105 @@
<source>Aanvraag</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/behandelportal/src/app/behandeling/ui/beoordeling.page.ts</context>
<context context-type="linenumber">62</context>
<context context-type="linenumber">69</context>
</context-group>
</trans-unit>
<trans-unit id="beoordeling.detail.heading" datatype="html">
<source>Aanvraaggegevens</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/behandelportal/src/app/behandeling/ui/beoordeling.page.ts</context>
<context context-type="linenumber">63</context>
<context context-type="linenumber">70</context>
</context-group>
</trans-unit>
<trans-unit id="beoordeling.documenten.heading" datatype="html">
<source>Documenten</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/behandelportal/src/app/behandeling/ui/beoordeling.page.ts</context>
<context context-type="linenumber">64</context>
<context context-type="linenumber">71</context>
</context-group>
</trans-unit>
<trans-unit id="beoordeling.failed" datatype="html">
<source>De aanvraag kon niet worden geladen.</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/behandelportal/src/app/behandeling/ui/beoordeling.page.ts</context>
<context context-type="linenumber">65</context>
<context context-type="linenumber">72</context>
</context-group>
</trans-unit>
<trans-unit id="beoordeling.retry" datatype="html">
<source>Opnieuw proberen</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/behandelportal/src/app/behandeling/ui/beoordeling.page.ts</context>
<context context-type="linenumber">66</context>
<context context-type="linenumber">73</context>
</context-group>
</trans-unit>
<trans-unit id="besluit.success" datatype="html">
<source>Het besluit is vastgelegd.</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/behandelportal/src/app/behandeling/ui/besluit-form/besluit-form.component.ts</context>
<context context-type="linenumber">35,37</context>
</context-group>
</trans-unit>
<trans-unit id="besluit.heading" datatype="html">
<source>Besluit vastleggen</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/behandelportal/src/app/behandeling/ui/besluit-form/besluit-form.component.ts</context>
<context context-type="linenumber">37,39</context>
</context-group>
</trans-unit>
<trans-unit id="besluit.besluitLabel" datatype="html">
<source>Besluit</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/behandelportal/src/app/behandeling/ui/besluit-form/besluit-form.component.ts</context>
<context context-type="linenumber">43</context>
</context-group>
</trans-unit>
<trans-unit id="besluit.toelichtingLabel" datatype="html">
<source>Toelichting</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/behandelportal/src/app/behandeling/ui/besluit-form/besluit-form.component.ts</context>
<context context-type="linenumber">59,60</context>
</context-group>
</trans-unit>
<trans-unit id="besluit.failed" datatype="html">
<source>Het vastleggen is niet gelukt:</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/behandelportal/src/app/behandeling/ui/besluit-form/besluit-form.component.ts</context>
<context context-type="linenumber">75,76</context>
</context-group>
</trans-unit>
<trans-unit id="besluit.optie.goedkeuren" datatype="html">
<source>Goedkeuren</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/behandelportal/src/app/behandeling/ui/besluit-form/besluit-form.component.ts</context>
<context context-type="linenumber">101</context>
</context-group>
</trans-unit>
<trans-unit id="besluit.optie.afwijzen" datatype="html">
<source>Afwijzen</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/behandelportal/src/app/behandeling/ui/besluit-form/besluit-form.component.ts</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="besluit.optie.meerInfoOpvragen" datatype="html">
<source>Meer informatie opvragen</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/behandelportal/src/app/behandeling/ui/besluit-form/besluit-form.component.ts</context>
<context context-type="linenumber">105</context>
</context-group>
</trans-unit>
<trans-unit id="besluit.submit" datatype="html">
<source>Besluit vastleggen</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/behandelportal/src/app/behandeling/ui/besluit-form/besluit-form.component.ts</context>
<context context-type="linenumber">109</context>
</context-group>
</trans-unit>
<trans-unit id="besluit.submitBezig" datatype="html">
<source>Bezig met vastleggen…</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/behandelportal/src/app/behandeling/ui/besluit-form/besluit-form.component.ts</context>
<context context-type="linenumber">110</context>
</context-group>
</trans-unit>
<trans-unit id="werkvoorraad.heading" datatype="html">
@@ -870,6 +954,20 @@
<context context-type="linenumber">107</context>
</context-group>
</trans-unit>
<trans-unit id="common.ja" datatype="html">
<source>Ja</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/shared/src/ui/radio-group/radio-group.component.ts</context>
<context context-type="linenumber">12</context>
</context-group>
</trans-unit>
<trans-unit id="common.nee" datatype="html">
<source>Nee</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/shared/src/ui/radio-group/radio-group.component.ts</context>
<context context-type="linenumber">13</context>
</context-group>
</trans-unit>
<trans-unit id="spinner.aria" datatype="html">
<source>Bezig met laden</source>
<context-group purpose="location">