需求清單

共 54 項需求,依模組分組顯示

需求 1

課程管理

模組 A
身為 Admin,我希望能建立與維護課程資料,以便作為開班的基礎範本。
  1. 允許 Admin 建立 Course,並記錄課程名稱、描述、時數、費用、語言、類別與狀態。
  2. Admin 更新 Course 資料時,保留修改前的版本紀錄,並記錄修改者與時間戳記。
  3. Admin 將 Course 狀態設為「停用」時,禁止以該 Course 建立新的 Offering。
  4. Course 名稱與現有 Course 重複時,顯示警告訊息並要求 Admin 確認後才能儲存。
  5. 支援以關鍵字、類別與狀態篩選 Course 清單。
  6. 允許 Admin 為每個 Course 設定 Course_Ownership_Type(proprietary 或 authorized),預設為 proprietary。
  7. Course_Ownership_Type 為「authorized」時,要求關聯至 Vendor 紀錄,未關聯不得儲存。
需求 2

開班(Offering)管理

模組 A
身為 Admin,我希望能以既有課程快速建立多個開班,以便有效率地安排訓練場次。
  1. 以既有 Course 建立 Offering 時,自動帶入預設費用、時數與描述,允許覆寫。
  2. 允許為單一 Offering 建立一或多個 Session,記錄日期、開始/結束時間與 Venue。
  3. 允許設定 Offering 的名額上限(最大報名人數)。
  4. 已報名人數達名額上限時,自動啟用 Waitlist 並停止接受一般報名。
  5. 允許以行事曆視圖檢視所有 Offering 與 Session 排程。
  6. Admin 取消 Offering 時,通知所有已報名 Learner 並觸發退款流程。
需求 3

線上報名與名額控管

模組 B
身為 Learner,我希望能線上瀏覽課程資訊並完成報名,以便自助完成訓練申請。
  1. 對外公開顯示 Offering 的課程名稱、日期、地點、費用、剩餘名額與報名截止日。
  2. Learner 提交報名表單時,驗證必填欄位並在驗證失敗時顯示具體錯誤訊息。
  3. 報名成功時,建立 Registration 紀錄並將剩餘名額減一。
  4. 剩餘名額為零時,將 Learner 加入 Waitlist 並顯示候補序號。
  5. 有名額釋出時,依序通知 Waitlist 第一順位 Learner,保留名額 48 小時。
  6. Waitlist Learner 未於 48 小時內確認,釋放名額並通知下一順位。
需求 4

折扣與優惠規則

模組 B
身為 Admin,我希望能設定早鳥、團報等折扣規則,以便靈活管理課程定價。
  1. 允許建立 Discount,設定折扣類型(百分比或固定金額)、適用條件與有效期間。
  2. 符合多項 Discount 條件時,套用對 Learner 最有利的單一 Discount。
  3. Discount 有效期間屆滿時,自動停用不再套用於新報名。
  4. 已被套用於現有 Registration 的 Discount 不得刪除。
  5. Reseller 管理功能啟用時,允許為特定 Reseller 設定專屬 Discount。
需求 5

財務管理(發票、付款與退款)

模組 C
身為 Admin,我希望能管理發票、付款狀態與退款流程,以便確保財務資料的完整性與可追溯性。
  1. Registration 建立後,自動產生 Invoice,記錄應收金額、幣別、到期日與付款狀態。
  2. 支援記錄多種付款方式(信用卡、銀行轉帳、現金、票據)。
  3. 累計 Payment 等於應收金額時,自動更新 Invoice 狀態為「已付清」。
  4. 退款時記錄退款金額、日期、原因,並更新 Invoice 狀態。
  5. 退款需 Approver 核准後方可執行,未核准一律拒絕。
  6. 允許匯出指定期間的收款報表(CSV 與 PDF)。
  7. Invoice 逾期未付時,自動發送付款提醒通知。
需求 6

學員與企業客戶(CRM)管理

模組 D
身為 Admin,我希望能管理學員與企業客戶資料及其訓練歷程,以便提供完整的客戶服務。
  1. 允許建立與維護 Contact 資料(姓名、電子郵件、電話、所屬 Organisation、Line_ID)。
  2. 允許建立與維護 Organisation 資料(公司名稱、統一編號、聯絡人、帳單地址)。
  3. 顯示單一 Contact 的完整訓練歷程。
  4. 顯示單一 Organisation 的完整訓練歷程與累計消費金額。
  5. 支援模糊搜尋,500 毫秒內回傳結果。
  6. 允許合併多個 Contact 為單一紀錄,保留所有歷史資料。
  7. 允許記錄選填的 Line_ID 欄位。
  8. 合併 Contact 時保留所有非空白 Line_ID,多個不同值由 Admin 選擇。
需求 7

出席紀錄與完成狀態

模組 E
身為 Admin 或 Instructor,我希望能記錄學員出席狀況並判定完成狀態,以便作為核發證書的依據。
  1. 允許為每位 Learner 在每個 Session 記錄出席狀態(出席、缺席、遲到)。
  2. 依據出席率門檻(預設 80%)自動計算完成狀態。
  3. 課程設定自訂出席率門檻時,以課程設定取代系統預設值。
  4. 完成狀態標記為「完成」時,觸發證書產生流程。
  5. 允許 Admin 手動覆寫完成狀態,並記錄覆寫原因。
  6. 允許匯出指定 Offering 的出席報表(CSV 與 PDF)。
需求 8

證書管理

模組 E
身為 Admin,我希望能依條件產生並發送證書,以便學員取得完訓憑證。
  1. 允許建立 Certificate 模板,定義合併欄位(學員姓名、課程名稱、完成日期、講師姓名)。
  2. 完成狀態為「完成」時,自動產生 Certificate 並以 PDF 格式儲存。
  3. 允許手動觸發單一或批次 Certificate 的產生與寄送。
  4. 寄送成功時記錄寄送時間與收件人,更新狀態為「已寄送」。
  5. 寄送失敗時記錄失敗原因並通知 Admin。
  6. 提供 Learner 自助下載已核發 Certificate 的功能。
  7. 允許設定 Certificate 有效期限,到期前 30 天自動通知 Learner。
