盤點更新:2026-05-19。以下核取狀態依目前程式碼、既有 e2e spec、以及已完成的瀏覽器驗證紀錄標註;schema 預留但 runtime/UI 尚未支援的項目不標為完成。
| 里程碑 | 主題 | 預估 | 累計 |
|---|---|---|---|
| M0 | 專案初始化 | 1 週 | 1 |
| M1 | 基礎骨架(Identity / Org / Form / Template) | 3 週 | 4 |
| M2 | 流程引擎核心 | 4 週 | 8 |
| M3 | 人本能力(代理、通知、SLA、簽章、附件、Inbox) | 3 週 | 11 |
| M4 | 管理與優化(Dry Run、欄位權限、Dashboard、加簽) | 2 週 | 13 |
| M5 | 內部試運行 + 修正 | 2 週 | 15 |
預估以一位資深全端 + 一位後端 + 一位前端為基準。可平行工作的部分已標註。
- Nx Monorepo 初始化(
apps/api,apps/client,libs/bpm-core,libs/shared) - NestJS API 專案骨架(health check、logging、global exception filter)
- Next.js Web 專案骨架(基礎 layout)
- auth middleware(
apps/api提供登入/session cookie,client 未登入會導向/login) - PostgreSQL 連線(TypeORM)
- Migration 工具設定
- ESLint / Prettier / commitlint / Husky
- Legacy optional Docker compose sandbox(PG + adminer;正常 dev 使用 Vault-backed develop DB)
- CI: GitHub Actions(PR /
main/staging會跑 typecheck + lint + test + build;2026-05-11 已在 GitHub Actions 驗證通過) - 共用型別 lib(
@rytass/bpm-core-shared:Workflow JSON Schema、Form Schema、CEL Context Types)
- 本機
pnpm api/pnpm client啟動 API + client,DB 設定來自 Vault-backed develop secrets pnpm typecheck、pnpm lint、pnpm test通過
Backend
-
member_metadata_cache表 + migration -
BPMMemberResolverinterface + host provider 注入(apps/api提供 DB-backed test member resolver) -
IdentityModule:member 查詢 + cache(TTL 5 分鐘) -
org_units、positions、memberships、manager_resolutions表 + migration -
OrganizationModule:CRUD + 樹狀查詢(path-based hierarchy) - 主管解析 service(含優先序邏輯)
Frontend
-
/admin/orgs組織樹維護介面(接 GraphQL CRUD,可維護組織、職位、會員歸屬與主管規則) -
/admin/users會員清單(接 member resolver,可檢視 BPM 組織歸屬與主管解析) - 共用元件:
<MemberPicker>,<OrgUnitPicker>,<PositionPicker>
驗收:能維護組織樹、查到任一 member 的所屬組織與主管。
Backend
-
form_definitions、form_definition_versions表 -
FormModule:CRUD + 版本管理(fork、publish、archive、rollback) - FormSchema 驗證器(內含欄位類型 registry)
- 表單 schema lint API(給 designer 用)
Frontend
-
/templates/compose表單 + 流程建立 wizard(取代 standalone/forms入口) - Wizard 內嵌表單設計器(
FormBuilderView)- 拖拉欄位(基本 6–8 種:text / number / date / select / radio / checkbox / file / textarea)
- 屬性面板(標籤、必填、預設值)
- 條件邏輯(顯示/必填/唯讀,先用簡單表達式輸入框)
- FormRenderer 元件(根據 schema 渲染表單)
驗收:能建立表單、發布版本、用 FormRenderer 渲染並填寫。
Backend
-
approval_templates、approval_template_versions表 -
TemplateModule:CRUD + 版本管理(fork、publish、rollback) - 流程結構靜態驗證器(唯一 Start、連通性、Join / service task 基礎檢查)
-
ConditionModule雛型:CEL parse / lint / runtime evaluate- 整合
cel-js - Context Schema registry
- Form schema 靜態型別推導與型別檢查
- timeout / maxSteps evaluate guard
- 整合
Frontend
-
/templates列表頁 -
/templates/[id]/designer流程設計器(核心,本週重點)- React Flow 整合
- 6 種節點類型 + 自訂渲染
- 節點屬性面板
- Edge 條件編輯
- 自動排版(dagre)
- 儲存 / 發布按鈕
-
/templates/[id]/versions版本歷程
驗收:能用設計器拉出流程、設定簽核者、發布模板版本、查看版本歷程。
Backend
-
approval_instances、workflow_tokens、tasks、task_decisions表 -
WorkflowEngineModule骨架 - Instance 發起(submit):驗證 + snapshot(template, form, initiator metadata)
- Token 建立(Start Event)
- 引擎主迴圈骨架(含 Advisory Lock 並發保護)
- Activity Log 寫入
驗收:能建立 instance、Start Event 產生 token、紀錄 activity log。
Backend
- Start Event / End Event 處理
- User Task 處理(含 Approver Resolver 5 種類型)
- Service Task —
NOTIFY、WEBHOOK、SET_FORM_FIELDruntime;WEBHOOK可由宿主注入 dispatcher - User Task 單一主要簽核者處理(設計器固定
decisionPolicy: SINGLE) - Task 決策 API(同意 / 拒絕,先無簽章)
- Token advance / consume
- Instance 完成判定
Frontend
-
/instances/new?templateId=xxx發起頁(FormRenderer) - 發起入口補強
-
/instances/new無templateId時顯示「可發起模板」列表,使用者選模板後進入填表。 - 工作台
/的主操作改為「發起簽核」,導向/instances/new。 -
/templates列表在已發布模板上提供「發起」捷徑,導向/instances/new?templateId=xxx。 -
/inbox提供次要「發起簽核」入口,導向/instances/new,但不作為唯一入口。 - 未發布、未綁定已發布表單版本、或沒有 current published version 的模板不得作為可發起選項。
-
-
/instances/[id]簽核操作頁(基礎版)- 顯示表單快照(唯讀)
- 顯示流程圖(React Flow 唯讀模式 + token 位置標示)
- 顯示歷程(task_decisions + activity_logs)
- 同意 / 拒絕按鈕(限該 task 的 assignee)
- Inbox 雛型(
/inbox)
驗收:能從工作台或已發布模板進入發起頁,跑通「請假流程」線性 case:發起 → 主管簽 → 完成。
Backend
- Exclusive Gateway 處理(含 default flow)
- 多分支 outgoing edge 處理
- 節點前置條件
AND/OR處理(全部前置完成 / 任一前置完成) - CEL 在 Entry Condition / Approver Resolver / initiator policy 整合
- Edge Condition 完整 CEL expression runtime(支援
edge.data.conditionCEL,並保留 structured field/operator 相容)
Frontend
-
/instances/[id]唯讀流程圖,顯示節點 runtime 狀態 - 條件線 / default flow label 顯示
- pending / completed / cancelled / waiting 節點狀態顯示
W6 runtime 會優先執行
edge.data.condition的 CEL expression,context 含form/formData/initiator/instance,正式 runtime 另提供lastDecision。舊的 structured edge condition 欄位仍保留作為設計器輸入與相容 fallback。
驗收:能跑通含 XOR + 多前置節點 AND/OR 的流程;條件分歧基於表單內容正確路由。
Backend
- 退回(target = previous / initiator / specific node)
- 退回後重新提交(從退回點繼續)
- 撤銷 instance
- Dry Run API:給定假 initiator + 表單值 → 純記憶體模擬流程
Frontend
- 退回 / 撤銷 UI
- Dry Run 介面(在設計器內)
驗收:完整流程行為符合預期;模板設計者可 Dry Run 驗證。
Backend
-
delegation_rules表 -
DelegationModule:規則 CRUD - 引擎整合:建立 task 時套用 delegation 解析(含循環防護、CEL scope)
- Task 轉派(manual transfer)
Frontend
-
/admin/delegations代理規則維護 - 個人代理設定頁(自助)
- Task 轉派 UI
驗收:A 設定代理給 B → 派給 A 的 task 自動派給 B;代理鏈正確紀錄。
Backend
-
notifications、notification_preferences表 -
NotificationModule:in-app notification - email / webhook 外部通知(SMTP + signed webhook delivery,依
BPMRootModule扁平 config 啟用) - 通知模板 placeholder renderer
- Handlebars template engine
- SLA Scheduler(cron 每分鐘)
- 預警 / 逾時通知
- 自動同意 / 升級 / 終止動作(透過 workflow engine domain method 執行)
- Boundary Timer Event 處理(SLA scan 以 task boundary timer due event 觸發 timeout policy)
Frontend
- In-app 通知中心列表(
/notifications) - Header 鈴鐺入口
- 通知偏好設定頁
- Inbox 顯示 SLA due 倒數
驗收:派任務有通知、SLA 預警與逾時行為符合預期。
Backend
-
signatures表 -
SignatureModule:L1 HMAC(含 key version) - RFC 3161 TSA client mock token
- 鏈式簽章邏輯(
previous_signature_hash) - Decision API 整合簽章
-
attachments表 -
AttachmentModule:上傳 / 下載 / 預覽 signed URL - 整合
@rytass/storages-adapter-local -
BPMRootModule支援以attachmentStorageProvider替換任意@rytass/storagesadapter
Frontend
- FormRenderer 整合附件上傳
- PDF signed URL modal 預覽
- PDF 預覽元件(React-PDF)
- 簽核操作頁顯示附件 + 預覽
驗收:每筆決策有簽章紀錄;附件可上傳、PDF 可預覽。
Backend
- 加簽 / 減簽 / 跳簽 API
- 表單欄位節點級權限(依 fieldPermissions 過濾)
- ABAC 發起權限細化(initiator policy 完整支援)
- 角色 / 組織代碼目錄查詢 API,並將開始節點發起權限 AutoComplete 改為 server-controlled async
Frontend
- 加簽 / 減簽 / 跳簽 UI
- FormRenderer 套用欄位權限(visible / editable)
Backend
- 統計 API(流程平均耗時、卡關熱點、SLA 達成率)
- 全文搜尋(pg_trgm 或 tsvector)
Frontend
-
/sent、/cc、/search完整版 -
/dashboard— 流程效能、卡關熱點 - 模板列表頁的「使用情況」統計
驗收:管理者可看到流程運作狀態、瓶頸、SLA 達成率。
- 提供外部 member-base / SSO adapter helper(
createBPMMemberBaseResolverProvider) - 整合真實 Email 服務(SMTP delivery)
- 將
apps/api舊 auth fixtures 換成 DB-backed 測試帳號 seed;正式 host 仍可接@rytass/member-base-nestjs-module - 性能測試:模擬 100 個並發 instance
- 安全檢查:CEL evaluate guard、檔案上傳、SQL injection、XSS
- 試運行 2–3 個真實流程(請假、採購、合約)
- 修正 bug、收斂體驗
- 寫使用者文件(IT 設計者、一般使用者)
- 表單 Select/AutoComplete/Radio/Checkbox 支援宿主註冊的版本化 DataSource。
- 完成 server-side resolve、label snapshot、退回編輯與重新送出一致性。
- 完成 Designer Catalog/Preview、parameter bindings、發布 lint 與真實 wrapper-host e2e。
上述三項已完成 Phase 0–6 的 code、unit、GraphQL/DB、focused real-browser golden path
與 repository-wide pnpm e2e:client full-suite gate(system Chrome、單 worker,43/43
通過)。
權威架構與執行順序分別見:
以上項目目前為 Completed;完成證據包含真實 wrapper-host、GraphQL/DB、Chrome 互動與完整 repository checks,不只依賴 schema、mock 或 unit test。
| 功能 | 預估時程 |
|---|---|
| Inclusive Gateway | 1 週(含 OR Join 死鎖偵測) |
| Sub-Process | 2 週 |
| BPMN XML import / export | 1 週 |
| 多語言 i18n | 1 週 |
| L2 / L3 進階簽章(PKI / 自然人憑證) | 2 週 |
| PDF 上視覺化蓋章覆蓋(PAdES) | 2 週 |
| 行動端原生 App | 6+ 週 |
| 多租戶改造 | 2 週 |
| 流程圖版本 diff 工具 | 1 週 |
| 進階表達式編輯器(Monaco + IntelliSense) | 1 週 |
| 風險 | 緩解 |
|---|---|
cel-js 成熟度不足 |
早期準備好降版方案:純 TS function-based 條件 |
| AND Join 並發 race | 提早設計 advisory lock;做壓力測試 |
| 流程設計器體驗 | 投入時間 / 找專人做 UX,不要把它當小元件 |
| 模板版本暴增 | UI 上區分「已用過 / 未用過」版本,並加歸檔工具 |
| 外部 SSO Resolver 不穩 | 加 cache、加 fallback 用最後一次 metadata snapshot |
| 簽章鏈完整性 | 簽章寫入 transaction 內,並做定期完整性掃描 |
- 先讓引擎跑通最簡 case(線性流程) → 再加 Gateway → 再加 SLA → 再加代理
- 後端模型穩定後再做 UI 優化(避免 schema 反覆改動)
- 模板設計器是門面:M1 W3 投入時間做好,後續每個 milestone 都加值
- 測試替身留在測試層:production/staging 使用 DB-backed seed 或 host adapter;unit/e2e 可保留 test double 以維持快速回歸。
每個里程碑結束都應該:
- 撰寫該里程碑的整合測試(Playwright e2e + Jest 單元)
- 更新 docs(如本目錄)
- Demo 給內部使用者看一次(避免閉門造車)