手冊首頁 / 合規稽核 / BPMN 稽核範本管理

BPMN 稽核範本管理(Flow Template Manage)

功能群:合規框架與 SSP|資產模型先讀 功能群總覽

事實基準:2026-07-05 從 FE / BE code 掃出;endpoint 對 routes.json、schema 對 db_schema.json、error code 開檔驗

1. 功能描述

BPMN 稽核範本管理是稽核流程範本的作者端:管理 BPMN 2.0 流程範本(compliance.flow_templates),用視覺化設計器編輯流程圖,每個 UserTask 綁定稽核階段(stage_object)與主責角色。範本發布後可被合規資源庫(audit_flow_template_uid)與稽核輪次套用驅動狀態機。

  • 頁 1 範本清單FlowTemplateManageView.vue):清單 + CRUD + 複製 + 發布 / 取消發布;內建範本唯讀。
  • 頁 2 BPMN 設計器FlowTemplateEditorView.vue,create + edit 共用):bpmn-js 畫布 + 屬性面板(含拓撲驗證器)。

與 workflow_templates 兩層之別flow_templates(本頁,作者端 BPMN 藍圖)≠ compliance.workflow_templates(專案 / AO 成立時 clone 出的執行期範本,由 workflow-setup/view 頁編輯)——見 §12。

主要使用者:具 flow_template.* 能力者(多為管理員)。

角色速覽(能力層,見 _overview §5):

能力 一句話
flow_template.create 建立 / 複製範本
flow_template.update 編輯 / 發布 / 取消發布
flow_template.delete 刪除

1.1 功能總覽(本頁全部功能)

# 功能 說明 位置 詳述
1 範本清單 / 篩選 分頁;pill 篩選(全部 / 內建 / 自訂)+ 搜尋(debounce) 頁1 表格 §6.1
2 類型 / 狀態徽章 內建 vs 自訂;draft vs published 頁1 欄 §5
3 建立範本 dialog 輸名稱 / 描述 → 導向設計器(非 POST 空 XML) 頁1 按鈕 UC-FT-01
4 複製範本 複製源範本成可寫 clone(is_builtin=false) 頁1 操作 §6.2
5 編輯(設計器) bpmn-js 畫布拉流程;內建不可編 頁2 UC-FT-01
6 預覽 唯讀 BPMN Viewer 頁1/2 §6.1
7 發布 / 取消發布 published 才可套用;發布觸發完整 + 拓撲驗證 頁1 操作 / 頁2 工具列 UC-FT-01
8 刪除(軟刪除) is_active=false;內建鎖 頁1 操作 §6.1
9 UserTask 設定 名稱 / stage_object(必填,自動帶 main_role)/ main_role 頁2 屬性面板 §10
10 Gateway 設定 名稱 / 分支流(條件 stage 感知 / isDefault) 頁2 屬性面板 §10
11 即時驗證 編輯 debounce → POST /validate(恆 200 回 violations) 頁2 驗證器 UC-FT-01
12 另存 / 匯入 / 匯出 More 選單 頁2 工具列 §6.1

UC(§2)展開 UC-FT-01(設計→即時驗證→發布時完整 + 拓撲驗證)。

2. Use Case

角色速覽(能力層,見 _overview §5):

能力 一句話
flow_template.create 建立 / 複製範本
flow_template.update 編輯 / 發布 / 取消發布
flow_template.delete 刪除

流程圖視覺慣例:菱形 = 判斷、橘底 = 例外 / 擋下、紅框 = 錯誤(標 error code)、綠框 = 成功終點、虛線 = 可選路徑。

UC-FT-01 設計並發布流程範本

項目 內容
角色 具 flow_template.create / update 能力者
前置條件 已登入;內建範本需先複製才能編
產出 / 後置條件 儲存 draft;發布通過完整 + 拓撲驗證後 status=published,可被資源庫 / 稽核輪次套用
uc_ft_01 start create 建立 / 複製 → 進設計器 (內建範本不可編,需先複製) start->create edit 拉 BPMN:UserTask 綁 stage_object + main_role Gateway 設分支條件 create->edit inline 即時驗證(debounce) POST /validate → violations[] (恆 200,不擋編輯) edit->inline save 儲存 PUT /flow-templates/{uid} (改 bpmn_xml → 狀態退回 draft) inline->save pub 按發布 PUT .../publish save->pub vfull 完整 BPMN 驗證: Start/UserTask/End 齊備? 每 UserTask 有 stage+main_role? pub->vfull vtopo 拓撲驗證: 符合 stage_objects 前後序規則? vfull->vtopo 齊備 e1 400 GRC_400040(BPMN 無效) vfull->e1 缺件 e2 400 GRC_400060(拓撲不合法) 畫布標紅框 + 違規清單 vtopo->e2 違規 ok status=published (可被資源庫 / 稽核輪次套用) vtopo->ok 通過
UC-FT-01 流程:建立/複製→設計器編輯→即時驗證(恆200)→儲存(改XML退draft)→發布觸發完整+拓撲驗證→published/擋下

