Epic 2: 端到端訂單生命週期管理
業務目標 (Business Goal)
打造一個清晰、高效的訂單處理工作流程,涵蓋從接單到完成簽收的每一個環節,最大化地減少人工錯誤,並確保所有利害關係人都能即時掌握訂單狀態。
核心價值主張
- 簡化接單流程 - 店員能在 2 分鐘內完成訂單創建
- 透明化訂單狀態 - 客戶與員工隨時掌握訂單進度
- 減少溝通成本 - 自動通知取代人工電話確認
- 提升客戶滿意度 - 簽收照片增加信任感
成功指標 (Success Metrics)
| 指標 | 目標值 | 衡量方式 |
|---|---|---|
| 平均訂單處理時間 | < 24 小時 | 從創建到完成的平均時長 |
| 訂單錯誤率 | < 2% | 需要修改或取消的訂單比例 |
| 客戶滿意度 | > 90% | 訂單完成後的客戶評分 |
| 狀態通知送達率 | > 95% | 成功發送通知的比例 |
| 簽收照片上傳率 | > 98% | 已簽收訂單中有照片的比例 |
功能範疇 (Scope)
1. 訂單狀態機 (Order State Machine)
訂單狀態流轉如下:
待確認 → 已確認 → 設計中 → 待出貨 → 配送中 → 已簽收 → 已完成
↓ ↓ ↓ ↓
已取消 已取消 已取消 配送失敗
狀態定義
| 狀態 | 英文 | 說明 | 可執行操作 |
|---|---|---|---|
| 待確認 | pending_confirmation | 訂單剛創建,等待確認細節 | 修改、確認、取消 |
| 已確認 | confirmed | 訂單已確認,等待分配設計師 | 分配設計師、修改、取消 |
| 設計中 | in_production | 設計師正在製作商品 | 上傳作品照片、標記完成、取消 |
| 待出貨 | ready_for_delivery | 商品完成,等待送貨員取貨 | 分配送貨員、取消 |
| 配送中 | out_for_delivery | 送貨員正在配送途中 | 上傳簽收照片、標記失敗、取消 |
| 已簽收 | delivered | 客戶已簽收,簽收照片已上傳 | 標記為已完成 |
| 已完成 | completed | 訂單完全結束(已支付 + 已簽收) | 查看歷史記錄 |
| 已取消 | cancelled | 訂單被取消 | 查看取消原因 |
| 配送失敗 | delivery_failed | 配送失敗(客戶不在或拒收) | 重新配送、取消 |
狀態流轉規則
| 從狀態 | 到狀態 | 觸發條件 | 執行者 |
|---|---|---|---|
| 待確認 | 已確認 | 手動確認 | 店員/管理者 |
| 已確認 | 設計中 | 分配給設計師 | 系統/管理者 |
| 設計中 | 待出貨 | 上傳作品照片並標記完成 | 設計師 |
| 待出貨 | 配送中 | 送貨員接單 | 送貨員 |
| 配送中 | 已簽收 | 上傳簽收照片 | 送貨員 |
| 已簽收 | 已完成 | 支付狀態為「已支付」 | 系統自動 |
| 任何狀態 | 已取消 | 手動取消並註明原因 | 管理者/店主 |
| 配送中 | 配送失敗 | 送貨員標記失敗並註明原因 | 送貨員 |
2. 訂單創建 (Order Creation)
必填資訊
- 客戶資訊: 選擇現有客戶或創建新客戶
- 商品列表: 可選擇多個商品(每個商品可調整數量)
- 配送地址: 完整地址與聯絡電話
- 期望配送日期: 日期與時段(如 14:00-18:00)
可選資訊
- 卡片訊息: 贈送時的祝福語
- 特殊要求: 如「不要百合」、「多加玫瑰」
- 收件人資訊: 如與訂購客戶不同(姓名、電話)
- 訂單備註: 內部使用(不顯示給客戶)
價格計算
- 系統根據選擇的商品自動計算小計
- 店員可手動調整最終價格(需記錄調整原因)
- 自動計算稅額(根據租戶設定的稅率,如 5%)
3. 訂單客製化 (Order Customization)
- 在創建訂單時記錄客戶的特殊要求並調整最終價格
- 支援「完全客製化」訂單(如會場佈置)
- 無需選擇預設商品
- 直接輸入需求描述
- 店員與客戶協商價格
4. 訂單分配 (Order Assignment)
設計師分配
- 手動分配: 管理者選擇特定設計師
- 自動分配:
- 輪流分配(Round Robin)
- 負載平衡(分配給訂單最少的設計師)
送貨員分配
- 手動分配: 管理者選擇特定送貨員
- 自助接單: 送貨員從「待出貨」列表中自行接單
- 批量分配: 將同一區域的訂單分配給同一送貨員
5. 訂單修改與取消 (Order Modification & Cancellation)
訂單修改規則
| 訂單狀態 | 可修改項目 | 限制 |
|---|---|---|
| 待確認、已確認 | 所有欄位 | 完整修改權限 |
| 設計中之後 | 配送資訊、卡片訊息 | 商品與價格不可改 |
| 已簽收之後 | 不可修改 | - |
訂單取消規則
- 可取消時機: 「已簽收」之前
- 取消原因 (必填):
- 客戶要求
- 無法聯繫客戶
- 庫存不足
- 其他(需填寫說明)
- 退款處理: 若已支付,自動觸發退款流程(整合 Epic 4)
6. 訂單搜尋與過濾 (Order Search & Filtering)
搜尋條件
- 訂單編號
- 客戶姓名
- 客戶電話
- 配送地址
過濾條件
- 狀態: 可多選(如僅顯示「待確認」與「已確認」)
- 日期範圍:
- 創建日期
- 配送日期
- 金額區間: 最低金額至最高金額
- 分配對象: 特定設計師或送貨員
7. 訂單通知 (Order Notifications)
整合 Epic 0 通知系統,在關鍵狀態變更時自動發送通知:
| 觸發事件 | 通知對象 | 通知內容 |
|---|---|---|
| 訂單確認 | 客戶 | 「您的訂單 {編號} 已確認,預計 {日期} 送達」 |
| 設計完成 | 客戶、送貨員 | 「訂單 {編號} 已完成設計,即將配送」 |
| 配送中 | 客戶 | 「訂單 {編號} 配送中,預計 {時段} 送達」 |
| 已簽收 | 客戶 | 「訂單 {編號} 已簽收,查看簽收照片」 |
| 訂單取消 | 客戶 | 「訂單 {編號} 已取消,原因:{原因}」 |
8. 角色工作台 (Role-Based Workbenches)
訂單流程透過三個專用工作台實現角色分工,每個工作台針對特定角色的工作流程優化:
店員工作台 (Sales Workbench)
- 角色:
ROLE_SALES - 路徑:
/sales - 處理狀態:
PENDING_CONFIRMATION - 主要功能:
- 查看所有待確認訂單
- 確認訂單(狀態流轉至 CONFIRMED)
- 快速新增訂單
- 查看訂單詳情
設計師工作台 (Design Workbench)
- 角色:
ROLE_FLORIST - 路徑:
/design - 處理狀態:
CONFIRMED,IN_PRODUCTION - 主要功能:
- 開始設計(CONFIRMED → IN_PRODUCTION)
- 上傳作品照片
- 完成設計(IN_PRODUCTION → READY_FOR_DELIVERY,需上傳照片)
配送員工作台 (Delivery Workbench)
- 角色:
ROLE_DELIVERY - 路徑:
/delivery - 處理狀態:
READY_FOR_DELIVERY,OUT_FOR_DELIVERY - 主要功能:
- 開始配送(READY_FOR_DELIVERY → OUT_FOR_DELIVERY)
- 上傳簽收照片
- 確認簽收(OUT_FOR_DELIVERY → DELIVERED,需上傳照片)
工作台共用組件
三個工作台共用以下組件(位於 src/applets/shared/):
| 組件 | 說明 |
|---|---|
TaskCard | 單張訂單任務卡片 |
TaskGroup | 按狀態分組的任務容器 |
OrderDetailDrawer | 訂單詳情側邊抽屜 |
TaskConfig | 任務狀態配置類型 |
User Stories 列表
核心流程 (P0 - 最高優先級)
- US-201: 創建訂單 ✅ 完成
- US-202: 訂單狀態流轉 ✅ 完成
- US-203: 搜尋與過濾訂單 ✅ 完成
角色工作台 (P0 - 最高優先級) 🆕
- US-204: 店員工作台 ✅ 完成
- US-205: 設計師工作台 ✅ 完成
- US-206: 配送員工作台 ✅ 完成
訂單管理 (P1 - 高優先級)
- US-207: 修改訂單
- US-208: 取消訂單
- US-209: 查看訂單詳情
進階功能 (P2 - 中優先級)
- US-210: 批量分配訂單
- US-211: 訂單狀態通知
- US-212: 配送失敗處理
技術依賴 (Technical Dependencies)
| 依賴對象 | 依賴內容 | 影響 |
|---|---|---|
| Epic 1 (產品管理) | 獲取商品資訊(名稱、價格、庫存) | 創建訂單時選擇商品 |
| Epic 3 (客戶管理) | 關聯訂購客戶 | 創建訂單時選擇客戶 |
| Epic 5 (數位資產管理) | 上傳作品照片與簽收照片 | 設計完成與配送簽收環節 |
| Epic 0 (通知系統) | 發送狀態變更通知 | 自動通知客戶與員工 |
| Epic 4 (支付管理) | 處理取消訂單的退款 | 訂單取消時觸發退款 |
src/applets/shared/ | 工作台共用組件 | TaskCard, TaskGroup, OrderDetailDrawer |
src/config/applet-registry.ts | Applet 註冊與權限配置 | 導航與角色權限控制 |
| ADR-005 | Application Launcher 導航架構 | 工作台導航入口 |
| ADR-006 | AppletShell 統一外殼架構 | 訂單管理 Applet 佈局 |
多租戶考量 (Multi-Tenancy Considerations)
1. 數據隔離
- 所有訂單資料必須與
tenantId綁定 - API 層級自動過濾(僅返回當前租戶的訂單)
- 訂單編號系統採用租戶層級獨立編號
2. 訂單編號格式
{租戶代碼}-{YYYYMMDD}-{流水號}
範例: ABC-20251031-0001
- 租戶代碼: 3-5 個字元(可在租戶設定中配置)
- 日期: 訂單創建日期
- 流水號: 當日的流水號(從 0001 開始)
3. 員工分配限制
- 訂單僅能分配給同一租戶的員工
- 設計師與送貨員的選擇列表自動過濾為當前租戶
4. 跨租戶訪問保護
- 嘗試訪問其他租戶的訂單返回
404 Not Found(而非403,避免資訊洩漏)
安全性考量 (Security Considerations)
1. 權限控制
| 操作 | 所需權限 | 說明 |
|---|---|---|
| 創建訂單 | ROLE_STAFF 以上 | 店員、管理者 |
| 確認訂單 | ROLE_STAFF 以上 | 店員、管理者 |
| 分配設計師 | ROLE_MANAGER 以上 | 管理者、店主 |
| 上傳作品照片 | ROLE_FLORIST 以上 | 設計師、管理者 |
| 分配送貨員 | ROLE_MANAGER 以上 | 管理者、店主 |
| 上傳簽收照片 | ROLE_DELIVERY 以上 | 送貨員、管理者 |
| 取消訂單 | ROLE_MANAGER 以上 | 管理者、店主 |
| 查看訂單 | ROLE_STAFF 以上 | 所有內部用戶 |
2. 敏感資料保護
- 客戶電話與地址僅特定角色可見
- 訂單備註(內部使用)不顯示給客戶
3. 審計日誌
所有關鍵操作都需記錄審計日誌:
- 訂單創建、修改、取消
- 狀態流轉
- 價格調整
- 分配變更
非功能性需求 (Non-Functional Requirements)
效能需求
- 訂單列表載入時間 < 1 秒(20 筆/頁)
- 訂單創建 API 響應時間 < 500ms
- 支援單租戶 1000 筆訂單的搜尋與過濾
可用性需求
- 訂單狀態變更時立即更新 UI(使用 WebSocket 或輪詢)
- 照片上傳支援拖放與粘貼
- 手機端友好的簽收照片上傳
擴展性需求
- 支援單租戶每日 100 筆訂單創建
- 訂單歷史數據歸檔策略(超過 1 年的訂單移至冷儲存)
參考資料 (References)
- 產品路線圖 - Epic 2
- 用戶角色與權限設計
- 架構決策記錄 - 訂單狀態機設計(ADR-002)
最後更新: 2025-12-20 撰寫者: Product Team