// 工作痛點分類系統 - 精簡版 10 個分類 export const categories = [ { name: "重複作業", description: "每天遇到都在做的重工、報表、開票等例行事務", keywords: [ "重複", "重工", "報表", "開票", "例行", "每天", "固定", "重複性", "例行公事", "重複工作", "日常作業", "定期", "週期性", "重複操作", "機械化", "單調", ], color: "#3B82F6", bgColor: "from-blue-500/20 to-blue-600/20", borderColor: "border-blue-400/30", textColor: "text-blue-200", icon: "🔄", }, { name: "數據混亂", description: "資料統整困難、爆表、無法分析或視覺化", keywords: [ "數據", "資料", "統整", "爆表", "分析", "視覺化", "整理", "混亂", "散亂", "不一致", "格式", "匯入", "匯出", "Excel", "CSV", "報告", "圖表", ], color: "#EC4899", bgColor: "from-pink-500/20 to-rose-600/20", borderColor: "border-pink-400/30", textColor: "text-pink-200", icon: "📊", }, { name: "找不到資料", description: "文件、SOP、規則等資訊難查找", keywords: [ "找不到", "文件", "SOP", "規則", "資訊", "查找", "搜尋", "文檔", "手冊", "說明", "指引", "標準", "程序", "知識", "資料庫", "檔案", "位置", ], color: "#F59E0B", bgColor: "from-yellow-500/20 to-amber-600/20", borderColor: "border-yellow-400/30", textColor: "text-yellow-200", icon: "🔍", }, { name: "流程卡關", description: "請購、採購、維修等流程追蹤不到", keywords: [ "流程", "請購", "採購", "維修", "追蹤", "卡關", "停滯", "延遲", "審核", "簽核", "申請", "進度", "狀態", "追不到", "不知道", "等待", ], color: "#EF4444", bgColor: "from-red-500/20 to-rose-600/20", borderColor: "border-red-400/30", textColor: "text-red-200", icon: "🚧", }, { name: "文件太多", description: "表單量、會議紀錄等需人工輸入/比對", keywords: [ "文件", "表單", "會議紀錄", "人工輸入", "比對", "繁瑣", "太多", "大量", "手動", "輸入", "填寫", "紙本", "列印", "掃描", "歸檔", "整理", ], color: "#8B5CF6", bgColor: "from-purple-500/20 to-violet-600/20", borderColor: "border-purple-400/30", textColor: "text-purple-200", icon: "📄", }, { name: "協作混亂", description: "人工配置、斷線、跨部門難協調", keywords: [ "協作", "人工配置", "斷線", "跨部門", "協調", "溝通", "配合", "團隊", "合作", "聯繫", "回應", "討論", "會議", "同事", "部門", "協調", ], color: "#10B981", bgColor: "from-green-500/20 to-emerald-600/20", borderColor: "border-green-400/30", textColor: "text-green-200", icon: "🤝", }, { name: "時間浪費", description: "等資料、等簽核、等開會系統等無效率時間", keywords: [ "時間", "等資料", "等簽核", "等開會", "無效率", "浪費", "等待", "拖延", "慢", "效率", "速度", "加班", "忙碌", "趕工", "deadline", "截止", ], color: "#F97316", bgColor: "from-orange-500/20 to-red-600/20", borderColor: "border-orange-400/30", textColor: "text-orange-200", icon: "⏰", }, { name: "諮詢煩重", description: "客戶或內部常見問答人力吃緊", keywords: [ "諮詢", "客戶", "內部", "問答", "人力吃緊", "常見問題", "重複問題", "客服", "支援", "解答", "回覆", "詢問", "疑問", "FAQ", "服務", "處理", ], color: "#06B6D4", bgColor: "from-cyan-500/20 to-teal-600/20", borderColor: "border-cyan-400/30", textColor: "text-cyan-200", icon: "💬", }, { name: "權限不清", description: "權限管理混亂、責任不明", keywords: [ "權限", "管理", "混亂", "責任", "不明", "不清楚", "授權", "存取", "帳號", "密碼", "登入", "角色", "職責", "負責人", "歸屬", "分工", ], color: "#84CC16", bgColor: "from-lime-500/20 to-green-600/20", borderColor: "border-lime-400/30", textColor: "text-lime-200", icon: "🔐", }, { name: "系統太多", description: "多系統操作、切換成本高", keywords: [ "系統", "多系統", "切換", "成本高", "太多", "太雜", "操作", "介面", "平台", "工具", "軟體", "應用程式", "登入", "帳號", "整合", "統一", ], color: "#6366F1", bgColor: "from-indigo-500/20 to-purple-600/20", borderColor: "border-indigo-400/30", textColor: "text-indigo-200", icon: "💻", }, ] export interface Wish { id: number title: string currentPain: string expectedSolution: string expectedEffect: string createdAt: string } export interface Category { name: string description: string keywords: string[] color: string bgColor: string borderColor: string textColor: string icon: string } // 多標籤自動分類函數 - 最多返回3個 export function categorizeWishMultiple(wish: Wish): Category[] { const fullText = `${wish.title} ${wish.currentPain} ${wish.expectedSolution} ${wish.expectedEffect}`.toLowerCase() const matchedCategories: Category[] = [] // 檢查每個分類,收集所有匹配的分類 categories.forEach((category) => { const matchedKeywords = category.keywords.filter((keyword) => fullText.includes(keyword.toLowerCase())) if (matchedKeywords.length > 0) { matchedCategories.push({ ...category, matchScore: matchedKeywords.length, // 添加匹配分數 } as Category & { matchScore: number }) } }) // 如果有匹配的分類,按匹配分數排序並返回最多3個 if (matchedCategories.length > 0) { return matchedCategories.sort((a, b) => (b as any).matchScore - (a as any).matchScore).slice(0, 3) // 最多3個標籤 } // 如果沒有匹配到任何分類,返回默認分類 return [ { name: "其他問題", description: "未能歸類的特殊工作困擾", keywords: [], color: "#6B7280", bgColor: "from-gray-500/20 to-slate-600/20", borderColor: "border-gray-400/30", textColor: "text-gray-200", icon: "❓", }, ] } // 保持向後兼容的單一分類函數 export function categorizeWish(wish: Wish): Category { const categories = categorizeWishMultiple(wish) return categories[0] // 返回最匹配的分類 } // 獲取所有願望的分類統計(支持多標籤) export function getCategoryStats(wishes: Wish[]) { const stats: { [key: string]: number } = {} // 初始化統計 categories.forEach((cat) => { stats[cat.name] = 0 }) stats["其他問題"] = 0 // 統計每個分類的數量(多標籤計算) wishes.forEach((wish) => { const wishCategories = categorizeWishMultiple(wish) wishCategories.forEach((category) => { stats[category.name]++ }) }) return stats } // 獲取分類統計(用於雷達圖,避免重複計算) export function getCategoryStatsForRadar(wishes: Wish[]) { const stats: { [key: string]: number } = {} // 初始化統計 categories.forEach((cat) => { stats[cat.name] = 0 }) stats["其他問題"] = 0 // 統計每個分類的數量(每個願望只計算一次,取主要分類) wishes.forEach((wish) => { const primaryCategory = categorizeWish(wish) stats[primaryCategory.name]++ }) return stats }