3. 權限矩陣

操作 FE 判定 BE 強制 BE 檢查位置
讀 / 預覽 登入 + 選單權限 @jwt_required() route
建立 / 複製 hasCap('flow_template.create') 能力(route /flow/template-manage read=ALL/write=ANY) 能力表 2026-05-12-flow-template-permissions.sql
編輯 / 發布 / 取消發布 hasCap('flow_template.update') _guard_not_builtin()(內建擋)→ GRC_403040;無權 GRC_403041 app/flow_engine/service/flow_template_app_service.py
刪除 hasCap('flow_template.delete') 同上 + 軟刪除 同上

⚠️ 內建範本(is_builtin=truetenant_id=NULL不可編輯 / 發布 / 刪除GRC_403040);要改先「複製」成自訂 clone。

4. 狀態機與前置條件

發布生命週期見 _overview §3。本頁 gate:

條件 效果 出處
is_builtin = true 編輯 / 發布 / 刪除全鎖 _guard_not_builtinGRC_403040
bpmn_xml 儲存時 status 退回 draft(強制重新發布) flow_template_app_service.update
發布 觸發完整 BPMN 驗證(Start/UserTask/End + 每 UserTask 有 stage+main_role)→ GRC_400040;再拓撲驗證 → GRC_400060 publish / _validate_bpmn / _validate_bpmn_topology
套用至稽核案 需 published(否則 GRC_400063 下游輪次綁定

5. UI 設計

版面骨架:

頁 1:範本清單(FlowTemplateManageView)— 篩選 pill 全部/內建/自訂 +🔍 搜尋 開啟:UC-FT-01 設計並發布流程範本 範本列:名稱 + 類型/狀態徽章(內建vs自訂、draft vs published)+ 操作(預覽/編輯/複製/發布/刪除) 內建範本唯讀(不可編輯/發布/刪除);先「複製」成自訂 clone 才能改 GET /flow-engine/flow-templates(清單)・POST …/{uid}/duplicate(複製) → UC-FT-01(點我開啟) Dialog:建立/複製/另存(輸入名稱/描述)→ 導向設計器 頁 2:BPMN 設計器(FlowTemplateEditorView,create/edit 共用)— 工具列:返回|預覽|More|儲存|發布/取消發布 BPMN 畫布(bpmn-js) StartEvent → UserTask(stage_object+main_role)→ Gateway → EndEvent 拓撲驗證違規標紅框 虛線:即時驗證 debounce → POST /validate(恆 200 回 violations) POST /flow-engine/flow-templates/validate 開啟:UC-FT-01 設計並發布流程範本 屬性面板 UserTask:名稱/stage_object(必填)/main_role Gateway:名稱/分支流(stage 感知條件) GET /flow-engine/stage-objects PUT …/{uid}/publish(完整+拓撲驗證) → UC-FT-01(點我開啟) 彩色=可點跳本頁 §6/UC,灰=本頁結構|虛線=dialog/即時驗證條件層 API 僅列代表性 2~3 條,完整規格見 §6
流程範本管理版面:頁1 清單 + 發布/複製、頁2 BPMN 設計器(畫布 + 屬性面板 + 拓撲驗證器);可點跳 UC-FT-01

實機截圖(STG,亮色模式,2026-07-06,帳號 blsadmin):

範本清單:內建(完整稽核流程/自我評估稽核,已發布)與自訂草稿的徽章區隔

BPMN 設計器:bpmn.io 畫布(開始→規劃→未設定的任務→結案)+ 左側元件盤 + 右側屬性面板 + 儲存/發布動作

預覽 dialog 的任務清單驗證面:未配置的 userTask 以紅字「(未指定階段)」警示(發布時同類問題會被 GRC_400040 完整驗證擋下)

狀態呈現:類型徽章(內建 info / 自訂 success)、狀態徽章(published success / draft warning);設計器右側屬性面板依選中元素切換(UserTask / Gateway 表單);違規在畫布標紅框 + 清單。

6. API 規格

Envelope:成功 {"status": true, "data": …}、失敗 {"error_code": "…", "msg": "…"}

6.1 總清單(本頁呼叫的全部 endpoint)

分類 Method + Path 說明 完整規格
清單 GET /flow-engine/flow-templates 分頁清單(name / is_builtin 篩選) §6.2
明細 GET /flow-engine/flow-templates/{uid} 範本明細(含 bpmn_xml) GAI-SD-02
建立 POST /flow-engine/flow-templates 建立(name/description/bpmn_xml) §6.2
更新 PUT /flow-engine/flow-templates/{uid} 更新(改 XML 退 draft) §6.2
刪除 DELETE /flow-engine/flow-templates/{uid} 軟刪除 GAI-SD-02
複製 POST /flow-engine/flow-templates/{uid}/duplicate 複製成自訂 clone §6.2
發布 PUT /flow-engine/flow-templates/{uid}/publish 發布(完整 + 拓撲驗證) §6.2
取消發布 PUT /flow-engine/flow-templates/{uid}/unpublish 退回 draft GAI-SD-02
即時驗證 POST /flow-engine/flow-templates/validate 驗證(恆 200 回 violations) §6.2
階段選單 GET /flow-engine/stage-objects UserTask stage 下拉 + 拓撲規則 §6.2

6.2 核心 endpoint

[GET] /flow-engine/flow-templates

Request:

欄位 型別 必填 說明
page int 頁碼
size int 每頁筆數
name string 名稱篩選
is_builtin bool 內建 / 自訂篩選

Response data

欄位 型別 說明
items array 範本清單(每項見下)
total int 總筆數
page int 當前頁碼
size int 每頁筆數

items[] 每項:

欄位 型別 說明
uid uuid 唯一識別碼
name string 範本名稱
description string 範本說明
is_builtin bool 系統內建
status string draft | published
created_at datetime 建立時間
updated_at datetime 更新時間
created_user string 建立者

出處:api/flow_engine/routes/flow_template_route.py::FlowTemplatesRoute

[PUT] /flow-engine/flow-templates/{uid}/publish

無 body。完整驗證 + 拓撲驗證通過 → status='published';失敗回 GRC_400040(BPMN 缺件)或 GRC_400060(拓撲違規,data.violations)。內建擋 GRC_403040。出處:flow_template_app_service.py::publish / _validate_bpmn / _validate_bpmn_topology

[POST] /flow-engine/flow-templates/validate

Request:

{
  "bpmn_xml": "string"
}

Response data

{
  "valid": true,
  "violations": [
    {
      "rule": "string",
      "reason_i18n_key": "string",
      "context": {}
    }
  ]
}

——即使 XML 解析失敗也回 200(供 FE debounce 即時驗證不擋編輯)。出處:flow_template_app_service.py::validate

[GET] /flow-engine/stage-objects

Response data.items(陣列,每項):

欄位 型別 說明
code string 階段代碼
name_i18n object 多語名稱
kind string routed | stateful
default_main_roles array 預設主責角色
can_start bool 可作為起點
can_end bool 可作為終點
allowed_predecessors array 允許的前序階段(拓撲規則)
allowed_successors array 允許的後序階段(拓撲規則)

——UserTask stage 下拉 + 拓撲驗證規則來源。出處:api/flow_engine/routes/...stage_objects

7. 前端檔案地圖(compliance-manager-fe/)

檔案 角色
src/views/flow-template/FlowTemplateManageView.vue 頁1 清單 CRUD / 複製 / 發布
src/views/flow-template/FlowTemplateEditorView.vue 頁2 BPMN 設計器(create + edit 共用)
src/components/.../FlowTemplatePreviewDialog.vue 唯讀 BPMN Viewer
src/config/router/index.js:395-416 routes flow-template-manage / -create / -edit
src/config/api/api.js endpoint 常數(FLOW_ENGINE_FLOW_TEMPLATES / STAGE_API 等)
src/config/locales/i18n/zh-tw/flow-template-manage.json 頁面 i18n

8. 後端檔案地圖(本頁核心鏈路)

鏈路 Route App Service 底層
清單 / CRUD api/flow_engine/routes/flow_template_route.py::FlowTemplatesRoute app/flow_engine/service/flow_template_app_service.py::list/create/update/soft_delete domain/flow_engine/service/flow_template_domain_service(主專案本地 domain 層,import domain.flow_engine.*,非 jedi-flow-engine 套件)
發布 同檔 publish route publish_validate_bpmn + _validate_bpmn_topology app/flow_engine/util/bpmn_topology_validator.py + compliance.stage_objects 規則
即時驗證 validate route validate(不 persist,恆 200) 同驗證器

DDD 提醒:發布走完整 + 拓撲驗證;內建 _guard_not_builtinflow_templates(本頁)≠ workflow_templates(執行期),別在本頁改到後者。

9. DB

9.1 資料表總清單

讀/寫 說明 欄位詳述
compliance.flow_templates 讀 / 作者端 BPMN 範本 §9.3
compliance.stage_objects 階段定義 + 拓撲規則 §9.3
compliance.workflow_templates 執行期範本(另一層,本頁不動) GAI-SD-03

9.2 ER 圖

ft_er ft compliance.flow_templates 作者端 BPMN 範本 uid / tenant_id(NULL=builtin) name / status draft published is_builtin / is_active(軟刪除) bpmn_xml so compliance.stage_objects 階段定義(唯讀) code / name_i18n / kind default_main_roles allowed_predecessors/successors (拓撲驗證規則) ft->so UserTask 綁 stage_object wt compliance.workflow_templates 執行期範本(另一層) 專案/AO clone;source_template_uid → flow_templates.uid(builtin) ★本頁不編輯 ft->wt clone 成執行期 mf compliance.module_frames audit_flow_template_uid → 引用 flow_template mf->ft 預設稽核流程
flow_templates 綁 stage_objects(UserTask)、clone 成 workflow_templates(執行期)、被 module_frame 引用

9.3 核心表欄位(取自 DEV DB dump,含 DB comment)

compliance.flow_templates — 流程範本

欄位 型別 說明
uid uuid 唯一識別碼
tenant_id int|null NULL = builtin,NOT NULL = tenant 自訂
name / description varchar / text 範本名稱 / 說明
is_builtin bool 系統內建(不可編輯 / 刪除)
is_active bool 軟刪除 flag(false = 已刪)
bpmn_xml text BPMN 2.0 XML
status varchar(20) draft | published

compliance.stage_objects — 階段定義

code / name_i18n(多語)/ kind(routed | stateful)/ default_main_roles / can_start / can_end / allowed_predecessors / allowed_successors(拓撲驗證規則)。v1 皆 builtin。

10. 頁面邏輯與資料對應

載入:頁1 GET list;設計器 GET /{uid}(載 bpmn_xml)+ GET /stage-objects(下拉 + 規則)。

關鍵欄位對應

畫面元素 API 欄位
清單列徽章 is_builtin / status
UserTask 表單 BPMN camunda:Property stage_object_code + main_role
Gateway 分支條件 stage 感知條件模板(review→Pass/Reject;audit→Pass/Has Findings)
驗證器 validate / publish 回的 violations[]

儲存流程:編輯 → debounce POST /validate(不擋)→ 儲存 PUT(改 XML 退 draft)→ 發布 PUT /publish(完整 + 拓撲驗證)。

錯誤對應GRC_403040(內建鎖)/ GRC_400040(BPMN 無效)/ GRC_400060(拓撲違規)/ GRC_409030(名稱重複)/ GRC_404027(不存在)/ GRC_400063(未發布不可套用)。

11. 背景行為與外部依賴

類型 內容
BPMN 引擎 bpmn-js(FE 畫布);BE 拓撲驗證器對 stage_objects 規則
Socket 本頁 socket
jedi-* 套件 jedi-flow-engine(flow template / BPMN / stage)
系統參數 內建範本隨系統;能力表 flow_template.*

12. 邊界情況與已知坑

  1. flow_templates vs workflow_templates 兩層:本頁編作者端藍圖(flow_templates);專案 / AO 成立時 clone 成執行期 workflow_templates(由 workflow-setup/view 頁編,?id=workflow_template_uid)。兩者別混——改本頁不影響已 clone 的執行期範本
  2. 內建範本不可變is_builtin=true 鎖編輯 / 發布 / 刪除;先複製成自訂 clone
  3. 發布才做完整 + 拓撲驗證:update 只存不驗;改 XML 自動退 draft 逼重新發布
  4. validate 恆 200:即時驗證即使 XML 壞也回 200 + violations(供 debounce 不擋編輯);別把 200 當「通過」,看 valid
  5. 每 UserTask 必綁 stage + main_role:發布時強制(缺 → GRC_400040);stage 選了會自動帶 default main_role
  6. Gateway 條件 stage 感知:條件下拉依 stage_object context 變(review vs audit);改 stage 影響可選條件
  7. 軟刪除:刪 = is_active=false,list/get 恆濾 active
  8. stage_objects 是唯讀規則來源:拓撲驗證的前後序規則來自 stage_objects;v1 全 builtin,改規則要動 DB

13. 開發與驗證

  • 跑起來:BE python main_socketio.py(port 8000,log 在 log/app.log);FE Vite dev server。BE 改 service code 必重啟
  • 測試帳號:需具 flow_template.* 能力(Administrator 角色);密碼見 .env / 部署文件
  • 導航路徑:側邊選單「BPMN 稽核範本管理」(/flow/template-manage
  • 前置資料:內建範本隨系統;驗編輯需先複製一份自訂
  • E2Ecompliance-manager-test/ repo;以 流程範本 / flow-template / BPMN 搜尋
  • 相關文件:資源庫引用 module-frame、執行期範本見稽核執行群 workflow-setup/view、資產模型 _overview