BPMN 稽核範本管理(Flow Template Manage)
事實基準: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,可被資源庫 / 稽核輪次套用 |
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=true,tenant_id=NULL)不可編輯 / 發布 / 刪除(GRC_403040);要改先「複製」成自訂 clone。
4. 狀態機與前置條件
發布生命週期見 _overview §3。本頁 gate:
| 條件 | 效果 | 出處 |
|---|---|---|
is_builtin = true |
編輯 / 發布 / 刪除全鎖 | _guard_not_builtin → GRC_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 設計
版面骨架:
實機截圖(STG,亮色模式,2026-07-06,帳號 blsadmin):



狀態呈現:類型徽章(內建 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_builtin。flow_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 圖
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. 邊界情況與已知坑
- flow_templates vs workflow_templates
兩層:本頁編作者端藍圖(
flow_templates);專案 / AO 成立時 clone 成執行期workflow_templates(由 workflow-setup/view 頁編,?id=workflow_template_uid)。兩者別混——改本頁不影響已 clone 的執行期範本 - 內建範本不可變:
is_builtin=true鎖編輯 / 發布 / 刪除;先複製成自訂 clone - 發布才做完整 + 拓撲驗證:update 只存不驗;改 XML 自動退 draft 逼重新發布
- validate 恆 200:即時驗證即使 XML 壞也回 200 +
violations(供 debounce 不擋編輯);別把 200 當「通過」,看
valid - 每 UserTask 必綁 stage + main_role:發布時強制(缺
→
GRC_400040);stage 選了會自動帶 default main_role - Gateway 條件 stage 感知:條件下拉依 stage_object context 變(review vs audit);改 stage 影響可選條件
- 軟刪除:刪 =
is_active=false,list/get 恆濾 active - 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) - 前置資料:內建範本隨系統;驗編輯需先複製一份自訂
- E2E:
compliance-manager-test/repo;以流程範本/flow-template/BPMN搜尋 - 相關文件:資源庫引用 module-frame、執行期範本見稽核執行群 workflow-setup/view、資產模型 _overview