跳至主要内容

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