需求 9

通知與流程自動化

模組 F
身為 Admin,我希望系統能自動發送關鍵節點的通知,以便減少人工作業並提升學員體驗。
  1. 支援自動通知觸發點:報名確認、付款確認、課前提醒、課後感謝與 Certificate 核發。
  2. 支援電子郵件作為主要通知管道,允許自訂範本與合併欄位。
  3. 自動通知觸發時,透過電子郵件發送至 Contact 的電子郵件地址。
  4. 發送失敗時記錄原因並在 Admin 介面顯示待處理清單。
  5. 允許手動重新發送失敗的通知。
  6. 允許手動選取 Contact 並發送指定範本的通知。
  7. 簡訊功能啟用時,支援以簡訊發送課前提醒。
  8. LINE 通知功能啟用時,支援透過 LINE 發送通知。
  9. 記錄每封通知的發送管道、時間、收件人與狀態,保留至少 90 天。
需求 10

講師管理

模組 G
身為 Admin,我希望能管理講師資料與排課,以便確保每個開班都有合適的講師。
  1. 允許建立與維護 Instructor 資料(姓名、電子郵件、專長領域、可授課語言)。
  2. 允許將 Instructor 指派至 Offering 或特定 Session。
  3. 指派時檢查時段衝突,有衝突則顯示警告。
  4. 允許 Instructor 登入後檢視自己的課表。
  5. 允許查詢指定期間內每位 Instructor 的授課時數統計。
  6. Instructor 被移除指派時,通知 Admin 並要求重新指派。
需求 11

資產管理

模組 G
身為 Admin,我希望能管理教材與設備等資產,以便確保開班時所需資源均已備妥。
  1. 允許建立與維護 Asset 資料(名稱、類型、數量與狀態)。
  2. 允許將 Asset 分配至 Offering 或 Session,記錄分配數量與歸還日期。
  3. 分配時檢查可用數量,不足則顯示警告並拒絕。
  4. Offering 結束後提示確認 Asset 歸還狀態。
  5. 允許查詢 Asset 的使用歷史紀錄。
需求 12

教室與場地管理

模組 G
身為 Admin,我希望能管理教室與場地資源(含自有、客戶端與外部租用場地),以便避免場地衝突。
  1. 允許建立 Venue 資料(名稱、地址、容納人數、設備、類型、Ownership_Type、狀態)。
  2. 允許記錄 Virtual_Meeting_Platform 資訊(平台類型、URL、ID、密碼)。
  3. 允許將 Venue 指派至 Offering 或 Session。
  4. 指派時檢查時段衝突,有衝突則拒絕。
  5. 報名人數超過 Venue 容納人數時顯示警告。
  6. 提供 Venue 使用率報表。
  7. 虛擬/混合場地顯示會議平台資訊。
  8. Client_Site 場地要求關聯至 Organisation。
  9. Client_Site 場地允許記錄客戶地址、聯絡人與進出指引。
  10. 允許建立 Temporary_Venue(僅供單次 Offering 使用)。
  11. Temporary_Venue 在 Offering 結案後自動停用。
  12. Client_Site 場地在 Instructor 課表中顯示完整地址與聯絡資訊。
需求 13

課程排程(Scheduling)

模組 A
身為 Admin,我希望能有效率地安排課程排程,以便避免資源衝突並最佳化訓練計畫。
  1. 提供行事曆視圖(月、週、日三種模式)。
  2. 行事曆中同時顯示 Instructor 與 Venue 的佔用狀態。
  3. 拖曳 Session 至新時段時,自動檢查衝突並更新排程。
  4. 允許複製既有 Offering 的排程設定以快速建立新 Offering。
  5. 排程衝突時列出所有衝突項目並提供解決建議。
需求 14

業務管理(Sales)

模組 H
身為 Admin 或業務人員,我希望能追蹤業務機會與銷售狀況,以便提升課程銷售效率。
  1. 允許建立 Opportunity(潛在客戶、感興趣 Course、預估金額、預計成交日)。
  2. 支援狀態流程:潛在 → 接觸中 → 提案 → 成交 → 結案。
  3. 「成交」時允許直接建立對應的 Registration。
  4. 提供業務管道報表(各狀態機會數量與預估金額)。
  5. 允許記錄每次客戶互動紀錄。
需求 15

經銷商管理(Reseller / Channel)

模組 H
身為 Admin,我希望能管理經銷商合作關係與銷售分潤,以便有效擴展課程銷售通路。
  1. 允許建立 Reseller 資料(公司名稱、聯絡人、合約期間、分潤比例)。
  2. 允許將 Course 或 Offering 授權給 Reseller 銷售。
  3. Reseller 代理的 Registration 成立時,自動計算分潤金額。
  4. 提供 Reseller 銷售報表。
  5. 合約到期前 30 天通知 Admin,並自動暫停新報名授權。
需求 16

學員自助入口

模組 I
身為 Learner,我希望能透過自助入口查詢課表、訓練歷程與證書。
  1. 提供 Learner 登入後查詢報名紀錄、出席紀錄與 Certificate。
  2. 允許瀏覽即將開課的 Offering 並完成線上報名。
  3. 登入時驗證身份,僅顯示本人資料。
  4. 允許下載已核發的 Certificate(PDF)。
  5. 透過自助入口取消報名時,依取消政策計算退款金額。
需求 17

分權管理(RBAC)

模組 J
身為系統管理員,我希望能依角色設定存取權限,以便確保資料安全與職責分離。
  1. 定義至少四種預設角色:Admin、Approver、Instructor、Learner。
  2. 允許建立自訂角色,設定細粒度功能權限(讀取、建立、修改、刪除)。
  3. 超出權限時拒絕存取並顯示「權限不足」錯誤。
  4. 允許將使用者指派至一或多個角色。
  5. 角色變更時立即生效並終止現有工作階段。
  6. 支援以 Organisation 為範圍的資料隔離。
