灵活且数据感知的业务流程引擎通用框架
1. 流程定义:DeciClare
DeciClare 是一种混合视角的声明式流程和决策建模语言,专门针对松散框架的知识密集型流程(KiPs)。它可用于创建这些流程在控制流、数据和资源方面的详细模型。目前它采用抽象语法的直接实例化(即文本格式的临时可视化语法),因为真正的可视化语法尚未开发出来。
DeciClare 基于 Declare 语言及其大部分扩展,Declare 模型可轻松转换为等效的 DeciClare 模型。此外,它还添加了更多视角以及 DMN 语言的概念,使其具有“数据感知”能力,能根据特定执行上下文使用数据值来激活或停用约束,并对通常支配 KiPs 的决策逻辑进行建模。
DeciClare 支持 36 种约束模板,分为四个模板类:存在性、关系、资源和数据。其中 26 个模板具有时间参数,用于表示约束适用的时间间隔。
当前实现的 DeciClareEngine 工具支持 DeciClare 的 18 个最重要的约束模板。一个 DeciClare 模型可以包含满足相关要求的所有必要信息,能够对活动、资源及其所有关系进行全面建模,并可根据数据元素丰富约束的激活和停用决策,以实现与现实高度匹配的细节水平。
2. 演示:DeciClareEngine
DeciClareEngine 工具(可在 github.com/stevmert/DeciClareBPMS/blob/master/engine/releases/DeciClareEngine.jar 找到,代码也可在该 GitHub 上获取)用于演示上一节的通用框架如何实现。它是一个数据感知的声明式业务流程引擎(BPE),以 DeciClare 模型作为输入,支持给定流程模型的控制流、决策逻辑、时间限制、资源授权和资源使用。
启动 BPE 时,用户需先选择在流程实例中要承担的角色,然后主界面才会打开。屏幕顶部显示当前时间、用户(即当前资源)以及当前部分轨迹。屏幕中间显示 A 到 E 层。屏幕底部列出模型中使用的所有数据元素,并提供为当前实例添加或更改这些元素的选项。
用户可以通过点击 A 层或 B 层的活动来执行它,这会弹出一个屏幕,用户可以输入活动的持续时间并在活动执行过程中更改数据元素。B、C、D 和 E 层活动旁边的“解释”按钮会向用户展示导致该活动被放置在该特定层的一组特定约束(即未来限制或违规情况)。活动名称旁边会显示延迟和截止日期,并且可以随时查看其当前状态。用户可以点击屏幕底部或相应活动旁边的“相关模型”按钮,获取当前活动的约束子集。
下面以治疗手臂相关骨折的医疗流程为例进行演示:
|活动|S0|S1|S2|S3|S4|S5|S6|S7|S8|S9|S10|S11|S12|S13|
| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
|Register patient|B|B|E|E|E|E|E|E|E|E|E|E|E|E|
|Take medical history of patient|C|E|C|B|B|B|B|B|B|B|B|B|C|E|
|Clinical examination of patient|C|E|E|E|B|B|B|B|B|B|B|B|C|E|
|Doctor consultation|E|E|E|E|E|B|B|B|B|B|B|B|C|E|
|Take X-ray|E|E|E|E|E|B|B|B|B|B|B|B|C|E|
|Take CT scan|E|E|E|E|E|B|B|B|B|B|B|B|C|E|
|Prescribe NSAID painkillers|E|E|E|E|E|B|B|B|B|B|B|B|C|E|
|Prescribe SAID painkillers|E|E|E|E|E|B|B|B|B|B|B|B|C|E|
|Prescribe anticoagulants|E|E|E|E|E|B|D|D|D|D|D|D|D|E|
|Prescribe stomach protecting drug|E|E|E|E|E|B|B|B|B|B|B|B|C|E|
|Prescribe rest (=no treatment)|E|E|E|E|E|B|B|B|B|B|B|B|C|E|
|Apply ice|C|E|C|B|B|B|B|B|B|B|B|B|C|E|
|Apply cast|E|E|E|E|E|E|E|E|B|B|B|B|C|E|
|Remove cast|E|E|E|E|E|E|E|E|E|E|E|E|E|E|
|Apply splint|C|E|C|B|B|B|B|B|B|B|B|B|C|E|
|Apply sling|C|E|C|B|B|B|B|B|B|B|B|B|C|E|
|Apply fixation|E|E|E|E|E|E|E|E|B|B|B|B|C|E|
|Remove fixation|E|E|E|E|E|E|E|E|E|E|E|E|E|E|
|Apply bandage|C|E|C|B|B|B|B|B|B|B|B|B|C|E|
|Apply figure of eight bandage|E|E|E|E|E|E|E|E|B|B|B|B|C|E|
|Perform surgery|E|E|E|E|E|E|E|E|B|B|B|B|C|E|
|Apply intra - compartmental pressure monitor|E|E|E|E|E|B|B|B|B|B|B|B|C|E|
|Let patient rest|C|E|C|B|B|B|B|B|B|B|B|B|B|E|
|Stay in patient room|E|E|E|E|E|B|B|B|B|B|B|B|C|E|
|Unregister patient|E|E|B|C|C|C|C|C|C|C|C|C|A|E|
流程步骤如下:
1. 患者因自行车事故手腕疼痛进入急诊室(S0),接待员为活跃用户,但接待员无权执行 8 项可用活动中的 7 项,这些活动都有未来限制。
2. 分诊护士快速查看患者后,确定其情况不危及生命,触发相应数据事件,可用活动减少到 1 项(S1)。
3. 患者在前台登记,接待员设置与流程相关的四个数据属性和使用的资源(S2)。登记后有 7 项活动可用,但接待员仅有权注销患者。
4. 活跃用户切换为医生,医生有权执行其他 6 项活动(S3)。医生查看当前部分实例的未来限制,发现多项活动是当前实例必须执行的。
5. 医生让护士记录患者病史,触发两个数据事件和一个资源事件,解锁了一项新活动(S4)。
6. 医生进行临床检查,触发四个数据事件和两个资源事件(S5)。此时有 18 项可用活动。
7. 医生因患者疼痛给予 NSAID 止痛药,之后有 17 项活动可用(S6)。注意,开抗凝药在 D 层,因为服用 NSAID 止痛药后至少 12 小时才能服用抗凝药。
8. 医生进行冰疗,然后选择进行 X 光检查,触发两个资源事件,新增四项活动(S7 - S8)。
9. 医生进行会诊,确认手腕骨折但无需手术(S9)。此时未来必须应用吊带和石膏/夹板。
10. 医生依次应用夹板和吊带(S10 - S11)。
11. 医生决定让患者回家,活跃用户切换回接待员(S12),注销患者的活动从 D 层移到 A 层。
12. 接待员注销患者,触发两个资源事件,流程成功结束。
下面是该流程的 mermaid 流程图:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A([患者进入急诊室]):::startend --> B(分诊护士评估):::process
B --> C(患者登记):::process
C --> D(医生接手):::process
D --> E(护士记录病史):::process
E --> F(医生临床检查):::process
F --> G(给予止痛药):::process
G --> H(冰疗):::process
H --> I(X光检查):::process
I --> J(医生会诊):::process
J --> K(应用夹板):::process
K --> L(应用吊带):::process
L --> M(医生决定患者回家):::process
M --> N(接待员注销患者):::process
N --> O([流程结束]):::startend
3. 相关研究
现有的业务流程引擎(BPE)可根据其最适合的流程可预测性频谱进行分类。下面详细对比 DeciClareEngine 工具与其他针对松散框架流程的现有 BPE 的差异:
| BPE 名称 | 特点 | 与 DeciClareEngine 的差异 |
| ---- | ---- | ---- |
| DECLARE 框架 | 基于 Declare 语言,有高效验证(MP - )Declare 约束的技术 | DeciClareEngine 除了能表达 DECLARE 框架的内容外,还考虑了决策逻辑、资源、截止日期和延迟 |
| MP - Declare 语言的 BPE | 将约束映射到 Alloy 并使用相应的可满足性求解器,可防止活锁和死锁,但仅适用于非常小的模型 | DeciClareEngine 目前不支持此功能,但未来会重新审视,后续会研究部分或启发式版本的这些功能 |
| ReFlex | 使用基于图的规则引擎克服线性时态逻辑(LTL)的某些限制,使用 7 种类型的边对应 Declare 的 6 种约束模板和 1 种额外约束类型,卖点是检测活锁和死锁 | DeciClareEngine 支持这 7 种类型的约束,还提供对时间延迟、截止日期以及数据和资源视角的支持 |
| DCR Graphs | 有在线平台,其图编辑器包含 BPE 用于模拟,DCR 语言有 6 种关系,简单的视觉语法支持层次建模,最近添加了数据视角和一些时间概念 | DeciClareEngine 支持更复杂的约束、一般上下文数据元素、在流程执行期间更改数据属性值以及截止日期,且提供了一个新的通用框架 |
4. 结论与未来研究
提出的通用框架可用于创建数据感知的声明式 BPE,并通过创建 DeciClare 流程建模语言的 BPE 进行了演示。基于该框架的 BPE 可以支持现实生活中松散框架的 KiPs 的执行,同时考虑控制流、数据和资源视角以及相应的决策逻辑。
使用 BPE 执行流程有诸多优势:
-
执行支持
:在流程模型执行期间,BPE 可以为流程参与者提供支持,展示已完成的操作、下一步可执行或不可执行的操作以及未来必须或不能发生的事情,确保符合预定义的流程模型。
-
灵活性
:BPE 是构建真正灵活的信息系统的基础,它允许在动态环境中快速部署流程更改,通过修改底层流程模型并将更改传达给所有流程参与者,同时确保更改正确实施。
-
模拟分析
:BPE 是流程模拟的重要工具,可分析不同运行时决策或流程模型更改对流程结果或特征的影响,还可用于验证通过流程挖掘或访谈得到的模型。
-
教育用途
:对于医生和其他医疗人员的培训,教育模拟器可以让学员在无风险的环境中学习医院的操作流程,甚至有可能揭示有经验同事的隐性知识。
未来,DeciClareEngine 将进行以下改进:
1.
功能完善
:添加对缺失约束模板和停用决策的支持。
2.
资源管理
:添加对流程实例级动态资源可用性的支持。
3.
并行处理
:添加对活动并行执行的支持。
4.
死锁处理
:研究部分活锁或死锁检测或预防机制。
下一步,将使 DeciClareEngine 的运行时支持更加智能。目前已进行了初步实验,并将使用 DeciClare 和 DeciClareEngine 工具重复该实验。未来,会在 DeciClareEngine 提供的未排序的可能下一步活动集合基础上,增加一个额外的层,根据历史概率或特定优化目标对活动进行排名和注释。
下面是未来改进步骤的 mermaid 流程图:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A([当前 DeciClareEngine]):::startend --> B(添加缺失约束模板和停用决策支持):::process
A --> C(添加动态资源可用性支持):::process
A --> D(添加活动并行执行支持):::process
A --> E(研究死锁检测或预防机制):::process
B --> F(使运行时支持更智能):::process
C --> F
D --> F
E --> F
F --> G([改进后的 DeciClareEngine]):::startend
超级会员免费看
5万+

被折叠的 条评论
为什么被折叠?



