SBE Scenario 3: 創建客製化專案訂單
場景描述
店員為客戶創建客製化專案訂單(會場佈置),無預設商品,手動輸入協商價格。
Given(前置條件)
系統狀態
- 當前日期: 2025-10-31
- 當前租戶:
ABC(ABC 花店) - 已登入用戶: 張店員 (ROLE_SALES)
測試資料
現有客戶
{
"id": "cust-002",
"tenantId": "ABC",
"name": "張新郎",
"phone": "0923-456-789",
"email": "xl.zhang@example.com",
"customerType": "individual"
}
When(執行操作)
步驟 1: 選擇訂單類型
- 店員在訂單創建頁面選擇「訂單類型」為「客製化專案」
- 系統隱藏「商品選擇」區域
- 系統顯示「專案描述」與「協商價格」輸入區域
步驟 2: 選擇客戶
- 店員選擇客戶「張新郎 (0923-456-789)」
步驟 3: 填寫專案描述
- 專案類型: 會場佈置
- 需求描述: 婚禮會場佈置,粉色系,100 坪空間,包含主桌佈置、賓客桌花、入口拱門
步驟 4: 填寫協商價格
- 協商價格: NT$50,000
- 調整原因: 客製化專案無標準價格,依照現場空間與客戶需求協商
步驟 5: 填寫配送資訊
- 配送地址: 台北市中山區民生東路 200 號(婚宴會館)
- 聯絡電話: 0923-456-789
- 配送日期: 2025-11-15(婚禮日期)
- 配送時段: 06:00-09:00(婚禮前佈置)
步驟 6: 填寫內部備註
- 內部備註: 需提前一天勘場確認佈置動線,主桌需使用大型花材
步驟 7: 提交訂單
- 店員點擊「創建訂單」按鈕
Then(預期結果)
API 請求
Request Body
{
"customerId": "cust-002",
"isCustomProject": true,
"customProjectDescription": "婚禮會場佈置,粉色系,100 坪空間,包含主桌佈置、賓客桌花、入口拱門",
"items": [],
"deliveryAddress": "台北市中山區民生東路 200 號(婚宴會館)",
"deliveryPhone": "0923-456-789",
"deliveryDate": "2025-11-15",
"deliveryTimeSlot": "06:00-09:00",
"manualPriceAdjustment": 50000,
"priceAdjustmentReason": "客製化專案無標準價格,依照現場空間與客戶需求協商",
"internalNotes": "需提前一天勘場確認佈置動線,主桌需使用大型花材"
}
Response Body (201 Created)
{
"orderId": "ABC-20251031-0003",
"orderNumber": "ABC-20251031-0003",
"status": "pending_confirmation",
"customerId": "cust-002",
"customer": {
"id": "cust-002",
"name": "張新郎",
"phone": "0923-456-789"
},
"isCustomProject": true,
"customProjectDescription": "婚禮會場佈置,粉色系,100 坪空間,包含主桌佈置、賓客桌花、入口拱門",
"items": [],
"deliveryInfo": {
"address": "台北市中山區民生東路 200 號(婚宴會館)",
"phone": "0923-456-789",
"date": "2025-11-15",
"timeSlot": "06:00-09:00"
},
"internalNotes": "需提前一天勘場確認佈置動線,主桌需使用大型花材",
"pricing": {
"subtotal": 50000,
"tax": 2500,
"total": 52500,
"adjustmentReason": "客製化專案無標準價格,依照現場空間與客戶需求協商"
},
"createdAt": "2025-10-31T12:00:00Z",
"createdBy": "user-001"
}
審計日誌
{
"action": "CREATE_CUSTOM_PROJECT_ORDER",
"resourceType": "order",
"resourceId": "ABC-20251031-0003",
"userId": "user-001",
"userName": "張店員",
"role": "ROLE_SALES",
"tenantId": "ABC",
"timestamp": "2025-10-31T12:00:00Z",
"details": {
"customerId": "cust-002",
"totalAmount": 52500,
"isCustomProject": true,
"priceAdjustmentReason": "客製化專案無標準價格,依照現場空間與客戶需求協商"
}
}
驗證檢查清單
客製化專案特性
- 訂單標記為「客製化專案」(
isCustomProject: true) - 訂單不包含商品項目(
items: []) - 專案描述正確記錄
- 協商價格正確記錄
價格調整
- 價格調整原因記錄至審計日誌
- 調整後的價格為 NT$50,000
- 稅額正確計算(NT$2,500,5%)
內部備註
- 內部備註正確儲存
- 內部備註不顯示給客戶
邊界條件測試
測試案例 1: 協商價格為 0
- 協商價格: NT$0
- 預期結果:
- 前端驗證失敗
- 錯誤訊息: 「協商價格必須大於 0」
測試案例 2: 未填寫調整原因
- 協商價格: NT$50,000
- 調整原因: 空白
- 預期結果:
- 前端驗證失敗
- 錯誤訊息: 「請填寫價格調整原因」
測試案例 3: 未填寫專案描述
- 專案描述: 空白
- 預期結果:
- 前端驗證失敗
- 錯誤訊息: 「客製化專案必須填寫需求描述」
最後更新: 2025-11-03