需求 18

稽核功能(Audit Trail)

模組 J
身為 Approver,我希望能查閱所有重要操作的稽核紀錄,以便確保可追溯性與合規性。
  1. 記錄所有核心業務物件的建立、修改與刪除操作。
  2. 記錄所有登入、登出與登入失敗事件。
  3. 記錄所有角色與權限的變更操作。
  4. 禁止任何使用者修改或刪除稽核紀錄。
  5. 允許以操作者、物件類型、時間範圍查詢,3 秒內回傳。
  6. 允許匯出 Audit_Trail 報表(CSV 與 PDF)。
需求 19

Microsoft 365 行事曆整合

模組 K
身為 Admin 或 Instructor,我希望 TMS 的課程排程能與 M365 行事曆同步。
  1. 允許使用者授權 TMS 存取其 M365 行事曆。
  2. Offering/Session 建立或更新時,自動同步至 Instructor 的 M365 行事曆。
  3. Offering/Session 取消時,自動從 M365 行事曆移除。
  4. 同步失敗時記錄原因並顯示警告,不影響 TMS 內部排程資料。
  5. 允許隨時撤銷 M365 整合授權。
需求 20

報表與資料匯出

模組 J
身為 Admin 或 Approver,我希望能產生並匯出各類報表。
  1. 提供標準報表:報名名單、出席紀錄、收款狀況、Certificate 清單、Instructor 統計、Venue 使用率、Reseller 報表。
  2. 允許以 Offering、時間範圍、Course、Organisation 或 Instructor 篩選。
  3. 支援匯出為 CSV 與 PDF。
  4. 超過 10,000 筆時以非同步方式產生。
  5. 允許儲存常用篩選條件。
需求 21

Microsoft Entra ID 身份驗證整合

模組 K
身為系統管理員,我希望 TMS 能串接 Entra ID 實現 SSO 單一登入。
  1. 支援透過 Entra ID 以 OpenID Connect 進行 SSO。
  2. 內部正職員工強制使用 Entra ID 登入。
  3. 首次登入時自動建立 TMS 帳號並對應角色。
  4. 登入成功後核發 JWT Token 建立工作階段。
  5. 僅 System Admin 可使用本機帳號作為緊急存取。
  6. Learner 使用本機帳號密碼登入。
  7. Instructor 同時支援 SSO 與本機帳號。
  8. Entra ID 無法連線時顯示錯誤訊息。
  9. 允許設定 Tenant ID、Client ID、Client Secret 並提供連線測試。
  10. 使用者在 Entra ID 被停用時,拒絕存取並停用 TMS 帳號。
  11. 登入頁面顯示「使用 Microsoft 帳號登入」按鈕為預設方式。
需求 22

Container 導向部署架構

模組 J
身為系統管理員,我希望 TMS 採用 Container 導向架構,以便簡化環境建置。
  1. 為每個服務元件提供 OCI 標準 Container Image 與 Dockerfile。
  2. 提供 Container Orchestration 設定檔。
  3. 支援透過環境變數注入所有環境相關參數。
  4. Container 啟動時執行健康檢查端點。
  5. 支援水平擴展(多實例共享狀態)。
  6. 日誌輸出至 stdout/stderr。
  7. 支援滾動更新策略(零停機部署)。
需求 23

模組獨立部署與維護

模組 J
身為系統管理員,我希望每個模組可獨立部署與回滾,避免單一模組更新導致全系統暫停。
  1. 每個模組提供獨立 Container Image 與部署單元。
  2. 每個模組維護獨立的 Module_Version(語意化版本)。
  3. 模組間通訊透過版本化 API_Contract。
  4. API_Contract 變更時同時支援新舊版本至少一個發行週期。
  5. 各模組可獨立發行新版本。
  6. 某模組不可用時,其他模組維持正常運作(Graceful Degradation)。
  7. 支援單一模組獨立回滾。
  8. 每個模組提供獨立資料庫 Schema。
  9. 禁止直接存取其他模組的資料庫。
  10. 以滾動更新策略部署(零停機)。
需求 24

UI/UX 設計規範與品牌識別

模組 J
身為設計團隊,我希望 TMS 遵循 Ai Network 品牌識別規範。
  1. 定義 Brand_Palette:Primary Blue、Accent Red、Background White、Dark Navy、Dark Gray。
  2. 以 Design_Token(CSS 自訂屬性)實作色彩系統。
  3. Accent Red 限定用於警示與重要操作按鈕。
  4. Header 左側固定顯示 Ai Network Logo(32-40px)。
  5. 登入頁面中央顯示放大 Logo(64-80px)。
  6. 使用 Logo 簡化版作為 Favicon。
  7. 採用 Inter + Noto Sans TC 字型。
  8. 定義 H1-H4 標題層級。
  9. Primary Button 使用 Primary Blue 背景。
  10. Card 元件使用白色背景、圓角 8px。
  11. Header 使用白色背景搭配 Primary Blue 選中狀態。
  12. 表單聚焦時使用 Primary Blue 邊框。
  13. 支援三種 Responsive Breakpoint(Desktop/Tablet/Mobile)。
  14. Mobile 時 Sidebar 收合為漢堡選單。
  15. 資料表格在 Mobile 提供水平捲動。
  16. Admin 與 Learner Portal 共用品牌規範。
  17. 不同導覽結構維持相同色彩與視覺風格。
  18. 三面板佈局:Header + Sidebar + Main Content。
  19. Header 固定於頂部(sticky)。
  20. Sidebar 固定於左側(sticky)。
  21. Header 左側顯示 Logo,點擊導航至首頁。
  22. Header 三區段:Logo / Global Search / User Profile。
  23. Header 右側顯示使用者頭像與名稱。
  24. 點擊頭像展開 User Profile Dropdown。
  25. Dropdown 提供「個人資料」與「登出」。
  26. 點擊外部區域自動收合 Dropdown。
  27. Sidebar 顯示模組功能選單(含圖示與文字)。
  28. 支援可展開子選單結構。
  29. 高亮標示目前所在頁面。
  30. Unpinned 時自動收合為窄版模式。
  31. 懸停時暫時展開 Sidebar。
  32. 提供 Pin/Unpin 切換按鈕。
  33. 儲存 Sidebar Pin State 偏好。
  34. 首次登入預設為 Pinned。
  35. Dark Mode 啟用時提供深色模式切換。
  36. 儲存深色模式偏好。
