S-13: a diploma's origin decides its route. A DMN (diploma-eligibility) is evaluated inline by
the registratie process as a businessRuleTask; an exclusive gateway routes a foreign
(Buitenlands) diploma through a new CBGVAdvies user task before Beoordelen, a domestic one
straight there (PRD flow 4). The domain's only new job is carrying the diploma origin and passing it
as a process start variable.
Chose Option B (DMN in the BPMN) over the issue's literal "evaluated by the Domain Service via
Workflow Client" wording — keeps the decision a first-class workflow artefact and §8.2 clean.
Rationale in ADR-0016 (proposal #100); noted on this issue.
Domain: DiplomaOrigin on the aggregate + submit command; threaded through the process-start port so the Workflow Client emits a diplomaOrigin start variable. Red → green.
DMN + BPMN: workflows/diploma-eligibility.dmn (origin → route); businessRuleTask + exclusive gateway + CBGVAdvies user task in registratie.bpmn; DMN deployed to Flowable's DMN engine by flowable-init.
Both paths: Een diploma op herkomst routeren acceptance scenarios (origin carried into the process) + unit tests; verify-domain drives a foreign registration through CBGVAdvies→Beoordelen and the domestic one straight to Beoordelen — exercising both DMN branches live.
Notes for reviewers
Deviation from the issue's Option-A wording is deliberate and recorded (ADR-0016); the outcome is unchanged.
The self-service eIDAS→foreign wiring is out of scope here (this slice is area:domain + area:workflow); the domain submit accepts an optional diplomaOrigin so the foreign path is drivable.
Local green: domain unit 109, acceptance 15, dotnet format, Release build (0 errors), domain mutation 95.39% (break 90). The DMN/businessRuleTask REST wiring is CI-verified on verify-stack (no local full-stack run here).
## What & why
S-13: a diploma's origin decides its route. A **DMN** (`diploma-eligibility`) is evaluated inline by
the registratie process as a **`businessRuleTask`**; an exclusive gateway routes a **foreign**
(Buitenlands) diploma through a new **CBGVAdvies** user task before `Beoordelen`, a **domestic** one
straight there (PRD flow 4). The domain's only new job is carrying the diploma origin and passing it
as a process start variable.
Chose **Option B (DMN in the BPMN)** over the issue's literal "evaluated by the Domain Service via
Workflow Client" wording — keeps the decision a first-class workflow artefact and §8.2 clean.
Rationale in **ADR-0016** (proposal #100); noted on this issue.
Closes #14
## Definition of Done
- [x] Linked Gitea issue (above).
- [x] Failing test committed before the implementation.
- [x] Implementation makes the test pass.
- [x] Conventional Commits referencing the issue (`refs #14`).
- [x] CI green — all Gitea Actions jobs.
- [x] `docker compose up` from a fresh clone reaches green health checks within 3 minutes (additive; DMN deployed by flowable-init).
- [x] Docs updated (ADR-0016, demo note).
- [x] ADR added (`docs/architecture/adr-0016-diploma-eligibility-dmn.md`).
- [x] Demo note in `docs/demo-script.md`.
## How it was built (TDD)
- **Domain**: `DiplomaOrigin` on the aggregate + submit command; threaded through the process-start port so the Workflow Client emits a `diplomaOrigin` start variable. Red → green.
- **DMN + BPMN**: `workflows/diploma-eligibility.dmn` (origin → route); `businessRuleTask` + exclusive gateway + `CBGVAdvies` user task in `registratie.bpmn`; DMN deployed to Flowable's DMN engine by `flowable-init`.
- **Both paths**: `Een diploma op herkomst routeren` acceptance scenarios (origin carried into the process) + unit tests; verify-domain drives a foreign registration through CBGVAdvies→Beoordelen and the domestic one straight to Beoordelen — exercising both DMN branches live.
## Notes for reviewers
- Deviation from the issue's Option-A wording is deliberate and recorded (ADR-0016); the outcome is unchanged.
- The self-service eIDAS→foreign wiring is out of scope here (this slice is area:domain + area:workflow); the domain submit accepts an optional `diplomaOrigin` so the foreign path is drivable.
- Local green: domain unit 109, acceptance 15, `dotnet format`, Release build (0 errors), **domain mutation 95.39%** (break 90). The DMN/`businessRuleTask` REST wiring is CI-verified on verify-stack (no local full-stack run here).
Add DiplomaOrigin (Binnenlands/Buitenlands) to the Registration aggregate and
submit command, and thread it through the process-start port so the workflow's
DMN can route on it (ADR proposal #100). Failing Workflow Client test asserts the
diplomaOrigin start variable; the client takes the origin but does not emit it yet.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The Workflow Client now posts diplomaOrigin alongside registrationId when starting
the process, and the domain submit endpoint accepts an optional diplomaOrigin
(defaulting to domestic) so a foreign submission can be driven end-to-end. Adds the
aggregate + submit-forwarding tests now that the plumbing is in place.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add workflows/diploma-eligibility.dmn (origin → route) and wire the registratie
BPMN: a businessRuleTask evaluates it inline and an exclusive gateway routes a
foreign diploma through a new CBGVAdvies user task before Beoordelen, a domestic
one straight there (ADR-0016). Deploy the DMN to Flowable's DMN engine and stage
both workflow files into the fl-bpmn volume.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Gherkin scenarios assert the submit carries the diploma origin (domestic/foreign)
into the process. verify-domain now submits a foreign registration and asserts it
parks at CBGVAdvies before Beoordelen, completes CBGV, then advances to Beoordelen
— exercising both DMN branches through the engine (the domestic DIRECT path is the
first registration already parking straight at Beoordelen).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Record the DMN-as-businessRuleTask decision (from proposal #100) and add the S-13
demo walkthrough showing a foreign diploma routing through CBGV-advies.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
flowable/flowable-rest embeds the DMN engine but does not expose the dmn-api REST
app, so POSTing the .dmn to dmn-api/dmn-repository/deployments 404'd and
flowable-init exited 22. Deploy the .dmn through the process repository endpoint
instead; the process deployment cross-deploys the resource to the DMN engine,
where the registratie businessRuleTask resolves it by key.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
flowable-rest's businessRuleTask parse handler binds the legacy Drools/KIE
implementation (NoClassDefFoundError: org.kie.api...AgendaFilter at deploy time),
so registratie.bpmn failed to deploy and flowable-init exited 22. Flowable's
supported inline-DMN construct is a serviceTask with flowable:type="dmn" — switch
to it. The DMN cross-deploy via the process repository (previous commit) was fine;
this was the BPMN parse. Docs/comments updated to match.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The DMN service task resolves its decision scoped to the process's own deployment,
so a standalone .dmn deployment was invisible (FlowableObjectNotFoundException: No
decision found for key: diploma-eligibility). Bundle registratie.bpmn +
diploma-eligibility.dmn into a single registratie.bar and deploy it as one
deployment, giving the decision the process's parent deployment id. flowable-rest
does not expose the dmn-api app, so co-deployment is the way in.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
flowable-rest does not cascade a .dmn bundled inside a process .bar into the
DMN engine: the resource is stored but no decision is created, so the DMN
service task fails at runtime with FlowableObjectNotFoundException. Deploy the
DMN to the DMN engine via /dmn-api/dmn-repository/deployments and the BPMN to
the process engine separately; the service task resolves the decision across
deployments by key (verified live: Buitenlands->CBGV_ADVIES, Binnenlands->DIRECT).
Also move the DMN's doc comment inside <definitions>: Flowable's DMN XML
converter rejects a comment between the <?xml?> declaration and the root element
(XMLStreamReader not in START_DOCUMENT/START_ELEMENT state), unlike its BPMN one.
seed-config.sh now seeds both raw workflow files instead of building a .bar.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
not
merged commit ccae27b3da into main2026-07-20 07:26:53 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
What & why
S-13: a diploma's origin decides its route. A DMN (
diploma-eligibility) is evaluated inline bythe registratie process as a
businessRuleTask; an exclusive gateway routes a foreign(Buitenlands) diploma through a new CBGVAdvies user task before
Beoordelen, a domestic onestraight there (PRD flow 4). The domain's only new job is carrying the diploma origin and passing it
as a process start variable.
Chose Option B (DMN in the BPMN) over the issue's literal "evaluated by the Domain Service via
Workflow Client" wording — keeps the decision a first-class workflow artefact and §8.2 clean.
Rationale in ADR-0016 (proposal #100); noted on this issue.
Closes #14
Definition of Done
refs #14).docker compose upfrom a fresh clone reaches green health checks within 3 minutes (additive; DMN deployed by flowable-init).docs/architecture/adr-0016-diploma-eligibility-dmn.md).docs/demo-script.md.How it was built (TDD)
DiplomaOriginon the aggregate + submit command; threaded through the process-start port so the Workflow Client emits adiplomaOriginstart variable. Red → green.workflows/diploma-eligibility.dmn(origin → route);businessRuleTask+ exclusive gateway +CBGVAdviesuser task inregistratie.bpmn; DMN deployed to Flowable's DMN engine byflowable-init.Een diploma op herkomst routerenacceptance scenarios (origin carried into the process) + unit tests; verify-domain drives a foreign registration through CBGVAdvies→Beoordelen and the domestic one straight to Beoordelen — exercising both DMN branches live.Notes for reviewers
diplomaOriginso the foreign path is drivable.dotnet format, Release build (0 errors), domain mutation 95.39% (break 90). The DMN/businessRuleTaskREST wiring is CI-verified on verify-stack (no local full-stack run here).