feat(workflow): diploma-eligibility DMN + CBGV-advies routing (S-13, refs #14)
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>
This commit is contained in:
38
workflows/diploma-eligibility.dmn
Normal file
38
workflows/diploma-eligibility.dmn
Normal file
@@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Diploma-eligibility decision (S-13, ADR-0016). Evaluated inline by the registratie process as a
|
||||
BPMN businessRuleTask: given the diploma's origin, it sets the `route` the process should take.
|
||||
A foreign (Buitenlands) diploma routes through the extra CBGV-advies assessment step; a domestic
|
||||
one (or anything else) goes DIRECT to beoordeling. FIRST hit policy: the foreign rule wins, and
|
||||
the empty-input catch-all is the default. -->
|
||||
<definitions xmlns="https://www.omg.org/spec/DMN/20191111/MODEL/"
|
||||
xmlns:flowable="http://flowable.org/dmn"
|
||||
id="diplomaEligibilityDefinitions"
|
||||
name="Diploma eligibility"
|
||||
namespace="http://respellion.nl/big/dmn">
|
||||
<decision id="diploma-eligibility" name="Diploma eligibility">
|
||||
<decisionTable id="dt-diploma-eligibility" hitPolicy="FIRST">
|
||||
<input id="in-origin" label="Diploma origin">
|
||||
<inputExpression id="ie-origin" typeRef="string">
|
||||
<text>diplomaOrigin</text>
|
||||
</inputExpression>
|
||||
</input>
|
||||
<output id="out-route" label="Route" name="route" typeRef="string"/>
|
||||
<rule id="rule-foreign">
|
||||
<inputEntry id="rule-foreign-in">
|
||||
<text>"Buitenlands"</text>
|
||||
</inputEntry>
|
||||
<outputEntry id="rule-foreign-out">
|
||||
<text>"CBGV_ADVIES"</text>
|
||||
</outputEntry>
|
||||
</rule>
|
||||
<rule id="rule-default">
|
||||
<inputEntry id="rule-default-in">
|
||||
<text></text>
|
||||
</inputEntry>
|
||||
<outputEntry id="rule-default-out">
|
||||
<text>"DIRECT"</text>
|
||||
</outputEntry>
|
||||
</rule>
|
||||
</decisionTable>
|
||||
</decision>
|
||||
</definitions>
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
|
||||
xmlns:flowable="http://flowable.org/bpmn"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
|
||||
xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"
|
||||
xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"
|
||||
@@ -20,7 +21,11 @@
|
||||
has not picked the task up within 14 days it fires a parallel token to an external-worker task
|
||||
(BeoordelingEscaleren); the Workflow Client reassigns the still-open Beoordelen task from the
|
||||
behandelaar group to teamlead (ADR-0015). The Beoordelen task stays open throughout — the timer
|
||||
only changes who may claim it. -->
|
||||
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). -->
|
||||
<message id="Message_Ingetrokken" name="RegistratieIngetrokken"/>
|
||||
|
||||
<process id="registratie" name="Registratie ontvangen" isExecutable="true">
|
||||
@@ -33,7 +38,35 @@
|
||||
flowable:type="external-worker"
|
||||
flowable:topic="OpenZaakAanmaken"/>
|
||||
|
||||
<sequenceFlow id="flow2" sourceRef="OpenZaakAanmaken" targetRef="Beoordelen"/>
|
||||
<sequenceFlow id="flow2" sourceRef="OpenZaakAanmaken" targetRef="DiplomaEligibiliteit"/>
|
||||
|
||||
<!-- S-13: evaluate the diploma-eligibility DMN inline (ADR-0016). Flowable runs the deployed
|
||||
`diploma-eligibility` decision against the diplomaOrigin start variable and sets the `route`
|
||||
output as a process variable. The gateway then routes a foreign diploma through CBGV-advies,
|
||||
a domestic one straight to Beoordelen. -->
|
||||
<businessRuleTask id="DiplomaEligibiliteit" name="Diploma-eligibiliteit bepalen" flowable:type="dmn">
|
||||
<extensionElements>
|
||||
<flowable:field name="decisionTableReferenceKey">
|
||||
<flowable:string><![CDATA[diploma-eligibility]]></flowable:string>
|
||||
</flowable:field>
|
||||
</extensionElements>
|
||||
</businessRuleTask>
|
||||
|
||||
<sequenceFlow id="flow2a" sourceRef="DiplomaEligibiliteit" targetRef="RouteOpDiploma"/>
|
||||
|
||||
<exclusiveGateway id="RouteOpDiploma" name="Buitenlands diploma?" default="flowDirect"/>
|
||||
|
||||
<sequenceFlow id="flowCbgv" sourceRef="RouteOpDiploma" targetRef="CBGVAdvies">
|
||||
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${route == 'CBGV_ADVIES'}]]></conditionExpression>
|
||||
</sequenceFlow>
|
||||
|
||||
<!-- The extra CBGV-style assessment for foreign diplomas (PRD flow 4). A CBGV medewerker
|
||||
completes it, after which the case continues to the regular beoordeling. -->
|
||||
<userTask id="CBGVAdvies" name="CBGV-advies" flowable:candidateGroups="cbgv"/>
|
||||
|
||||
<sequenceFlow id="flowCbgvNaarBeoordelen" sourceRef="CBGVAdvies" targetRef="Beoordelen"/>
|
||||
|
||||
<sequenceFlow id="flowDirect" sourceRef="RouteOpDiploma" targetRef="Beoordelen"/>
|
||||
|
||||
<userTask id="Beoordelen" name="Beoordelen" flowable:candidateGroups="behandelaar"/>
|
||||
|
||||
@@ -77,53 +110,79 @@
|
||||
<omgdc:Bounds x="100" y="100" width="30" height="30"/>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape id="s_task" bpmnElement="OpenZaakAanmaken">
|
||||
<omgdc:Bounds x="200" y="85" width="120" height="60"/>
|
||||
<omgdc:Bounds x="180" y="85" width="120" height="60"/>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape id="s_dmn" bpmnElement="DiplomaEligibiliteit">
|
||||
<omgdc:Bounds x="350" y="85" width="120" height="60"/>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape id="s_route" bpmnElement="RouteOpDiploma" isMarkerVisible="true">
|
||||
<omgdc:Bounds x="520" y="90" width="40" height="40"/>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape id="s_cbgv" bpmnElement="CBGVAdvies">
|
||||
<omgdc:Bounds x="500" y="200" width="120" height="60"/>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape id="s_beoordelen" bpmnElement="Beoordelen">
|
||||
<omgdc:Bounds x="390" y="85" width="120" height="60"/>
|
||||
<omgdc:Bounds x="630" y="85" width="120" height="60"/>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape id="s_end" bpmnElement="end">
|
||||
<omgdc:Bounds x="580" y="100" width="30" height="30"/>
|
||||
<omgdc:Bounds x="810" y="100" width="30" height="30"/>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape id="s_ingetrokken" bpmnElement="Ingetrokken">
|
||||
<omgdc:Bounds x="690" y="135" width="30" height="30"/>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape id="s_endIngetrokken" bpmnElement="endIngetrokken">
|
||||
<omgdc:Bounds x="690" y="250" width="30" height="30"/>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape id="s_escaleerTimer" bpmnElement="EscaleerTimer">
|
||||
<omgdc:Bounds x="700" y="70" width="30" height="30"/>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape id="s_escaleerBeoordeling" bpmnElement="EscaleerBeoordeling">
|
||||
<omgdc:Bounds x="800" y="20" width="120" height="60"/>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape id="s_endEscaleren" bpmnElement="endEscaleren">
|
||||
<omgdc:Bounds x="970" y="35" width="30" height="30"/>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNEdge id="e_flow1" bpmnElement="flow1">
|
||||
<omgdi:waypoint x="130" y="115"/>
|
||||
<omgdi:waypoint x="200" y="115"/>
|
||||
<omgdi:waypoint x="180" y="115"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge id="e_flow2" bpmnElement="flow2">
|
||||
<omgdi:waypoint x="320" y="115"/>
|
||||
<omgdi:waypoint x="390" y="115"/>
|
||||
<omgdi:waypoint x="300" y="115"/>
|
||||
<omgdi:waypoint x="350" y="115"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge id="e_flow2a" bpmnElement="flow2a">
|
||||
<omgdi:waypoint x="470" y="115"/>
|
||||
<omgdi:waypoint x="520" y="110"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge id="e_flowDirect" bpmnElement="flowDirect">
|
||||
<omgdi:waypoint x="560" y="110"/>
|
||||
<omgdi:waypoint x="630" y="115"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge id="e_flowCbgv" bpmnElement="flowCbgv">
|
||||
<omgdi:waypoint x="540" y="130"/>
|
||||
<omgdi:waypoint x="540" y="200"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge id="e_flowCbgvNaarBeoordelen" bpmnElement="flowCbgvNaarBeoordelen">
|
||||
<omgdi:waypoint x="620" y="230"/>
|
||||
<omgdi:waypoint x="660" y="230"/>
|
||||
<omgdi:waypoint x="660" y="145"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge id="e_flow3" bpmnElement="flow3">
|
||||
<omgdi:waypoint x="510" y="115"/>
|
||||
<omgdi:waypoint x="580" y="115"/>
|
||||
<omgdi:waypoint x="750" y="115"/>
|
||||
<omgdi:waypoint x="810" y="115"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNShape id="s_ingetrokken" bpmnElement="Ingetrokken">
|
||||
<omgdc:Bounds x="435" y="135" width="30" height="30"/>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape id="s_endIngetrokken" bpmnElement="endIngetrokken">
|
||||
<omgdc:Bounds x="435" y="220" width="30" height="30"/>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNEdge id="e_flow4" bpmnElement="flow4">
|
||||
<omgdi:waypoint x="450" y="165"/>
|
||||
<omgdi:waypoint x="450" y="220"/>
|
||||
<omgdi:waypoint x="705" y="165"/>
|
||||
<omgdi:waypoint x="705" y="250"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNShape id="s_escaleerTimer" bpmnElement="EscaleerTimer">
|
||||
<omgdc:Bounds x="480" y="70" width="30" height="30"/>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape id="s_escaleerBeoordeling" bpmnElement="EscaleerBeoordeling">
|
||||
<omgdc:Bounds x="580" y="20" width="120" height="60"/>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape id="s_endEscaleren" bpmnElement="endEscaleren">
|
||||
<omgdc:Bounds x="760" y="35" width="30" height="30"/>
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNEdge id="e_flow5" bpmnElement="flow5">
|
||||
<omgdi:waypoint x="495" y="70"/>
|
||||
<omgdi:waypoint x="495" y="50"/>
|
||||
<omgdi:waypoint x="580" y="50"/>
|
||||
<omgdi:waypoint x="715" y="70"/>
|
||||
<omgdi:waypoint x="715" y="50"/>
|
||||
<omgdi:waypoint x="800" y="50"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge id="e_flow6" bpmnElement="flow6">
|
||||
<omgdi:waypoint x="700" y="50"/>
|
||||
<omgdi:waypoint x="760" y="50"/>
|
||||
<omgdi:waypoint x="920" y="50"/>
|
||||
<omgdi:waypoint x="970" y="50"/>
|
||||
</bpmndi:BPMNEdge>
|
||||
</bpmndi:BPMNPlane>
|
||||
</bpmndi:BPMNDiagram>
|
||||
|
||||
Reference in New Issue
Block a user