需求 25

全域搜尋(Global Search)

模組 J
身為系統使用者,我希望能透過搜尋框快速搜尋所有模組的資料。
  1. Header 中央固定顯示 Global Search 搜尋框。
  2. 搜尋框具有佔位文字提示。
  3. 跨所有模組搜尋核心實體。
  4. 對每種實體搜尋主要識別欄位。
  5. 搜尋結果依實體類型分組顯示。
  6. 每筆結果顯示簡要預覽摘要。
  7. 超過顯示上限時顯示「查看更多」。
  8. 支援 Ctrl+K 或 / 快捷鍵聚焦。
  9. Escape 鍵關閉搜尋結果面板。
  10. 停止輸入 300ms 後自動搜尋(Debounce)。
  11. 持續輸入時取消先前請求。
  12. 輸入框為空時顯示最近搜尋紀錄(最多 10 筆)。
  13. 允許清除搜尋紀錄。
  14. 搜尋結果遵循 RBAC 權限。
  15. 無權限模組的資料不顯示。
  16. 點擊結果導航至詳細頁面。
  17. 支援鍵盤方向鍵與 Enter 導航。
  18. 無結果時顯示提示訊息。
需求 26

WordPress 官方網站課程同步

模組 K
身為 Admin,我希望 TMS 能自動將課程資訊同步至 WordPress 官網。
  1. Offering 狀態為「published」時,自動推送至 WordPress。
  2. 同步資料:課程名稱、描述、時數、費用、日期、Venue、Instructor、名額、截止日。
  3. 已發布 Offering 資料變更時,自動更新 WordPress 文章。
  4. Offering 取消時,更新 WordPress 文章狀態。
  5. Offering 完成時,更新 WordPress 文章狀態。
  6. 允許設定 WordPress 連線參數並提供連線測試。
  7. 為每筆 Offering 記錄 WordPress_Sync_Status。
  8. 同步失敗時自動重試(最多 3 次,間隔遞增)。
  9. 允許設定同步資格條件(僅公開班)。
  10. 允許手動觸發單一 Offering 的同步。
  11. Course 對應 tms_course,Offering 對應 tms_offering。
  12. 同步失敗不影響 TMS 內部資料。
  13. 允許手動重試失敗的同步操作。
需求 27

原廠課程代理管理

模組 A
身為 Admin,我希望能管理原廠供應商資料與原廠課程對應。
  1. 允許建立 Vendor 紀錄(名稱、聯絡人、官網 URL、合約條款、授權類別)。
  2. 支援以供應商名稱模糊搜尋。
  3. authorized 課程允許記錄 Vendor_Course_Mapping。
  4. proprietary 課程不得建立 Vendor_Course_Mapping。
  5. authorized 課程的 Offering 允許記錄 Vendor_Offering_Mapping。
  6. 非代理課程的 Offering 不得建立 Vendor_Offering_Mapping。
  7. 支援以 Vendor_Course_Code、Vendor 名稱或認證名稱搜尋 Course。
  8. 支援以 Vendor Offering ID 搜尋 Offering。
  9. 提供 Vendor Dashboard 頁面。
  10. 點擊 Vendor 展開顯示所有代理課程詳細資訊。
  11. 允許記錄每個 Offering 使用的原廠教材版本。
  12. 教材版本更新時標記使用舊版的進行中 Offering。
需求 28

通用資料匯入匯出

模組 J
身為 Admin,我希望能對各模組核心實體進行資料匯入與匯出。
  1. 支援匯出為 Excel、CSV 與 PDF 三種格式。
  2. 支援從 Excel 與 CSV 匯入。
  3. 匯入時驗證每列資料並產生詳細錯誤報告。
  4. 驗證完成後顯示 Import_Preview,Admin 確認後執行。
  5. 為每種實體提供可下載的 Import_Template。
  6. 匯出依據目前篩選條件。
  7. 超過 10,000 筆時非同步產生。
  8. 匯入匯出遵循 RBAC 權限。
  9. 無讀取權限時拒絕匯出。
  10. 無建立/修改權限時拒絕匯入。
  11. 所有操作記錄於 Audit_Trail。
需求 29

角色化首頁 Dashboard

模組 J
身為系統使用者,我希望登入後能看到與我角色相關的關鍵資訊總覽。
  1. 依角色自動導向對應 Dashboard。
  2. Admin Dashboard:KPI 卡片、行事曆、教室利用率、待辦事項。
  3. Instructor Dashboard:個人課表、即將開課清單、授課時數統計。
  4. Approver Dashboard:待核准事項、營收摘要、報名趨勢圖。
  5. Sales Dashboard:業務管道摘要、成交金額、客戶互動紀錄。
  6. Dashboard 資料遵循 RBAC 權限。
  7. 3 秒內完成載入。
  8. 支援 Desktop 與 Tablet 響應式佈局。
  9. 嵌入行事曆 Widget(月視圖)。
  10. 點擊行事曆事件導航至詳細頁面。
  11. 行事曆以顏色區分不同狀態。
  12. KPI 卡片顯示與上期比較趨勢。
  13. 點擊 KPI 卡片導航至詳細清單。
  14. 未來支援 Dashboard Widget 個人化。
需求 30

外部 API(RESTful Data Access)

