需求清單
共 54 項需求,依模組分組顯示
需求 1
課程管理
模組 A身為 Admin,我希望能建立與維護課程資料,以便作為開班的基礎範本。
- 允許 Admin 建立 Course,並記錄課程名稱、描述、時數、費用、語言、類別與狀態。
- Admin 更新 Course 資料時,保留修改前的版本紀錄,並記錄修改者與時間戳記。
- Admin 將 Course 狀態設為「停用」時,禁止以該 Course 建立新的 Offering。
- Course 名稱與現有 Course 重複時,顯示警告訊息並要求 Admin 確認後才能儲存。
- 支援以關鍵字、類別與狀態篩選 Course 清單。
- 允許 Admin 為每個 Course 設定 Course_Ownership_Type(proprietary 或 authorized),預設為 proprietary。
- Course_Ownership_Type 為「authorized」時,要求關聯至 Vendor 紀錄,未關聯不得儲存。
需求 2
開班(Offering)管理
模組 A身為 Admin,我希望能以既有課程快速建立多個開班,以便有效率地安排訓練場次。
- 以既有 Course 建立 Offering 時,自動帶入預設費用、時數與描述,允許覆寫。
- 允許為單一 Offering 建立一或多個 Session,記錄日期、開始/結束時間與 Venue。
- 允許設定 Offering 的名額上限(最大報名人數)。
- 已報名人數達名額上限時,自動啟用 Waitlist 並停止接受一般報名。
- 允許以行事曆視圖檢視所有 Offering 與 Session 排程。
- Admin 取消 Offering 時,通知所有已報名 Learner 並觸發退款流程。
需求 3
線上報名與名額控管
模組 B身為 Learner,我希望能線上瀏覽課程資訊並完成報名,以便自助完成訓練申請。
- 對外公開顯示 Offering 的課程名稱、日期、地點、費用、剩餘名額與報名截止日。
- Learner 提交報名表單時,驗證必填欄位並在驗證失敗時顯示具體錯誤訊息。
- 報名成功時,建立 Registration 紀錄並將剩餘名額減一。
- 剩餘名額為零時,將 Learner 加入 Waitlist 並顯示候補序號。
- 有名額釋出時,依序通知 Waitlist 第一順位 Learner,保留名額 48 小時。
- Waitlist Learner 未於 48 小時內確認,釋放名額並通知下一順位。
需求 4
折扣與優惠規則
模組 B身為 Admin,我希望能設定早鳥、團報等折扣規則,以便靈活管理課程定價。
- 允許建立 Discount,設定折扣類型(百分比或固定金額)、適用條件與有效期間。
- 符合多項 Discount 條件時,套用對 Learner 最有利的單一 Discount。
- Discount 有效期間屆滿時,自動停用不再套用於新報名。
- 已被套用於現有 Registration 的 Discount 不得刪除。
- Reseller 管理功能啟用時,允許為特定 Reseller 設定專屬 Discount。
需求 5
財務管理(發票、付款與退款)
模組 C身為 Admin,我希望能管理發票、付款狀態與退款流程,以便確保財務資料的完整性與可追溯性。
- Registration 建立後,自動產生 Invoice,記錄應收金額、幣別、到期日與付款狀態。
- 支援記錄多種付款方式(信用卡、銀行轉帳、現金、票據)。
- 累計 Payment 等於應收金額時,自動更新 Invoice 狀態為「已付清」。
- 退款時記錄退款金額、日期、原因,並更新 Invoice 狀態。
- 退款需 Approver 核准後方可執行,未核准一律拒絕。
- 允許匯出指定期間的收款報表(CSV 與 PDF)。
- Invoice 逾期未付時,自動發送付款提醒通知。
需求 6
學員與企業客戶(CRM)管理
模組 D身為 Admin,我希望能管理學員與企業客戶資料及其訓練歷程,以便提供完整的客戶服務。
- 允許建立與維護 Contact 資料(姓名、電子郵件、電話、所屬 Organisation、Line_ID)。
- 允許建立與維護 Organisation 資料(公司名稱、統一編號、聯絡人、帳單地址)。
- 顯示單一 Contact 的完整訓練歷程。
- 顯示單一 Organisation 的完整訓練歷程與累計消費金額。
- 支援模糊搜尋,500 毫秒內回傳結果。
- 允許合併多個 Contact 為單一紀錄,保留所有歷史資料。
- 允許記錄選填的 Line_ID 欄位。
- 合併 Contact 時保留所有非空白 Line_ID,多個不同值由 Admin 選擇。
需求 7
出席紀錄與完成狀態
模組 E身為 Admin 或 Instructor,我希望能記錄學員出席狀況並判定完成狀態,以便作為核發證書的依據。
- 允許為每位 Learner 在每個 Session 記錄出席狀態(出席、缺席、遲到)。
- 依據出席率門檻(預設 80%)自動計算完成狀態。
- 課程設定自訂出席率門檻時,以課程設定取代系統預設值。
- 完成狀態標記為「完成」時,觸發證書產生流程。
- 允許 Admin 手動覆寫完成狀態,並記錄覆寫原因。
- 允許匯出指定 Offering 的出席報表(CSV 與 PDF)。
需求 8
證書管理
模組 E身為 Admin,我希望能依條件產生並發送證書,以便學員取得完訓憑證。
- 允許建立 Certificate 模板,定義合併欄位(學員姓名、課程名稱、完成日期、講師姓名)。
- 完成狀態為「完成」時,自動產生 Certificate 並以 PDF 格式儲存。
- 允許手動觸發單一或批次 Certificate 的產生與寄送。
- 寄送成功時記錄寄送時間與收件人,更新狀態為「已寄送」。
- 寄送失敗時記錄失敗原因並通知 Admin。
- 提供 Learner 自助下載已核發 Certificate 的功能。
- 允許設定 Certificate 有效期限,到期前 30 天自動通知 Learner。
需求 9
通知與流程自動化
模組 F身為 Admin,我希望系統能自動發送關鍵節點的通知,以便減少人工作業並提升學員體驗。
- 支援自動通知觸發點:報名確認、付款確認、課前提醒、課後感謝與 Certificate 核發。
- 支援電子郵件作為主要通知管道,允許自訂範本與合併欄位。
- 自動通知觸發時,透過電子郵件發送至 Contact 的電子郵件地址。
- 發送失敗時記錄原因並在 Admin 介面顯示待處理清單。
- 允許手動重新發送失敗的通知。
- 允許手動選取 Contact 並發送指定範本的通知。
- 簡訊功能啟用時,支援以簡訊發送課前提醒。
- LINE 通知功能啟用時,支援透過 LINE 發送通知。
- 記錄每封通知的發送管道、時間、收件人與狀態,保留至少 90 天。
需求 10
講師管理
模組 G身為 Admin,我希望能管理講師資料與排課,以便確保每個開班都有合適的講師。
- 允許建立與維護 Instructor 資料(姓名、電子郵件、專長領域、可授課語言)。
- 允許將 Instructor 指派至 Offering 或特定 Session。
- 指派時檢查時段衝突,有衝突則顯示警告。
- 允許 Instructor 登入後檢視自己的課表。
- 允許查詢指定期間內每位 Instructor 的授課時數統計。
- Instructor 被移除指派時,通知 Admin 並要求重新指派。
需求 11
資產管理
模組 G身為 Admin,我希望能管理教材與設備等資產,以便確保開班時所需資源均已備妥。
- 允許建立與維護 Asset 資料(名稱、類型、數量與狀態)。
- 允許將 Asset 分配至 Offering 或 Session,記錄分配數量與歸還日期。
- 分配時檢查可用數量,不足則顯示警告並拒絕。
- Offering 結束後提示確認 Asset 歸還狀態。
- 允許查詢 Asset 的使用歷史紀錄。
需求 12
教室與場地管理
模組 G身為 Admin,我希望能管理教室與場地資源(含自有、客戶端與外部租用場地),以便避免場地衝突。
- 允許建立 Venue 資料(名稱、地址、容納人數、設備、類型、Ownership_Type、狀態)。
- 允許記錄 Virtual_Meeting_Platform 資訊(平台類型、URL、ID、密碼)。
- 允許將 Venue 指派至 Offering 或 Session。
- 指派時檢查時段衝突,有衝突則拒絕。
- 報名人數超過 Venue 容納人數時顯示警告。
- 提供 Venue 使用率報表。
- 虛擬/混合場地顯示會議平台資訊。
- Client_Site 場地要求關聯至 Organisation。
- Client_Site 場地允許記錄客戶地址、聯絡人與進出指引。
- 允許建立 Temporary_Venue(僅供單次 Offering 使用)。
- Temporary_Venue 在 Offering 結案後自動停用。
- Client_Site 場地在 Instructor 課表中顯示完整地址與聯絡資訊。
需求 13
課程排程(Scheduling)
模組 A身為 Admin,我希望能有效率地安排課程排程,以便避免資源衝突並最佳化訓練計畫。
- 提供行事曆視圖(月、週、日三種模式)。
- 行事曆中同時顯示 Instructor 與 Venue 的佔用狀態。
- 拖曳 Session 至新時段時,自動檢查衝突並更新排程。
- 允許複製既有 Offering 的排程設定以快速建立新 Offering。
- 排程衝突時列出所有衝突項目並提供解決建議。
需求 14
業務管理(Sales)
模組 H身為 Admin 或業務人員,我希望能追蹤業務機會與銷售狀況,以便提升課程銷售效率。
- 允許建立 Opportunity(潛在客戶、感興趣 Course、預估金額、預計成交日)。
- 支援狀態流程:潛在 → 接觸中 → 提案 → 成交 → 結案。
- 「成交」時允許直接建立對應的 Registration。
- 提供業務管道報表(各狀態機會數量與預估金額)。
- 允許記錄每次客戶互動紀錄。
需求 15
經銷商管理(Reseller / Channel)
模組 H身為 Admin,我希望能管理經銷商合作關係與銷售分潤,以便有效擴展課程銷售通路。
- 允許建立 Reseller 資料(公司名稱、聯絡人、合約期間、分潤比例)。
- 允許將 Course 或 Offering 授權給 Reseller 銷售。
- Reseller 代理的 Registration 成立時,自動計算分潤金額。
- 提供 Reseller 銷售報表。
- 合約到期前 30 天通知 Admin,並自動暫停新報名授權。
需求 16
學員自助入口
模組 I身為 Learner,我希望能透過自助入口查詢課表、訓練歷程與證書。
- 提供 Learner 登入後查詢報名紀錄、出席紀錄與 Certificate。
- 允許瀏覽即將開課的 Offering 並完成線上報名。
- 登入時驗證身份,僅顯示本人資料。
- 允許下載已核發的 Certificate(PDF)。
- 透過自助入口取消報名時,依取消政策計算退款金額。
需求 17
分權管理(RBAC)
模組 J身為系統管理員,我希望能依角色設定存取權限,以便確保資料安全與職責分離。
- 定義至少四種預設角色:Admin、Approver、Instructor、Learner。
- 允許建立自訂角色,設定細粒度功能權限(讀取、建立、修改、刪除)。
- 超出權限時拒絕存取並顯示「權限不足」錯誤。
- 允許將使用者指派至一或多個角色。
- 角色變更時立即生效並終止現有工作階段。
- 支援以 Organisation 為範圍的資料隔離。
需求 18
稽核功能(Audit Trail)
模組 J身為 Approver,我希望能查閱所有重要操作的稽核紀錄,以便確保可追溯性與合規性。
- 記錄所有核心業務物件的建立、修改與刪除操作。
- 記錄所有登入、登出與登入失敗事件。
- 記錄所有角色與權限的變更操作。
- 禁止任何使用者修改或刪除稽核紀錄。
- 允許以操作者、物件類型、時間範圍查詢,3 秒內回傳。
- 允許匯出 Audit_Trail 報表(CSV 與 PDF)。
需求 19
Microsoft 365 行事曆整合
模組 K身為 Admin 或 Instructor,我希望 TMS 的課程排程能與 M365 行事曆同步。
- 允許使用者授權 TMS 存取其 M365 行事曆。
- Offering/Session 建立或更新時,自動同步至 Instructor 的 M365 行事曆。
- Offering/Session 取消時,自動從 M365 行事曆移除。
- 同步失敗時記錄原因並顯示警告,不影響 TMS 內部排程資料。
- 允許隨時撤銷 M365 整合授權。
需求 20
報表與資料匯出
模組 J身為 Admin 或 Approver,我希望能產生並匯出各類報表。
- 提供標準報表:報名名單、出席紀錄、收款狀況、Certificate 清單、Instructor 統計、Venue 使用率、Reseller 報表。
- 允許以 Offering、時間範圍、Course、Organisation 或 Instructor 篩選。
- 支援匯出為 CSV 與 PDF。
- 超過 10,000 筆時以非同步方式產生。
- 允許儲存常用篩選條件。
需求 21
Microsoft Entra ID 身份驗證整合
模組 K身為系統管理員,我希望 TMS 能串接 Entra ID 實現 SSO 單一登入。
- 支援透過 Entra ID 以 OpenID Connect 進行 SSO。
- 內部正職員工強制使用 Entra ID 登入。
- 首次登入時自動建立 TMS 帳號並對應角色。
- 登入成功後核發 JWT Token 建立工作階段。
- 僅 System Admin 可使用本機帳號作為緊急存取。
- Learner 使用本機帳號密碼登入。
- Instructor 同時支援 SSO 與本機帳號。
- Entra ID 無法連線時顯示錯誤訊息。
- 允許設定 Tenant ID、Client ID、Client Secret 並提供連線測試。
- 使用者在 Entra ID 被停用時,拒絕存取並停用 TMS 帳號。
- 登入頁面顯示「使用 Microsoft 帳號登入」按鈕為預設方式。
需求 22
Container 導向部署架構
模組 J身為系統管理員,我希望 TMS 採用 Container 導向架構,以便簡化環境建置。
- 為每個服務元件提供 OCI 標準 Container Image 與 Dockerfile。
- 提供 Container Orchestration 設定檔。
- 支援透過環境變數注入所有環境相關參數。
- Container 啟動時執行健康檢查端點。
- 支援水平擴展(多實例共享狀態)。
- 日誌輸出至 stdout/stderr。
- 支援滾動更新策略(零停機部署)。
需求 23
模組獨立部署與維護
模組 J身為系統管理員,我希望每個模組可獨立部署與回滾,避免單一模組更新導致全系統暫停。
- 每個模組提供獨立 Container Image 與部署單元。
- 每個模組維護獨立的 Module_Version(語意化版本)。
- 模組間通訊透過版本化 API_Contract。
- API_Contract 變更時同時支援新舊版本至少一個發行週期。
- 各模組可獨立發行新版本。
- 某模組不可用時,其他模組維持正常運作(Graceful Degradation)。
- 支援單一模組獨立回滾。
- 每個模組提供獨立資料庫 Schema。
- 禁止直接存取其他模組的資料庫。
- 以滾動更新策略部署(零停機)。
需求 24
UI/UX 設計規範與品牌識別
模組 J身為設計團隊,我希望 TMS 遵循 Ai Network 品牌識別規範。
- 定義 Brand_Palette:Primary Blue、Accent Red、Background White、Dark Navy、Dark Gray。
- 以 Design_Token(CSS 自訂屬性)實作色彩系統。
- Accent Red 限定用於警示與重要操作按鈕。
- Header 左側固定顯示 Ai Network Logo(32-40px)。
- 登入頁面中央顯示放大 Logo(64-80px)。
- 使用 Logo 簡化版作為 Favicon。
- 採用 Inter + Noto Sans TC 字型。
- 定義 H1-H4 標題層級。
- Primary Button 使用 Primary Blue 背景。
- Card 元件使用白色背景、圓角 8px。
- Header 使用白色背景搭配 Primary Blue 選中狀態。
- 表單聚焦時使用 Primary Blue 邊框。
- 支援三種 Responsive Breakpoint(Desktop/Tablet/Mobile)。
- Mobile 時 Sidebar 收合為漢堡選單。
- 資料表格在 Mobile 提供水平捲動。
- Admin 與 Learner Portal 共用品牌規範。
- 不同導覽結構維持相同色彩與視覺風格。
- 三面板佈局:Header + Sidebar + Main Content。
- Header 固定於頂部(sticky)。
- Sidebar 固定於左側(sticky)。
- Header 左側顯示 Logo,點擊導航至首頁。
- Header 三區段:Logo / Global Search / User Profile。
- Header 右側顯示使用者頭像與名稱。
- 點擊頭像展開 User Profile Dropdown。
- Dropdown 提供「個人資料」與「登出」。
- 點擊外部區域自動收合 Dropdown。
- Sidebar 顯示模組功能選單(含圖示與文字)。
- 支援可展開子選單結構。
- 高亮標示目前所在頁面。
- Unpinned 時自動收合為窄版模式。
- 懸停時暫時展開 Sidebar。
- 提供 Pin/Unpin 切換按鈕。
- 儲存 Sidebar Pin State 偏好。
- 首次登入預設為 Pinned。
- Dark Mode 啟用時提供深色模式切換。
- 儲存深色模式偏好。
需求 25
全域搜尋(Global Search)
模組 J身為系統使用者,我希望能透過搜尋框快速搜尋所有模組的資料。
- Header 中央固定顯示 Global Search 搜尋框。
- 搜尋框具有佔位文字提示。
- 跨所有模組搜尋核心實體。
- 對每種實體搜尋主要識別欄位。
- 搜尋結果依實體類型分組顯示。
- 每筆結果顯示簡要預覽摘要。
- 超過顯示上限時顯示「查看更多」。
- 支援 Ctrl+K 或 / 快捷鍵聚焦。
- Escape 鍵關閉搜尋結果面板。
- 停止輸入 300ms 後自動搜尋(Debounce)。
- 持續輸入時取消先前請求。
- 輸入框為空時顯示最近搜尋紀錄(最多 10 筆)。
- 允許清除搜尋紀錄。
- 搜尋結果遵循 RBAC 權限。
- 無權限模組的資料不顯示。
- 點擊結果導航至詳細頁面。
- 支援鍵盤方向鍵與 Enter 導航。
- 無結果時顯示提示訊息。
需求 26
WordPress 官方網站課程同步
模組 K身為 Admin,我希望 TMS 能自動將課程資訊同步至 WordPress 官網。
- Offering 狀態為「published」時,自動推送至 WordPress。
- 同步資料:課程名稱、描述、時數、費用、日期、Venue、Instructor、名額、截止日。
- 已發布 Offering 資料變更時,自動更新 WordPress 文章。
- Offering 取消時,更新 WordPress 文章狀態。
- Offering 完成時,更新 WordPress 文章狀態。
- 允許設定 WordPress 連線參數並提供連線測試。
- 為每筆 Offering 記錄 WordPress_Sync_Status。
- 同步失敗時自動重試(最多 3 次,間隔遞增)。
- 允許設定同步資格條件(僅公開班)。
- 允許手動觸發單一 Offering 的同步。
- Course 對應 tms_course,Offering 對應 tms_offering。
- 同步失敗不影響 TMS 內部資料。
- 允許手動重試失敗的同步操作。
需求 27
原廠課程代理管理
模組 A身為 Admin,我希望能管理原廠供應商資料與原廠課程對應。
- 允許建立 Vendor 紀錄(名稱、聯絡人、官網 URL、合約條款、授權類別)。
- 支援以供應商名稱模糊搜尋。
- authorized 課程允許記錄 Vendor_Course_Mapping。
- proprietary 課程不得建立 Vendor_Course_Mapping。
- authorized 課程的 Offering 允許記錄 Vendor_Offering_Mapping。
- 非代理課程的 Offering 不得建立 Vendor_Offering_Mapping。
- 支援以 Vendor_Course_Code、Vendor 名稱或認證名稱搜尋 Course。
- 支援以 Vendor Offering ID 搜尋 Offering。
- 提供 Vendor Dashboard 頁面。
- 點擊 Vendor 展開顯示所有代理課程詳細資訊。
- 允許記錄每個 Offering 使用的原廠教材版本。
- 教材版本更新時標記使用舊版的進行中 Offering。
需求 28
通用資料匯入匯出
模組 J身為 Admin,我希望能對各模組核心實體進行資料匯入與匯出。
- 支援匯出為 Excel、CSV 與 PDF 三種格式。
- 支援從 Excel 與 CSV 匯入。
- 匯入時驗證每列資料並產生詳細錯誤報告。
- 驗證完成後顯示 Import_Preview,Admin 確認後執行。
- 為每種實體提供可下載的 Import_Template。
- 匯出依據目前篩選條件。
- 超過 10,000 筆時非同步產生。
- 匯入匯出遵循 RBAC 權限。
- 無讀取權限時拒絕匯出。
- 無建立/修改權限時拒絕匯入。
- 所有操作記錄於 Audit_Trail。
需求 29
角色化首頁 Dashboard
模組 J身為系統使用者,我希望登入後能看到與我角色相關的關鍵資訊總覽。
- 依角色自動導向對應 Dashboard。
- Admin Dashboard:KPI 卡片、行事曆、教室利用率、待辦事項。
- Instructor Dashboard:個人課表、即將開課清單、授課時數統計。
- Approver Dashboard:待核准事項、營收摘要、報名趨勢圖。
- Sales Dashboard:業務管道摘要、成交金額、客戶互動紀錄。
- Dashboard 資料遵循 RBAC 權限。
- 3 秒內完成載入。
- 支援 Desktop 與 Tablet 響應式佈局。
- 嵌入行事曆 Widget(月視圖)。
- 點擊行事曆事件導航至詳細頁面。
- 行事曆以顏色區分不同狀態。
- KPI 卡片顯示與上期比較趨勢。
- 點擊 KPI 卡片導航至詳細清單。
- 未來支援 Dashboard Widget 個人化。
需求 30
外部 API(RESTful Data Access)
模組 J身為系統整合人員,我希望 TMS 提供標準化的 RESTful API。
- 提供版本化 API(/api/v1/{resource}),支援 JSON。
- 為核心資源提供 CRUD 端點。
- 為 Dashboard 提供專用唯讀聚合 API。
- 支援 API Key、OAuth 2.0 Bearer Token、Session Cookie 認證。
- API 存取遵循 RBAC 權限。
- 提供 API Key 管理介面。
- 支援分頁(預設 50 筆,最大 200 筆)。
- 支援篩選(query parameter)。
- 支援欄位選擇(?fields=)。
- 支援排序(?order=)。
- 提供 OpenAPI 3.0 規格文件(/api/v1/docs)。
- 實施速率限制(預設每分鐘 60 次)。
- 記錄所有 API 存取紀錄(保留 30 天)。
- 僅透過 HTTPS 提供服務。
- 支援以 Master_Key 或 Second_Key 查詢單一資源。
- API 回應同時包含 id(Master_Key)與 code(Second_Key)。
需求 31
一鍵啟動與 Demo Data
模組 J身為開發人員,我希望能一鍵啟動完整開發環境並灌入示範資料。
- 提供 bootstrap.sh 一鍵啟動腳本。
- bootstrap.sh 可重複執行(冪等)。
- 執行完成後顯示登入 URL 與管理員帳號。
- 提供完整 Demo Data(10+ 課程、15+ 開班、30+ 學員等)。
- Demo Data 使用相對日期。
- Demo Data 使用繁體中文內容。
- 提供 Demo Data 載入開關。
需求 32
系統設定與欄位管理(Dynamic Custom Fields)
模組 J身為系統管理員,我希望能透過 GUI 為任何實體動態新增自訂欄位。
- 允許為所有核心實體新增 Custom_Field。
- 支援多種欄位類型(Text、Number、Date、Select、Boolean 等)。
- 允許設定欄位屬性(名稱、代碼、類型、必填、預設值、驗證規則)。
- 下拉選單/多選允許定義選項清單。
- 關聯欄位允許指定目標實體類型。
- 表單頁面動態渲染 Custom_Field。
- 允許設定是否在清單視圖中顯示。
- Custom_Field 值可被 Global Search 搜尋。
- Custom_Field 值可作為篩選條件。
- Custom_Field 值包含於匯出結果。
- 允許停用(隱藏)Custom_Field,資料保留。
- 禁止刪除已有資料的 Custom_Field。
- 禁止刪除或隱藏系統內建欄位。
- 修改 Custom_Field 屬性記錄於 Audit_Trail。
- API 回應包含 custom_fields 物件。
- API 寫入時執行相同驗證規則。
- 提供 API 端點查詢 Custom_Field 定義。
需求 33
Tag 標籤系統
模組 J身為 Admin,我希望能為所有核心實體附加 Tag 標籤,以便靈活分類與篩選。
- 支援所有核心實體附加 Tag(多對多關係)。
- 一個實體可附加多個 Tag,一個 Tag 可附加至多個實體。
- 表單頁面中新增/移除 Tag,支援 autocomplete。
- 允許直接建立新 Tag。
- 允許建立 Tag_Group(標籤群組)。
- Tag 歸類至 Tag_Group(一對一)。
- 允許為 Tag 設定顏色標記。
- 提供 Tag 管理頁面。
- 刪除已使用的 Tag 需確認。
- 清單視圖支援以 Tag 篩選。
- 多 Tag 篩選預設 AND 邏輯,可切換 OR。
- Tag 名稱可被 Global Search 搜尋。
- Tag 資訊包含於匯出結果。
- 預留 access_scope 欄位供未來 RBAC 使用。
- 預留「Tag 存取控管」設定頁面入口。
- 資料模型支援未來以 Tag 作為 Record-Level 篩選。
- 預留與 Entra ID Group 的對應欄位。
- API 回應包含 tags 陣列。
- API 支援新增/移除 Tag。
- 提供 GET /api/v1/tags 端點。
- API 查詢支援以 Tag 篩選。
需求 34
Master Key / Second Key 雙主鍵設計
模組 J身為系統管理員與開發人員,我希望每個實體都有穩定的系統主鍵與人類可讀的業務識別碼。
- 為所有核心實體自動產生 UUID v7 作為 Master_Key。
- Master_Key 自動產生,不可手動指定或修改。
- Master_Key 全域唯一,跨實體類型不重複。
- 使用 Master_Key 作為所有 Foreign Key 參照欄位。
- 支援可選的 Second_Key(如 CRS-2025-001)。
- 同一實體類型內 Second_Key 唯一。
- 建立時自動產生 Second_Key,Admin 亦可手動指定。
- 允許自訂 Second_Key 格式規則(前綴、分隔符、日期、流水號)。
- 流水號在相同前綴+日期組合下自動遞增。
- 修改格式規則僅對新建實體生效。
- UI 同時顯示 Master_Key(縮短)與 Second_Key(完整)。
- Global Search 支援以兩種 Key 搜尋。
- API 支援以兩種 Key 查詢。
- 匯入時支援以兩種 Key 作為關聯參照。
- Master_Key 一旦產生不可變更。
- 允許特殊情況修改 Second_Key(記錄於 Audit_Trail)。
- 匯入時 Second_Key 衝突需 Admin 決定處理方式。
需求 35Kiro 建議
報名轉班管理
模組 B身為 Admin 或 Learner,我希望能將已報名的學員從一個 Offering 轉移至另一個 Offering,以便在學員無法出席原定場次時提供彈性安排。
- 允許 Admin 將已報名 Learner 的 Registration 從原 Offering 轉移至同一 Course 的另一個 Offering。
- 轉班目標 Offering 的費用高於原 Offering 時,自動計算差額並產生補繳 Invoice。
- 轉班目標 Offering 的費用低於原 Offering 時,自動計算差額並產生 Credit_Note(信用額度)。
- 轉班成功時,自動通知 Learner 新的 Offering 資訊(日期、地點、講師)。
- 轉班導致原 Offering 釋出名額時,自動觸發候補晉升流程。
- 記錄所有轉班操作於 Audit_Trail,包含原 Offering、目標 Offering、操作者與時間。
- 學員自助入口功能啟用時,允許 Learner 在自助入口中自行申請轉班(需符合轉班政策)。
需求 36Kiro 建議
團體報名管理
模組 B身為 Admin 或企業客戶聯絡人,我希望能一次為多位學員完成報名,以便簡化企業客戶的批次報名流程。
- 允許 Admin 或企業客戶聯絡人在單一報名流程中為多位 Learner 同時報名同一 Offering。
- 團體報名時,為每位 Learner 建立獨立的 Registration 紀錄,但共用同一筆 Invoice。
- 允許 Admin 設定團體報名的最低人數門檻,達到門檻時自動套用團報折扣。
- 團體報名中的部分 Learner 取消時,重新計算是否仍符合團報折扣條件,若不符合則調整 Invoice 金額。
- 允許企業客戶聯絡人在報名時僅提供報名人數與聯絡人資訊,學員詳細資料可於開課前補填。
- 在報名確認通知中列出所有已報名學員的姓名清單。
需求 37Kiro 建議
分期付款與部分付款
模組 C身為 Admin,我希望能允許學員或企業客戶分期付款,以便降低高額課程的付款門檻並提升報名率。
- 允許 Admin 為特定 Course 或 Offering 設定分期付款計畫,定義期數、每期金額與到期日。
- Learner 選擇分期付款時,自動產生多筆 Invoice(每期一筆),各自記錄到期日與應付金額。
- 允許記錄部分付款(Payment 金額小於 Invoice 應收金額),並追蹤 Invoice 的未付餘額。
- 分期 Invoice 到期未付時,自動發送付款提醒通知。
- 在 Learner 與 Organisation 的財務摘要中顯示未付餘額總計。
- 允許 Admin 設定逾期未付的處理政策(如:逾期 N 天後暫停學員報名資格)。
需求 38Kiro 建議
信用額度管理
模組 C身為 Admin,我希望能為學員或企業客戶核發信用額度,以便在退款、轉班差額或商業協議中提供靈活的財務處理方式。
- 允許 Admin 為 Contact 或 Organisation 核發 Credit_Note,記錄金額、原因、有效期限與關聯的原始 Invoice。
- Learner 報名新 Offering 時,允許以現有 Credit_Note 餘額抵扣應付金額。
- 追蹤每筆 Credit_Note 的使用紀錄,包含抵扣金額、抵扣日期與關聯的 Invoice。
- Credit_Note 有效期限屆滿且仍有餘額時,通知 Admin 進行處理(延期或作廢)。
- 在 Contact 與 Organisation 的財務摘要中顯示可用 Credit_Note 餘額。
需求 39Kiro 建議
促銷代碼管理
模組 B身為 Admin,我希望能建立促銷代碼供學員在報名時輸入以獲得折扣,以便支援行銷活動與合作夥伴推廣。
- 允許 Admin 建立 Promotional_Code,設定代碼字串、折扣類型(百分比或固定金額)、有效期間、使用次數上限與適用範圍(全部 Course、特定 Course 或特定 Offering)。
- Learner 在報名流程中輸入有效的 Promotional_Code 時,自動套用對應折扣並顯示折扣後金額。
- Promotional_Code 已過期、已達使用次數上限或不適用於該 Offering 時,顯示明確的錯誤訊息。
- 追蹤每個 Promotional_Code 的使用次數、使用者與關聯的 Registration。
- 允許 Admin 隨時停用或延長 Promotional_Code 的有效期間。
- Promotional_Code 與其他 Discount 規則同時適用時,依據系統設定決定是否可疊加或僅取最優惠者。
需求 40Kiro 建議
課後問卷與滿意度調查
模組 E身為 Admin,我希望能在課程結束後自動發送滿意度問卷給學員,以便收集回饋並持續改善課程品質。
- 允許 Admin 建立問卷範本(Survey_Template),定義題目、題型(單選、多選、評分量表 1-5、開放文字)與必填設定。
- 允許 Admin 將 Survey_Template 關聯至 Course 或 Offering,設定自動發送時機(課程結束後 N 天)。
- 自動發送時機到達時,透過電子郵件發送問卷連結給所有完成狀態為「完成」的 Learner。
- 提供 Learner 填寫問卷的線上介面(無需登入,以 Token 驗證身份)。
- 彙整問卷結果,提供每個 Offering 的平均評分、各題統計與開放文字回覆清單。
- 提供跨 Offering 的問卷結果比較報表,支援以 Course、Instructor、時間範圍篩選。
- 允許 Admin 匯出問卷結果,格式包含 CSV 與 PDF。
需求 41Kiro 建議
成績與評分管理
模組 E身為 Instructor 或 Admin,我希望能記錄學員的考試成績或實作評分,以便作為完成狀態判定與證書核發的補充依據。
- 允許 Admin 為 Course 定義評分項目(Grade_Item),包含項目名稱、滿分、及格分數與權重。
- 允許 Instructor 或 Admin 為每位已報名 Learner 在每個 Grade_Item 記錄分數。
- 所有 Grade_Item 的分數填寫完畢時,自動計算加權總分並判定是否及格。
- 課程同時設定出席率門檻與及格分數時,要求兩者皆達標方可標記完成狀態為「完成」。
- 允許 Admin 匯出指定 Offering 的成績報表,格式包含 CSV 與 PDF。
- 在 Learner 的訓練歷程中顯示每門課程的成績紀錄。
需求 42Kiro 建議
開班任務管理
模組 A身為 Admin,我希望能為每個 Offering 定義並追蹤準備工作任務,以便確保開課前所有準備事項均已完成。
- 允許 Admin 為 Course 定義任務範本(Task_Template),包含任務名稱、描述、負責角色與相對截止日(如:開課前 N 天)。
- 以 Course 建立新 Offering 時,自動依據 Task_Template 產生該 Offering 的任務清單,並計算實際截止日期。
- 允許 Admin 將任務指派給特定使用者,並設定提醒通知。
- 追蹤每個任務的狀態(待辦、進行中、已完成),並在 Offering 詳細頁面顯示任務完成進度。
- 任務截止日到達且狀態仍為「待辦」時,自動發送逾期提醒通知給負責人與 Admin。
- 允許 Admin 手動新增、修改或刪除 Offering 的個別任務。
需求 43Kiro 建議
最低開班人數門檻
模組 A身為 Admin,我希望能為 Offering 設定最低開班人數,以便在報名人數不足時及早決定是否取消或延期。
- 允許 Admin 為每個 Offering 設定最低開班人數(Minimum Registrations)。
- Offering 的報名人數達到最低開班人數時,自動通知 Admin(確認開班通知)。
- 距離開課日 N 天(可設定)且報名人數仍未達最低門檻時,自動通知 Admin 進行決策(開班、取消或延期)。
- 在 Offering 清單與行事曆視圖中以視覺標記區分已達標與未達標的 Offering。
- 在報表中提供「未達最低人數 Offering」的篩選條件。
需求 44Kiro 建議
課程先決條件管理
模組 A身為 Admin,我希望能為進階課程設定先決條件(必須先完成的課程),以便確保學員具備足夠的基礎知識。
- 允許 Admin 為 Course 設定一或多個先決條件 Course(Prerequisite),定義學員必須先完成哪些課程才能報名。
- Learner 報名設有 Prerequisite 的 Offering 時,檢查該 Learner 是否已完成所有先決條件課程。
- Learner 未完成先決條件課程時,顯示警告訊息,列出尚未完成的先決條件。
- 允許 Admin 設定先決條件的強制程度:「強制」(不允許報名)或「建議」(顯示警告但允許 Admin 覆寫)。
- 在課程詳細資訊頁面顯示先決條件清單,供 Learner 參考。
需求 45Kiro 建議
合規追蹤與證照到期管理
模組 E身為 Admin,我希望能追蹤學員的證照有效期限與合規訓練完成狀態,以便確保所有必要的訓練與認證均在有效期內。
- 允許 Admin 為 Course 標記為「合規必修」(Compliance Required),並設定有效期限(如:每年需重新訓練)。
- 追蹤每位 Learner 的合規訓練完成日期與到期日期。
- 合規訓練即將到期(到期前 N 天,可設定)時,自動通知 Learner 與其所屬 Organisation 的聯絡人。
- 提供合規狀態儀表板,顯示所有 Learner 的合規訓練狀態(有效、即將到期、已過期)。
- 允許 Admin 匯出合規狀態報表,支援以 Organisation、Course 或到期日範圍篩選。
- Learner 完成合規必修課程時,自動更新該 Learner 的合規狀態並重新計算下次到期日。
需求 46Kiro 建議
Dashboard 儀表板
模組 J身為 Admin 或管理階層,我希望能透過視覺化儀表板快速掌握業務關鍵指標,以便做出即時的營運決策。
- 提供可自訂的 Dashboard 首頁,顯示關鍵業務指標(KPI):本月報名人數與趨勢、本月營收與趨勢、即將開課的 Offering 數量、未達最低人數的 Offering 數量、待處理的退款申請數量、逾期未付 Invoice 數量。
- 支援以圖表形式(折線圖、長條圖、圓餅圖)呈現 KPI 趨勢。
- 允許 Admin 自訂 Dashboard 的 Widget 配置(新增、移除、調整位置)。
- 支援依角色顯示不同的 Dashboard 內容(Admin 看營運指標、Instructor 看個人課表、Sales 看業務管道)。
- 確保 Dashboard 資料在頁面載入後 3 秒內完成渲染。
需求 47Kiro 建議
電子商務結帳流程
模組 B/C身為 Learner,我希望能在報名時直接線上付款,以便一次完成報名與繳費流程。
- 線上付款功能啟用時,在報名流程中提供線上結帳頁面,支援信用卡付款(透過第三方支付閘道,如 Stripe 或綠界 ECPay)。
- Learner 完成線上付款時,自動更新 Invoice 狀態為「已付清」並發送付款確認通知。
- 確保付款資訊不經過 TMS 伺服器(PCI DSS 合規),所有卡號資料由第三方支付閘道處理。
- 線上付款失敗時,顯示明確的錯誤訊息並允許 Learner 重試或選擇其他付款方式。
- 允許 Admin 設定是否啟用線上付款、支援的付款方式與支付閘道連線參數(透過 GUI)。
- 支援「稍後付款」選項,允許 Learner 完成報名但選擇銀行轉帳等離線付款方式。
需求 48Kiro 建議
混合式學習支援
模組 A身為 Admin,我希望能建立結合實體授課、線上同步與非同步自學的混合式課程,以便提供更靈活的學習體驗。
- 允許 Admin 為 Offering 定義多種活動類型(Activity_Type):實體授課(Face-to-Face)、線上同步(Live Online)、非同步自學(Self-Paced eLearning)。
- 允許 Admin 為每個 Activity 設定順序、截止日期與完成條件。
- 追蹤 Learner 在每個 Activity 的完成狀態,並在所有 Activity 完成後觸發整體完成狀態計算。
- 外部 LMS 整合功能啟用時,支援透過 API 從外部 LMS 接收 Learner 的非同步自學完成紀錄。
- 在 Learner 的訓練歷程中顯示混合式課程的各 Activity 完成進度。
需求 49Kiro 建議
Webhook 與事件推送
模組 K身為系統管理員,我希望 TMS 能在關鍵業務事件發生時主動推送通知至外部系統,以便實現與第三方系統的即時整合。
- 允許系統管理員透過 GUI 註冊 Webhook 端點,設定目標 URL、觸發事件類型與驗證密鑰(Secret)。
- 支援以下事件類型的 Webhook 推送:Registration 建立/取消、Payment 收款、Offering 建立/取消/更新、Certificate 核發、Contact 建立/更新。
- 觸發事件發生時,以 HTTP POST 方式將事件資料(JSON 格式)推送至已註冊的 Webhook 端點。
- 為每次 Webhook 推送附加 HMAC 簽章(使用註冊時設定的 Secret),供接收端驗證來源真實性。
- Webhook 推送失敗(HTTP 回應非 2xx)時,以指數退避(Exponential Backoff)策略重試最多 5 次。
- 記錄所有 Webhook 推送的歷史紀錄,包含事件類型、目標 URL、回應狀態碼與時間戳記。
- 允許系統管理員暫停或刪除已註冊的 Webhook 端點。
需求 50Kiro 建議
工作流程自動化引擎
模組 J身為 Admin,我希望能自訂業務流程的自動化規則,以便減少重複性人工操作並確保流程一致性。
- 提供視覺化的工作流程編輯器,允許 Admin 以「觸發條件 → 動作」模式定義自動化規則。
- 支援以下觸發條件類型:時間觸發(排程)、事件觸發(Registration 建立、Payment 收款、Offering 狀態變更等)、條件觸發(欄位值符合特定條件)。
- 支援以下動作類型:發送通知(Email/SMS)、更新欄位值、建立任務、變更狀態、呼叫 Webhook。
- 允許 Admin 為工作流程設定啟用/停用狀態,停用的工作流程不會被觸發。
- 記錄每次工作流程執行的歷史紀錄,包含觸發時間、執行結果與錯誤訊息。
- 支援工作流程的條件分支(IF/ELSE),根據不同條件執行不同動作。
需求 51Kiro 建議
講師行動應用程式
模組 E/G身為 Instructor,我希望能透過行動裝置管理課程、記錄出席與成績,以便在教室現場即時完成教務操作。
- 提供響應式行動介面(Progressive Web App 或原生 App),供 Instructor 在手機或平板上使用。
- 允許 Instructor 在行動介面中檢視當日與近期的課表。
- 允許 Instructor 在行動介面中檢視指定 Offering 的學員名單與聯絡資訊。
- 允許 Instructor 在行動介面中記錄每位 Learner 的出席狀態。
- 允許 Instructor 在行動介面中記錄每位 Learner 的成績。
- 確保行動介面在離線狀態下仍可暫存出席與成績資料,待網路恢復後自動同步。
需求 52Kiro 建議
多幣別與多稅率支援
模組 C身為 Admin,我希望系統能支援多種幣別與稅率設定,以便在跨區域或國際課程中正確計算費用。
- 允許系統管理員定義多種幣別(Currency),並設定系統預設幣別(預設為 TWD)。
- 允許 Admin 為 Offering 指定計價幣別,不同 Offering 可使用不同幣別。
- 允許系統管理員定義多種稅率(Tax Rate),包含稅率名稱、百分比與適用條件。
- 在 Invoice 中明確顯示稅前金額、稅額與稅後總額。
- 在報表中支援以單一幣別彙總顯示(依系統設定的匯率換算)。
- 允許系統管理員透過 GUI 設定幣別與稅率,無需修改程式碼或設定檔。
需求 53Kiro 建議
訓練預算管理
模組 C身為 Admin 或管理階層,我希望能追蹤與管理訓練預算的使用狀況,以便控制成本並優化資源配置。
- 允許 Admin 為 Organisation 或部門設定年度訓練預算額度。
- 在每筆 Registration 建立時自動扣減對應 Organisation 或部門的預算餘額。
- 在預算餘額低於設定門檻(如 20%)時自動通知 Admin 與 Organisation 聯絡人。
- 提供預算使用報表,顯示各 Organisation / 部門的預算總額、已使用金額、剩餘金額與使用率。
- 預算餘額不足以支付新報名費用時,顯示警告訊息(可設定為「警告但允許」或「強制拒絕」)。
需求 54Kiro 建議
課程目錄公開頁面
模組 I身為潛在學員,我希望能在不登入的情況下瀏覽完整的課程目錄與即將開課的場次,以便決定是否報名。
- 提供無需登入即可瀏覽的公開課程目錄頁面,顯示所有狀態為「公開」的 Course 與即將開課的 Offering。
- 在公開課程目錄中支援以類別、關鍵字、日期範圍與地點篩選。
- 為每個 Course 提供獨立的公開詳細頁面,顯示課程描述、時數、費用、先決條件與即將開課的 Offering 清單。
- 確保公開頁面具備 SEO 友善的 URL 結構與 meta 標籤。
- 在公開頁面中顯示 Offering 的剩餘名額狀態(有名額 / 即將額滿 / 已額滿可候補)。
- 允許 Admin 設定哪些 Course 與 Offering 顯示於公開目錄(透過「公開」/「隱藏」狀態控制)。