# AI 評分結果上傳腳本說明

## 概述

這個腳本用於解析 AI 評分結果的 JSON 資料，並將結果上傳到資料庫的三個相關表中：
- `evaluations` - 評審記錄主表
- `evaluation_scores` - 評分結果明細表
- `evaluation_feedback` - AI 評語和建議表

## 資料庫表結構

### 1. evaluations 表
儲存評審的基本資訊：
- `id` - 主鍵
- `project_id` - 專案 ID
- `overall_score` - 總分 (78.5)
- `max_possible_score` - 滿分 (100)
- `grade` - 等級 (A-)
- `analysis_duration` - 分析耗時
- `ai_model_version` - AI 模型版本
- `status` - 狀態 (completed)
- `error_message` - 錯誤訊息

### 2. evaluation_scores 表
儲存各項評分標準的詳細分數：
- `id` - 主鍵
- `evaluation_id` - 關聯到 evaluations 表
- `criteria_item_id` - 關聯到 criteria_items 表
- `score` - 得分
- `max_score` - 滿分
- `weight` - 權重
- `weighted_score` - 加權分數
- `percentage` - 百分比

### 3. evaluation_feedback 表
儲存 AI 的評語和建議：
- `id` - 主鍵
- `evaluation_id` - 關聯到 evaluations 表
- `criteria_item_id` - 關聯到 criteria_items 表 (可為空)
- `feedback_type` - 反饋類型 (overall/criteria/strength/improvement)
- `content` - 反饋內容
- `sort_order` - 排序

## 使用方式

### 1. 環境設定
確保已設定資料庫連線環境變數：
```bash
export DB_HOST=localhost
export DB_USER=root
export DB_PASSWORD=your_password
export DB_NAME=ai_scoring_app
```

### 2. 執行腳本
```bash
cd scripts
node parse-ai-evaluation.js
```

### 3. 檢查結果
腳本會輸出詳細的執行過程，包括：
- 資料庫連接狀態
- 各表的記錄創建數量
- 最終的評分結果摘要

## 重要注意事項

### 1. criteria_item_id 對應
腳本中的 `criteriaNameToId` 物件需要根據實際資料庫中的 `criteria_items` 表來調整：

```javascript
const criteriaNameToId = {
  "應用實務性": 52,  // 需要確認實際 ID
  "創新性": 53,
  "成效與效益": 54,
  "擴散與可複用性": 55,
  "簡報與表達": 56
};
```

### 2. project_id 設定
腳本中假設專案 ID 為 1，實際使用時需要根據實際情況調整：

```javascript
const projectId = 1; // 需要根據實際專案 ID 調整
```

### 3. 資料驗證
執行前請確認：
- 資料庫連線正常
- `criteria_items` 表中有對應的評分項目
- `projects` 表中有對應的專案記錄

## 資料解析說明

### AI JSON 結構
腳本解析的 AI JSON 包含以下主要部分：
- 基本資訊：專案標題、總分、等級等
- 評分標準：各項標準的得分和反饋
- 詳細分析：整體分析和關鍵發現
- 改進建議：保持優勢、關鍵改進、行動計劃

### 資料映射
- 每個評分標準會創建一條 `evaluation_scores` 記錄
- 每個評分標準的反饋會創建多條 `evaluation_feedback` 記錄
- 整體分析會創建 `feedback_type` 為 'overall' 的反饋記錄

## 錯誤處理

腳本包含完整的錯誤處理機制：
- 資料庫連線錯誤
- SQL 執行錯誤
- 資料驗證錯誤

所有錯誤都會在控制台輸出詳細資訊，並確保資料庫連線正確關閉。

## 擴展功能

如需處理其他 AI 評分結果，可以：
1. 修改 `aiEvaluationResult` 物件
2. 調整 `criteriaNameToId` 對應關係
3. 更新 `projectId` 設定
4. 重新執行腳本