模組 J
身為系統整合人員,我希望 TMS 提供標準化的 RESTful API。
  1. 提供版本化 API(/api/v1/{resource}),支援 JSON。
  2. 為核心資源提供 CRUD 端點。
  3. 為 Dashboard 提供專用唯讀聚合 API。
  4. 支援 API Key、OAuth 2.0 Bearer Token、Session Cookie 認證。
  5. API 存取遵循 RBAC 權限。
  6. 提供 API Key 管理介面。
  7. 支援分頁(預設 50 筆,最大 200 筆)。
  8. 支援篩選(query parameter)。
  9. 支援欄位選擇(?fields=)。
  10. 支援排序(?order=)。
  11. 提供 OpenAPI 3.0 規格文件(/api/v1/docs)。
  12. 實施速率限制(預設每分鐘 60 次)。
  13. 記錄所有 API 存取紀錄(保留 30 天)。
  14. 僅透過 HTTPS 提供服務。
  15. 支援以 Master_Key 或 Second_Key 查詢單一資源。
  16. API 回應同時包含 id(Master_Key)與 code(Second_Key)。
需求 31

一鍵啟動與 Demo Data

模組 J
身為開發人員,我希望能一鍵啟動完整開發環境並灌入示範資料。
  1. 提供 bootstrap.sh 一鍵啟動腳本。
  2. bootstrap.sh 可重複執行(冪等)。
  3. 執行完成後顯示登入 URL 與管理員帳號。
  4. 提供完整 Demo Data(10+ 課程、15+ 開班、30+ 學員等)。
  5. Demo Data 使用相對日期。
  6. Demo Data 使用繁體中文內容。
  7. 提供 Demo Data 載入開關。
需求 32

系統設定與欄位管理(Dynamic Custom Fields)

模組 J
身為系統管理員,我希望能透過 GUI 為任何實體動態新增自訂欄位。
  1. 允許為所有核心實體新增 Custom_Field。
  2. 支援多種欄位類型(Text、Number、Date、Select、Boolean 等)。
  3. 允許設定欄位屬性(名稱、代碼、類型、必填、預設值、驗證規則)。
  4. 下拉選單/多選允許定義選項清單。
  5. 關聯欄位允許指定目標實體類型。
  6. 表單頁面動態渲染 Custom_Field。
  7. 允許設定是否在清單視圖中顯示。
  8. Custom_Field 值可被 Global Search 搜尋。
  9. Custom_Field 值可作為篩選條件。
  10. Custom_Field 值包含於匯出結果。
  11. 允許停用(隱藏)Custom_Field,資料保留。
  12. 禁止刪除已有資料的 Custom_Field。
  13. 禁止刪除或隱藏系統內建欄位。
  14. 修改 Custom_Field 屬性記錄於 Audit_Trail。
  15. API 回應包含 custom_fields 物件。
  16. API 寫入時執行相同驗證規則。
  17. 提供 API 端點查詢 Custom_Field 定義。
需求 33

Tag 標籤系統

模組 J
身為 Admin,我希望能為所有核心實體附加 Tag 標籤,以便靈活分類與篩選。
  1. 支援所有核心實體附加 Tag(多對多關係)。
  2. 一個實體可附加多個 Tag,一個 Tag 可附加至多個實體。
  3. 表單頁面中新增/移除 Tag,支援 autocomplete。
  4. 允許直接建立新 Tag。
  5. 允許建立 Tag_Group(標籤群組)。
  6. Tag 歸類至 Tag_Group(一對一)。
  7. 允許為 Tag 設定顏色標記。
  8. 提供 Tag 管理頁面。
  9. 刪除已使用的 Tag 需確認。
  10. 清單視圖支援以 Tag 篩選。
  11. 多 Tag 篩選預設 AND 邏輯,可切換 OR。
  12. Tag 名稱可被 Global Search 搜尋。
  13. Tag 資訊包含於匯出結果。
  14. 預留 access_scope 欄位供未來 RBAC 使用。
  15. 預留「Tag 存取控管」設定頁面入口。
  16. 資料模型支援未來以 Tag 作為 Record-Level 篩選。
  17. 預留與 Entra ID Group 的對應欄位。
  18. API 回應包含 tags 陣列。
  19. API 支援新增/移除 Tag。
  20. 提供 GET /api/v1/tags 端點。
  21. API 查詢支援以 Tag 篩選。
需求 34

Master Key / Second Key 雙主鍵設計

模組 J
身為系統管理員與開發人員,我希望每個實體都有穩定的系統主鍵與人類可讀的業務識別碼。
  1. 為所有核心實體自動產生 UUID v7 作為 Master_Key。
  2. Master_Key 自動產生,不可手動指定或修改。
  3. Master_Key 全域唯一,跨實體類型不重複。
  4. 使用 Master_Key 作為所有 Foreign Key 參照欄位。
  5. 支援可選的 Second_Key(如 CRS-2025-001)。
  6. 同一實體類型內 Second_Key 唯一。
  7. 建立時自動產生 Second_Key,Admin 亦可手動指定。
  8. 允許自訂 Second_Key 格式規則(前綴、分隔符、日期、流水號)。
  9. 流水號在相同前綴+日期組合下自動遞增。
  10. 修改格式規則僅對新建實體生效。
  11. UI 同時顯示 Master_Key(縮短)與 Second_Key(完整)。
  12. Global Search 支援以兩種 Key 搜尋。
  13. API 支援以兩種 Key 查詢。
  14. 匯入時支援以兩種 Key 作為關聯參照。
  15. Master_Key 一旦產生不可變更。
  16. 允許特殊情況修改 Second_Key(記錄於 Audit_Trail)。
  17. 匯入時 Second_Key 衝突需 Admin 決定處理方式。
需求 35Kiro 建議

報名轉班管理

