From dc9cf41dc819632d1c8d0f687628fa0f818c3f41 Mon Sep 17 00:00:00 2001 From: Niek Otten Date: Fri, 17 Jul 2026 12:01:37 +0200 Subject: [PATCH] feat(workflow): diploma-eligibility DMN + CBGV-advies routing (S-13, refs #14) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- infra/docker-compose.yml | 10 ++- infra/flowable/docker-compose.yml | 14 +++- infra/seed-config.sh | 2 +- workflows/diploma-eligibility.dmn | 38 +++++++++ workflows/registratie.bpmn | 123 ++++++++++++++++++++++-------- 5 files changed, 150 insertions(+), 37 deletions(-) create mode 100644 workflows/diploma-eligibility.dmn diff --git a/infra/docker-compose.yml b/infra/docker-compose.yml index 1142dd5..e141d56 100644 --- a/infra/docker-compose.yml +++ b/infra/docker-compose.yml @@ -259,7 +259,7 @@ services: flowable-init: image: docker.io/curlimages/curl:latest restart: "no" - # registratie.bpmn is streamed into this external volume by infra/seed-config.sh. + # registratie.bpmn + diploma-eligibility.dmn are streamed into this external volume by infra/seed-config.sh. volumes: - fl-bpmn:/work:ro command: @@ -267,7 +267,15 @@ services: - -c - | base=http://flowable-rest:8080/flowable-rest/service/repository/deployments + dmnbase=http://flowable-rest:8080/flowable-rest/dmn-api/dmn-repository/deployments until curl -sf -u rest-admin:test "$$base" >/dev/null 2>&1; do echo "waiting for flowable-rest..."; sleep 3; done + # Deploy the diploma-eligibility DMN to the DMN engine so the registratie process's + # businessRuleTask can resolve it by key (S-13, ADR-0016). + if curl -s -u rest-admin:test "$$dmnbase?name=diploma-eligibility" | grep -q '"name":"diploma-eligibility"'; then + echo "diploma-eligibility already deployed; skip" + else + curl -sf -u rest-admin:test -F 'file=@/work/diploma-eligibility.dmn;filename=diploma-eligibility.dmn' "$$dmnbase" >/dev/null && echo "deployed diploma-eligibility" + fi if curl -s -u rest-admin:test "$$base?name=registratie" | grep -q '"name":"registratie"'; then echo "registratie already deployed; skip" else diff --git a/infra/flowable/docker-compose.yml b/infra/flowable/docker-compose.yml index f1921b6..084fe1f 100644 --- a/infra/flowable/docker-compose.yml +++ b/infra/flowable/docker-compose.yml @@ -35,12 +35,12 @@ services: condition: service_healthy networks: [cg] - # Deploys workflows/registratie.bpmn via the REST API once flowable-rest is up. - # Idempotent: skips if a deployment named "registratie" already exists. + # Deploys workflows/registratie.bpmn + diploma-eligibility.dmn via the REST API once flowable-rest is up. + # Idempotent: skips each if a deployment of that name already exists. flowable-init: image: docker.io/curlimages/curl:latest restart: "no" - # registratie.bpmn is streamed into this external volume by infra/seed-config.sh. + # registratie.bpmn + diploma-eligibility.dmn are streamed into this external volume by infra/seed-config.sh. volumes: - fl-bpmn:/work:ro command: @@ -48,7 +48,15 @@ services: - -c - | base=http://flowable-rest:8080/flowable-rest/service/repository/deployments + dmnbase=http://flowable-rest:8080/flowable-rest/dmn-api/dmn-repository/deployments until curl -sf -u rest-admin:test "$$base" >/dev/null 2>&1; do echo "waiting for flowable-rest..."; sleep 3; done + # Deploy the diploma-eligibility DMN to the DMN engine so the registratie process's + # businessRuleTask can resolve it by key (S-13, ADR-0016). + if curl -s -u rest-admin:test "$$dmnbase?name=diploma-eligibility" | grep -q '"name":"diploma-eligibility"'; then + echo "diploma-eligibility already deployed; skip" + else + curl -sf -u rest-admin:test -F 'file=@/work/diploma-eligibility.dmn;filename=diploma-eligibility.dmn' "$$dmnbase" >/dev/null && echo "deployed diploma-eligibility" + fi if curl -s -u rest-admin:test "$$base?name=registratie" | grep -q '"name":"registratie"'; then echo "registratie already deployed; skip" else diff --git a/infra/seed-config.sh b/infra/seed-config.sh index 4a2ae2d..570d65c 100755 --- a/infra/seed-config.sh +++ b/infra/seed-config.sh @@ -40,7 +40,7 @@ for key in "$@"; do oz) populate rr-oz-config "$here/openzaak/setup_configuration/." ;; nrc) populate rr-nrc-config "$here/opennotificaties/setup_configuration/." ;; kc) populate rr-kc-realms "$here/keycloak/realms/." ;; - fl) populate rr-fl-bpmn "$here/../workflows/registratie.bpmn" ;; + fl) populate rr-fl-bpmn "$here/../workflows/." ;; # registratie.bpmn + diploma-eligibility.dmn *) echo "unknown seed key: $key" >&2; exit 2 ;; esac done diff --git a/workflows/diploma-eligibility.dmn b/workflows/diploma-eligibility.dmn new file mode 100644 index 0000000..4dde9c2 --- /dev/null +++ b/workflows/diploma-eligibility.dmn @@ -0,0 +1,38 @@ + + + + + + + + diplomaOrigin + + + + + + "Buitenlands" + + + "CBGV_ADVIES" + + + + + + + + "DIRECT" + + + + + diff --git a/workflows/registratie.bpmn b/workflows/registratie.bpmn index 4817d99..8180567 100644 --- a/workflows/registratie.bpmn +++ b/workflows/registratie.bpmn @@ -1,6 +1,7 @@ + only changes who may claim it. + S-13 adds diploma-eligibility routing: between OpenZaakAanmaken and Beoordelen a DMN + businessRuleTask evaluates the `diploma-eligibility` decision on the diplomaOrigin start + variable; an exclusive gateway routes a foreign diploma through the CBGV-advies user task + before Beoordelen, a domestic one straight there (ADR-0016). --> @@ -33,7 +38,35 @@ flowable:type="external-worker" flowable:topic="OpenZaakAanmaken"/> - + + + + + + + + + + + + + + + + + + + + + + + + + @@ -77,53 +110,79 @@ - + + + + + + + + + + - + - + + + + + + + + + + + + + + + + - + - - + + + + + + + + + + + + + + + + + + + - - + + - - - - - - - - + + - - - - - - - - - - - - + + + - - + +