模組 B
身為 Admin 或 Learner,我希望能將已報名的學員從一個 Offering 轉移至另一個 Offering,以便在學員無法出席原定場次時提供彈性安排。
  1. 允許 Admin 將已報名 Learner 的 Registration 從原 Offering 轉移至同一 Course 的另一個 Offering。
  2. 轉班目標 Offering 的費用高於原 Offering 時,自動計算差額並產生補繳 Invoice。
  3. 轉班目標 Offering 的費用低於原 Offering 時,自動計算差額並產生 Credit_Note(信用額度)。
  4. 轉班成功時,自動通知 Learner 新的 Offering 資訊(日期、地點、講師)。
  5. 轉班導致原 Offering 釋出名額時,自動觸發候補晉升流程。
  6. 記錄所有轉班操作於 Audit_Trail,包含原 Offering、目標 Offering、操作者與時間。
  7. 學員自助入口功能啟用時,允許 Learner 在自助入口中自行申請轉班(需符合轉班政策)。
需求 36Kiro 建議

團體報名管理

模組 B
身為 Admin 或企業客戶聯絡人,我希望能一次為多位學員完成報名,以便簡化企業客戶的批次報名流程。
  1. 允許 Admin 或企業客戶聯絡人在單一報名流程中為多位 Learner 同時報名同一 Offering。
  2. 團體報名時,為每位 Learner 建立獨立的 Registration 紀錄,但共用同一筆 Invoice。
  3. 允許 Admin 設定團體報名的最低人數門檻,達到門檻時自動套用團報折扣。
  4. 團體報名中的部分 Learner 取消時,重新計算是否仍符合團報折扣條件,若不符合則調整 Invoice 金額。
  5. 允許企業客戶聯絡人在報名時僅提供報名人數與聯絡人資訊,學員詳細資料可於開課前補填。
  6. 在報名確認通知中列出所有已報名學員的姓名清單。
需求 37Kiro 建議

分期付款與部分付款

模組 C
身為 Admin,我希望能允許學員或企業客戶分期付款,以便降低高額課程的付款門檻並提升報名率。
  1. 允許 Admin 為特定 Course 或 Offering 設定分期付款計畫,定義期數、每期金額與到期日。
  2. Learner 選擇分期付款時,自動產生多筆 Invoice(每期一筆),各自記錄到期日與應付金額。
  3. 允許記錄部分付款(Payment 金額小於 Invoice 應收金額),並追蹤 Invoice 的未付餘額。
  4. 分期 Invoice 到期未付時,自動發送付款提醒通知。
  5. 在 Learner 與 Organisation 的財務摘要中顯示未付餘額總計。
  6. 允許 Admin 設定逾期未付的處理政策(如:逾期 N 天後暫停學員報名資格)。
需求 38Kiro 建議

信用額度管理

模組 C
身為 Admin,我希望能為學員或企業客戶核發信用額度,以便在退款、轉班差額或商業協議中提供靈活的財務處理方式。
  1. 允許 Admin 為 Contact 或 Organisation 核發 Credit_Note,記錄金額、原因、有效期限與關聯的原始 Invoice。
  2. Learner 報名新 Offering 時,允許以現有 Credit_Note 餘額抵扣應付金額。
  3. 追蹤每筆 Credit_Note 的使用紀錄,包含抵扣金額、抵扣日期與關聯的 Invoice。
  4. Credit_Note 有效期限屆滿且仍有餘額時,通知 Admin 進行處理(延期或作廢)。
  5. 在 Contact 與 Organisation 的財務摘要中顯示可用 Credit_Note 餘額。
需求 39Kiro 建議

促銷代碼管理

模組 B
身為 Admin,我希望能建立促銷代碼供學員在報名時輸入以獲得折扣,以便支援行銷活動與合作夥伴推廣。
  1. 允許 Admin 建立 Promotional_Code,設定代碼字串、折扣類型(百分比或固定金額)、有效期間、使用次數上限與適用範圍(全部 Course、特定 Course 或特定 Offering)。
  2. Learner 在報名流程中輸入有效的 Promotional_Code 時,自動套用對應折扣並顯示折扣後金額。
  3. Promotional_Code 已過期、已達使用次數上限或不適用於該 Offering 時,顯示明確的錯誤訊息。
  4. 追蹤每個 Promotional_Code 的使用次數、使用者與關聯的 Registration。
  5. 允許 Admin 隨時停用或延長 Promotional_Code 的有效期間。
  6. Promotional_Code 與其他 Discount 規則同時適用時,依據系統設定決定是否可疊加或僅取最優惠者。
需求 40Kiro 建議

課後問卷與滿意度調查

模組 E
身為 Admin,我希望能在課程結束後自動發送滿意度問卷給學員,以便收集回饋並持續改善課程品質。
  1. 允許 Admin 建立問卷範本(Survey_Template),定義題目、題型(單選、多選、評分量表 1-5、開放文字)與必填設定。
  2. 允許 Admin 將 Survey_Template 關聯至 Course 或 Offering,設定自動發送時機(課程結束後 N 天)。
  3. 自動發送時機到達時,透過電子郵件發送問卷連結給所有完成狀態為「完成」的 Learner。
  4. 提供 Learner 填寫問卷的線上介面(無需登入,以 Token 驗證身份)。
  5. 彙整問卷結果,提供每個 Offering 的平均評分、各題統計與開放文字回覆清單。
  6. 提供跨 Offering 的問卷結果比較報表,支援以 Course、Instructor、時間範圍篩選。
  7. 允許 Admin 匯出問卷結果,格式包含 CSV 與 PDF。
需求 41Kiro 建議

成績與評分管理

模組 E
身為 Instructor 或 Admin,我希望能記錄學員的考試成績或實作評分,以便作為完成狀態判定與證書核發的補充依據。
  1. 允許 Admin 為 Course 定義評分項目(Grade_Item),包含項目名稱、滿分、及格分數與權重。
  2. 允許 Instructor 或 Admin 為每位已報名 Learner 在每個 Grade_Item 記錄分數。
  3. 所有 Grade_Item 的分數填寫完畢時,自動計算加權總分並判定是否及格。
  4. 課程同時設定出席率門檻與及格分數時,要求兩者皆達標方可標記完成狀態為「完成」。
  5. 允許 Admin 匯出指定 Offering 的成績報表,格式包含 CSV 與 PDF。
  6. 在 Learner 的訓練歷程中顯示每門課程的成績紀錄。
需求 42Kiro 建議

開班任務管理

模組 A
身為 Admin,我希望能為每個 Offering 定義並追蹤準備工作任務,以便確保開課前所有準備事項均已完成。
  1. 允許 Admin 為 Course 定義任務範本(Task_Template),包含任務名稱、描述、負責角色與相對截止日(如:開課前 N 天)。
  2. 以 Course 建立新 Offering 時,自動依據 Task_Template 產生該 Offering 的任務清單,並計算實際截止日期。
  3. 允許 Admin 將任務指派給特定使用者,並設定提醒通知。
  4. 追蹤每個任務的狀態(待辦、進行中、已完成),並在 Offering 詳細頁面顯示任務完成進度。
  5. 任務截止日到達且狀態仍為「待辦」時,自動發送逾期提醒通知給負責人與 Admin。
  6. 允許 Admin 手動新增、修改或刪除 Offering 的個別任務。
需求 43Kiro 建議

最低開班人數門檻

模組 A
身為 Admin,我希望能為 Offering 設定最低開班人數,以便在報名人數不足時及早決定是否取消或延期。
  1. 允許 Admin 為每個 Offering 設定最低開班人數(Minimum Registrations)。
  2. Offering 的報名人數達到最低開班人數時,自動通知 Admin(確認開班通知)。
  3. 距離開課日 N 天(可設定)且報名人數仍未達最低門檻時,自動通知 Admin 進行決策(開班、取消或延期)。
  4. 在 Offering 清單與行事曆視圖中以視覺標記區分已達標與未達標的 Offering。
  5. 在報表中提供「未達最低人數 Offering」的篩選條件。
需求 44Kiro 建議

課程先決條件管理

模組 A
身為 Admin,我希望能為進階課程設定先決條件(必須先完成的課程),以便確保學員具備足夠的基礎知識。
  1. 允許 Admin 為 Course 設定一或多個先決條件 Course(Prerequisite),定義學員必須先完成哪些課程才能報名。
  2. Learner 報名設有 Prerequisite 的 Offering 時,檢查該 Learner 是否已完成所有先決條件課程。
  3. Learner 未完成先決條件課程時,顯示警告訊息,列出尚未完成的先決條件。
  4. 允許 Admin 設定先決條件的強制程度:「強制」(不允許報名)或「建議」(顯示警告但允許 Admin 覆寫)。
  5. 在課程詳細資訊頁面顯示先決條件清單,供 Learner 參考。
需求 45Kiro 建議

合規追蹤與證照到期管理

模組 E
身為 Admin,我希望能追蹤學員的證照有效期限與合規訓練完成狀態,以便確保所有必要的訓練與認證均在有效期內。
  1. 允許 Admin 為 Course 標記為「合規必修」(Compliance Required),並設定有效期限(如:每年需重新訓練)。
  2. 追蹤每位 Learner 的合規訓練完成日期與到期日期。
  3. 合規訓練即將到期(到期前 N 天,可設定)時,自動通知 Learner 與其所屬 Organisation 的聯絡人。
  4. 提供合規狀態儀表板,顯示所有 Learner 的合規訓練狀態(有效、即將到期、已過期)。
  5. 允許 Admin 匯出合規狀態報表,支援以 Organisation、Course 或到期日範圍篩選。
  6. Learner 完成合規必修課程時,自動更新該 Learner 的合規狀態並重新計算下次到期日。
需求 46Kiro 建議

Dashboard 儀表板

模組 J
身為 Admin 或管理階層,我希望能透過視覺化儀表板快速掌握業務關鍵指標,以便做出即時的營運決策。
  1. 提供可自訂的 Dashboard 首頁,顯示關鍵業務指標(KPI):本月報名人數與趨勢、本月營收與趨勢、即將開課的 Offering 數量、未達最低人數的 Offering 數量、待處理的退款申請數量、逾期未付 Invoice 數量。
  2. 支援以圖表形式(折線圖、長條圖、圓餅圖)呈現 KPI 趨勢。
  3. 允許 Admin 自訂 Dashboard 的 Widget 配置(新增、移除、調整位置)。
  4. 支援依角色顯示不同的 Dashboard 內容(Admin 看營運指標、Instructor 看個人課表、Sales 看業務管道)。
  5. 確保 Dashboard 資料在頁面載入後 3 秒內完成渲染。
需求 47Kiro 建議

電子商務結帳流程

模組 B/C
身為 Learner,我希望能在報名時直接線上付款,以便一次完成報名與繳費流程。
  1. 線上付款功能啟用時,在報名流程中提供線上結帳頁面,支援信用卡付款(透過第三方支付閘道,如 Stripe 或綠界 ECPay)。
  2. Learner 完成線上付款時,自動更新 Invoice 狀態為「已付清」並發送付款確認通知。
  3. 確保付款資訊不經過 TMS 伺服器(PCI DSS 合規),所有卡號資料由第三方支付閘道處理。
  4. 線上付款失敗時,顯示明確的錯誤訊息並允許 Learner 重試或選擇其他付款方式。
  5. 允許 Admin 設定是否啟用線上付款、支援的付款方式與支付閘道連線參數(透過 GUI)。
  6. 支援「稍後付款」選項,允許 Learner 完成報名但選擇銀行轉帳等離線付款方式。
需求 48Kiro 建議

混合式學習支援

模組 A
身為 Admin,我希望能建立結合實體授課、線上同步與非同步自學的混合式課程,以便提供更靈活的學習體驗。
  1. 允許 Admin 為 Offering 定義多種活動類型(Activity_Type):實體授課(Face-to-Face)、線上同步(Live Online)、非同步自學(Self-Paced eLearning)。
  2. 允許 Admin 為每個 Activity 設定順序、截止日期與完成條件。
  3. 追蹤 Learner 在每個 Activity 的完成狀態,並在所有 Activity 完成後觸發整體完成狀態計算。
  4. 外部 LMS 整合功能啟用時,支援透過 API 從外部 LMS 接收 Learner 的非同步自學完成紀錄。
  5. 在 Learner 的訓練歷程中顯示混合式課程的各 Activity 完成進度。
需求 49Kiro 建議

Webhook 與事件推送

模組 K
身為系統管理員,我希望 TMS 能在關鍵業務事件發生時主動推送通知至外部系統,以便實現與第三方系統的即時整合。
  1. 允許系統管理員透過 GUI 註冊 Webhook 端點,設定目標 URL、觸發事件類型與驗證密鑰(Secret)。
  2. 支援以下事件類型的 Webhook 推送:Registration 建立/取消、Payment 收款、Offering 建立/取消/更新、Certificate 核發、Contact 建立/更新。
  3. 觸發事件發生時,以 HTTP POST 方式將事件資料(JSON 格式)推送至已註冊的 Webhook 端點。
  4. 為每次 Webhook 推送附加 HMAC 簽章(使用註冊時設定的 Secret),供接收端驗證來源真實性。
  5. Webhook 推送失敗(HTTP 回應非 2xx)時,以指數退避(Exponential Backoff)策略重試最多 5 次。
  6. 記錄所有 Webhook 推送的歷史紀錄,包含事件類型、目標 URL、回應狀態碼與時間戳記。
  7. 允許系統管理員暫停或刪除已註冊的 Webhook 端點。
需求 50Kiro 建議

工作流程自動化引擎

模組 J
身為 Admin,我希望能自訂業務流程的自動化規則,以便減少重複性人工操作並確保流程一致性。
  1. 提供視覺化的工作流程編輯器,允許 Admin 以「觸發條件 → 動作」模式定義自動化規則。
  2. 支援以下觸發條件類型:時間觸發(排程)、事件觸發(Registration 建立、Payment 收款、Offering 狀態變更等)、條件觸發(欄位值符合特定條件)。
  3. 支援以下動作類型:發送通知(Email/SMS)、更新欄位值、建立任務、變更狀態、呼叫 Webhook。
  4. 允許 Admin 為工作流程設定啟用/停用狀態,停用的工作流程不會被觸發。
  5. 記錄每次工作流程執行的歷史紀錄,包含觸發時間、執行結果與錯誤訊息。
  6. 支援工作流程的條件分支(IF/ELSE),根據不同條件執行不同動作。
需求 51Kiro 建議

講師行動應用程式

模組 E/G
身為 Instructor,我希望能透過行動裝置管理課程、記錄出席與成績,以便在教室現場即時完成教務操作。
  1. 提供響應式行動介面(Progressive Web App 或原生 App),供 Instructor 在手機或平板上使用。
  2. 允許 Instructor 在行動介面中檢視當日與近期的課表。
  3. 允許 Instructor 在行動介面中檢視指定 Offering 的學員名單與聯絡資訊。
  4. 允許 Instructor 在行動介面中記錄每位 Learner 的出席狀態。
  5. 允許 Instructor 在行動介面中記錄每位 Learner 的成績。
  6. 確保行動介面在離線狀態下仍可暫存出席與成績資料,待網路恢復後自動同步。
需求 52Kiro 建議

多幣別與多稅率支援

模組 C
身為 Admin,我希望系統能支援多種幣別與稅率設定,以便在跨區域或國際課程中正確計算費用。
  1. 允許系統管理員定義多種幣別(Currency),並設定系統預設幣別(預設為 TWD)。
  2. 允許 Admin 為 Offering 指定計價幣別,不同 Offering 可使用不同幣別。
  3. 允許系統管理員定義多種稅率(Tax Rate),包含稅率名稱、百分比與適用條件。
  4. 在 Invoice 中明確顯示稅前金額、稅額與稅後總額。
  5. 在報表中支援以單一幣別彙總顯示(依系統設定的匯率換算)。
  6. 允許系統管理員透過 GUI 設定幣別與稅率,無需修改程式碼或設定檔。
需求 53Kiro 建議

訓練預算管理

模組 C
身為 Admin 或管理階層,我希望能追蹤與管理訓練預算的使用狀況,以便控制成本並優化資源配置。
  1. 允許 Admin 為 Organisation 或部門設定年度訓練預算額度。
  2. 在每筆 Registration 建立時自動扣減對應 Organisation 或部門的預算餘額。
  3. 在預算餘額低於設定門檻(如 20%)時自動通知 Admin 與 Organisation 聯絡人。
  4. 提供預算使用報表,顯示各 Organisation / 部門的預算總額、已使用金額、剩餘金額與使用率。
  5. 預算餘額不足以支付新報名費用時,顯示警告訊息(可設定為「警告但允許」或「強制拒絕」)。
需求 54Kiro 建議

課程目錄公開頁面

模組 I
身為潛在學員,我希望能在不登入的情況下瀏覽完整的課程目錄與即將開課的場次,以便決定是否報名。
  1. 提供無需登入即可瀏覽的公開課程目錄頁面,顯示所有狀態為「公開」的 Course 與即將開課的 Offering。
  2. 在公開課程目錄中支援以類別、關鍵字、日期範圍與地點篩選。
  3. 為每個 Course 提供獨立的公開詳細頁面,顯示課程描述、時數、費用、先決條件與即將開課的 Offering 清單。
  4. 確保公開頁面具備 SEO 友善的 URL 結構與 meta 標籤。
  5. 在公開頁面中顯示 Offering 的剩餘名額狀態(有名額 / 即將額滿 / 已額滿可候補)。
  6. 允許 Admin 設定哪些 Course 與 Offering 顯示於公開目錄(透過「公開」/「隱藏」狀態控制)。