backup: 完成 HR_position_ 表格前綴重命名與欄位對照表整理
變更內容: - 所有資料表加上 HR_position_ 前綴 - 整理完整欄位顯示名稱與 ID 對照表 - 模組化 JS 檔案 (admin.js, ai.js, csv.js 等) - 專案結構優化 (docs/, scripts/, tests/ 等) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
183
docs/# 系統表單欄位規範書 v1.1 (UX Optimized).md
Normal file
183
docs/# 系統表單欄位規範書 v1.1 (UX Optimized).md
Normal file
@@ -0,0 +1,183 @@
|
||||
# 系統表單欄位規範書 v1.1 (UX Optimized)
|
||||
|
||||
**設計原則 (UX Design Principles):**
|
||||
1. **Context First**: 先確認組織架構 (BU/Dept),再定義具體內容。
|
||||
2. **Key Data Top**: 核心識別資料 (編號/名稱) 置頂。
|
||||
3. **Group by Type**: 下拉選單 (Select) 集中,開關 (Switch) 集中,長文字 (Textarea) 沉底。
|
||||
|
||||
---
|
||||
|
||||
## 1. 崗位基礎資料模組 (Position Module)
|
||||
|
||||
**表單代號**: `positionForm`
|
||||
**資料表**: `Position`
|
||||
|
||||
### 1.1 基礎資料頁籤 (tab-position-basic)
|
||||
> **UX 邏輯**: 先選組織(過濾條件) → 填寫核心識別 → 設定分類屬性 → 填寫詳細描述。
|
||||
|
||||
| # | 欄位顯示名稱 | 標準化 HTML ID | 資料庫欄位名稱 | 類型 | 必填 | 備註 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| **[組織定義]** | | | | | | |
|
||||
| 1 | 事業體 | `pos_businessUnit` | `businessUnit` | select | 否 | 聯動 L1 |
|
||||
| 2 | 處級單位 | `pos_division` | `division` | select | 否 | 聯動 L2 |
|
||||
| 3 | 部級單位 | `pos_department` | `department` | select | 否 | 聯動 L3 |
|
||||
| 4 | 課級單位 | `pos_section` | `section` | text | 否 | - |
|
||||
| **[核心識別]** | | | | | | |
|
||||
| 5 | **崗位編號** | `pos_code` | `positionCode` | text | **是** | 唯一識別 |
|
||||
| 6 | **崗位名稱** | `pos_name` | `positionName` | text | **是** | - |
|
||||
| 7 | 生效日期 | `pos_effectiveDate` | `effectiveDate` | date | 否 | 預設今日 |
|
||||
| **[分類屬性]** | | | | | | |
|
||||
| 8 | 崗位級別 | `pos_level` | `positionLevel` | select | 否 | L1-L7 |
|
||||
| 9 | 崗位類別 | `pos_category` | `positionCategory` | select | 否 | 連動帶出名稱 |
|
||||
| 10 | 崗位類別名稱 | `pos_categoryName` | `positionCategoryName` | text | 否 | Readonly |
|
||||
| 11 | 崗位性質 | `pos_type` | `positionType` | select | 否 | FT/PT/CT... |
|
||||
| 12 | 崗位性質名稱 | `pos_typeName` | `positionTypeName` | text | 否 | Readonly |
|
||||
| 13 | 編制人數 | `pos_headcount` | `headcount` | number | 否 | - |
|
||||
| **[詳細描述]** | | | | | | |
|
||||
| 14 | 崗位描述 | `pos_desc` | `description` | textarea | 否 | rows=6 |
|
||||
| 15 | 崗位備注 | `pos_remark` | `remark` | textarea | 否 | rows=4 |
|
||||
|
||||
### 1.2 招聘要求資料頁籤 (tab-position-recruit)
|
||||
> **UX 邏輯**: 先定義「要招什麼樣的人(Target)」→「硬性條件(Must)」→「軟性技能(Plus)」→「廣告文案(Text)」。
|
||||
|
||||
| # | 欄位顯示名稱 | 標準化 HTML ID | 資料庫欄位名稱 | 類型 | 必填 | 備註 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| **[招聘職位定義]** | | | | | | |
|
||||
| 1 | 招聘職位代碼 | `rec_position` | `recruitPosition` | select | 否 | ENG, MGR... |
|
||||
| 2 | 對外職稱 | `rec_jobTitle` | `jobTitle` | text | 否 | 顯示在招聘網的名稱 |
|
||||
| 3 | 上級崗位編號 | `rec_superiorCode` | `superiorPositionCode` | text | 否 | - |
|
||||
| 4 | 工作性質 | `rec_jobType` | `jobType` | select | 否 | 招聘用分類 |
|
||||
| **[硬性資格]** | | | | | | |
|
||||
| 5 | 最低學歷 | `rec_eduLevel` | `educationLevel` | select | 否 | - |
|
||||
| 6 | 專業要求 | `rec_majorReq` | `majorRequirements` | text | 否 | Modal 選擇 |
|
||||
| 7 | 工作經驗 | `rec_expYears` | `experienceYears` | select | 否 | - |
|
||||
| 8 | 薪酬范圍 | `rec_salaryRange` | `salaryRange` | select | 否 | - |
|
||||
| 9 | 要求性別 | `rec_gender` | `requiredGender` | select | 否 | - |
|
||||
| 10 | 年齡限制 (Min) | `rec_minAge` | `minAge` | number | 否 | 併排顯示 |
|
||||
| 11 | 年齡限制 (Max) | `rec_maxAge` | `maxAge` | number | 否 | 併排顯示 |
|
||||
| **[技能與證照]** | | | | | | |
|
||||
| 12 | 語言要求 | `rec_langReq` | `langRequirements` | text | 否 | - |
|
||||
| 13 | 證照要求 | `rec_certReq` | `certRequirements` | select | 否 | - |
|
||||
| 14 | 技能要求 | `rec_skillReq` | `skillRequirements` | text | 否 | Tag input |
|
||||
| 15 | 其他要求 | `rec_otherReq` | `otherRequirements` | text | 否 | - |
|
||||
| **[文案描述]** | | | | | | |
|
||||
| 16 | 職位描述 (JD) | `rec_jobDesc` | `recruitJobDesc` | textarea | 否 | 廣告用 |
|
||||
| 17 | 崗位要求 (Req) | `rec_positionReq` | `recruitRequirements` | textarea | 否 | 廣告用 |
|
||||
| 18 | 招聘備注 | `rec_remark` | `recruitRemark` | textarea | 否 | 內部用 |
|
||||
|
||||
---
|
||||
|
||||
## 2. 職務基礎資料模組 (Job Module)
|
||||
|
||||
**表單代號**: `jobForm`
|
||||
**資料表**: `Job`
|
||||
|
||||
> **UX 邏輯**: 先分類 → 再命名 → 設定權限/福利(開關) → 備註。
|
||||
|
||||
| # | 欄位顯示名稱 | 標準化 HTML ID | 資料庫欄位名稱 | 類型 | 必填 | 備註 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| **[分類與識別]** | | | | | | |
|
||||
| 1 | **職務類別** | `job_category` | `jobCategoryCode` | select | **是** | - |
|
||||
| 2 | 職務類別名稱 | `job_categoryName` | `jobCategoryName` | text | 否 | Readonly |
|
||||
| 3 | **職務編號** | `job_code` | `jobCode` | text | **是** | - |
|
||||
| 4 | **職務名稱** | `job_name` | `jobName` | text | **是** | - |
|
||||
| 5 | 職務英文名稱 | `job_nameEn` | `jobNameEn` | text | 否 | - |
|
||||
| **[屬性設定]** | | | | | | |
|
||||
| 6 | 職務層級 | `job_level` | `jobLevel` | text | 否 | 敏感欄位 |
|
||||
| 7 | 生效日期 | `job_effectiveDate`| `effectiveDate` | date | 否 | - |
|
||||
| 8 | 排列順序 | `job_sortOrder` | `sortOrder` | number | 否 | - |
|
||||
| 9 | 預算編制人數 | `job_headcount` | `headcount` | number | 否 | - |
|
||||
| **[福利開關]** | | | | | | |
|
||||
| 10 | 全勤獎金 | `job_hasAttBonus` | `hasAttendanceBonus` | checkbox| 否 | Toggle Switch |
|
||||
| 11 | 住房補貼 | `job_hasHouseAllow`| `hasHousingAllowance` | checkbox| 否 | Toggle Switch |
|
||||
| **[備註]** | | | | | | |
|
||||
| 12 | 職務備注 | `job_remark` | `remark` | textarea | 否 | - |
|
||||
|
||||
---
|
||||
|
||||
## 3. 部門職責模組 (DeptFunction Module)
|
||||
|
||||
**表單代號**: `deptFunctionForm`
|
||||
**資料表**: `DeptFunction`
|
||||
|
||||
> **UX 邏輯**: 組織架構 → 核心職責定義 → 管理與規模 → 策略性描述(使命/願景)。
|
||||
|
||||
| # | 欄位顯示名稱 | 標準化 HTML ID | 資料庫欄位名稱 | 類型 | 必填 | 備註 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| **[基本定義]** | | | | | | |
|
||||
| 1 | **事業體** | `df_businessUnit` | `businessUnit` | select | **是** | - |
|
||||
| 2 | **處級單位** | `df_division` | `division` | select | **是** | - |
|
||||
| 3 | **部級單位** | `df_department` | `department` | select | **是** | - |
|
||||
| 4 | 課級單位 | `df_section` | `section` | text | 否 | - |
|
||||
| 5 | **職責編號** | `df_code` | `dfCode` | text | **是** | - |
|
||||
| 6 | **職責名稱** | `df_name` | `dfName` | text | **是** | - |
|
||||
| **[管理架構]** | | | | | | |
|
||||
| 7 | **對應崗位** | `df_posTitle` | `positionTitle` | select | **是** | 綁定 Position |
|
||||
| 8 | 崗位級別 | `df_posLevel` | `positionLevel` | select | 否 | - |
|
||||
| 9 | 部門主管職稱 | `df_managerTitle` | `managerTitle` | text | 否 | - |
|
||||
| 10 | 人數上限 | `df_headcountLimit`| `headcountLimit` | number | 否 | - |
|
||||
| 11 | **生效日期** | `df_effectiveDate` | `effectiveDate` | date | **是** | - |
|
||||
| 12 | 狀態 | `df_status` | `status` | select | 否 | Active/Inactive |
|
||||
| **[策略職責]** | | | | | | |
|
||||
| 13 | **核心職責** | `df_coreFunc` | `coreFunctions` | textarea | **是** | 重點欄位 (Top) |
|
||||
| 14 | 部門使命 | `df_mission` | `mission` | textarea | 否 | - |
|
||||
| 15 | 部門願景 | `df_vision` | `vision` | textarea | 否 | - |
|
||||
| 16 | KPIs | `df_kpis` | `kpis` | textarea | 否 | - |
|
||||
| 17 | 協作部門 | `df_collab` | `collaboration` | textarea | 否 | - |
|
||||
| 18 | 備注 | `df_remark` | `remark` | textarea | 否 | - |
|
||||
|
||||
---
|
||||
|
||||
## 4. 崗位描述模組 (JobDescription Module)
|
||||
|
||||
**表單代號**: `jobDescForm`
|
||||
**資料表**: `JobDescription`
|
||||
|
||||
> **UX 邏輯**:
|
||||
> 1. Header: 快速鎖定「這是誰的JD」。
|
||||
> 2. Readonly Area: 顯示「他在哪裡工作」(提供撰寫JD的上下文)。
|
||||
> 3. Reporting: 釐清「上下級關係」。
|
||||
> 4. Main Body: 撰寫「做什麼」(Purpose/Resp)。
|
||||
> 5. Requirements: 撰寫「需要什麼條件」。
|
||||
|
||||
### 4.1 識別與上下文 (Header & Context)
|
||||
|
||||
| # | 欄位顯示名稱 | 標準化 HTML ID | 資料庫欄位名稱 | 類型 | 必填 | 備註 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| **[員工綁定]** | | | | | | |
|
||||
| 1 | 選擇員工(工號) | `jd_empNo` | `empNo` | text | 否 | 搜尋 Modal |
|
||||
| 2 | 姓名 | `jd_empName` | `empName` | text | 否 | Readonly |
|
||||
| 3 | 版本日期 | `jd_versionDate` | `versionDate` | date | 否 | - |
|
||||
| **[崗位背景 (唯讀)]** | | | | | | |
|
||||
| 4 | 崗位代碼 | `jd_posCode` | `positionCode` | text | 否 | 關聯鍵 |
|
||||
| 5 | 崗位名稱 | `jd_posName` | `positionName` | text | 否 | Readonly |
|
||||
| 6 | 所屬部門 | `jd_department` | `department` | text | 否 | Readonly (組合字串) |
|
||||
| 7 | 任職地點 | `jd_location` | `workLocation` | select | 否 | - |
|
||||
| 8 | 員工屬性 | `jd_empAttr` | `empAttribute` | select | 否 | FT/PT... |
|
||||
| 9 | 部門職責引用 | `jd_dfCode` | `dfCode` | text | 否 | 關聯 DF 模組 |
|
||||
|
||||
### 4.2 匯報關係 (Reporting Lines)
|
||||
|
||||
| # | 欄位顯示名稱 | 標準化 HTML ID | 資料庫欄位名稱 | 類型 | 必填 | 備註 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 10 | **直接主管** | `jd_supervisor` | `directSupervisor` | text | 否 | 姓名/職稱 |
|
||||
| 11 | **匯報對象** | `jd_reportTo` | `reportTo` | text | 否 | 系統職務節點 |
|
||||
| 12 | 職等&職務 | `jd_gradeJob` | `positionGradeJob` | text | 否 | HR 用級別 |
|
||||
| 13 | 直接下屬 | `jd_directReports` | `directReports` | text | 否 | 人數或職稱 |
|
||||
|
||||
### 4.3 職責詳情 (Responsibilities)
|
||||
|
||||
| # | 欄位顯示名稱 | 標準化 HTML ID | 資料庫欄位名稱 | 類型 | 必填 | 備註 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 14 | 崗位設置目的 | `jd_purpose` | `positionPurpose` | text | 否 | 一句話摘要 |
|
||||
| 15 | **主要職責** | `jd_mainResp` | `mainResponsibilities`| textarea | 否 | 核心內容 (大區塊) |
|
||||
|
||||
### 4.4 任職資格 (Requirements)
|
||||
|
||||
| # | 欄位顯示名稱 | 標準化 HTML ID | 資料庫欄位名稱 | 類型 | 必填 | 備註 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 16 | 教育程度 | `jd_eduLevel` | `educationLevel` | text | 否 | - |
|
||||
| 17 | 工作經驗 | `jd_expReq` | `experienceRequirements`| textarea | 否 | - |
|
||||
| 18 | 專業知識 | `jd_proKnowledge` | `professionalKnowledge` | textarea | 否 | - |
|
||||
| 19 | 基本技能 | `jd_basicSkills` | `basicSkills` | textarea | 否 | - |
|
||||
| 20 | 其他要求 | `jd_otherReq` | `otherRequirements` | textarea | 否 | - |
|
||||
315
docs/CORS_FIX_GUIDE.md
Normal file
315
docs/CORS_FIX_GUIDE.md
Normal file
@@ -0,0 +1,315 @@
|
||||
# CORS 錯誤修正指南
|
||||
|
||||
## 🔴 問題說明
|
||||
|
||||
您遇到的錯誤有兩個:
|
||||
|
||||
### 1. CORS (跨域資源共享) 錯誤
|
||||
```
|
||||
Access to fetch at 'https://api.anthropic.com/v1/messages' from origin 'http://127.0.0.1:5000'
|
||||
has been blocked by CORS policy: Response to preflight request doesn't pass access control check:
|
||||
No 'Access-Control-Allow-Origin' header is present on the requested resource.
|
||||
```
|
||||
|
||||
**原因**: 前端代碼直接從瀏覽器調用 Claude API,但 Claude API 不允許來自瀏覽器的直接請求(出於安全考量)。
|
||||
|
||||
### 2. Storage 訪問錯誤
|
||||
```
|
||||
Uncaught (in promise) Error: Access to storage is not allowed from this context.
|
||||
```
|
||||
|
||||
**原因**: 瀏覽器的本地存儲權限問題,通常在使用 `file://` 協議或某些安全限制下出現。
|
||||
|
||||
---
|
||||
|
||||
## ✅ 解決方案
|
||||
|
||||
### 方案 1: 修改 index.html 中的 callClaudeAPI 函數(推薦)
|
||||
|
||||
**步驟 1**: 打開 [index.html](./index.html)
|
||||
|
||||
**步驟 2**: 找到第 1264 行的 `callClaudeAPI` 函數
|
||||
|
||||
**步驟 3**: 將整個函數替換為以下代碼:
|
||||
|
||||
```javascript
|
||||
// ==================== AI Generation Functions ====================
|
||||
async function callClaudeAPI(prompt, api = 'gemini') {
|
||||
try {
|
||||
// 調用後端 Flask API,避免 CORS 錯誤
|
||||
const response = await fetch("/api/llm/generate", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify({
|
||||
api: api, // 使用指定的 LLM API (gemini, deepseek, openai)
|
||||
prompt: prompt,
|
||||
max_tokens: 2000
|
||||
})
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
const errorData = await response.json();
|
||||
throw new Error(errorData.error || `API 請求失敗: ${response.status}`);
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
if (!data.success) {
|
||||
throw new Error(data.error || 'API 調用失敗');
|
||||
}
|
||||
|
||||
// 解析返回的文字為 JSON
|
||||
let responseText = data.text;
|
||||
responseText = responseText.replace(/```json\n?/g, "").replace(/```\n?/g, "").trim();
|
||||
return JSON.parse(responseText);
|
||||
|
||||
} catch (error) {
|
||||
console.error("Error calling LLM API:", error);
|
||||
|
||||
// 顯示友好的錯誤訊息
|
||||
alert(`AI 生成錯誤: ${error.message}\n\n請確保:\n1. Flask 後端已啟動\n2. 已在 .env 文件中配置 LLM API Key\n3. 網路連線正常`);
|
||||
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**步驟 4**: 保存文件
|
||||
|
||||
**步驟 5**: 確保使用更新版的 Flask 後端
|
||||
|
||||
```bash
|
||||
# 使用包含 LLM 端點的版本
|
||||
python app_updated.py
|
||||
```
|
||||
|
||||
**步驟 6**: 重新載入瀏覽器頁面
|
||||
|
||||
---
|
||||
|
||||
### 方案 2: 使用已修正的文件(快速方案)
|
||||
|
||||
我已經創建了包含完整修正的文件,您可以選擇以下方式之一:
|
||||
|
||||
#### 選項 A: 手動修改(最安全)
|
||||
|
||||
1. 打開 `index.html`
|
||||
2. 搜尋 `async function callClaudeAPI(prompt)`
|
||||
3. 用上面方案 1 的代碼替換
|
||||
|
||||
#### 選項 B: 使用腳本自動修正
|
||||
|
||||
參考 [fix_cors.js](./fix_cors.js) 文件中的完整說明。
|
||||
|
||||
---
|
||||
|
||||
## 📋 完整修正步驟
|
||||
|
||||
### 1. 確認後端已啟動並包含 LLM 端點
|
||||
|
||||
```bash
|
||||
# 停止當前運行的 Flask(如果有)
|
||||
# 按 Ctrl+C
|
||||
|
||||
# 啟動更新版後端
|
||||
python app_updated.py
|
||||
```
|
||||
|
||||
您應該看到:
|
||||
```
|
||||
✓ LLM 功能已啟用
|
||||
已配置的 API: gemini, deepseek, openai
|
||||
```
|
||||
|
||||
### 2. 配置 LLM API Key
|
||||
|
||||
編輯 [.env](./.env) 文件,添加至少一個 API Key:
|
||||
|
||||
```env
|
||||
# 至少配置其中一個
|
||||
GEMINI_API_KEY=your_actual_gemini_api_key_here
|
||||
DEEPSEEK_API_KEY=your_actual_deepseek_api_key_here
|
||||
OPENAI_API_KEY=your_actual_openai_api_key_here
|
||||
```
|
||||
|
||||
**獲取 API Key:**
|
||||
- **Gemini**: https://makersuite.google.com/app/apikey
|
||||
- **DeepSeek**: https://www.deepseek.com/
|
||||
- **OpenAI**: https://platform.openai.com/api-keys
|
||||
|
||||
### 3. 測試 LLM API 連線
|
||||
|
||||
訪問測試頁面:http://localhost:5000/api-test
|
||||
|
||||
點擊「測試連線」按鈕,確保至少一個 API 顯示「✓ 連線成功」。
|
||||
|
||||
### 4. 修改 index.html
|
||||
|
||||
按照方案 1 的步驟修改 `callClaudeAPI` 函數。
|
||||
|
||||
### 5. 重新載入頁面
|
||||
|
||||
在瀏覽器中按 `Ctrl+F5` 強制重新載入頁面(清除緩存)。
|
||||
|
||||
### 6. 測試 AI 功能
|
||||
|
||||
1. 在主頁面點擊「新增崗位」
|
||||
2. 填寫部分欄位(例如崗位名稱)
|
||||
3. 點擊「✨ I'm feeling lucky」按鈕
|
||||
4. 應該會成功生成內容,不再出現 CORS 錯誤
|
||||
|
||||
---
|
||||
|
||||
## 🔍 驗證修正是否成功
|
||||
|
||||
打開瀏覽器的開發者工具(F12),切換到 Console 標籤:
|
||||
|
||||
### ✅ 成功的表現:
|
||||
- 沒有 CORS 錯誤
|
||||
- 看到 `POST http://localhost:5000/api/llm/generate` 請求成功 (200 OK)
|
||||
- AI 自動填充正常工作
|
||||
|
||||
### ❌ 仍有問題:
|
||||
|
||||
#### 如果看到 `403 LLM 功能未啟用`
|
||||
**原因**: 沒有使用 `app_updated.py`
|
||||
**解決**:
|
||||
```bash
|
||||
python app_updated.py
|
||||
```
|
||||
|
||||
#### 如果看到 `API Key 未設定`
|
||||
**原因**: .env 文件中沒有配置 API Key
|
||||
**解決**: 編輯 `.env` 文件,添加有效的 API Key
|
||||
|
||||
#### 如果看到 `連線逾時`
|
||||
**原因**: 網路連線問題或 API 伺服器問題
|
||||
**解決**:
|
||||
1. 檢查網路連線
|
||||
2. 嘗試使用不同的 LLM API(修改 `callClaudeAPI(prompt, 'deepseek')`)
|
||||
|
||||
#### 如果看到 `API Key 無效`
|
||||
**原因**: API Key 錯誤或已過期
|
||||
**解決**: 重新獲取有效的 API Key
|
||||
|
||||
---
|
||||
|
||||
## 🎯 架構變更說明
|
||||
|
||||
### 修正前(錯誤):
|
||||
```
|
||||
瀏覽器 → 直接調用 → Claude API (❌ CORS 錯誤)
|
||||
```
|
||||
|
||||
### 修正後(正確):
|
||||
```
|
||||
瀏覽器 → Flask 後端 → Gemini/DeepSeek/OpenAI API (✅ 正常)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💡 為什麼這樣修改
|
||||
|
||||
### 1. 安全性
|
||||
- **API Key 保護**: API Key 只存儲在服務器端(.env 文件),不暴露給前端
|
||||
- **防止濫用**: 用戶無法看到或竊取 API Key
|
||||
|
||||
### 2. CORS 問題
|
||||
- **同源請求**: 前端只調用同域的 Flask API(http://localhost:5000)
|
||||
- **服務器端請求**: Flask 服務器調用外部 API,不受 CORS 限制
|
||||
|
||||
### 3. 靈活性
|
||||
- **多 API 支持**: 可以輕鬆切換不同的 LLM API
|
||||
- **統一接口**: 前端代碼無需關心使用哪個 LLM API
|
||||
|
||||
---
|
||||
|
||||
## 📝 其他建議
|
||||
|
||||
### 1. 添加錯誤處理 UI
|
||||
|
||||
在 `<head>` 標籤中添加錯誤處理腳本:
|
||||
|
||||
```html
|
||||
<script src="error_handler.js"></script>
|
||||
```
|
||||
|
||||
### 2. 選擇 LLM API
|
||||
|
||||
如果想使用特定的 LLM API,可以修改調用:
|
||||
|
||||
```javascript
|
||||
// 使用 Gemini(默認)
|
||||
const result = await callClaudeAPI(prompt, 'gemini');
|
||||
|
||||
// 使用 DeepSeek
|
||||
const result = await callClaudeAPI(prompt, 'deepseek');
|
||||
|
||||
// 使用 OpenAI
|
||||
const result = await callClaudeAPI(prompt, 'openai');
|
||||
```
|
||||
|
||||
### 3. 添加 API 選擇器
|
||||
|
||||
可以在前端添加一個下拉選單,讓用戶選擇使用哪個 LLM API:
|
||||
|
||||
```html
|
||||
<select id="llm-selector">
|
||||
<option value="gemini">Google Gemini</option>
|
||||
<option value="deepseek">DeepSeek</option>
|
||||
<option value="openai">OpenAI</option>
|
||||
</select>
|
||||
```
|
||||
|
||||
然後在調用時使用:
|
||||
```javascript
|
||||
const api = document.getElementById('llm-selector').value;
|
||||
const result = await callClaudeAPI(prompt, api);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🆘 仍然遇到問題?
|
||||
|
||||
### 檢查清單
|
||||
|
||||
- [ ] Flask 後端是否正在運行?
|
||||
- [ ] 是否使用 `app_updated.py` 而不是 `app.py`?
|
||||
- [ ] .env 文件中是否配置了至少一個 API Key?
|
||||
- [ ] API Key 是否有效?(可以在 http://localhost:5000/api-test 測試)
|
||||
- [ ] 是否已修改 index.html 中的 `callClaudeAPI` 函數?
|
||||
- [ ] 瀏覽器是否已重新載入頁面(Ctrl+F5)?
|
||||
- [ ] 瀏覽器控制台是否還有其他錯誤?
|
||||
|
||||
### 調試步驟
|
||||
|
||||
1. **測試後端 API**:
|
||||
```bash
|
||||
curl -X POST http://localhost:5000/api/llm/generate \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"api":"gemini","prompt":"測試","max_tokens":100}'
|
||||
```
|
||||
|
||||
2. **檢查 Flask 日誌**: 查看終端中 Flask 的輸出
|
||||
|
||||
3. **瀏覽器控制台**: 查看詳細的錯誤訊息
|
||||
|
||||
4. **測試頁面**: 訪問 http://localhost:5000/api-test 確認 API 配置
|
||||
|
||||
---
|
||||
|
||||
## 📚 相關文件
|
||||
|
||||
- [SETUP.md](./SETUP.md) - 完整安裝指南
|
||||
- [fix_cors.js](./fix_cors.js) - 詳細修正代碼
|
||||
- [error_handler.js](./error_handler.js) - 全局錯誤處理
|
||||
- [app_updated.py](./app_updated.py) - 包含 LLM 端點的 Flask 後端
|
||||
|
||||
---
|
||||
|
||||
**文件版本**: 1.0
|
||||
**最後更新**: 2024-12-04
|
||||
**問題類型**: CORS 跨域請求錯誤
|
||||
**解決狀態**: ✅ 已提供完整解決方案
|
||||
247
docs/Check.md
Normal file
247
docs/Check.md
Normal file
@@ -0,0 +1,247 @@
|
||||
# HR Position Management System - 資安檢核報告
|
||||
|
||||
**專案名稱**: HR Position Management System
|
||||
**檢核日期**: 2024-12-04
|
||||
**版本**: v2.1
|
||||
|
||||
---
|
||||
|
||||
## 一、專案結構與依賴檢查
|
||||
|
||||
### 1. 入口檔案
|
||||
- ✅ 有 `start_server.py` 作為主要入口檔案
|
||||
- ✅ 有 `index.html` 作為前端入口
|
||||
|
||||
### 2. 專案結構
|
||||
- ⚠️ 無明確的資料夾結構(app、routes、static、templates 等)
|
||||
- ❌ 所有檔案皆放在根目錄,缺乏模組化架構
|
||||
- **建議**: 建立標準專案結構如 `/static`、`/templates`、`/routes`、`/config`
|
||||
|
||||
### 3. 依賴檔案
|
||||
- ✅ 有 `requirements.txt`
|
||||
- ❌ 無 `package.json`(前端無使用 Node.js 打包工具)
|
||||
|
||||
### 4. 使用框架
|
||||
- ✅ 後端使用 **Flask** 框架
|
||||
- ✅ 使用 **flask_cors** 處理跨域
|
||||
- ✅ 使用 **python-dotenv** 讀取環境變數
|
||||
|
||||
### 5. README.md
|
||||
- ✅ 有 `README.md` 檔案
|
||||
- ✅ 包含安裝與啟動說明
|
||||
- ✅ 包含 API 端點說明
|
||||
|
||||
### 6. 依賴套件安全性
|
||||
- ⚠️ 未指定套件版本號碼,可能造成相容性問題
|
||||
- **建議**: 在 requirements.txt 中指定明確版本號
|
||||
|
||||
### 7. 監聽位址與端口
|
||||
- ⚠️ **start_server.py:286** - `app.run(host='0.0.0.0', port=5000, debug=True)`
|
||||
- ❌ **host='0.0.0.0'** 會監聽所有網路介面,存在安全風險
|
||||
- ❌ **debug=True** 在生產環境中不應開啟
|
||||
- **建議**:
|
||||
- 開發環境使用 `host='127.0.0.1'`
|
||||
- 生產環境從環境變數讀取 host/port
|
||||
- 移除或設定 `debug=False`
|
||||
|
||||
---
|
||||
|
||||
## 二、安全性與環境變數檢核
|
||||
|
||||
### 1. 環境變數檔案
|
||||
- ✅ 存在 `.env` 檔案
|
||||
- ❌ 無 `.env.example` 範本檔案供其他開發者參考
|
||||
- **建議**: 建立 `.env.example`,內含變數名稱但無實際值
|
||||
|
||||
### 2. .gitignore 設定
|
||||
- ✅ 有 `.gitignore` 檔案
|
||||
- ✅ 排除 `.env`
|
||||
- ✅ 排除 `__pycache__`
|
||||
- ✅ 排除 `*.log`
|
||||
- ✅ 排除 `node_modules`
|
||||
- ✅ 排除備份檔案 `*.backup`
|
||||
- ✅ 設定排除 `.gitignore` 本身
|
||||
|
||||
### 3. 資料庫連線設定
|
||||
- ✅ 有 MySQL 資料庫設定(DB_HOST、DB_PORT、DB_NAME、DB_USER、DB_PASSWORD)
|
||||
- ⚠️ 目前使用記憶體模擬資料庫,未實際連接 MySQL
|
||||
|
||||
### 4. 敏感資訊硬編碼檢查
|
||||
- ❌ **嚴重問題** - `.env` 檔案中包含實際敏感資訊:
|
||||
- `DB_PASSWORD=Bb123456` - 資料庫密碼
|
||||
- `GITEA_PASSWORD=!QAZ2wsx` - Gitea 密碼
|
||||
- `GITEA_TOKEN=9e0a888d1a25bde9cf2ad5dff2bb7ee6d68d6ff0` - Gitea Token
|
||||
- `GEMINI_API_KEY=AIzaSy...` - Google API Key
|
||||
- ❌ `SECRET_KEY=your_secret_key_here_change_in_production` - Flask 密鑰使用預設值
|
||||
- **建議**:
|
||||
1. 立即更換所有已洩露的密碼和 Token
|
||||
2. 確保 `.env` 永不提交到版本控制
|
||||
3. 使用環境變數或密鑰管理服務
|
||||
|
||||
### 5. SQL Injection / XSS 防護
|
||||
- ⚠️ **SQL Injection**: 目前使用記憶體字典,未使用 ORM 或參數化查詢
|
||||
- ⚠️ **XSS 防護**: 前端直接將 API 回傳資料插入 DOM,存在潛在 XSS 風險
|
||||
- **建議**:
|
||||
1. 使用 SQLAlchemy ORM 進行資料庫操作
|
||||
2. 前端使用 `textContent` 替代 `innerHTML`
|
||||
3. 對使用者輸入進行驗證和消毒
|
||||
|
||||
### 6. 其他安全疑慮
|
||||
- ❌ **CORS 設定過於寬鬆**: `CORS(app)` 允許所有來源
|
||||
- ❌ **無身分驗證機制**: API 端點無需認證即可存取
|
||||
- ❌ **無速率限制**: 未防範暴力攻擊或 DDoS
|
||||
- ❌ **無 HTTPS**: 敏感資料可能以明文傳輸
|
||||
- ❌ **無 CSRF 保護**: 表單未使用 CSRF Token
|
||||
- **建議**:
|
||||
1. 設定 CORS 允許的特定來源
|
||||
2. 實作 JWT 或 Session 認證
|
||||
3. 加入 rate limiting
|
||||
4. 生產環境強制使用 HTTPS
|
||||
5. 實作 CSRF 保護
|
||||
|
||||
---
|
||||
|
||||
## 三、程式品質與可維護性
|
||||
|
||||
### 1. 錯誤處理
|
||||
- ✅ **start_server.py** 有 try/except 錯誤處理
|
||||
- ✅ 有全域錯誤處理器 (`@app.errorhandler(404)`, `@app.errorhandler(500)`)
|
||||
- ✅ **llm_config.py** 有完整的錯誤處理
|
||||
- ⚠️ 前端錯誤處理可改進,部分情況直接使用 console.log
|
||||
|
||||
### 2. 程式碼品質
|
||||
- ⚠️ 程式碼未遵循 PEP8 完整規範
|
||||
- ⚠️ 缺少單元測試
|
||||
- **建議**: 加入 pytest 單元測試
|
||||
|
||||
---
|
||||
|
||||
## 四、檢核結果總覽
|
||||
|
||||
| 類別 | 項目 | 狀態 |
|
||||
|------|------|------|
|
||||
| **專案結構** | 入口檔案 | ✅ |
|
||||
| | 專案結構 | ⚠️ |
|
||||
| | requirements.txt | ✅ |
|
||||
| | 框架識別 | ✅ |
|
||||
| | README.md | ✅ |
|
||||
| | 依賴安全性 | ⚠️ |
|
||||
| | 監聽位址 | ❌ |
|
||||
| **安全性** | .env 檔案 | ✅ |
|
||||
| | .gitignore | ✅ |
|
||||
| | DB 連線設定 | ⚠️ |
|
||||
| | 敏感資訊硬編碼 | ❌ |
|
||||
| | SQL Injection 防護 | ⚠️ |
|
||||
| | XSS 防護 | ⚠️ |
|
||||
| | CORS 設定 | ❌ |
|
||||
| | 身分驗證 | ❌ |
|
||||
| | CSRF 保護 | ❌ |
|
||||
| **程式品質** | 錯誤處理 | ✅ |
|
||||
| | 程式碼品質 | ⚠️ |
|
||||
|
||||
---
|
||||
|
||||
## 五、評分
|
||||
|
||||
| 評分項目 | 滿分 | 得分 | 說明 |
|
||||
|----------|------|------|------|
|
||||
| 專案結構與依賴 | 20 | 14 | 缺乏模組化架構、監聽設定不安全 |
|
||||
| 環境變數管理 | 15 | 10 | 有 .env 但包含實際敏感資訊 |
|
||||
| .gitignore 設定 | 10 | 10 | 設定完整 |
|
||||
| 資料庫安全 | 15 | 8 | 未使用 ORM、無參數化查詢 |
|
||||
| API 安全性 | 20 | 5 | 無認證、CORS 過寬、無速率限制 |
|
||||
| XSS/CSRF 防護 | 10 | 4 | 缺乏完整防護 |
|
||||
| 錯誤處理 | 10 | 8 | 大致完整,前端可改進 |
|
||||
|
||||
### **總分: 59 / 100**
|
||||
|
||||
---
|
||||
|
||||
## 六、修改建議優先順序
|
||||
|
||||
### 🔴 高優先(立即處理)
|
||||
|
||||
1. **更換所有已洩露的憑證**
|
||||
- 更換 DB_PASSWORD
|
||||
- 更換 GITEA_PASSWORD 和 GITEA_TOKEN
|
||||
- 重新產生 GEMINI_API_KEY
|
||||
- 設定強度足夠的 SECRET_KEY
|
||||
|
||||
2. **修改伺服器監聽設定**
|
||||
```python
|
||||
# start_server.py
|
||||
if __name__ == '__main__':
|
||||
host = os.getenv('FLASK_HOST', '127.0.0.1')
|
||||
port = int(os.getenv('FLASK_PORT', 5000))
|
||||
debug = os.getenv('FLASK_DEBUG', 'false').lower() == 'true'
|
||||
app.run(host=host, port=port, debug=debug)
|
||||
```
|
||||
|
||||
3. **建立 .env.example**
|
||||
```env
|
||||
DB_HOST=your_db_host
|
||||
DB_PORT=3306
|
||||
DB_NAME=your_db_name
|
||||
DB_USER=your_db_user
|
||||
DB_PASSWORD=your_db_password
|
||||
GEMINI_API_KEY=your_api_key
|
||||
SECRET_KEY=generate_a_secure_random_key
|
||||
```
|
||||
|
||||
### 🟡 中優先(儘快處理)
|
||||
|
||||
4. **限制 CORS 來源**
|
||||
```python
|
||||
CORS(app, origins=['http://localhost:5000', 'https://your-domain.com'])
|
||||
```
|
||||
|
||||
5. **實作基本身分驗證**
|
||||
- 使用 Flask-Login 或 JWT
|
||||
- 保護敏感 API 端點
|
||||
|
||||
6. **使用 ORM 防止 SQL Injection**
|
||||
```python
|
||||
from flask_sqlalchemy import SQLAlchemy
|
||||
db = SQLAlchemy(app)
|
||||
```
|
||||
|
||||
### 🟢 低優先(計畫性改進)
|
||||
|
||||
7. **建立標準專案結構**
|
||||
```
|
||||
hr-position-system/
|
||||
├── app/
|
||||
│ ├── __init__.py
|
||||
│ ├── routes/
|
||||
│ ├── models/
|
||||
│ └── utils/
|
||||
├── static/
|
||||
├── templates/
|
||||
├── config.py
|
||||
└── run.py
|
||||
```
|
||||
|
||||
8. **加入單元測試**
|
||||
|
||||
9. **實作 CSRF 保護**
|
||||
```python
|
||||
from flask_wtf.csrf import CSRFProtect
|
||||
csrf = CSRFProtect(app)
|
||||
```
|
||||
|
||||
10. **加入速率限制**
|
||||
```python
|
||||
from flask_limiter import Limiter
|
||||
limiter = Limiter(app, key_func=get_remote_address)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 七、結論
|
||||
|
||||
此專案目前處於**開發階段**,具備基本功能但存在多項安全隱患。**最緊急的問題是敏感資訊外洩風險**,需立即處理。建議在部署到生產環境前,完成所有高優先和中優先的修改項目。
|
||||
|
||||
---
|
||||
|
||||
**檢核人員**: Claude Code
|
||||
**檢核日期**: 2024-12-04
|
||||
286
docs/ID重命名對照表.md
Normal file
286
docs/ID重命名對照表.md
Normal file
@@ -0,0 +1,286 @@
|
||||
# HTML ID 重命名對照表
|
||||
|
||||
## 變更概覽
|
||||
- **總計需變更:72 個**
|
||||
- **無需變更:13 個**
|
||||
- **總欄位數:85 個**
|
||||
|
||||
---
|
||||
|
||||
## 模組 1: 崗位基礎資料 - 基礎資料頁籤
|
||||
**需變更:15 / 15**
|
||||
|
||||
| 舊 ID | 新 ID | 欄位名稱 | 備註 |
|
||||
|-------|-------|---------|------|
|
||||
| `businessUnit` | `pos_businessUnit` | 事業體 (Business Unit) | |
|
||||
| `division` | `pos_division` | 處級單位 (Division) | |
|
||||
| `department` | `pos_department` | 部級單位 (Department) | |
|
||||
| `section` | `pos_section` | 課級單位 (Section) | |
|
||||
| `positionCode` | `pos_code` | 崗位編號 | 必填欄位 |
|
||||
| `effectiveDate` | `pos_effectiveDate` | 生效日期 | |
|
||||
| `positionName` | `pos_name` | 崗位名稱 | 必填欄位 |
|
||||
| `positionLevel` | `pos_level` | 崗位級別 | |
|
||||
| `positionCategory` | `pos_category` | 崗位類別 | onchange 事件 |
|
||||
| `positionCategoryName` | `pos_categoryName` | 崗位類別名稱 | readonly |
|
||||
| `positionNature` | `pos_type` | 崗位性質 | onchange 事件,注意:資料庫改為 positionType |
|
||||
| `positionNatureName` | `pos_typeName` | 崗位性質名稱 | readonly,資料庫改為 positionTypeName |
|
||||
| `headcount` | `pos_headcount` | 編制人數 | |
|
||||
| `positionDesc` | `pos_desc` | 崗位描述 | 資料庫改為 description |
|
||||
| `positionRemark` | `pos_remark` | 崗位備注 | 資料庫改為 remark |
|
||||
|
||||
---
|
||||
|
||||
## 模組 2: 崗位基礎資料 - 招聘要求頁籤
|
||||
**需變更:18 / 18**
|
||||
|
||||
| 舊 ID | 新 ID | 欄位名稱 | 備註 |
|
||||
|-------|-------|---------|------|
|
||||
| `minEducation` | `rec_eduLevel` | 最低學歷 | 資料庫改為 educationLevel |
|
||||
| `requiredGender` | `rec_gender` | 要求性別 | |
|
||||
| `salaryRange` | `rec_salaryRange` | 薪酬范圍 | |
|
||||
| `workExperience` | `rec_expYears` | 工作經驗 | 資料庫改為 experienceYears |
|
||||
| `minAge` | `rec_minAge` | 最小年齡 | |
|
||||
| `maxAge` | `rec_maxAge` | 最大年齡 | |
|
||||
| `jobType` | `rec_jobType` | 工作性質 | |
|
||||
| `recruitPosition` | `rec_position` | 招聘職位 | 資料庫改為 recruitPosition |
|
||||
| `jobTitle` | `rec_jobTitle` | 職位名稱(對外) | |
|
||||
| `superiorPosition` | `rec_superiorCode` | 上級崗位編號 | 資料庫改為 superiorPositionCode |
|
||||
| `jobDesc` | `rec_jobDesc` | 職位描述(JD) | 資料庫改為 recruitJobDesc |
|
||||
| `positionReq` | `rec_positionReq` | 崗位要求(Req) | 資料庫改為 recruitRequirements |
|
||||
| `titleReq` | `rec_certReq` | 職稱要求 | 語義更正為「證照要求」,資料庫改為 certRequirements |
|
||||
| `majorReq` | `rec_majorReq` | 專業要求 | 資料庫改為 majorRequirements |
|
||||
| `skillReq` | `rec_skillReq` | 技能要求 | 資料庫改為 skillRequirements |
|
||||
| `langReq` | `rec_langReq` | 語言要求 | 資料庫改為 langRequirements |
|
||||
| `otherReq` | `rec_otherReq` | 其他要求 | 資料庫改為 otherRequirements |
|
||||
| `recruitRemark` | `rec_remark` | 招聘備注 | 資料庫改為 recruitRemark |
|
||||
|
||||
---
|
||||
|
||||
## 模組 3: 職務基礎資料
|
||||
**需變更:12 / 12**
|
||||
|
||||
| 舊 ID | 新 ID | 欄位名稱 | 備註 |
|
||||
|-------|-------|---------|------|
|
||||
| `jobCategoryCode` | `job_category` | 職務類別編號 | 必填欄位,onchange 事件 |
|
||||
| `jobCategoryName` | `job_categoryName` | 職務類別名稱 | readonly |
|
||||
| `jobCode` | `job_code` | 職務編號 | 必填欄位 |
|
||||
| `jobName` | `job_name` | 職務名稱 | 必填欄位 |
|
||||
| `jobNameEn` | `job_nameEn` | 職務英文 | |
|
||||
| `jobEffectiveDate` | `job_effectiveDate` | 生效日期 | 資料庫改為 effectiveDate |
|
||||
| `jobLevel` | `job_level` | 職務層級 | 敏感欄位 |
|
||||
| `jobHeadcount` | `job_headcount` | 編制人數 | 資料庫改為 headcount |
|
||||
| `jobSortOrder` | `job_sortOrder` | 排列順序 | 資料庫改為 sortOrder |
|
||||
| `hasAttendanceBonus` | `job_hasAttBonus` | 全勤獎金 | Toggle Switch |
|
||||
| `hasHousingAllowance` | `job_hasHouseAllow` | 住房補貼 | Toggle Switch |
|
||||
| `jobRemark` | `job_remark` | 職務備注 | 資料庫改為 remark |
|
||||
|
||||
---
|
||||
|
||||
## 模組 4: 部門職責
|
||||
**需變更:19 / 19**
|
||||
|
||||
| 舊 ID | 新 ID | 欄位名稱 | 備註 |
|
||||
|-------|-------|---------|------|
|
||||
| `deptFunctionCode` | `df_code` | 部門職責編號 | 必填欄位,資料庫改為 dfCode |
|
||||
| `deptFunctionName` | `df_name` | 部門職責名稱 | 必填欄位,資料庫改為 dfName |
|
||||
| `deptFunctionBU` | `df_businessUnit` | 事業體 (第1個) | 必填欄位,已合併重複欄位 |
|
||||
| `deptFunc_businessUnit` | `df_businessUnit` | 事業體 (第2個) | **合併為同一欄位** |
|
||||
| `deptFunc_division` | `df_division` | 處級單位 | 必填欄位 |
|
||||
| `deptFunc_department` | `df_department` | 部級單位 | 必填欄位 |
|
||||
| `deptFunc_section` | `df_section` | 課級單位 | |
|
||||
| `deptFunc_positionTitle` | `df_posTitle` | 崗位名稱 | 必填欄位,資料庫改為 positionTitle |
|
||||
| `deptFunc_positionLevel` | `df_posLevel` | 崗位級別 | 資料庫保持 positionLevel |
|
||||
| `deptManager` | `df_managerTitle` | 部門主管職稱 | 資料庫改為 managerTitle |
|
||||
| `deptFunctionEffectiveDate` | `df_effectiveDate` | 生效日期 | 必填欄位,資料庫改為 effectiveDate |
|
||||
| `deptHeadcount` | `df_headcountLimit` | 部門人數上限 | 資料庫改為 headcountLimit |
|
||||
| `deptStatus` | `df_status` | 部門狀態 | 資料庫改為 status |
|
||||
| `deptMission` | `df_mission` | 部門使命 | 資料庫改為 mission |
|
||||
| `deptVision` | `df_vision` | 部門願景 | 資料庫改為 vision |
|
||||
| `deptCoreFunctions` | `df_coreFunc` | 核心職責 | 必填欄位,資料庫改為 coreFunctions |
|
||||
| `deptKPIs` | `df_kpis` | 關鍵績效指標 | 資料庫改為 kpis |
|
||||
| `deptCollaboration` | `df_collab` | 協作部門 | 資料庫改為 collaboration |
|
||||
| `deptFunctionRemark` | `df_remark` | 備注 | 資料庫改為 remark |
|
||||
|
||||
**特別注意:** 原本有兩個事業體欄位 (`deptFunctionBU` 和 `deptFunc_businessUnit`),新規範已合併為單一欄位 `df_businessUnit`。
|
||||
|
||||
---
|
||||
|
||||
## 模組 5: 崗位描述 - 基本信息
|
||||
**需變更:3 / 4**
|
||||
|
||||
| 舊 ID | 新 ID | 欄位名稱 | 備註 |
|
||||
|-------|-------|---------|------|
|
||||
| `jd_empNo` | `jd_empNo` | 工號 | ✓ 無需變更 |
|
||||
| `jd_empName` | `jd_empName` | 姓名 | ✓ 無需變更 |
|
||||
| `jd_positionCode` | `jd_posCode` | 崗位代碼 | |
|
||||
| `jd_versionDate` | `jd_versionDate` | 版本更新日期 | ✓ 無需變更 |
|
||||
|
||||
---
|
||||
|
||||
## 模組 6: 崗位描述 - 崗位基本信息
|
||||
**需變更:10 / 14**
|
||||
|
||||
| 舊 ID | 新 ID | 欄位名稱 | 備註 |
|
||||
|-------|-------|---------|------|
|
||||
| `jd_positionName` | `jd_posName` | 崗位名稱 | |
|
||||
| `jd_businessUnit` | `jd_businessUnit` | 事業體 | ✓ 無需變更 |
|
||||
| `jd_division` | `jd_division` | 處級單位 | ✓ 無需變更 |
|
||||
| `jd_department` | `jd_department` | 部級單位 | ✓ 無需變更 |
|
||||
| `jd_section` | `jd_section` | 課級單位 | ✓ 無需變更 |
|
||||
| `jd_positionTitle` | `(刪除)` | 崗位名稱 (重複) | 與 positionName 重複,建議刪除 |
|
||||
| `jd_positionLevel` | `jd_posLevel` | 崗位級別 | |
|
||||
| `jd_positionEffectiveDate` | `jd_posEffDate` | 崗位生效日期 | |
|
||||
| `jd_directSupervisor` | `jd_supervisor` | 直接領導職務 | |
|
||||
| `jd_positionGradeJob` | `jd_gradeJob` | 崗位職等&職務 | Modal 選擇器 |
|
||||
| `jd_reportTo` | `jd_reportTo` | 匯報對象職務 | ✓ 無需變更 |
|
||||
| `jd_directReports` | `jd_directReports` | 直接下級 | ✓ 無需變更 |
|
||||
| `jd_workLocation` | `jd_location` | 任職地點 | |
|
||||
| `jd_empAttribute` | `jd_empAttr` | 員工屬性 | |
|
||||
|
||||
---
|
||||
|
||||
## 模組 7: 崗位描述 - 部門職責資訊
|
||||
**需變更:3 / 5**
|
||||
|
||||
| 舊 ID | 新 ID | 欄位名稱 | 備註 |
|
||||
|-------|-------|---------|------|
|
||||
| `jd_deptFunctionCode` | `jd_dfCode` | 部門職責編號 | readonly |
|
||||
| `jd_deptFunctionBU` | `(保留)` | 事業體 | 建議保留或改為 jd_dfBU |
|
||||
| `jd_deptMission` | `jd_deptMission` | 部門使命 | ✓ 無需變更 |
|
||||
| `jd_deptCoreFunctions` | `jd_deptCoreFunctions` | 部門核心職責 | ✓ 無需變更 |
|
||||
| `jd_deptKPIs` | `jd_deptKPIs` | 部門 KPIs | ✓ 無需變更 |
|
||||
|
||||
**說明:** 這些是 readonly 欄位,自動帶入,可保持現有命名以維持與來源資料的一致性。
|
||||
|
||||
---
|
||||
|
||||
## 模組 8: 崗位描述 - 職責描述
|
||||
**需變更:1 / 2**
|
||||
|
||||
| 舊 ID | 新 ID | 欄位名稱 | 備註 |
|
||||
|-------|-------|---------|------|
|
||||
| `jd_positionPurpose` | `jd_purpose` | 崗位設置目的 | |
|
||||
| `jd_mainResponsibilities` | `jd_mainResp` | 主要崗位職責 | Numbered textarea |
|
||||
|
||||
---
|
||||
|
||||
## 模組 9: 崗位描述 - 崗位要求
|
||||
**需變更:5 / 5**
|
||||
|
||||
| 舊 ID | 新 ID | 欄位名稱 | 備註 |
|
||||
|-------|-------|---------|------|
|
||||
| `jd_education` | `jd_eduLevel` | 教育程度 | |
|
||||
| `jd_basicSkills` | `jd_basicSkills` | 基本技能 | ✓ 無需變更 |
|
||||
| `jd_professionalKnowledge` | `jd_proKnowledge` | 專業知識 | |
|
||||
| `jd_workExperienceReq` | `jd_expReq` | 工作經驗 | |
|
||||
| `jd_otherRequirements` | `jd_otherReq` | 其他 | |
|
||||
|
||||
---
|
||||
|
||||
## 重要變更說明
|
||||
|
||||
### 1. 前綴標準化
|
||||
所有欄位統一採用模組前綴:
|
||||
- `pos_` - 崗位基礎資料
|
||||
- `rec_` - 招聘要求
|
||||
- `job_` - 職務基礎資料
|
||||
- `df_` - 部門職責
|
||||
- `jd_` - 崗位描述
|
||||
|
||||
### 2. 命名簡化
|
||||
- `positionCode` → `pos_code`
|
||||
- `positionName` → `pos_name`
|
||||
- `positionCategory` → `pos_category`
|
||||
- `positionNature` → `pos_type` (語義更精確)
|
||||
- `hasAttendanceBonus` → `job_hasAttBonus` (縮寫簡化)
|
||||
|
||||
### 3. 語義改善
|
||||
- `titleReq` → `rec_certReq` (職稱要求 → 證照要求)
|
||||
- `positionNature` → `pos_type` (性質 → 類型,更符合英文語義)
|
||||
- `workExperience` → `rec_expYears` (經驗年數更明確)
|
||||
|
||||
### 4. 資料庫欄位同步變更
|
||||
部分 HTML ID 變更時,資料庫欄位名稱也需要對應修改:
|
||||
- `positionNature` → `positionType`
|
||||
- `positionDesc` → `description`
|
||||
- `positionRemark` → `remark`
|
||||
- `minEducation` → `educationLevel`
|
||||
|
||||
### 5. 重複欄位合併
|
||||
部門職責模組中的兩個事業體欄位:
|
||||
- 原:`deptFunctionBU` 和 `deptFunc_businessUnit`
|
||||
- 新:統一為 `df_businessUnit`
|
||||
|
||||
---
|
||||
|
||||
## 實施建議
|
||||
|
||||
### 階段 1: 資料庫遷移
|
||||
1. 執行資料庫欄位重命名 SQL 腳本
|
||||
2. 更新所有 ORM Model 定義
|
||||
3. 更新 API 回應的欄位名稱
|
||||
|
||||
### 階段 2: 前端更新
|
||||
1. 全局搜尋替換 HTML ID
|
||||
2. 更新所有 JavaScript 選擇器
|
||||
3. 更新 CSS 樣式選擇器
|
||||
4. 更新表單驗證邏輯
|
||||
|
||||
### 階段 3: 測試驗證
|
||||
1. 單元測試:驗證所有表單欄位綁定
|
||||
2. 整合測試:驗證資料儲存與讀取
|
||||
3. E2E 測試:完整流程測試
|
||||
4. 回歸測試:確保無遺漏欄位
|
||||
|
||||
### 階段 4: 文檔更新
|
||||
1. API 文檔更新
|
||||
2. 資料字典更新
|
||||
3. 開發指南更新
|
||||
4. 使用者手冊更新(如有影響)
|
||||
|
||||
---
|
||||
|
||||
## 風險評估
|
||||
|
||||
### 高風險變更 (必填欄位)
|
||||
- `positionCode` → `pos_code`
|
||||
- `positionName` → `pos_name`
|
||||
- `jobCode` → `job_code`
|
||||
- `jobName` → `job_name`
|
||||
- `deptFunctionCode` → `df_code`
|
||||
|
||||
**建議:** 優先測試這些欄位的儲存與驗證邏輯。
|
||||
|
||||
### 中風險變更 (聯動欄位)
|
||||
- 組織結構欄位:`businessUnit`, `division`, `department`, `section`
|
||||
- 自動帶出欄位:`positionCategoryName`, `positionNatureName`
|
||||
|
||||
**建議:** 仔細測試聯動邏輯和 onchange 事件。
|
||||
|
||||
### 低風險變更 (選填欄位)
|
||||
- 備注類欄位
|
||||
- 描述類欄位
|
||||
|
||||
---
|
||||
|
||||
## 檢查清單
|
||||
|
||||
- [ ] 資料庫遷移腳本已準備
|
||||
- [ ] Model 定義已更新
|
||||
- [ ] HTML 表單 ID 已更新
|
||||
- [ ] JavaScript 選擇器已更新
|
||||
- [ ] CSS 樣式已更新
|
||||
- [ ] API 端點已更新
|
||||
- [ ] 驗證邏輯已更新
|
||||
- [ ] 單元測試已通過
|
||||
- [ ] 整合測試已通過
|
||||
- [ ] E2E 測試已通過
|
||||
- [ ] 文檔已更新
|
||||
- [ ] 程式碼審查已完成
|
||||
|
||||
---
|
||||
|
||||
**文檔版本:** v1.0
|
||||
**建立日期:** 2025-12-06
|
||||
**最後更新:** 2025-12-06
|
||||
**維護者:** 系統開發團隊
|
||||
1147
docs/SDD.md
Normal file
1147
docs/SDD.md
Normal file
File diff suppressed because it is too large
Load Diff
1120
docs/SDD_代碼分離優化.md
Normal file
1120
docs/SDD_代碼分離優化.md
Normal file
File diff suppressed because it is too large
Load Diff
438
docs/SETUP.md
Normal file
438
docs/SETUP.md
Normal file
@@ -0,0 +1,438 @@
|
||||
# HR 基礎資料維護系統 - 安裝與配置指南
|
||||
|
||||
## 📋 目錄
|
||||
|
||||
1. [系統需求](#系統需求)
|
||||
2. [環境配置](#環境配置)
|
||||
3. [資料庫設置](#資料庫設置)
|
||||
4. [Gitea 版本控制設置](#gitea-版本控制設置)
|
||||
5. [LLM API 配置](#llm-api-配置)
|
||||
6. [啟動系統](#啟動系統)
|
||||
7. [功能測試](#功能測試)
|
||||
8. [常見問題](#常見問題)
|
||||
|
||||
---
|
||||
|
||||
## 系統需求
|
||||
|
||||
### 軟體需求
|
||||
|
||||
- **Python**: 3.8 或更高版本
|
||||
- **MySQL**: 5.7 或更高版本
|
||||
- **Git**: 2.0 或更高版本 (用於版本控制)
|
||||
- **現代瀏覽器**: Chrome, Firefox, Edge (最新版本)
|
||||
|
||||
### 硬體需求
|
||||
|
||||
- **記憶體**: 最少 2GB RAM
|
||||
- **硬碟**: 最少 500MB 可用空間
|
||||
- **網路**: 穩定的網際網路連線 (用於 LLM API)
|
||||
|
||||
---
|
||||
|
||||
## 環境配置
|
||||
|
||||
### 1. 複製或下載項目
|
||||
|
||||
```bash
|
||||
cd d:/00001_Vibe_coding/1204剛為
|
||||
```
|
||||
|
||||
### 2. 創建虛擬環境 (建議)
|
||||
|
||||
```bash
|
||||
# Windows
|
||||
python -m venv venv
|
||||
venv\Scripts\activate
|
||||
|
||||
# Linux/Mac
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate
|
||||
```
|
||||
|
||||
### 3. 安裝依賴套件
|
||||
|
||||
```bash
|
||||
pip install -r requirements_full.txt
|
||||
```
|
||||
|
||||
如果出現錯誤,可以嘗試逐個安裝:
|
||||
|
||||
```bash
|
||||
pip install flask flask-cors pymysql python-dotenv requests gitpython
|
||||
```
|
||||
|
||||
### 4. 配置環境變數
|
||||
|
||||
項目根目錄下已有 [.env](./.env) 文件,請根據實際情況修改:
|
||||
|
||||
```env
|
||||
# MySQL Database Configuration
|
||||
DB_HOST=mysql.theaken.com
|
||||
DB_PORT=33306
|
||||
DB_NAME=db_A102
|
||||
DB_USER=A102
|
||||
DB_PASSWORD=Bb123456
|
||||
|
||||
# Gitea Version Control Configuration
|
||||
GITEA_URL=https://gitea.theaken.com/
|
||||
GITEA_USER=donald
|
||||
GITEA_PASSWORD=!QAZ2wsx
|
||||
GITEA_TOKEN=9e0a888d1a25bde9cf2ad5dff2bb7ee6d68d6ff0
|
||||
|
||||
# LLM API Keys (需要自行申請並填寫)
|
||||
GEMINI_API_KEY=your_gemini_api_key_here
|
||||
DEEPSEEK_API_KEY=your_deepseek_api_key_here
|
||||
OPENAI_API_KEY=your_openai_api_key_here
|
||||
```
|
||||
|
||||
⚠️ **重要**: `.env` 文件包含敏感資訊,已加入 `.gitignore`,請勿上傳到版本控制系統。
|
||||
|
||||
---
|
||||
|
||||
## 資料庫設置
|
||||
|
||||
### 1. 測試資料庫連線
|
||||
|
||||
```bash
|
||||
python init_database.py
|
||||
```
|
||||
|
||||
此腳本會:
|
||||
- 測試資料庫連線
|
||||
- 創建 `hr_position_system` 資料庫架構
|
||||
- 建立所有必要的資料表
|
||||
- 插入參照資料
|
||||
|
||||
### 2. 驗證資料表
|
||||
|
||||
成功執行後,應該會看到以下資料表:
|
||||
|
||||
- `positions` - 崗位基礎資料表
|
||||
- `jobs` - 職務基礎資料表
|
||||
- `job_descriptions` - 崗位描述表
|
||||
- `reference_codes` - 參照資料代碼表
|
||||
- `audit_logs` - 審計日誌表
|
||||
|
||||
### 3. 手動執行 SQL (可選)
|
||||
|
||||
如果自動腳本失敗,可以手動執行:
|
||||
|
||||
```bash
|
||||
# 使用 MySQL 客戶端
|
||||
mysql -h mysql.theaken.com -P 33306 -u A102 -p db_A102 < database_schema.sql
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Gitea 版本控制設置
|
||||
|
||||
### 1. 測試 Gitea 連線
|
||||
|
||||
```bash
|
||||
python init_gitea.py
|
||||
```
|
||||
|
||||
此腳本會:
|
||||
- 測試 Gitea 伺服器連線
|
||||
- 創建新的 Git 倉庫 (如果不存在)
|
||||
- 配置本地 Git remote
|
||||
- 創建初始提交
|
||||
|
||||
### 2. 推送到 Gitea
|
||||
|
||||
```bash
|
||||
git push -u origin main
|
||||
```
|
||||
|
||||
### 3. 訪問 Gitea 倉庫
|
||||
|
||||
在瀏覽器中訪問: [https://gitea.theaken.com/donald/hr-position-system](https://gitea.theaken.com/donald/hr-position-system)
|
||||
|
||||
---
|
||||
|
||||
## LLM API 配置
|
||||
|
||||
系統支援三種 LLM API:
|
||||
|
||||
### 1. Google Gemini
|
||||
|
||||
1. 訪問 [Google AI Studio](https://makersuite.google.com/app/apikey)
|
||||
2. 創建 API Key
|
||||
3. 將 API Key 填入 `.env` 文件的 `GEMINI_API_KEY`
|
||||
|
||||
### 2. DeepSeek
|
||||
|
||||
1. 訪問 [DeepSeek 官網](https://www.deepseek.com/)
|
||||
2. 註冊並獲取 API Key
|
||||
3. 將 API Key 填入 `.env` 文件的 `DEEPSEEK_API_KEY`
|
||||
|
||||
### 3. OpenAI
|
||||
|
||||
1. 訪問 [OpenAI Platform](https://platform.openai.com/api-keys)
|
||||
2. 創建 API Key
|
||||
3. 將 API Key 填入 `.env` 文件的 `OPENAI_API_KEY`
|
||||
|
||||
### 4. 測試 LLM API
|
||||
|
||||
```bash
|
||||
python llm_config.py
|
||||
```
|
||||
|
||||
此腳本會測試所有已配置的 API 連線狀態。
|
||||
|
||||
---
|
||||
|
||||
## 啟動系統
|
||||
|
||||
### 方法 1: 使用更新版的 app (包含 LLM 功能)
|
||||
|
||||
```bash
|
||||
# 備份原有的 app.py
|
||||
mv app.py app_original.py
|
||||
|
||||
# 使用新版 app
|
||||
mv app_updated.py app.py
|
||||
|
||||
# 啟動系統
|
||||
python app.py
|
||||
```
|
||||
|
||||
### 方法 2: 直接使用更新版
|
||||
|
||||
```bash
|
||||
python app_updated.py
|
||||
```
|
||||
|
||||
### 啟動成功
|
||||
|
||||
您應該會看到類似以下的輸出:
|
||||
|
||||
```
|
||||
╔══════════════════════════════════════════════════════════════╗
|
||||
║ HR 基礎資料維護系統 - Flask Backend ║
|
||||
╠══════════════════════════════════════════════════════════════╣
|
||||
║ 伺服器啟動中... ║
|
||||
║ 訪問網址: http://localhost:5000 ║
|
||||
...
|
||||
╚══════════════════════════════════════════════════════════════╝
|
||||
|
||||
✓ LLM 功能已啟用
|
||||
已配置的 API: gemini, deepseek, openai
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 功能測試
|
||||
|
||||
### 1. 訪問主頁面
|
||||
|
||||
在瀏覽器中打開: [http://localhost:5000](http://localhost:5000)
|
||||
|
||||
### 2. 測試 LLM API 連線
|
||||
|
||||
訪問 API 測試頁面: [http://localhost:5000/api-test](http://localhost:5000/api-test)
|
||||
|
||||
在此頁面可以:
|
||||
- 查看所有 LLM API 配置狀態
|
||||
- 單獨測試每個 API 連線
|
||||
- 一次測試所有 API
|
||||
|
||||
### 3. 測試 REST API
|
||||
|
||||
使用 Postman 或 curl 測試 API:
|
||||
|
||||
```bash
|
||||
# 獲取崗位列表
|
||||
curl http://localhost:5000/api/positions
|
||||
|
||||
# 獲取職務列表
|
||||
curl http://localhost:5000/api/jobs
|
||||
|
||||
# 測試 LLM API 配置
|
||||
curl http://localhost:5000/api/llm/config
|
||||
|
||||
# 測試 Gemini API
|
||||
curl http://localhost:5000/api/llm/test/gemini
|
||||
```
|
||||
|
||||
### 4. 測試崗位資料 CRUD
|
||||
|
||||
1. **新增崗位**: 點擊「新增崗位」按鈕
|
||||
2. **填寫表單**: 輸入崗位基本資料
|
||||
3. **AI 自動填充**: 點擊「✨ I'm feeling lucky」按鈕
|
||||
4. **保存資料**: 點擊「保存並退出」
|
||||
|
||||
### 5. 測試錯誤處理
|
||||
|
||||
系統已集成全局錯誤處理:
|
||||
|
||||
- 所有 API 錯誤會自動顯示錯誤對話框
|
||||
- 網路錯誤會有友好的提示訊息
|
||||
- 可以在瀏覽器控制台查看詳細錯誤信息
|
||||
|
||||
---
|
||||
|
||||
## 常見問題
|
||||
|
||||
### Q1: 資料庫連線失敗
|
||||
|
||||
**問題**: 執行 `init_database.py` 時出現連線錯誤
|
||||
|
||||
**解決方案**:
|
||||
1. 檢查 `.env` 文件中的資料庫配置是否正確
|
||||
2. 確認資料庫伺服器是否可訪問:
|
||||
```bash
|
||||
ping mysql.theaken.com
|
||||
```
|
||||
3. 檢查防火牆是否阻擋了 33306 端口
|
||||
4. 確認資料庫用戶名和密碼正確
|
||||
|
||||
### Q2: Gitea 推送失敗
|
||||
|
||||
**問題**: `git push` 時要求輸入密碼
|
||||
|
||||
**解決方案**:
|
||||
1. 使用 Token 進行認證:
|
||||
```bash
|
||||
git remote set-url origin https://donald:9e0a888d1a25bde9cf2ad5dff2bb7ee6d68d6ff0@gitea.theaken.com/donald/hr-position-system.git
|
||||
```
|
||||
2. 或配置 Git credential helper
|
||||
|
||||
### Q3: LLM API 測試失敗
|
||||
|
||||
**問題**: LLM API 連線測試顯示失敗
|
||||
|
||||
**解決方案**:
|
||||
1. 檢查 API Key 是否正確填寫在 `.env` 文件中
|
||||
2. 確認 API Key 是否有效 (未過期)
|
||||
3. 檢查網路連線是否正常
|
||||
4. 查看是否有 API 配額限制
|
||||
|
||||
### Q4: 端口被占用
|
||||
|
||||
**問題**: 啟動 Flask 時提示 `Address already in use`
|
||||
|
||||
**解決方案**:
|
||||
1. 更改端口:
|
||||
```python
|
||||
app.run(host='0.0.0.0', port=5001, debug=True)
|
||||
```
|
||||
2. 或關閉占用 5000 端口的進程:
|
||||
```bash
|
||||
# Windows
|
||||
netstat -ano | findstr :5000
|
||||
taskkill /PID <PID> /F
|
||||
|
||||
# Linux/Mac
|
||||
lsof -i :5000
|
||||
kill -9 <PID>
|
||||
```
|
||||
|
||||
### Q5: 前端頁面無法訪問
|
||||
|
||||
**問題**: 瀏覽器顯示 404 Not Found
|
||||
|
||||
**解決方案**:
|
||||
1. 確認 Flask 已正確啟動
|
||||
2. 檢查 `index.html` 是否存在於項目根目錄
|
||||
3. 清除瀏覽器緩存並重新載入
|
||||
|
||||
### Q6: LLM 功能未啟用
|
||||
|
||||
**問題**: 系統提示「LLM 功能未啟用」
|
||||
|
||||
**解決方案**:
|
||||
1. 確認 `llm_config.py` 文件存在
|
||||
2. 確認已安裝 `requests` 套件:
|
||||
```bash
|
||||
pip install requests
|
||||
```
|
||||
3. 使用 `app_updated.py` 而非原始的 `app.py`
|
||||
|
||||
---
|
||||
|
||||
## 系統架構
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────┐
|
||||
│ 使用者瀏覽器 │
|
||||
│ ┌───────────────────────────────────┐ │
|
||||
│ │ index.html (主應用) │ │
|
||||
│ │ api_test.html (API測試頁) │ │
|
||||
│ │ error_handler.js (錯誤處理) │ │
|
||||
│ └───────────────────────────────────┘ │
|
||||
└─────────────────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────┐
|
||||
│ Flask Backend (app.py) │
|
||||
│ ┌───────────────────────────────────┐ │
|
||||
│ │ 崗位資料 API │ │
|
||||
│ │ 職務資料 API │ │
|
||||
│ │ 參照資料 API │ │
|
||||
│ │ LLM API (llm_config.py) │ │
|
||||
│ └───────────────────────────────────┘ │
|
||||
└─────────────────────────────────────────┘
|
||||
│
|
||||
┌─────┴─────┐
|
||||
▼ ▼
|
||||
┌──────────┐ ┌──────────┐
|
||||
│ MySQL │ │ LLM APIs │
|
||||
│ Database │ │ (Gemini, │
|
||||
│ │ │ DeepSeek,│
|
||||
│ │ │ OpenAI) │
|
||||
└──────────┘ └──────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 檔案說明
|
||||
|
||||
| 檔案 | 說明 |
|
||||
|------|------|
|
||||
| `.env` | 環境變數配置 |
|
||||
| `.gitignore` | Git 忽略檔案配置 |
|
||||
| `database_schema.sql` | MySQL 資料庫架構 |
|
||||
| `init_database.py` | 資料庫初始化腳本 |
|
||||
| `init_gitea.py` | Gitea 倉庫初始化腳本 |
|
||||
| `llm_config.py` | LLM API 配置模組 |
|
||||
| `app.py` | Flask 後端主程式 (原始版) |
|
||||
| `app_updated.py` | Flask 後端主程式 (包含 LLM) |
|
||||
| `error_handler.js` | 全局錯誤處理模組 |
|
||||
| `api_test.html` | LLM API 測試頁面 |
|
||||
| `index.html` | 主應用頁面 |
|
||||
| `requirements_full.txt` | Python 依賴套件列表 |
|
||||
| `SDD.md` | 軟體設計文件 |
|
||||
| `SETUP.md` | 本安裝指南 |
|
||||
|
||||
---
|
||||
|
||||
## 技術支援
|
||||
|
||||
如遇到問題,請:
|
||||
|
||||
1. 查看瀏覽器控制台的錯誤訊息
|
||||
2. 檢查 Flask 終端的錯誤日誌
|
||||
3. 參考本文檔的[常見問題](#常見問題)章節
|
||||
4. 查看系統設計文件 `SDD.md`
|
||||
|
||||
---
|
||||
|
||||
## 更新日誌
|
||||
|
||||
### Version 1.0 (2024-12-03)
|
||||
|
||||
- ✅ 初始版本發布
|
||||
- ✅ 資料庫架構設計與初始化
|
||||
- ✅ Gitea 版本控制整合
|
||||
- ✅ LLM API 整合 (Gemini, DeepSeek, OpenAI)
|
||||
- ✅ 全局錯誤處理機制
|
||||
- ✅ API 測試頁面
|
||||
- ✅ 環境配置自動化
|
||||
|
||||
---
|
||||
|
||||
**文件版本**: 1.0
|
||||
**最後更新**: 2024-12-03
|
||||
**維護者**: HR System Development Team
|
||||
496
docs/TDD.md
Normal file
496
docs/TDD.md
Normal file
@@ -0,0 +1,496 @@
|
||||
# HR 基礎資料維護系統 - 測試設計文件 (TDD)
|
||||
|
||||
**文件版本**:1.1
|
||||
**建立日期**:2024-12-06
|
||||
**最後更新**:2025-12-08
|
||||
**文件狀態**:Draft
|
||||
|
||||
---
|
||||
|
||||
## 1. 文件概述
|
||||
|
||||
### 1.1 目的
|
||||
|
||||
本文件為 HR 基礎資料維護系統之測試設計文件 (Test Design Document),描述測試策略、測試範圍、測試案例設計與驗收標準,供測試人員與開發人員參考。
|
||||
|
||||
### 1.2 範圍
|
||||
|
||||
本測試涵蓋以下功能模組:
|
||||
|
||||
| 模組 | 測試重點 |
|
||||
|------|----------|
|
||||
| 崗位基礎資料 | CRUD 操作、欄位驗證、資料聯動 |
|
||||
| 職務基礎資料 | CRUD 操作、類別關聯、Toggle 控件 |
|
||||
| 部門職責 | CRUD 操作、組織層級聯動 |
|
||||
| 崗位描述 | CRUD 操作、版本控制 |
|
||||
| AI 幫我想 | LLM 呼叫、JSON 解析、Prompt 編輯、結果填入 |
|
||||
| 崗位清單 | 列表顯示、搜尋過濾、資料匯出 |
|
||||
| 組織階層 | 事業體/處級/部級單位、級聯選擇、API 查詢 |
|
||||
| CSV 匯入匯出 | 批次匯入、範本下載、資料驗證 |
|
||||
|
||||
### 1.3 參考文件
|
||||
|
||||
- 軟體設計文件 (SDD.md)
|
||||
- API 設計規範
|
||||
- 需求確認文件
|
||||
|
||||
---
|
||||
|
||||
## 2. 測試策略
|
||||
|
||||
### 2.1 測試層次
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ E2E 測試 (End-to-End) │
|
||||
│ ┌─────────────────────────────────────────────────┐ │
|
||||
│ │ 整合測試 (Integration) │ │
|
||||
│ │ ┌─────────────────────────────────────────┐ │ │
|
||||
│ │ │ 單元測試 (Unit) │ │ │
|
||||
│ │ │ ┌─────────────────────────────────┐ │ │ │
|
||||
│ │ │ │ 函數 / API / 元件 │ │ │ │
|
||||
│ │ │ └─────────────────────────────────┘ │ │ │
|
||||
│ │ └─────────────────────────────────────────┘ │ │
|
||||
│ └─────────────────────────────────────────────────┘ │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 2.2 測試類型
|
||||
|
||||
| 類型 | 說明 | 工具 |
|
||||
|------|------|------|
|
||||
| 單元測試 | 測試單一函數或模組 | Jest / pytest |
|
||||
| 整合測試 | 測試模組間互動 | pytest |
|
||||
| API 測試 | 測試 RESTful API | Postman / pytest |
|
||||
| UI 測試 | 測試使用者介面 | 手動測試 / Selenium |
|
||||
| 效能測試 | 測試系統效能 | Apache JMeter |
|
||||
|
||||
### 2.3 測試環境
|
||||
|
||||
| 環境 | 配置 |
|
||||
|------|------|
|
||||
| 前端 | Chrome/Firefox/Edge 最新版 |
|
||||
| 後端 | Python 3.9+, Flask 2.0+ |
|
||||
| LLM | Ollama localhost:11434 |
|
||||
| 資料庫 | In-Memory (測試環境) |
|
||||
|
||||
---
|
||||
|
||||
## 3. 功能測試案例
|
||||
|
||||
### 3.1 崗位基礎資料模組
|
||||
|
||||
#### 3.1.1 新增崗位
|
||||
|
||||
| TC-ID | TC-POS-001 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | 新增崗位 - 正常流程 |
|
||||
| 前置條件 | 系統已啟動,用戶在崗位基礎資料頁面 |
|
||||
| 測試步驟 | 1. 輸入崗位編號 "ENG-001"<br>2. 輸入崗位名稱 "資深軟體工程師"<br>3. 選擇崗位類別 "技術職"<br>4. 點擊「保存」按鈕 |
|
||||
| 預期結果 | 顯示「保存成功」Toast,資料寫入成功 |
|
||||
| 實際結果 | |
|
||||
| 通過/失敗 | |
|
||||
|
||||
| TC-ID | TC-POS-002 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | 新增崗位 - 必填欄位驗證 |
|
||||
| 前置條件 | 系統已啟動,用戶在崗位基礎資料頁面 |
|
||||
| 測試步驟 | 1. 不輸入崗位編號<br>2. 不輸入崗位名稱<br>3. 點擊「保存」按鈕 |
|
||||
| 預期結果 | 顯示錯誤訊息「請填寫必填欄位」 |
|
||||
| 實際結果 | |
|
||||
| 通過/失敗 | |
|
||||
|
||||
| TC-ID | TC-POS-003 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | 新增崗位 - 編號重複檢查 |
|
||||
| 前置條件 | 已存在編號 "ENG-001" 的崗位 |
|
||||
| 測試步驟 | 1. 輸入崗位編號 "ENG-001"<br>2. 輸入其他欄位<br>3. 點擊「保存」按鈕 |
|
||||
| 預期結果 | 顯示錯誤訊息「崗位編號已存在」 |
|
||||
| 實際結果 | |
|
||||
| 通過/失敗 | |
|
||||
|
||||
#### 3.1.2 編輯崗位
|
||||
|
||||
| TC-ID | TC-POS-004 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | 編輯崗位 - 正常流程 |
|
||||
| 前置條件 | 已存在崗位 "ENG-001" |
|
||||
| 測試步驟 | 1. 瀏覽至崗位 "ENG-001"<br>2. 修改崗位名稱為 "高級軟體工程師"<br>3. 點擊「保存」按鈕 |
|
||||
| 預期結果 | 顯示「更新成功」Toast,資料已更新 |
|
||||
| 實際結果 | |
|
||||
| 通過/失敗 | |
|
||||
|
||||
#### 3.1.3 刪除崗位
|
||||
|
||||
| TC-ID | TC-POS-005 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | 刪除崗位 - 正常流程 |
|
||||
| 前置條件 | 已存在崗位 "ENG-001" |
|
||||
| 測試步驟 | 1. 瀏覽至崗位 "ENG-001"<br>2. 點擊「刪除」按鈕<br>3. 確認刪除 |
|
||||
| 預期結果 | 顯示「刪除成功」Toast,資料已移除 |
|
||||
| 實際結果 | |
|
||||
| 通過/失敗 | |
|
||||
|
||||
### 3.2 職務基礎資料模組
|
||||
|
||||
| TC-ID | TC-JOB-001 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | 新增職務 - 正常流程 |
|
||||
| 前置條件 | 系統已啟動,用戶在職務基礎資料頁面 |
|
||||
| 測試步驟 | 1. 選擇職務類別 "技術職"<br>2. 輸入職務編號 "TECH-001"<br>3. 輸入職務名稱 "軟體工程師"<br>4. 點擊「保存」按鈕 |
|
||||
| 預期結果 | 顯示「保存成功」Toast |
|
||||
| 實際結果 | |
|
||||
| 通過/失敗 | |
|
||||
|
||||
| TC-ID | TC-JOB-002 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | Toggle 開關功能 |
|
||||
| 前置條件 | 系統已啟動,用戶在職務基礎資料頁面 |
|
||||
| 測試步驟 | 1. 開啟「是否有全勤獎金」Toggle<br>2. 開啟「是否住房補貼」Toggle<br>3. 保存資料 |
|
||||
| 預期結果 | Toggle 狀態正確保存,重新載入後狀態一致 |
|
||||
| 實際結果 | |
|
||||
| 通過/失敗 | |
|
||||
|
||||
### 3.3 部門職責模組
|
||||
|
||||
| TC-ID | TC-DF-001 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | 新增部門職責 - 正常流程 |
|
||||
| 前置條件 | 系統已啟動,用戶在部門職責頁面 |
|
||||
| 測試步驟 | 1. 輸入職責編號 "DF-001"<br>2. 輸入職責名稱 "研發部門職責"<br>3. 選擇事業體、處級單位、部級單位<br>4. 輸入核心職責<br>5. 點擊「保存」按鈕 |
|
||||
| 預期結果 | 顯示「保存成功」Toast |
|
||||
| 實際結果 | |
|
||||
| 通過/失敗 | |
|
||||
|
||||
| TC-ID | TC-DF-002 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | 組織層級聯動 |
|
||||
| 前置條件 | 系統已啟動 |
|
||||
| 測試步驟 | 1. 選擇事業體 "SBU"<br>2. 觀察處級單位選項變化<br>3. 選擇處級單位<br>4. 觀察部級單位選項變化 |
|
||||
| 預期結果 | 各層級選項正確聯動,無無效選項 |
|
||||
| 實際結果 | |
|
||||
| 通過/失敗 | |
|
||||
|
||||
### 3.4 AI 幫我想功能
|
||||
|
||||
> **說明**:v1.1 版本將三個錦囊按鈕整合為單一「AI 幫我想」按鈕,並提供可編輯的 Prompt 編輯器。
|
||||
|
||||
| TC-ID | TC-AI-001 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | AI 幫我想 - 正常流程 |
|
||||
| 前置條件 | Ollama 服務已啟動,用戶在崗位基礎資料頁面 |
|
||||
| 測試步驟 | 1. 查看預設 Prompt 內容<br>2. 點擊「AI 幫我想」按鈕<br>3. 等待 AI 生成完成 |
|
||||
| 預期結果 | AI 生成資料並填充至表單空白欄位,顯示「AI 生成完成!已填入表單」Toast |
|
||||
| 實際結果 | |
|
||||
| 通過/失敗 | |
|
||||
|
||||
| TC-ID | TC-AI-002 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | Prompt 編輯功能 |
|
||||
| 前置條件 | 系統已啟動 |
|
||||
| 測試步驟 | 1. 在 Prompt 編輯器修改內容<br>2. 點擊「AI 幫我想」按鈕<br>3. 重新整理頁面<br>4. 檢查 Prompt 是否保留 |
|
||||
| 預期結果 | 修改的 Prompt 保存至 LocalStorage,重新整理後恢復 |
|
||||
| 實際結果 | |
|
||||
| 通過/失敗 | |
|
||||
|
||||
| TC-ID | TC-AI-003 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | Prompt 重置功能 |
|
||||
| 前置條件 | 已修改 Prompt 內容 |
|
||||
| 測試步驟 | 1. 修改 Prompt 內容<br>2. 點擊重置按鈕(↺ 圖示) |
|
||||
| 預期結果 | Prompt 恢復為預設值,顯示「已重置為預設 Prompt」Toast |
|
||||
| 實際結果 | |
|
||||
| 通過/失敗 | |
|
||||
|
||||
| TC-ID | TC-AI-004 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | 各模組 AI 功能 |
|
||||
| 前置條件 | Ollama 服務已啟動 |
|
||||
| 測試步驟 | 分別在以下模組測試 AI 功能:<br>1. 崗位基礎資料 (positionBasic)<br>2. 招聘要求 (positionRecruit)<br>3. 職務基礎資料 (jobBasic)<br>4. 部門職責 (deptFunction)<br>5. 崗位描述 (jobDesc) |
|
||||
| 預期結果 | 各模組 AI 均能正常生成對應欄位資料 |
|
||||
| 實際結果 | |
|
||||
| 通過/失敗 | |
|
||||
|
||||
| TC-ID | TC-AI-005 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | JSON 解析錯誤處理 |
|
||||
| 前置條件 | LLM 返回非標準 JSON 格式(含思考過程) |
|
||||
| 測試步驟 | 使用 deepseek-reasoner 等推理模型,觀察 JSON 解析 |
|
||||
| 預期結果 | 系統正確從回應中提取 JSON 物件,忽略思考過程文字 |
|
||||
| 實際結果 | |
|
||||
| 通過/失敗 | |
|
||||
|
||||
| TC-ID | TC-AI-006 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | 按鈕載入狀態 |
|
||||
| 前置條件 | 系統已啟動 |
|
||||
| 測試步驟 | 1. 點擊「AI 幫我想」按鈕<br>2. 觀察按鈕狀態變化 |
|
||||
| 預期結果 | 按鈕顯示 spinner 和「AI 生成中...」文字,完成後恢復原狀 |
|
||||
| 實際結果 | |
|
||||
| 通過/失敗 | |
|
||||
|
||||
| TC-ID | TC-AI-007 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | 空白 Prompt 防護 |
|
||||
| 前置條件 | 系統已啟動 |
|
||||
| 測試步驟 | 1. 清空 Prompt 編輯器<br>2. 點擊「AI 幫我想」按鈕 |
|
||||
| 預期結果 | 顯示錯誤訊息「請輸入 Prompt 指令」 |
|
||||
| 實際結果 | |
|
||||
| 通過/失敗 | |
|
||||
|
||||
### 3.5 CSV 匯入匯出
|
||||
|
||||
| TC-ID | TC-CSV-001 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | 下載 CSV 範本 |
|
||||
| 前置條件 | 系統已啟動 |
|
||||
| 測試步驟 | 1. 點擊「下載崗位 CSV 範本」按鈕 |
|
||||
| 預期結果 | 瀏覽器下載 CSV 檔案,格式正確 |
|
||||
| 實際結果 | |
|
||||
| 通過/失敗 | |
|
||||
|
||||
| TC-ID | TC-CSV-002 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | 匯入崗位 CSV |
|
||||
| 前置條件 | 已準備符合格式的 CSV 檔案 |
|
||||
| 測試步驟 | 1. 點擊「匯入崗位」按鈕<br>2. 選擇 CSV 檔案<br>3. 確認匯入 |
|
||||
| 預期結果 | 顯示匯入結果,資料正確寫入 |
|
||||
| 實際結果 | |
|
||||
| 通過/失敗 | |
|
||||
|
||||
| TC-ID | TC-CSV-003 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | 匯入 CSV - 格式錯誤 |
|
||||
| 前置條件 | CSV 檔案格式不正確 |
|
||||
| 測試步驟 | 1. 選擇格式錯誤的 CSV 檔案<br>2. 嘗試匯入 |
|
||||
| 預期結果 | 顯示錯誤訊息,說明格式問題 |
|
||||
| 實際結果 | |
|
||||
| 通過/失敗 | |
|
||||
|
||||
### 3.6 組織階層模組
|
||||
|
||||
| TC-ID | TC-ORG-001 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | 事業體列表載入 |
|
||||
| 前置條件 | 組織階層資料已匯入 |
|
||||
| 測試步驟 | 1. 開啟部門職責頁面<br>2. 查看事業體下拉選單 |
|
||||
| 預期結果 | 顯示所有事業體選項(SBU, PBU, NBU 等) |
|
||||
| 實際結果 | |
|
||||
| 通過/失敗 | |
|
||||
|
||||
| TC-ID | TC-ORG-002 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | 處級單位級聯選擇 |
|
||||
| 前置條件 | 組織階層資料已匯入 |
|
||||
| 測試步驟 | 1. 選擇事業體 "SBU"<br>2. 觀察處級單位選項 |
|
||||
| 預期結果 | 處級單位僅顯示屬於 SBU 的選項 |
|
||||
| 實際結果 | |
|
||||
| 通過/失敗 | |
|
||||
|
||||
| TC-ID | TC-ORG-003 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | 部級單位級聯選擇 |
|
||||
| 前置條件 | 已選擇事業體和處級單位 |
|
||||
| 測試步驟 | 1. 選擇處級單位<br>2. 觀察部級單位選項 |
|
||||
| 預期結果 | 部級單位僅顯示屬於該處級單位的選項 |
|
||||
| 實際結果 | |
|
||||
| 通過/失敗 | |
|
||||
|
||||
| TC-ID | TC-ORG-004 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | 崗位名稱級聯選擇 |
|
||||
| 前置條件 | 已選擇部級單位 |
|
||||
| 測試步驟 | 1. 選擇部級單位<br>2. 觀察崗位名稱選項 |
|
||||
| 預期結果 | 崗位名稱僅顯示屬於該部級單位的選項 |
|
||||
| 實際結果 | |
|
||||
| 通過/失敗 | |
|
||||
|
||||
---
|
||||
|
||||
## 4. API 測試案例
|
||||
|
||||
### 4.1 崗位 API
|
||||
|
||||
| TC-ID | 端點 | 方法 | 測試說明 | 預期狀態碼 |
|
||||
|-------|------|------|----------|------------|
|
||||
| TC-API-001 | /api/positions | GET | 查詢所有崗位 | 200 |
|
||||
| TC-API-002 | /api/positions | POST | 新增崗位(正常) | 201 |
|
||||
| TC-API-003 | /api/positions | POST | 新增崗位(缺少必填) | 400 |
|
||||
| TC-API-004 | /api/positions/{id} | GET | 查詢單一崗位 | 200 |
|
||||
| TC-API-005 | /api/positions/{id} | GET | 查詢不存在崗位 | 404 |
|
||||
| TC-API-006 | /api/positions/{id} | PUT | 更新崗位 | 200 |
|
||||
| TC-API-007 | /api/positions/{id} | DELETE | 刪除崗位 | 200 |
|
||||
|
||||
### 4.2 職務 API
|
||||
|
||||
| TC-ID | 端點 | 方法 | 測試說明 | 預期狀態碼 |
|
||||
|-------|------|------|----------|------------|
|
||||
| TC-API-011 | /api/jobs | GET | 查詢所有職務 | 200 |
|
||||
| TC-API-012 | /api/jobs | POST | 新增職務(正常) | 201 |
|
||||
| TC-API-013 | /api/jobs/{id} | PUT | 更新職務 | 200 |
|
||||
| TC-API-014 | /api/jobs/{id} | DELETE | 刪除職務 | 200 |
|
||||
|
||||
### 4.3 LLM API
|
||||
|
||||
| TC-ID | 端點 | 方法 | 測試說明 | 預期狀態碼 |
|
||||
|-------|------|------|----------|------------|
|
||||
| TC-API-021 | /api/llm/generate | POST | LLM 生成(Ollama) | 200 |
|
||||
| TC-API-022 | /api/llm/generate | POST | LLM 生成(無效 API) | 400 |
|
||||
| TC-API-023 | /api/llm/generate | POST | LLM 服務不可用 | 500 |
|
||||
|
||||
### 4.4 組織階層 API
|
||||
|
||||
| TC-ID | 端點 | 方法 | 測試說明 | 預期狀態碼 |
|
||||
|-------|------|------|----------|------------|
|
||||
| TC-API-031 | /api/hierarchy/business-units | GET | 查詢所有事業體 | 200 |
|
||||
| TC-API-032 | /api/hierarchy/divisions | GET | 查詢所有處級單位 | 200 |
|
||||
| TC-API-033 | /api/hierarchy/divisions?business=SBU | GET | 按事業體篩選處級單位 | 200 |
|
||||
| TC-API-034 | /api/hierarchy/departments | GET | 查詢所有部級單位 | 200 |
|
||||
| TC-API-035 | /api/hierarchy/departments?division=技術處 | GET | 按處級篩選部級單位 | 200 |
|
||||
| TC-API-036 | /api/hierarchy/positions | GET | 查詢所有崗位名稱 | 200 |
|
||||
| TC-API-037 | /api/hierarchy/positions?department=研發部 | GET | 按部級篩選崗位 | 200 |
|
||||
| TC-API-038 | /api/hierarchy/full | GET | 查詢完整階層資料 | 200 |
|
||||
| TC-API-039 | /api/hierarchy/full?page=1&size=50 | GET | 分頁查詢階層資料 | 200 |
|
||||
| TC-API-040 | /api/hierarchy/cascade | GET | 查詢級聯選擇資料 | 200 |
|
||||
| TC-API-041 | /api/hierarchy/stats | GET | 查詢組織統計 | 200 |
|
||||
|
||||
---
|
||||
|
||||
## 5. UI 測試案例
|
||||
|
||||
### 5.1 表單互動
|
||||
|
||||
| TC-ID | TC-UI-001 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | 頁籤切換 |
|
||||
| 測試步驟 | 1. 點擊「招聘要求資料」頁籤<br>2. 點擊「基礎資料」頁籤 |
|
||||
| 預期結果 | 頁籤內容正確切換,動畫流暢 |
|
||||
|
||||
| TC-ID | TC-UI-002 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | 類別聯動顯示 |
|
||||
| 測試步驟 | 1. 選擇崗位類別 "01"<br>2. 觀察崗位類別名稱欄位 |
|
||||
| 預期結果 | 自動顯示「技術職」 |
|
||||
|
||||
| TC-ID | TC-UI-003 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | Toast 通知顯示 |
|
||||
| 測試步驟 | 1. 執行保存操作 |
|
||||
| 預期結果 | 右上角顯示 Toast 通知,3秒後自動消失 |
|
||||
|
||||
### 5.2 響應式設計
|
||||
|
||||
| TC-ID | TC-UI-010 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | 手機版佈局 |
|
||||
| 測試步驟 | 將瀏覽器寬度調整為 375px |
|
||||
| 預期結果 | 表單變為單欄佈局,按鈕仍可操作 |
|
||||
|
||||
| TC-ID | TC-UI-011 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | 平板版佈局 |
|
||||
| 測試步驟 | 將瀏覽器寬度調整為 768px |
|
||||
| 預期結果 | 佈局適當調整,無元素重疊 |
|
||||
|
||||
---
|
||||
|
||||
## 6. 效能測試
|
||||
|
||||
### 6.1 載入效能
|
||||
|
||||
| 測試項目 | 目標值 | 測試方法 |
|
||||
|----------|--------|----------|
|
||||
| 首次載入時間 | < 3秒 | Chrome DevTools |
|
||||
| API 回應時間 | < 500ms | Postman |
|
||||
| LLM 生成時間 | < 30秒 | 實際測試 |
|
||||
|
||||
### 6.2 並發測試
|
||||
|
||||
| 測試項目 | 目標值 |
|
||||
|----------|--------|
|
||||
| 同時連線數 | 50+ |
|
||||
| API 請求/秒 | 100+ |
|
||||
|
||||
---
|
||||
|
||||
## 7. 安全測試
|
||||
|
||||
### 7.1 輸入驗證
|
||||
|
||||
| TC-ID | TC-SEC-001 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | XSS 防護 |
|
||||
| 測試步驟 | 在輸入框輸入 `<script>alert('XSS')</script>` |
|
||||
| 預期結果 | 腳本不執行,內容被轉義或過濾 |
|
||||
|
||||
| TC-ID | TC-SEC-002 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | SQL Injection 防護 |
|
||||
| 測試步驟 | 在輸入框輸入 `'; DROP TABLE positions; --` |
|
||||
| 預期結果 | SQL 不執行,顯示錯誤或過濾 |
|
||||
|
||||
### 7.2 API 安全
|
||||
|
||||
| TC-ID | TC-SEC-010 |
|
||||
|-------|------------|
|
||||
| 測試名稱 | CORS 設定 |
|
||||
| 測試步驟 | 從不同來源發送 API 請求 |
|
||||
| 預期結果 | 僅允許白名單來源 |
|
||||
|
||||
---
|
||||
|
||||
## 8. 測試報告模板
|
||||
|
||||
### 8.1 測試摘要
|
||||
|
||||
| 項目 | 數值 |
|
||||
|------|------|
|
||||
| 總測試案例數 | |
|
||||
| 通過數 | |
|
||||
| 失敗數 | |
|
||||
| 通過率 | |
|
||||
| 測試日期 | |
|
||||
| 測試人員 | |
|
||||
|
||||
### 8.2 缺陷追蹤
|
||||
|
||||
| 缺陷ID | 嚴重度 | 標題 | 狀態 | 負責人 |
|
||||
|--------|--------|------|------|--------|
|
||||
| | | | | |
|
||||
|
||||
---
|
||||
|
||||
## 9. 驗收標準
|
||||
|
||||
### 9.1 功能驗收
|
||||
|
||||
- [ ] 所有 CRUD 操作正常運作
|
||||
- [ ] 三個錦囊 AI 功能可正常生成內容
|
||||
- [ ] CSV 匯入匯出功能完整
|
||||
- [ ] 所有必填欄位驗證正確
|
||||
- [ ] 組織層級聯動正確
|
||||
|
||||
### 9.2 效能驗收
|
||||
|
||||
- [ ] 頁面載入時間 < 3秒
|
||||
- [ ] API 回應時間 < 500ms
|
||||
- [ ] 無明顯 UI 卡頓
|
||||
|
||||
### 9.3 相容性驗收
|
||||
|
||||
- [ ] Chrome 最新版正常
|
||||
- [ ] Firefox 最新版正常
|
||||
- [ ] Edge 最新版正常
|
||||
|
||||
---
|
||||
|
||||
## 10. 版本歷史
|
||||
|
||||
| 版本 | 日期 | 作者 | 變更說明 |
|
||||
|------|------|------|----------|
|
||||
| 1.0 | 2024-12-06 | System | 初始版本 |
|
||||
| 1.1 | 2025-12-08 | System | 1. 更新 AI 功能測試案例(三個錦囊 → AI 幫我想)<br>2. 新增組織階層模組測試案例<br>3. 新增組織階層 API 測試案例<br>4. 更新 JSON 解析錯誤處理測試(支援推理模型) |
|
||||
|
||||
---
|
||||
|
||||
**文件結束**
|
||||
1140
docs/Test Driven Development.md
Normal file
1140
docs/Test Driven Development.md
Normal file
File diff suppressed because it is too large
Load Diff
314
docs/excel.md
Normal file
314
docs/excel.md
Normal file
@@ -0,0 +1,314 @@
|
||||
事業體 處別 單位名稱 崗位名稱
|
||||
半導體事業群 半導體事業群 半導體事業群 營運長
|
||||
營運長助理
|
||||
汽車事業體 汽車事業體 汽車事業體 副總經理
|
||||
專案經理
|
||||
法務室 法務室 法務室 經副理
|
||||
法務專員
|
||||
專利工程師
|
||||
岡山製造事業體 生產處 生產處 處長
|
||||
專員
|
||||
生產部 經副理
|
||||
生產課 課長
|
||||
組長
|
||||
班長
|
||||
副班長
|
||||
作業員
|
||||
生產企劃部 經副理
|
||||
課長
|
||||
專員
|
||||
工程師
|
||||
岡山製造事業體 岡山品質管制部 經副理
|
||||
封裝品質管制課 課長
|
||||
工程師
|
||||
組長
|
||||
班長
|
||||
副班長
|
||||
作業員
|
||||
品質管制整合課 課長
|
||||
工程師
|
||||
岡山製造事業體 副總經理
|
||||
副總經理助理
|
||||
封裝工程處 封裝工程處 處長
|
||||
專員
|
||||
工程師
|
||||
製程工程一部 經副理
|
||||
製程工程二部 經副理
|
||||
上片銲線工程課 課長
|
||||
工程師
|
||||
切割點膠工程課 課長
|
||||
工程師
|
||||
正印~彎腳工程課 課長
|
||||
工程師
|
||||
模壓電鍍工程課 課長
|
||||
工程師
|
||||
設備一部 經副理
|
||||
設備二部 經副理
|
||||
設備一課 課長
|
||||
工程師
|
||||
設備二課 課長
|
||||
工程師
|
||||
設備三課 課長
|
||||
工程師
|
||||
副總辦公室 工業工程部 經副理
|
||||
工程師
|
||||
工業工程課 課長
|
||||
工程師
|
||||
專案管理 副理
|
||||
工程師
|
||||
測試工程與研發處 測試工程與研發處 處長
|
||||
專員
|
||||
測試工程部 經副理
|
||||
設備課 課長
|
||||
工程師
|
||||
測試課 課長
|
||||
工程師
|
||||
新產品導入部 經副理
|
||||
專員
|
||||
工程師
|
||||
研發部 經副理
|
||||
封裝技術課 課長
|
||||
工程師
|
||||
設計模擬課 課長
|
||||
工程師
|
||||
專員
|
||||
資材處 資材處 處長
|
||||
採購部 經副理
|
||||
採購一課 課長
|
||||
專員
|
||||
採購二課 課長
|
||||
專員
|
||||
外部資源部 專員
|
||||
生管部 經副理
|
||||
生產排程課 課長
|
||||
專員
|
||||
成品倉 課長
|
||||
班長
|
||||
副班長
|
||||
作業員
|
||||
原物料控制部 經副理
|
||||
物料控制課 課長
|
||||
專員
|
||||
原物料倉 班長
|
||||
副班長
|
||||
作業員
|
||||
廠務與環安衛管理處 廠務與環安衛管理處 處長
|
||||
工程師
|
||||
廠務部 經副理
|
||||
廠務課 課長
|
||||
工程師
|
||||
安衛中心 課長
|
||||
工程師
|
||||
專員
|
||||
智動化課 課長
|
||||
工程師
|
||||
產品事業體 產品事業體 產品事業體 處長
|
||||
先進產品事業處 先進產品事業處 處長
|
||||
產品管理部(APD) 經副理
|
||||
產品工程(APD) 經副理
|
||||
工程師
|
||||
產品管理(APD) 經副理
|
||||
工程師
|
||||
成熟產品事業處 成熟產品事業處 處長
|
||||
產品管理部(MPD) 經副理
|
||||
產品工程(MPD) 經副理
|
||||
專案經副理
|
||||
工程師
|
||||
產品管理(MPD) 經副理
|
||||
專案經副理
|
||||
工程師
|
||||
晶圓三廠 晶圓三廠 晶圓三廠 顧問
|
||||
專員
|
||||
品質部 經副理
|
||||
工程師
|
||||
作業員
|
||||
製造部 經副理
|
||||
課長
|
||||
班長
|
||||
副班長
|
||||
作業員
|
||||
廠務部(Fab3) 經副理
|
||||
工程師
|
||||
製程工程處 工程一部 經副理
|
||||
工程師
|
||||
工程二部 經副理
|
||||
工程師
|
||||
工程三部 經副理
|
||||
工程師
|
||||
製程整合部(Fab3) 經副理
|
||||
工程師
|
||||
集團人資行政事業體 集團人資行政事業體 集團人資行政事業體 人資長
|
||||
行政總務管理部 經副理
|
||||
專員
|
||||
助理
|
||||
招募任用部 經副理
|
||||
專員
|
||||
訓練發展部 經副理
|
||||
專員
|
||||
薪酬管理部 經副理
|
||||
專員
|
||||
集團財務事業體 集團財務事業體 集團財務事業體 財務長
|
||||
岡山強茂財務處 岡山強茂財務處 處長
|
||||
岡山強茂財務部 經副理
|
||||
岡山強茂財務課 課長
|
||||
專員
|
||||
集團財務事業體 集團投資人關係 專案副理
|
||||
集團會計事業體 集團會計事業體 集團會計事業體 會計長
|
||||
岡山會計處 岡山會計處 處長
|
||||
岡山會計處 會計部 經副理
|
||||
岡山會計處 會計課 課長
|
||||
岡山會計處 專員
|
||||
岡山會計處 稅務課 課長
|
||||
岡山會計處 專員
|
||||
岡山會計處 管理會計部 經副理
|
||||
岡山會計處 封裝管理會計課 課長
|
||||
岡山會計處 專員
|
||||
岡山會計處 晶圓管理會計課 課長
|
||||
岡山會計處 專員
|
||||
集團會計處 集團會計處 處長
|
||||
集團會計處 集團合併報表部 經副理
|
||||
集團會計處 專員
|
||||
集團資訊事業體 集團資訊事業體 集團資訊事業體 資訊長
|
||||
資安行動小組 資安行動課 課長
|
||||
資訊一處 應用系統部 經副理
|
||||
資訊一處 工程師
|
||||
資訊一處 電腦整合製造部 經副理
|
||||
資訊一處 工程師
|
||||
資訊一處 系統網路服務部 經副理
|
||||
資訊一處 工程師
|
||||
資訊二處 資訊二處 處長
|
||||
新創事業體 新創事業體 新創事業體 處長
|
||||
新創事業體 資源管理部 經副理
|
||||
新創事業體 專員
|
||||
研發中心 中低壓產品研發處 經副理
|
||||
研發中心 工程師
|
||||
研發中心 高壓產品研發處 經副理
|
||||
研發中心 工程師
|
||||
稽核室 稽核室 稽核室 主任
|
||||
專員
|
||||
總經理室 總經理室 總經理室 總裁
|
||||
總經理
|
||||
ESG專案辦公室 ESG專案辦公室 經副理
|
||||
環境永續小組 課長
|
||||
專員/工程師
|
||||
社會永續小組 課長
|
||||
專員/工程師
|
||||
公司治理永續小組 課長
|
||||
專員/工程師
|
||||
專案管理室 專案管理室 副總經理
|
||||
專案管理 經副理
|
||||
專員/工程師
|
||||
PVS專案課 專員/工程師
|
||||
總品質事業體 總品質事業體 總品質事業體 處長
|
||||
客戶品質管理部 經副理
|
||||
客戶品質工程課 課長
|
||||
工程師
|
||||
專員
|
||||
品質工程課 課長
|
||||
工程師
|
||||
產品品質管理部 經副理
|
||||
新產品品質管理課 課長
|
||||
工程師
|
||||
變更管理課 課長
|
||||
工程師
|
||||
客戶支援工程課 課長
|
||||
工程師
|
||||
班長
|
||||
作業員
|
||||
品質系統及客戶工程整合部 經副理
|
||||
客戶工程整合課 課長
|
||||
工程師
|
||||
品質系統課 課長
|
||||
工程師
|
||||
封測外包品質管理部 經副理
|
||||
課長
|
||||
工程師
|
||||
品質保證部 經副理
|
||||
失效分析課 課長
|
||||
工程師
|
||||
供應商管理課 課長
|
||||
工程師
|
||||
班長
|
||||
副班長
|
||||
作業員
|
||||
信賴性保證課 課長
|
||||
工程師
|
||||
班長
|
||||
副班長
|
||||
作業員
|
||||
晶圓供應商管理課 課長
|
||||
工程師
|
||||
營業事業體 營業事業體 營業事業體 副總經理
|
||||
副總經理助理
|
||||
商業開發暨市場應用處 商業開發暨市場應用處 處長
|
||||
經理
|
||||
工程師
|
||||
海外銷售事業處 海外銷售事業處 處長
|
||||
日本區暨代工業務部 經副理
|
||||
日本區 課長
|
||||
專員
|
||||
助理
|
||||
代工 課長
|
||||
專員
|
||||
助理
|
||||
歐亞區業務部 經副理
|
||||
助理
|
||||
歐洲 課長
|
||||
專員
|
||||
助理
|
||||
南亞 課長
|
||||
專員
|
||||
助理
|
||||
東協 課長
|
||||
專員
|
||||
助理
|
||||
韓國區業務部-韓國區 經副理
|
||||
課長
|
||||
專員
|
||||
助理
|
||||
全球跨區客戶管理 專案經理
|
||||
經副理
|
||||
美洲區業務部 經副理
|
||||
課長
|
||||
專員
|
||||
助理
|
||||
全球技術服務處 全球技術服務處 處長
|
||||
工程師
|
||||
助理
|
||||
應用工程部(GTS) 經副理
|
||||
專案經副理
|
||||
技術經副理
|
||||
工程師
|
||||
系統工程部 經副理
|
||||
工程師
|
||||
特性測試部 經副理
|
||||
特性測試課 課長
|
||||
工程師
|
||||
全球行銷暨業務支援處 全球行銷暨業務支援處 副總經理
|
||||
業務生管部 經副理
|
||||
業務生管課 課長
|
||||
專員
|
||||
物流&船務 課長
|
||||
專員
|
||||
市場行銷企劃部 處長
|
||||
經理
|
||||
專員
|
||||
行銷推廣 專員
|
||||
市場戰略 專員
|
||||
MOSFET晶圓採購部 經副理
|
||||
課長
|
||||
專員
|
||||
大中華區銷售事業處 大中華區銷售事業處 處長
|
||||
台灣區業務部 專員
|
||||
助理
|
||||
業務一部 處長/資深經理
|
||||
經副理
|
||||
專員
|
||||
助理
|
||||
業務二部 處長/資深經理
|
||||
經副理
|
||||
專員
|
||||
助理
|
||||
HH專案組 經副理
|
||||
專員
|
||||
助理
|
||||
315
docs/excel_table copy.md
Normal file
315
docs/excel_table copy.md
Normal file
@@ -0,0 +1,315 @@
|
||||
| 事業體 | 處級單位 | 部級單位 | 崗位名稱 |
|
||||
|--------|----------|----------|----------|
|
||||
| 半導體事業群 | 半導體事業群 | | 營運長 |
|
||||
| 半導體事業群 | 半導體事業群 | | 營運長助理 |
|
||||
| 汽車事業體 | 汽車事業體 | | 副總經理 |
|
||||
| 汽車事業體 | 汽車事業體 | | 專案經理 |
|
||||
| 法務室 | 法務室 | | 經副理 |
|
||||
| 法務室 | 法務室 | | 法務專員 |
|
||||
| 法務室 | 法務室 | | 專利工程師 |
|
||||
| 岡山製造事業體 | 生產處 | | 處長 |
|
||||
| 岡山製造事業體 | 生產處 | | 專員 |
|
||||
| 岡山製造事業體 | 生產處 | 生產部 | 經副理 |
|
||||
| 岡山製造事業體 | 生產處 | 生產部 | 課長 |
|
||||
| 岡山製造事業體 | 生產處 | 生產部 | 組長 |
|
||||
| 岡山製造事業體 | 生產處 | 生產部 | 班長 |
|
||||
| 岡山製造事業體 | 生產處 | 生產部 | 副班長 |
|
||||
| 岡山製造事業體 | 生產處 | 生產部 | 作業員 |
|
||||
| 岡山製造事業體 | 生產處 | 生產企劃部 | 經副理 |
|
||||
| 岡山製造事業體 | 生產處 | 生產企劃部 | 課長 |
|
||||
| 岡山製造事業體 | 生產處 | 生產企劃部 | 專員 |
|
||||
| 岡山製造事業體 | 生產處 | 生產企劃部 | 工程師 |
|
||||
| 岡山製造事業體 | 岡山製造事業體 | 岡山品質管制部 | 經副理 |
|
||||
| 岡山製造事業體 | 岡山製造事業體 | 岡山品質管制部 | 課長 |
|
||||
| 岡山製造事業體 | 岡山製造事業體 | 岡山品質管制部 | 工程師 |
|
||||
| 岡山製造事業體 | 岡山製造事業體 | 岡山品質管制部 | 組長 |
|
||||
| 岡山製造事業體 | 岡山製造事業體 | 岡山品質管制部 | 班長 |
|
||||
| 岡山製造事業體 | 岡山製造事業體 | 岡山品質管制部 | 副班長 |
|
||||
| 岡山製造事業體 | 岡山製造事業體 | 岡山品質管制部 | 作業員 |
|
||||
| 岡山製造事業體 | 岡山製造事業體 | 岡山品質管制部 | 課長 |
|
||||
| 岡山製造事業體 | 岡山製造事業體 | 岡山品質管制部 | 工程師 |
|
||||
| 岡山製造事業體 | 岡山製造事業體 | 岡山品質管制部 | 副總經理 |
|
||||
| 岡山製造事業體 | 岡山製造事業體 | 岡山品質管制部 | 副總經理助理 |
|
||||
| 岡山製造事業體 | 封裝工程處 | | 處長 |
|
||||
| 岡山製造事業體 | 封裝工程處 | | 專員 |
|
||||
| 岡山製造事業體 | 封裝工程處 | | 工程師 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 製程工程一部 | 經副理 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 製程工程二部 | 經副理 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 製程工程二部 | 課長 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 製程工程二部 | 工程師 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 製程工程二部 | 課長 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 製程工程二部 | 工程師 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 製程工程二部 | 課長 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 製程工程二部 | 工程師 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 製程工程二部 | 課長 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 製程工程二部 | 工程師 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 設備一部 | 經副理 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 設備二部 | 經副理 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 設備二部 | 課長 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 設備二部 | 工程師 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 設備二部 | 課長 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 設備二部 | 工程師 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 設備二部 | 課長 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 設備二部 | 工程師 |
|
||||
| 岡山製造事業體 | 副總辦公室 | 工業工程部 | 經副理 |
|
||||
| 岡山製造事業體 | 副總辦公室 | 工業工程部 | 工程師 |
|
||||
| 岡山製造事業體 | 副總辦公室 | 工業工程部 | 課長 |
|
||||
| 岡山製造事業體 | 副總辦公室 | 工業工程部 | 工程師 |
|
||||
| 岡山製造事業體 | 副總辦公室 | 工業工程部 | 副理 |
|
||||
| 岡山製造事業體 | 副總辦公室 | 工業工程部 | 工程師 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | | 處長 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | | 專員 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 測試工程部 | 經副理 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 測試工程部 | 課長 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 測試工程部 | 工程師 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 測試工程部 | 課長 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 測試工程部 | 工程師 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 新產品導入部 | 經副理 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 新產品導入部 | 專員 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 新產品導入部 | 工程師 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 研發部 | 經副理 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 研發部 | 課長 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 研發部 | 工程師 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 研發部 | 課長 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 研發部 | 工程師 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 研發部 | 專員 |
|
||||
| 岡山製造事業體 | 資材處 | | 處長 |
|
||||
| 岡山製造事業體 | 資材處 | 採購部 | 經副理 |
|
||||
| 岡山製造事業體 | 資材處 | 採購部 | 課長 |
|
||||
| 岡山製造事業體 | 資材處 | 採購部 | 專員 |
|
||||
| 岡山製造事業體 | 資材處 | 採購部 | 課長 |
|
||||
| 岡山製造事業體 | 資材處 | 採購部 | 專員 |
|
||||
| 岡山製造事業體 | 資材處 | 外部資源部 | 專員 |
|
||||
| 岡山製造事業體 | 資材處 | 生管部 | 經副理 |
|
||||
| 岡山製造事業體 | 資材處 | 生管部 | 課長 |
|
||||
| 岡山製造事業體 | 資材處 | 生管部 | 專員 |
|
||||
| 岡山製造事業體 | 資材處 | 生管部 | 課長 |
|
||||
| 岡山製造事業體 | 資材處 | 生管部 | 班長 |
|
||||
| 岡山製造事業體 | 資材處 | 生管部 | 副班長 |
|
||||
| 岡山製造事業體 | 資材處 | 生管部 | 作業員 |
|
||||
| 岡山製造事業體 | 資材處 | 原物料控制部 | 經副理 |
|
||||
| 岡山製造事業體 | 資材處 | 原物料控制部 | 課長 |
|
||||
| 岡山製造事業體 | 資材處 | 原物料控制部 | 專員 |
|
||||
| 岡山製造事業體 | 資材處 | 原物料控制部 | 班長 |
|
||||
| 岡山製造事業體 | 資材處 | 原物料控制部 | 副班長 |
|
||||
| 岡山製造事業體 | 資材處 | 原物料控制部 | 作業員 |
|
||||
| 岡山製造事業體 | 廠務與環安衛管理處 | | 處長 |
|
||||
| 岡山製造事業體 | 廠務與環安衛管理處 | | 工程師 |
|
||||
| 岡山製造事業體 | 廠務與環安衛管理處 | 廠務部 | 經副理 |
|
||||
| 岡山製造事業體 | 廠務與環安衛管理處 | 廠務部 | 課長 |
|
||||
| 岡山製造事業體 | 廠務與環安衛管理處 | 廠務部 | 工程師 |
|
||||
| 岡山製造事業體 | 廠務與環安衛管理處 | 廠務部 | 課長 |
|
||||
| 岡山製造事業體 | 廠務與環安衛管理處 | 廠務部 | 工程師 |
|
||||
| 岡山製造事業體 | 廠務與環安衛管理處 | 廠務部 | 專員 |
|
||||
| 岡山製造事業體 | 廠務與環安衛管理處 | 廠務部 | 課長 |
|
||||
| 岡山製造事業體 | 廠務與環安衛管理處 | 廠務部 | 工程師 |
|
||||
| 產品事業體 | 產品事業體 | 廠務部 | 處長 |
|
||||
| 產品事業體 | 先進產品事業處 | | 處長 |
|
||||
| 產品事業體 | 先進產品事業處 | 產品管理部(APD) | 經副理 |
|
||||
| 產品事業體 | 先進產品事業處 | 產品管理部(APD) | 經副理 |
|
||||
| 產品事業體 | 先進產品事業處 | 產品管理部(APD) | 工程師 |
|
||||
| 產品事業體 | 先進產品事業處 | 產品管理部(APD) | 經副理 |
|
||||
| 產品事業體 | 先進產品事業處 | 產品管理部(APD) | 工程師 |
|
||||
| 產品事業體 | 成熟產品事業處 | | 處長 |
|
||||
| 產品事業體 | 成熟產品事業處 | 產品管理部(MPD) | 經副理 |
|
||||
| 產品事業體 | 成熟產品事業處 | 產品管理部(MPD) | 經副理 |
|
||||
| 產品事業體 | 成熟產品事業處 | 產品管理部(MPD) | 專案經副理 |
|
||||
| 產品事業體 | 成熟產品事業處 | 產品管理部(MPD) | 工程師 |
|
||||
| 產品事業體 | 成熟產品事業處 | 產品管理部(MPD) | 經副理 |
|
||||
| 產品事業體 | 成熟產品事業處 | 產品管理部(MPD) | 專案經副理 |
|
||||
| 產品事業體 | 成熟產品事業處 | 產品管理部(MPD) | 工程師 |
|
||||
| 晶圓三廠 | 晶圓三廠 | 產品管理部(MPD) | 顧問 |
|
||||
| 晶圓三廠 | 晶圓三廠 | 產品管理部(MPD) | 專員 |
|
||||
| 晶圓三廠 | 晶圓三廠 | 品質部 | 經副理 |
|
||||
| 晶圓三廠 | 晶圓三廠 | 品質部 | 工程師 |
|
||||
| 晶圓三廠 | 晶圓三廠 | 品質部 | 作業員 |
|
||||
| 晶圓三廠 | 晶圓三廠 | 製造部 | 經副理 |
|
||||
| 晶圓三廠 | 晶圓三廠 | 製造部 | 課長 |
|
||||
| 晶圓三廠 | 晶圓三廠 | 製造部 | 班長 |
|
||||
| 晶圓三廠 | 晶圓三廠 | 製造部 | 副班長 |
|
||||
| 晶圓三廠 | 晶圓三廠 | 製造部 | 作業員 |
|
||||
| 晶圓三廠 | 晶圓三廠 | 廠務部(Fab3) | 經副理 |
|
||||
| 晶圓三廠 | 晶圓三廠 | 廠務部(Fab3) | 工程師 |
|
||||
| 晶圓三廠 | 製程工程處 | 工程一部 | 經副理 |
|
||||
| 晶圓三廠 | 製程工程處 | 工程一部 | 工程師 |
|
||||
| 晶圓三廠 | 製程工程處 | 工程二部 | 經副理 |
|
||||
| 晶圓三廠 | 製程工程處 | 工程二部 | 工程師 |
|
||||
| 晶圓三廠 | 製程工程處 | 工程三部 | 經副理 |
|
||||
| 晶圓三廠 | 製程工程處 | 工程三部 | 工程師 |
|
||||
| 晶圓三廠 | 製程工程處 | 製程整合部(Fab3) | 經副理 |
|
||||
| 晶圓三廠 | 製程工程處 | 製程整合部(Fab3) | 工程師 |
|
||||
| 集團人資行政事業體 | 集團人資行政事業體 | 製程整合部(Fab3) | 人資長 |
|
||||
| 集團人資行政事業體 | 集團人資行政事業體 | 行政總務管理部 | 經副理 |
|
||||
| 集團人資行政事業體 | 集團人資行政事業體 | 行政總務管理部 | 專員 |
|
||||
| 集團人資行政事業體 | 集團人資行政事業體 | 行政總務管理部 | 助理 |
|
||||
| 集團人資行政事業體 | 集團人資行政事業體 | 招募任用部 | 經副理 |
|
||||
| 集團人資行政事業體 | 集團人資行政事業體 | 招募任用部 | 專員 |
|
||||
| 集團人資行政事業體 | 集團人資行政事業體 | 訓練發展部 | 經副理 |
|
||||
| 集團人資行政事業體 | 集團人資行政事業體 | 訓練發展部 | 專員 |
|
||||
| 集團人資行政事業體 | 集團人資行政事業體 | 薪酬管理部 | 經副理 |
|
||||
| 集團人資行政事業體 | 集團人資行政事業體 | 薪酬管理部 | 專員 |
|
||||
| 集團財務事業體 | 集團財務事業體 | 薪酬管理部 | 財務長 |
|
||||
| 集團財務事業體 | 岡山強茂財務處 | | 處長 |
|
||||
| 集團財務事業體 | 岡山強茂財務處 | 岡山強茂財務部 | 經副理 |
|
||||
| 集團財務事業體 | 岡山強茂財務處 | 岡山強茂財務部 | 課長 |
|
||||
| 集團財務事業體 | 岡山強茂財務處 | 岡山強茂財務部 | 專員 |
|
||||
| 集團財務事業體 | 集團財務事業體 | 岡山強茂財務部 | 專案副理 |
|
||||
| 集團會計事業體 | 集團會計事業體 | 岡山強茂財務部 | 會計長 |
|
||||
| 集團會計事業體 | 岡山會計處 | | 處長 |
|
||||
| 集團會計事業體 | 岡山會計處 | 會計部 | 經副理 |
|
||||
| 集團會計事業體 | 岡山會計處 | 會計部 | 課長 |
|
||||
| 集團會計事業體 | 岡山會計處 | 會計部 | 專員 |
|
||||
| 集團會計事業體 | 岡山會計處 | 會計部 | 課長 |
|
||||
| 集團會計事業體 | 岡山會計處 | 會計部 | 專員 |
|
||||
| 集團會計事業體 | 岡山會計處 | 管理會計部 | 經副理 |
|
||||
| 集團會計事業體 | 岡山會計處 | 管理會計部 | 課長 |
|
||||
| 集團會計事業體 | 岡山會計處 | 管理會計部 | 專員 |
|
||||
| 集團會計事業體 | 岡山會計處 | 管理會計部 | 課長 |
|
||||
| 集團會計事業體 | 岡山會計處 | 管理會計部 | 專員 |
|
||||
| 集團會計事業體 | 集團會計處 | | 處長 |
|
||||
| 集團會計事業體 | 集團會計處 | 集團合併報表部 | 經副理 |
|
||||
| 集團會計事業體 | 集團會計處 | 集團合併報表部 | 專員 |
|
||||
| 集團資訊事業體 | 集團資訊事業體 | 集團合併報表部 | 資訊長 |
|
||||
| 集團資訊事業體 | 資安行動小組 | 集團合併報表部 | 課長 |
|
||||
| 集團資訊事業體 | 資訊一處 | 應用系統部 | 經副理 |
|
||||
| 集團資訊事業體 | 資訊一處 | 應用系統部 | 工程師 |
|
||||
| 集團資訊事業體 | 資訊一處 | 電腦整合製造部 | 經副理 |
|
||||
| 集團資訊事業體 | 資訊一處 | 電腦整合製造部 | 工程師 |
|
||||
| 集團資訊事業體 | 資訊一處 | 系統網路服務部 | 經副理 |
|
||||
| 集團資訊事業體 | 資訊一處 | 系統網路服務部 | 工程師 |
|
||||
| 集團資訊事業體 | 資訊二處 | | 處長 |
|
||||
| 新創事業體 | 新創事業體 | | 處長 |
|
||||
| 新創事業體 | 新創事業體 | 資源管理部 | 經副理 |
|
||||
| 新創事業體 | 新創事業體 | 資源管理部 | 專員 |
|
||||
| 新創事業體 | 中低壓產品研發處 | | 經副理 |
|
||||
| 新創事業體 | 研發中心 | | 工程師 |
|
||||
| 新創事業體 | 高壓產品研發處 | | 經副理 |
|
||||
| 新創事業體 | 研發中心 | | 工程師 |
|
||||
| 稽核室 | 稽核室 | | 主任 |
|
||||
| 稽核室 | 稽核室 | | 專員 |
|
||||
| 總經理室 | 總經理室 | | 總裁 |
|
||||
| 總經理室 | 總經理室 | | 總經理 |
|
||||
| 總經理室 | ESG專案辦公室 | | 經副理 |
|
||||
| 總經理室 | ESG專案辦公室 | | 課長 |
|
||||
| 總經理室 | ESG專案辦公室 | | 專員/工程師 |
|
||||
| 總經理室 | ESG專案辦公室 | | 課長 |
|
||||
| 總經理室 | ESG專案辦公室 | | 專員/工程師 |
|
||||
| 總經理室 | ESG專案辦公室 | | 課長 |
|
||||
| 總經理室 | ESG專案辦公室 | | 專員/工程師 |
|
||||
| 總經理室 | 專案管理室 | | 副總經理 |
|
||||
| 總經理室 | 專案管理室 | | 經副理 |
|
||||
| 總經理室 | 專案管理室 | | 專員/工程師 |
|
||||
| 總經理室 | 專案管理室 | | 專員/工程師 |
|
||||
| 總品質事業體 | 總品質事業體 | | 處長 |
|
||||
| 總品質事業體 | 總品質事業體 | 客戶品質管理部 | 經副理 |
|
||||
| 總品質事業體 | 總品質事業體 | 客戶品質管理部 | 課長 |
|
||||
| 總品質事業體 | 總品質事業體 | 客戶品質管理部 | 工程師 |
|
||||
| 總品質事業體 | 總品質事業體 | 客戶品質管理部 | 專員 |
|
||||
| 總品質事業體 | 總品質事業體 | 客戶品質管理部 | 課長 |
|
||||
| 總品質事業體 | 總品質事業體 | 客戶品質管理部 | 工程師 |
|
||||
| 總品質事業體 | 總品質事業體 | 產品品質管理部 | 經副理 |
|
||||
| 總品質事業體 | 總品質事業體 | 產品品質管理部 | 課長 |
|
||||
| 總品質事業體 | 總品質事業體 | 產品品質管理部 | 工程師 |
|
||||
| 總品質事業體 | 總品質事業體 | 產品品質管理部 | 課長 |
|
||||
| 總品質事業體 | 總品質事業體 | 產品品質管理部 | 工程師 |
|
||||
| 總品質事業體 | 總品質事業體 | 產品品質管理部 | 課長 |
|
||||
| 總品質事業體 | 總品質事業體 | 產品品質管理部 | 工程師 |
|
||||
| 總品質事業體 | 總品質事業體 | 產品品質管理部 | 班長 |
|
||||
| 總品質事業體 | 總品質事業體 | 產品品質管理部 | 作業員 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質系統及客戶工程整合部 | 經副理 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質系統及客戶工程整合部 | 課長 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質系統及客戶工程整合部 | 工程師 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質系統及客戶工程整合部 | 課長 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質系統及客戶工程整合部 | 工程師 |
|
||||
| 總品質事業體 | 總品質事業體 | 封測外包品質管理部 | 經副理 |
|
||||
| 總品質事業體 | 總品質事業體 | 封測外包品質管理部 | 課長 |
|
||||
| 總品質事業體 | 總品質事業體 | 封測外包品質管理部 | 工程師 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 經副理 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 課長 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 工程師 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 課長 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 工程師 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 班長 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 副班長 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 作業員 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 課長 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 工程師 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 班長 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 副班長 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 作業員 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 課長 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 工程師 |
|
||||
| 營業事業體 | 營業事業體 | 品質保證部 | 副總經理 |
|
||||
| 營業事業體 | 營業事業體 | 品質保證部 | 副總經理助理 |
|
||||
| 營業事業體 | 商業開發暨市場應用處 | | 處長 |
|
||||
| 營業事業體 | 商業開發暨市場應用處 | | 經理 |
|
||||
| 營業事業體 | 商業開發暨市場應用處 | | 工程師 |
|
||||
| 營業事業體 | 海外銷售事業處 | | 處長 |
|
||||
| 營業事業體 | 海外銷售事業處 | 日本區暨代工業務部 | 經副理 |
|
||||
| 營業事業體 | 海外銷售事業處 | 日本區暨代工業務部 | 課長 |
|
||||
| 營業事業體 | 海外銷售事業處 | 日本區暨代工業務部 | 專員 |
|
||||
| 營業事業體 | 海外銷售事業處 | 日本區暨代工業務部 | 助理 |
|
||||
| 營業事業體 | 海外銷售事業處 | 日本區暨代工業務部 | 課長 |
|
||||
| 營業事業體 | 海外銷售事業處 | 日本區暨代工業務部 | 專員 |
|
||||
| 營業事業體 | 海外銷售事業處 | 日本區暨代工業務部 | 助理 |
|
||||
| 營業事業體 | 海外銷售事業處 | 歐亞區業務部 | 經副理 |
|
||||
| 營業事業體 | 海外銷售事業處 | 歐亞區業務部 | 助理 |
|
||||
| 營業事業體 | 海外銷售事業處 | 歐亞區業務部 | 課長 |
|
||||
| 營業事業體 | 海外銷售事業處 | 歐亞區業務部 | 專員 |
|
||||
| 營業事業體 | 海外銷售事業處 | 歐亞區業務部 | 助理 |
|
||||
| 營業事業體 | 海外銷售事業處 | 歐亞區業務部 | 課長 |
|
||||
| 營業事業體 | 海外銷售事業處 | 歐亞區業務部 | 專員 |
|
||||
| 營業事業體 | 海外銷售事業處 | 歐亞區業務部 | 助理 |
|
||||
| 營業事業體 | 海外銷售事業處 | 歐亞區業務部 | 課長 |
|
||||
| 營業事業體 | 海外銷售事業處 | 歐亞區業務部 | 專員 |
|
||||
| 營業事業體 | 海外銷售事業處 | 歐亞區業務部 | 助理 |
|
||||
| 營業事業體 | 海外銷售事業處 | 韓國區業務部-韓國區 | 經副理 |
|
||||
| 營業事業體 | 海外銷售事業處 | 韓國區業務部-韓國區 | 課長 |
|
||||
| 營業事業體 | 海外銷售事業處 | 韓國區業務部-韓國區 | 專員 |
|
||||
| 營業事業體 | 海外銷售事業處 | 韓國區業務部-韓國區 | 助理 |
|
||||
| 營業事業體 | 海外銷售事業處 | 韓國區業務部-韓國區 | 專案經理 |
|
||||
| 營業事業體 | 海外銷售事業處 | 韓國區業務部-韓國區 | 經副理 |
|
||||
| 營業事業體 | 海外銷售事業處 | 美洲區業務部 | 經副理 |
|
||||
| 營業事業體 | 海外銷售事業處 | 美洲區業務部 | 課長 |
|
||||
| 營業事業體 | 海外銷售事業處 | 美洲區業務部 | 專員 |
|
||||
| 營業事業體 | 海外銷售事業處 | 美洲區業務部 | 助理 |
|
||||
| 營業事業體 | 全球技術服務處 | | 處長 |
|
||||
| 營業事業體 | 全球技術服務處 | | 工程師 |
|
||||
| 營業事業體 | 全球技術服務處 | | 助理 |
|
||||
| 營業事業體 | 全球技術服務處 | 應用工程部(GTS) | 經副理 |
|
||||
| 營業事業體 | 全球技術服務處 | 應用工程部(GTS) | 專案經副理 |
|
||||
| 營業事業體 | 全球技術服務處 | 應用工程部(GTS) | 技術經副理 |
|
||||
| 營業事業體 | 全球技術服務處 | 應用工程部(GTS) | 工程師 |
|
||||
| 營業事業體 | 全球技術服務處 | 系統工程部 | 經副理 |
|
||||
| 營業事業體 | 全球技術服務處 | 系統工程部 | 工程師 |
|
||||
| 營業事業體 | 全球技術服務處 | 特性測試部 | 經副理 |
|
||||
| 營業事業體 | 全球技術服務處 | 特性測試部 | 課長 |
|
||||
| 營業事業體 | 全球技術服務處 | 特性測試部 | 工程師 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | | 副總經理 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | 業務生管部 | 經副理 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | 業務生管部 | 課長 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | 業務生管部 | 專員 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | 業務生管部 | 課長 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | 業務生管部 | 專員 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | 市場行銷企劃部 | 處長 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | 市場行銷企劃部 | 經理 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | 市場行銷企劃部 | 專員 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | 市場行銷企劃部 | 專員 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | 市場行銷企劃部 | 專員 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | MOSFET晶圓採購部 | 經副理 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | MOSFET晶圓採購部 | 課長 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | MOSFET晶圓採購部 | 專員 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | | 處長 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | 台灣區業務部 | 專員 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | 台灣區業務部 | 助理 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | 業務一部 | 處長/資深經理 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | 業務一部 | 經副理 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | 業務一部 | 專員 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | 業務一部 | 助理 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | 業務二部 | 處長/資深經理 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | 業務二部 | 經副理 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | 業務二部 | 專員 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | 業務二部 | 助理 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | 業務二部 | 經副理 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | 業務二部 | 專員 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | 業務二部 | 助理 |
|
||||
315
docs/excel_table.md
Normal file
315
docs/excel_table.md
Normal file
@@ -0,0 +1,315 @@
|
||||
| 事業體 | 處級單位 | 部級單位 | 崗位名稱 |
|
||||
|--------|----------|----------|----------|
|
||||
| 半導體事業群 | 半導體事業群 | | 營運長 |
|
||||
| 半導體事業群 | 半導體事業群 | | 營運長助理 |
|
||||
| 汽車事業體 | 汽車事業體 | | 副總經理 |
|
||||
| 汽車事業體 | 汽車事業體 | | 專案經理 |
|
||||
| 法務室 | 法務室 | | 經副理 |
|
||||
| 法務室 | 法務室 | | 法務專員 |
|
||||
| 法務室 | 法務室 | | 專利工程師 |
|
||||
| 岡山製造事業體 | 生產處 | | 處長 |
|
||||
| 岡山製造事業體 | 生產處 | | 專員 |
|
||||
| 岡山製造事業體 | 生產處 | 生產部 | 經副理 |
|
||||
| 岡山製造事業體 | 生產處 | 生產部 | 課長 |
|
||||
| 岡山製造事業體 | 生產處 | 生產部 | 組長 |
|
||||
| 岡山製造事業體 | 生產處 | 生產部 | 班長 |
|
||||
| 岡山製造事業體 | 生產處 | 生產部 | 副班長 |
|
||||
| 岡山製造事業體 | 生產處 | 生產部 | 作業員 |
|
||||
| 岡山製造事業體 | 生產處 | 生產企劃部 | 經副理 |
|
||||
| 岡山製造事業體 | 生產處 | 生產企劃部 | 課長 |
|
||||
| 岡山製造事業體 | 生產處 | 生產企劃部 | 專員 |
|
||||
| 岡山製造事業體 | 生產處 | 生產企劃部 | 工程師 |
|
||||
| 岡山製造事業體 | 岡山製造事業體 | 岡山品質管制部 | 經副理 |
|
||||
| 岡山製造事業體 | 岡山製造事業體 | 岡山品質管制部 | 課長 |
|
||||
| 岡山製造事業體 | 岡山製造事業體 | 岡山品質管制部 | 工程師 |
|
||||
| 岡山製造事業體 | 岡山製造事業體 | 岡山品質管制部 | 組長 |
|
||||
| 岡山製造事業體 | 岡山製造事業體 | 岡山品質管制部 | 班長 |
|
||||
| 岡山製造事業體 | 岡山製造事業體 | 岡山品質管制部 | 副班長 |
|
||||
| 岡山製造事業體 | 岡山製造事業體 | 岡山品質管制部 | 作業員 |
|
||||
| 岡山製造事業體 | 岡山製造事業體 | 岡山品質管制部 | 課長 |
|
||||
| 岡山製造事業體 | 岡山製造事業體 | 岡山品質管制部 | 工程師 |
|
||||
| 岡山製造事業體 | 岡山製造事業體 | 岡山品質管制部 | 副總經理 |
|
||||
| 岡山製造事業體 | 岡山製造事業體 | 岡山品質管制部 | 副總經理助理 |
|
||||
| 岡山製造事業體 | 封裝工程處 | | 處長 |
|
||||
| 岡山製造事業體 | 封裝工程處 | | 專員 |
|
||||
| 岡山製造事業體 | 封裝工程處 | | 工程師 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 製程工程一部 | 經副理 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 製程工程二部 | 經副理 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 製程工程二部 | 課長 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 製程工程二部 | 工程師 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 製程工程二部 | 課長 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 製程工程二部 | 工程師 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 製程工程二部 | 課長 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 製程工程二部 | 工程師 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 製程工程二部 | 課長 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 製程工程二部 | 工程師 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 設備一部 | 經副理 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 設備二部 | 經副理 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 設備二部 | 課長 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 設備二部 | 工程師 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 設備二部 | 課長 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 設備二部 | 工程師 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 設備二部 | 課長 |
|
||||
| 岡山製造事業體 | 封裝工程處 | 設備二部 | 工程師 |
|
||||
| 岡山製造事業體 | 副總辦公室 | 工業工程部 | 經副理 |
|
||||
| 岡山製造事業體 | 副總辦公室 | 工業工程部 | 工程師 |
|
||||
| 岡山製造事業體 | 副總辦公室 | 工業工程部 | 課長 |
|
||||
| 岡山製造事業體 | 副總辦公室 | 工業工程部 | 工程師 |
|
||||
| 岡山製造事業體 | 副總辦公室 | 工業工程部 | 副理 |
|
||||
| 岡山製造事業體 | 副總辦公室 | 工業工程部 | 工程師 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | | 處長 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | | 專員 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 測試工程部 | 經副理 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 測試工程部 | 課長 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 測試工程部 | 工程師 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 測試工程部 | 課長 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 測試工程部 | 工程師 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 新產品導入部 | 經副理 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 新產品導入部 | 專員 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 新產品導入部 | 工程師 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 研發部 | 經副理 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 研發部 | 課長 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 研發部 | 工程師 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 研發部 | 課長 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 研發部 | 工程師 |
|
||||
| 岡山製造事業體 | 測試工程與研發處 | 研發部 | 專員 |
|
||||
| 岡山製造事業體 | 資材處 | | 處長 |
|
||||
| 岡山製造事業體 | 資材處 | 採購部 | 經副理 |
|
||||
| 岡山製造事業體 | 資材處 | 採購部 | 課長 |
|
||||
| 岡山製造事業體 | 資材處 | 採購部 | 專員 |
|
||||
| 岡山製造事業體 | 資材處 | 採購部 | 課長 |
|
||||
| 岡山製造事業體 | 資材處 | 採購部 | 專員 |
|
||||
| 岡山製造事業體 | 資材處 | 外部資源部 | 專員 |
|
||||
| 岡山製造事業體 | 資材處 | 生管部 | 經副理 |
|
||||
| 岡山製造事業體 | 資材處 | 生管部 | 課長 |
|
||||
| 岡山製造事業體 | 資材處 | 生管部 | 專員 |
|
||||
| 岡山製造事業體 | 資材處 | 生管部 | 課長 |
|
||||
| 岡山製造事業體 | 資材處 | 生管部 | 班長 |
|
||||
| 岡山製造事業體 | 資材處 | 生管部 | 副班長 |
|
||||
| 岡山製造事業體 | 資材處 | 生管部 | 作業員 |
|
||||
| 岡山製造事業體 | 資材處 | 原物料控制部 | 經副理 |
|
||||
| 岡山製造事業體 | 資材處 | 原物料控制部 | 課長 |
|
||||
| 岡山製造事業體 | 資材處 | 原物料控制部 | 專員 |
|
||||
| 岡山製造事業體 | 資材處 | 原物料控制部 | 班長 |
|
||||
| 岡山製造事業體 | 資材處 | 原物料控制部 | 副班長 |
|
||||
| 岡山製造事業體 | 資材處 | 原物料控制部 | 作業員 |
|
||||
| 岡山製造事業體 | 廠務與環安衛管理處 | | 處長 |
|
||||
| 岡山製造事業體 | 廠務與環安衛管理處 | | 工程師 |
|
||||
| 岡山製造事業體 | 廠務與環安衛管理處 | 廠務部 | 經副理 |
|
||||
| 岡山製造事業體 | 廠務與環安衛管理處 | 廠務部 | 課長 |
|
||||
| 岡山製造事業體 | 廠務與環安衛管理處 | 廠務部 | 工程師 |
|
||||
| 岡山製造事業體 | 廠務與環安衛管理處 | 廠務部 | 課長 |
|
||||
| 岡山製造事業體 | 廠務與環安衛管理處 | 廠務部 | 工程師 |
|
||||
| 岡山製造事業體 | 廠務與環安衛管理處 | 廠務部 | 專員 |
|
||||
| 岡山製造事業體 | 廠務與環安衛管理處 | 廠務部 | 課長 |
|
||||
| 岡山製造事業體 | 廠務與環安衛管理處 | 廠務部 | 工程師 |
|
||||
| 產品事業體 | 產品事業體 | 廠務部 | 處長 |
|
||||
| 產品事業體 | 先進產品事業處 | | 處長 |
|
||||
| 產品事業體 | 先進產品事業處 | 產品管理部(APD) | 經副理 |
|
||||
| 產品事業體 | 先進產品事業處 | 產品管理部(APD) | 經副理 |
|
||||
| 產品事業體 | 先進產品事業處 | 產品管理部(APD) | 工程師 |
|
||||
| 產品事業體 | 先進產品事業處 | 產品管理部(APD) | 經副理 |
|
||||
| 產品事業體 | 先進產品事業處 | 產品管理部(APD) | 工程師 |
|
||||
| 產品事業體 | 成熟產品事業處 | | 處長 |
|
||||
| 產品事業體 | 成熟產品事業處 | 產品管理部(MPD) | 經副理 |
|
||||
| 產品事業體 | 成熟產品事業處 | 產品管理部(MPD) | 經副理 |
|
||||
| 產品事業體 | 成熟產品事業處 | 產品管理部(MPD) | 專案經副理 |
|
||||
| 產品事業體 | 成熟產品事業處 | 產品管理部(MPD) | 工程師 |
|
||||
| 產品事業體 | 成熟產品事業處 | 產品管理部(MPD) | 經副理 |
|
||||
| 產品事業體 | 成熟產品事業處 | 產品管理部(MPD) | 專案經副理 |
|
||||
| 產品事業體 | 成熟產品事業處 | 產品管理部(MPD) | 工程師 |
|
||||
| 晶圓三廠 | 晶圓三廠 | 產品管理部(MPD) | 顧問 |
|
||||
| 晶圓三廠 | 晶圓三廠 | 產品管理部(MPD) | 專員 |
|
||||
| 晶圓三廠 | 晶圓三廠 | 品質部 | 經副理 |
|
||||
| 晶圓三廠 | 晶圓三廠 | 品質部 | 工程師 |
|
||||
| 晶圓三廠 | 晶圓三廠 | 品質部 | 作業員 |
|
||||
| 晶圓三廠 | 晶圓三廠 | 製造部 | 經副理 |
|
||||
| 晶圓三廠 | 晶圓三廠 | 製造部 | 課長 |
|
||||
| 晶圓三廠 | 晶圓三廠 | 製造部 | 班長 |
|
||||
| 晶圓三廠 | 晶圓三廠 | 製造部 | 副班長 |
|
||||
| 晶圓三廠 | 晶圓三廠 | 製造部 | 作業員 |
|
||||
| 晶圓三廠 | 晶圓三廠 | 廠務部(Fab3) | 經副理 |
|
||||
| 晶圓三廠 | 晶圓三廠 | 廠務部(Fab3) | 工程師 |
|
||||
| 晶圓三廠 | 製程工程處 | 工程一部 | 經副理 |
|
||||
| 晶圓三廠 | 製程工程處 | 工程一部 | 工程師 |
|
||||
| 晶圓三廠 | 製程工程處 | 工程二部 | 經副理 |
|
||||
| 晶圓三廠 | 製程工程處 | 工程二部 | 工程師 |
|
||||
| 晶圓三廠 | 製程工程處 | 工程三部 | 經副理 |
|
||||
| 晶圓三廠 | 製程工程處 | 工程三部 | 工程師 |
|
||||
| 晶圓三廠 | 製程工程處 | 製程整合部(Fab3) | 經副理 |
|
||||
| 晶圓三廠 | 製程工程處 | 製程整合部(Fab3) | 工程師 |
|
||||
| 集團人資行政事業體 | 集團人資行政事業體 | 製程整合部(Fab3) | 人資長 |
|
||||
| 集團人資行政事業體 | 集團人資行政事業體 | 行政總務管理部 | 經副理 |
|
||||
| 集團人資行政事業體 | 集團人資行政事業體 | 行政總務管理部 | 專員 |
|
||||
| 集團人資行政事業體 | 集團人資行政事業體 | 行政總務管理部 | 助理 |
|
||||
| 集團人資行政事業體 | 集團人資行政事業體 | 招募任用部 | 經副理 |
|
||||
| 集團人資行政事業體 | 集團人資行政事業體 | 招募任用部 | 專員 |
|
||||
| 集團人資行政事業體 | 集團人資行政事業體 | 訓練發展部 | 經副理 |
|
||||
| 集團人資行政事業體 | 集團人資行政事業體 | 訓練發展部 | 專員 |
|
||||
| 集團人資行政事業體 | 集團人資行政事業體 | 薪酬管理部 | 經副理 |
|
||||
| 集團人資行政事業體 | 集團人資行政事業體 | 薪酬管理部 | 專員 |
|
||||
| 集團財務事業體 | 集團財務事業體 | 薪酬管理部 | 財務長 |
|
||||
| 集團財務事業體 | 岡山強茂財務處 | | 處長 |
|
||||
| 集團財務事業體 | 岡山強茂財務處 | 岡山強茂財務部 | 經副理 |
|
||||
| 集團財務事業體 | 岡山強茂財務處 | 岡山強茂財務部 | 課長 |
|
||||
| 集團財務事業體 | 岡山強茂財務處 | 岡山強茂財務部 | 專員 |
|
||||
| 集團財務事業體 | 集團財務事業體 | 岡山強茂財務部 | 專案副理 |
|
||||
| 集團會計事業體 | 集團會計事業體 | 岡山強茂財務部 | 會計長 |
|
||||
| 集團會計事業體 | 岡山會計處 | | 處長 |
|
||||
| 集團會計事業體 | 岡山會計處 | 會計部 | 經副理 |
|
||||
| 集團會計事業體 | 岡山會計處 | 會計部 | 課長 |
|
||||
| 集團會計事業體 | 岡山會計處 | 會計部 | 專員 |
|
||||
| 集團會計事業體 | 岡山會計處 | 會計部 | 課長 |
|
||||
| 集團會計事業體 | 岡山會計處 | 會計部 | 專員 |
|
||||
| 集團會計事業體 | 岡山會計處 | 管理會計部 | 經副理 |
|
||||
| 集團會計事業體 | 岡山會計處 | 管理會計部 | 課長 |
|
||||
| 集團會計事業體 | 岡山會計處 | 管理會計部 | 專員 |
|
||||
| 集團會計事業體 | 岡山會計處 | 管理會計部 | 課長 |
|
||||
| 集團會計事業體 | 岡山會計處 | 管理會計部 | 專員 |
|
||||
| 集團會計事業體 | 集團會計處 | | 處長 |
|
||||
| 集團會計事業體 | 集團會計處 | 集團合併報表部 | 經副理 |
|
||||
| 集團會計事業體 | 集團會計處 | 集團合併報表部 | 專員 |
|
||||
| 集團資訊事業體 | 集團資訊事業體 | 集團合併報表部 | 資訊長 |
|
||||
| 集團資訊事業體 | 資安行動小組 | 集團合併報表部 | 課長 |
|
||||
| 集團資訊事業體 | 資訊一處 | 應用系統部 | 經副理 |
|
||||
| 集團資訊事業體 | 資訊一處 | 應用系統部 | 工程師 |
|
||||
| 集團資訊事業體 | 資訊一處 | 電腦整合製造部 | 經副理 |
|
||||
| 集團資訊事業體 | 資訊一處 | 電腦整合製造部 | 工程師 |
|
||||
| 集團資訊事業體 | 資訊一處 | 系統網路服務部 | 經副理 |
|
||||
| 集團資訊事業體 | 資訊一處 | 系統網路服務部 | 工程師 |
|
||||
| 集團資訊事業體 | 資訊二處 | | 處長 |
|
||||
| 新創事業體 | 新創事業體 | | 處長 |
|
||||
| 新創事業體 | 新創事業體 | 資源管理部 | 經副理 |
|
||||
| 新創事業體 | 新創事業體 | 資源管理部 | 專員 |
|
||||
| 新創事業體 | 中低壓產品研發處 | | 經副理 |
|
||||
| 新創事業體 | 研發中心 | | 工程師 |
|
||||
| 新創事業體 | 高壓產品研發處 | | 經副理 |
|
||||
| 新創事業體 | 研發中心 | | 工程師 |
|
||||
| 稽核室 | 稽核室 | | 主任 |
|
||||
| 稽核室 | 稽核室 | | 專員 |
|
||||
| 總經理室 | 總經理室 | | 總裁 |
|
||||
| 總經理室 | 總經理室 | | 總經理 |
|
||||
| 總經理室 | ESG專案辦公室 | | 經副理 |
|
||||
| 總經理室 | ESG專案辦公室 | | 課長 |
|
||||
| 總經理室 | ESG專案辦公室 | | 專員/工程師 |
|
||||
| 總經理室 | ESG專案辦公室 | | 課長 |
|
||||
| 總經理室 | ESG專案辦公室 | | 專員/工程師 |
|
||||
| 總經理室 | ESG專案辦公室 | | 課長 |
|
||||
| 總經理室 | ESG專案辦公室 | | 專員/工程師 |
|
||||
| 總經理室 | 專案管理室 | | 副總經理 |
|
||||
| 總經理室 | 專案管理室 | | 經副理 |
|
||||
| 總經理室 | 專案管理室 | | 專員/工程師 |
|
||||
| 總經理室 | 專案管理室 | | 專員/工程師 |
|
||||
| 總品質事業體 | 總品質事業體 | | 處長 |
|
||||
| 總品質事業體 | 總品質事業體 | 客戶品質管理部 | 經副理 |
|
||||
| 總品質事業體 | 總品質事業體 | 客戶品質管理部 | 課長 |
|
||||
| 總品質事業體 | 總品質事業體 | 客戶品質管理部 | 工程師 |
|
||||
| 總品質事業體 | 總品質事業體 | 客戶品質管理部 | 專員 |
|
||||
| 總品質事業體 | 總品質事業體 | 客戶品質管理部 | 課長 |
|
||||
| 總品質事業體 | 總品質事業體 | 客戶品質管理部 | 工程師 |
|
||||
| 總品質事業體 | 總品質事業體 | 產品品質管理部 | 經副理 |
|
||||
| 總品質事業體 | 總品質事業體 | 產品品質管理部 | 課長 |
|
||||
| 總品質事業體 | 總品質事業體 | 產品品質管理部 | 工程師 |
|
||||
| 總品質事業體 | 總品質事業體 | 產品品質管理部 | 課長 |
|
||||
| 總品質事業體 | 總品質事業體 | 產品品質管理部 | 工程師 |
|
||||
| 總品質事業體 | 總品質事業體 | 產品品質管理部 | 課長 |
|
||||
| 總品質事業體 | 總品質事業體 | 產品品質管理部 | 工程師 |
|
||||
| 總品質事業體 | 總品質事業體 | 產品品質管理部 | 班長 |
|
||||
| 總品質事業體 | 總品質事業體 | 產品品質管理部 | 作業員 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質系統及客戶工程整合部 | 經副理 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質系統及客戶工程整合部 | 課長 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質系統及客戶工程整合部 | 工程師 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質系統及客戶工程整合部 | 課長 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質系統及客戶工程整合部 | 工程師 |
|
||||
| 總品質事業體 | 總品質事業體 | 封測外包品質管理部 | 經副理 |
|
||||
| 總品質事業體 | 總品質事業體 | 封測外包品質管理部 | 課長 |
|
||||
| 總品質事業體 | 總品質事業體 | 封測外包品質管理部 | 工程師 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 經副理 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 課長 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 工程師 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 課長 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 工程師 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 班長 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 副班長 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 作業員 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 課長 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 工程師 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 班長 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 副班長 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 作業員 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 課長 |
|
||||
| 總品質事業體 | 總品質事業體 | 品質保證部 | 工程師 |
|
||||
| 營業事業體 | 營業事業體 | 品質保證部 | 副總經理 |
|
||||
| 營業事業體 | 營業事業體 | 品質保證部 | 副總經理助理 |
|
||||
| 營業事業體 | 商業開發暨市場應用處 | | 處長 |
|
||||
| 營業事業體 | 商業開發暨市場應用處 | | 經理 |
|
||||
| 營業事業體 | 商業開發暨市場應用處 | | 工程師 |
|
||||
| 營業事業體 | 海外銷售事業處 | | 處長 |
|
||||
| 營業事業體 | 海外銷售事業處 | 日本區暨代工業務部 | 經副理 |
|
||||
| 營業事業體 | 海外銷售事業處 | 日本區暨代工業務部 | 課長 |
|
||||
| 營業事業體 | 海外銷售事業處 | 日本區暨代工業務部 | 專員 |
|
||||
| 營業事業體 | 海外銷售事業處 | 日本區暨代工業務部 | 助理 |
|
||||
| 營業事業體 | 海外銷售事業處 | 日本區暨代工業務部 | 課長 |
|
||||
| 營業事業體 | 海外銷售事業處 | 日本區暨代工業務部 | 專員 |
|
||||
| 營業事業體 | 海外銷售事業處 | 日本區暨代工業務部 | 助理 |
|
||||
| 營業事業體 | 海外銷售事業處 | 歐亞區業務部 | 經副理 |
|
||||
| 營業事業體 | 海外銷售事業處 | 歐亞區業務部 | 助理 |
|
||||
| 營業事業體 | 海外銷售事業處 | 歐亞區業務部 | 課長 |
|
||||
| 營業事業體 | 海外銷售事業處 | 歐亞區業務部 | 專員 |
|
||||
| 營業事業體 | 海外銷售事業處 | 歐亞區業務部 | 助理 |
|
||||
| 營業事業體 | 海外銷售事業處 | 歐亞區業務部 | 課長 |
|
||||
| 營業事業體 | 海外銷售事業處 | 歐亞區業務部 | 專員 |
|
||||
| 營業事業體 | 海外銷售事業處 | 歐亞區業務部 | 助理 |
|
||||
| 營業事業體 | 海外銷售事業處 | 歐亞區業務部 | 課長 |
|
||||
| 營業事業體 | 海外銷售事業處 | 歐亞區業務部 | 專員 |
|
||||
| 營業事業體 | 海外銷售事業處 | 歐亞區業務部 | 助理 |
|
||||
| 營業事業體 | 海外銷售事業處 | 韓國區業務部-韓國區 | 經副理 |
|
||||
| 營業事業體 | 海外銷售事業處 | 韓國區業務部-韓國區 | 課長 |
|
||||
| 營業事業體 | 海外銷售事業處 | 韓國區業務部-韓國區 | 專員 |
|
||||
| 營業事業體 | 海外銷售事業處 | 韓國區業務部-韓國區 | 助理 |
|
||||
| 營業事業體 | 海外銷售事業處 | 韓國區業務部-韓國區 | 專案經理 |
|
||||
| 營業事業體 | 海外銷售事業處 | 韓國區業務部-韓國區 | 經副理 |
|
||||
| 營業事業體 | 海外銷售事業處 | 美洲區業務部 | 經副理 |
|
||||
| 營業事業體 | 海外銷售事業處 | 美洲區業務部 | 課長 |
|
||||
| 營業事業體 | 海外銷售事業處 | 美洲區業務部 | 專員 |
|
||||
| 營業事業體 | 海外銷售事業處 | 美洲區業務部 | 助理 |
|
||||
| 營業事業體 | 全球技術服務處 | | 處長 |
|
||||
| 營業事業體 | 全球技術服務處 | | 工程師 |
|
||||
| 營業事業體 | 全球技術服務處 | | 助理 |
|
||||
| 營業事業體 | 全球技術服務處 | 應用工程部(GTS) | 經副理 |
|
||||
| 營業事業體 | 全球技術服務處 | 應用工程部(GTS) | 專案經副理 |
|
||||
| 營業事業體 | 全球技術服務處 | 應用工程部(GTS) | 技術經副理 |
|
||||
| 營業事業體 | 全球技術服務處 | 應用工程部(GTS) | 工程師 |
|
||||
| 營業事業體 | 全球技術服務處 | 系統工程部 | 經副理 |
|
||||
| 營業事業體 | 全球技術服務處 | 系統工程部 | 工程師 |
|
||||
| 營業事業體 | 全球技術服務處 | 特性測試部 | 經副理 |
|
||||
| 營業事業體 | 全球技術服務處 | 特性測試部 | 課長 |
|
||||
| 營業事業體 | 全球技術服務處 | 特性測試部 | 工程師 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | | 副總經理 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | 業務生管部 | 經副理 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | 業務生管部 | 課長 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | 業務生管部 | 專員 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | 業務生管部 | 課長 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | 業務生管部 | 專員 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | 市場行銷企劃部 | 處長 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | 市場行銷企劃部 | 經理 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | 市場行銷企劃部 | 專員 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | 市場行銷企劃部 | 專員 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | 市場行銷企劃部 | 專員 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | MOSFET晶圓採購部 | 經副理 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | MOSFET晶圓採購部 | 課長 |
|
||||
| 營業事業體 | 全球行銷暨業務支援處 | MOSFET晶圓採購部 | 專員 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | | 處長 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | 台灣區業務部 | 專員 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | 台灣區業務部 | 助理 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | 業務一部 | 處長/資深經理 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | 業務一部 | 經副理 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | 業務一部 | 專員 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | 業務一部 | 助理 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | 業務二部 | 處長/資深經理 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | 業務二部 | 經副理 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | 業務二部 | 專員 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | 業務二部 | 助理 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | 業務二部 | 經副理 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | 業務二部 | 專員 |
|
||||
| 營業事業體 | 大中華區銷售事業處 | 業務二部 | 助理 |
|
||||
758
docs/prompt.md
Normal file
758
docs/prompt.md
Normal file
@@ -0,0 +1,758 @@
|
||||
# HR 崗位管理系統 - AI 生成功能 Prompt 說明文件
|
||||
|
||||
> **文件版本**: v1.0
|
||||
> **最後更新**: 2024-12-04
|
||||
> **維護者**: AI(所以有問題真的不要問我)
|
||||
|
||||
---
|
||||
|
||||
## 📋 目錄
|
||||
|
||||
1. [總覽](#總覽)
|
||||
2. [頁籤 1: 崗位基礎資料維護](#頁籤-1-崗位基礎資料維護)
|
||||
3. [頁籤 2: 崗位招聘要求](#頁籤-2-崗位招聘要求)
|
||||
4. [頁籤 3: 職務基礎資料](#頁籤-3-職務基礎資料)
|
||||
5. [頁籤 4: 部門職責維護](#頁籤-4-部門職責維護)
|
||||
6. [頁籤 5: 崗位描述 (JD)](#頁籤-5-崗位描述-jd)
|
||||
7. [如何修改 Prompt](#如何修改-prompt)
|
||||
8. [Prompt 設計原則](#prompt-設計原則)
|
||||
|
||||
---
|
||||
|
||||
## 總覽
|
||||
|
||||
系統中共有 **5 個頁籤**提供 AI 自動生成功能,每個頁籤都有一個 "✨ I'm feeling lucky" 按鈕。
|
||||
|
||||
### 🎯 核心運作原理
|
||||
|
||||
1. **智能空白檢測**: 系統會檢測哪些欄位是空白的
|
||||
2. **上下文感知**: 將已填寫的欄位作為上下文傳給 LLM
|
||||
3. **精準生成**: 只生成尚未填寫的欄位
|
||||
4. **JSON 格式回傳**: 要求 LLM 返回結構化的 JSON 資料
|
||||
5. **自動填充**: 解析 JSON 並填入對應欄位
|
||||
|
||||
### 🔗 對應函式與程式碼位置
|
||||
|
||||
| 頁籤名稱 | 函式名稱 | 程式碼位置 | 按鈕 ID/onclick |
|
||||
|---------|---------|-----------|----------------|
|
||||
| 崗位基礎資料維護 | `generatePositionBasic()` | [index.html:2179](index.html#L2179) | `onclick="generatePositionBasic()"` |
|
||||
| 崗位招聘要求 | `generatePositionRecruit()` | [index.html:2253](index.html#L2253) | `onclick="generatePositionRecruit()"` |
|
||||
| 職務基礎資料 | `generateJobBasic()` | [index.html:2330](index.html#L2330) | `onclick="generateJobBasic()"` |
|
||||
| 部門職責維護 | `generateDeptFunction()` | [index.html:3778](index.html#L3778) | `onclick="generateDeptFunction()"` |
|
||||
| 崗位描述 (JD) | `generateJobDesc()` | [index.html:2425](index.html#L2425) | `onclick="generateJobDesc()"` |
|
||||
|
||||
---
|
||||
|
||||
## 頁籤 1: 崗位基礎資料維護
|
||||
|
||||
### 📍 函式位置
|
||||
- **檔案**: `index.html`
|
||||
- **行數**: 2179-2251
|
||||
- **函式**: `async function generatePositionBasic()`
|
||||
|
||||
### 📝 完整 Prompt
|
||||
|
||||
```
|
||||
請為HR崗位管理系統生成崗位基礎資料。請用繁體中文回覆。
|
||||
|
||||
[如果有已填寫的資料,會附加此段]
|
||||
已填寫的資料(請參考這些內容來生成相關的資料):
|
||||
{JSON格式的已填寫資料}
|
||||
|
||||
請「只生成」以下這些尚未填寫的欄位:[動態欄位列表]
|
||||
|
||||
欄位說明:
|
||||
- positionCode: 崗位編號(格式如 ENG-001, MGR-002, SAL-003)
|
||||
- positionName: 崗位名稱
|
||||
- positionCategory: 崗位類別代碼(01=技術職, 02=管理職, 03=業務職, 04=行政職)
|
||||
- positionNature: 崗位性質代碼(FT=全職, PT=兼職, CT=約聘, IN=實習)
|
||||
- headcount: 編制人數(1-10之間的數字字串)
|
||||
- positionLevel: 崗位級別(L1到L7)
|
||||
- positionDesc: 崗位描述(2-3句話描述工作內容)
|
||||
- positionRemark: 崗位備注(可選的補充說明)
|
||||
|
||||
請直接返回JSON格式,只包含需要生成的欄位,不要有任何其他文字:
|
||||
{
|
||||
"positionCode": "...",
|
||||
"positionName": "...",
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
### 🎯 Prompt 設計依據
|
||||
|
||||
1. **上下文感知**: 如果使用者已填寫部分欄位,這些資料會被傳入作為參考
|
||||
2. **精準指令**: 明確告知只生成「尚未填寫」的欄位,避免覆蓋已有資料
|
||||
3. **格式規範**: 提供詳細的欄位格式說明和代碼對照表
|
||||
4. **結構化輸出**: 要求返回純 JSON,方便程式解析
|
||||
|
||||
### 📦 處理的欄位
|
||||
|
||||
```javascript
|
||||
const allFields = [
|
||||
'positionCode', // 崗位編號
|
||||
'positionName', // 崗位名稱
|
||||
'positionCategory', // 崗位類別代碼
|
||||
'positionNature', // 崗位性質代碼
|
||||
'headcount', // 編制人數
|
||||
'positionLevel', // 崗位級別
|
||||
'positionDesc', // 崗位描述
|
||||
'positionRemark' // 崗位備注
|
||||
];
|
||||
```
|
||||
|
||||
### 🔧 如何修改此 Prompt
|
||||
|
||||
在 [index.html:2205-2223](index.html#L2205) 找到以下程式碼:
|
||||
|
||||
```javascript
|
||||
const prompt = `請為HR崗位管理系統生成崗位基礎資料。請用繁體中文回覆。
|
||||
${contextInfo}
|
||||
|
||||
請「只生成」以下這些尚未填寫的欄位:${emptyFields.join(', ')}
|
||||
|
||||
欄位說明:
|
||||
- positionCode: 崗位編號(格式如 ENG-001, MGR-002, SAL-003)
|
||||
...
|
||||
`;
|
||||
```
|
||||
|
||||
**修改建議**:
|
||||
- 如果要改變生成風格:修改第一句的指令(例如:「請以專業正式的語氣生成...」)
|
||||
- 如果要新增欄位規則:在「欄位說明」中添加新的規範
|
||||
- 如果要調整格式:修改格式範例(如改變編號規則)
|
||||
|
||||
---
|
||||
|
||||
## 頁籤 2: 崗位招聘要求
|
||||
|
||||
### 📍 函式位置
|
||||
- **檔案**: `index.html`
|
||||
- **行數**: 2253-2328
|
||||
- **函式**: `async function generatePositionRecruit()`
|
||||
|
||||
### 📝 完整 Prompt
|
||||
|
||||
```
|
||||
請為HR崗位管理系統生成「{崗位名稱}」的招聘要求資料。請用繁體中文回覆。
|
||||
|
||||
已填寫的資料(請參考這些內容來生成相關的資料):
|
||||
{JSON格式的已填寫資料,包含 positionName}
|
||||
|
||||
請「只生成」以下這些尚未填寫的欄位:[動態欄位列表]
|
||||
|
||||
欄位說明:
|
||||
- minEducation: 最低學歷代碼(HS=高中職, JC=專科, BA=大學, MA=碩士, PHD=博士)
|
||||
- requiredGender: 要求性別(空字串=不限, M=男, F=女)
|
||||
- salaryRange: 薪酬范圍代碼(A=30000以下, B=30000-50000, C=50000-80000, D=80000-120000, E=120000以上, N=面議)
|
||||
- workExperience: 工作經驗年數(0=不限, 1, 3, 5, 10)
|
||||
- minAge: 最小年齡(18-30之間的數字字串)
|
||||
- maxAge: 最大年齡(35-55之間的數字字串)
|
||||
- jobType: 工作性質代碼(FT=全職, PT=兼職, CT=約聘, DP=派遣)
|
||||
- recruitPosition: 招聘職位代碼(ENG=工程師, MGR=經理, AST=助理, OP=作業員, SAL=業務)
|
||||
- jobTitle: 職位名稱
|
||||
- jobDesc: 職位描述(2-3句話)
|
||||
- positionReq: 崗位要求(條列式,用換行分隔)
|
||||
- skillReq: 技能要求(用逗號分隔)
|
||||
- langReq: 語言要求
|
||||
- otherReq: 其他要求
|
||||
|
||||
請直接返回JSON格式,只包含需要生成的欄位:
|
||||
{
|
||||
"minEducation": "...",
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
### 🎯 Prompt 設計依據
|
||||
|
||||
1. **職位名稱作為核心上下文**: 使用第一個頁籤的崗位名稱作為生成依據
|
||||
2. **跨頁籤資料引用**: 會從「崗位基礎資料」頁籤讀取 `positionName`
|
||||
3. **招聘專用代碼**: 提供完整的學歷、薪資、經驗等代碼對照
|
||||
|
||||
### 📦 處理的欄位
|
||||
|
||||
```javascript
|
||||
const allFields = [
|
||||
'minEducation', // 最低學歷
|
||||
'requiredGender', // 要求性別
|
||||
'salaryRange', // 薪酬范圍
|
||||
'workExperience', // 工作經驗年數
|
||||
'minAge', // 最小年齡
|
||||
'maxAge', // 最大年齡
|
||||
'jobType', // 工作性質
|
||||
'recruitPosition', // 招聘職位
|
||||
'jobTitle', // 職位名稱
|
||||
'jobDesc', // 職位描述
|
||||
'positionReq', // 崗位要求
|
||||
'skillReq', // 技能要求
|
||||
'langReq', // 語言要求
|
||||
'otherReq' // 其他要求
|
||||
];
|
||||
```
|
||||
|
||||
### 🔧 如何修改此 Prompt
|
||||
|
||||
在 [index.html:2275-2301](index.html#L2275) 找到程式碼。
|
||||
|
||||
**修改建議**:
|
||||
- **調整薪資範圍**: 修改 `salaryRange` 的代碼對照(例如增加更高薪資級別)
|
||||
- **新增性別選項**: 如果需要更多性別選項,在 `requiredGender` 中添加
|
||||
- **調整經驗年限**: 修改 `workExperience` 的可用選項
|
||||
|
||||
---
|
||||
|
||||
## 頁籤 3: 職務基礎資料
|
||||
|
||||
### 📍 函式位置
|
||||
- **檔案**: `index.html`
|
||||
- **行數**: 2330-2423
|
||||
- **函式**: `async function generateJobBasic()`
|
||||
|
||||
### 📝 完整 Prompt
|
||||
|
||||
```
|
||||
請為HR職務管理系統生成職務基礎資料。請用繁體中文回覆。
|
||||
|
||||
[如果有已填寫的資料,會附加此段]
|
||||
已填寫的資料(請參考這些內容來生成相關的資料):
|
||||
{JSON格式的已填寫資料}
|
||||
|
||||
請「只生成」以下這些尚未填寫的欄位:[動態欄位列表,可能包含 checkbox]
|
||||
|
||||
欄位說明:
|
||||
- jobCategoryCode: 職務類別代碼(MGR=管理職, TECH=技術職, SALE=業務職, ADMIN=行政職, RD=研發職, PROD=生產職)
|
||||
- jobCode: 職務編號(格式如 MGR-001, TECH-002)
|
||||
- jobName: 職務名稱
|
||||
- jobNameEn: 職務英文名稱
|
||||
- jobHeadcount: 編制人數(1-20之間的數字字串)
|
||||
- jobSortOrder: 排列順序(10, 20, 30...的數字字串)
|
||||
- jobRemark: 備注說明
|
||||
- jobLevel: 職務層級(可以是 *保密* 或具體層級)
|
||||
- hasAttendanceBonus: 是否有全勤(true/false)
|
||||
- hasHousingAllowance: 是否住房補貼(true/false)
|
||||
|
||||
請直接返回JSON格式,只包含需要生成的欄位:
|
||||
{
|
||||
"jobCategoryCode": "...",
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
### 🎯 Prompt 設計依據
|
||||
|
||||
1. **職務 vs 崗位**: 這個頁籤處理的是「職務」(Job),與「崗位」(Position)不同
|
||||
2. **Checkbox 處理**: 特殊處理 `hasAttendanceBonus` 和 `hasHousingAllowance` 兩個布林值欄位
|
||||
3. **排序欄位**: `jobSortOrder` 使用 10 的倍數,方便後續插入新職務
|
||||
|
||||
### 📦 處理的欄位
|
||||
|
||||
```javascript
|
||||
const allFields = [
|
||||
'jobCategoryCode', // 職務類別代碼
|
||||
'jobCode', // 職務編號
|
||||
'jobName', // 職務名稱
|
||||
'jobNameEn', // 職務英文名稱
|
||||
'jobHeadcount', // 編制人數
|
||||
'jobSortOrder', // 排列順序
|
||||
'jobRemark', // 備注說明
|
||||
'jobLevel' // 職務層級
|
||||
];
|
||||
|
||||
// 額外處理的 checkbox
|
||||
const checkboxes = [
|
||||
'hasAttendanceBonus', // 是否有全勤
|
||||
'hasHousingAllowance' // 是否住房補貼
|
||||
];
|
||||
```
|
||||
|
||||
### 🔧 如何修改此 Prompt
|
||||
|
||||
在 [index.html:2362-2382](index.html#L2362) 找到程式碼。
|
||||
|
||||
**修改建議**:
|
||||
- **新增職務類別**: 在 `jobCategoryCode` 中添加新的類別代碼
|
||||
- **調整編號格式**: 修改 `jobCode` 的格式範例
|
||||
- **修改保密設定**: 調整 `jobLevel` 的說明(如不允許保密)
|
||||
|
||||
---
|
||||
|
||||
## 頁籤 4: 部門職責維護
|
||||
|
||||
### 📍 函式位置
|
||||
- **檔案**: `index.html`
|
||||
- **行數**: 3778-3839
|
||||
- **函式**: `function generateDeptFunction()`
|
||||
|
||||
### 📝 完整 Prompt
|
||||
|
||||
```
|
||||
請為HR部門職責管理系統生成部門職責資料。請用繁體中文回覆。
|
||||
|
||||
[如果有已填寫的資料,會附加此段]
|
||||
已填寫的資料(請參考這些內容來生成相關的資料):
|
||||
{JSON格式的已填寫資料}
|
||||
|
||||
請「只生成」以下這些尚未填寫的欄位:[動態欄位列表]
|
||||
|
||||
欄位說明:
|
||||
- deptFunctionCode: 部門職責編號(格式如 DF-001, DF-002)
|
||||
- deptFunctionName: 部門職責名稱(例如:軟體研發部職責)
|
||||
- deptFunctionBU: 事業體代碼(SBU/MBU/HQBU/ITBU/HRBU/ACCBU 之一)
|
||||
- deptFunctionDept: 部門名稱
|
||||
- deptManager: 部門主管職稱
|
||||
- deptMission: 部門使命(使用「•」開頭的條列式,2-3項)
|
||||
- deptVision: 部門願景(使用「•」開頭的條列式,1-2項)
|
||||
- deptCoreFunctions: 核心職責(使用「•」開頭的條列式,4-6項)
|
||||
- deptKPIs: 關鍵績效指標(使用「•」開頭的條列式,3-4項)
|
||||
|
||||
請直接返回JSON格式,只包含需要生成的欄位,不要有任何其他文字:
|
||||
{
|
||||
"deptFunctionCode": "...",
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
### 🎯 Prompt 設計依據
|
||||
|
||||
1. **條列式格式**: 特別要求使用 `•` 開頭的條列式,符合部門職責文件慣例
|
||||
2. **數量控制**: 明確指定每個欄位的條列項目數量(例如使命 2-3 項)
|
||||
3. **事業體代碼**: 提供固定的事業體代碼選項
|
||||
4. **管理導向**: 專注於部門管理層面的使命、願景、職責、KPI
|
||||
|
||||
### 📦 處理的欄位
|
||||
|
||||
```javascript
|
||||
const allFields = [
|
||||
'deptFunctionCode', // 部門職責編號
|
||||
'deptFunctionName', // 部門職責名稱
|
||||
'deptFunctionBU', // 事業體代碼
|
||||
'deptFunctionDept', // 部門名稱
|
||||
'deptManager', // 部門主管職稱
|
||||
'deptMission', // 部門使命(條列式)
|
||||
'deptVision', // 部門願景(條列式)
|
||||
'deptCoreFunctions', // 核心職責(條列式)
|
||||
'deptKPIs' // 關鍵績效指標(條列式)
|
||||
];
|
||||
```
|
||||
|
||||
### 🔧 如何修改此 Prompt
|
||||
|
||||
在 [index.html:3800-3819](index.html#L3800) 找到程式碼。
|
||||
|
||||
**修改建議**:
|
||||
- **新增事業體**: 在 `deptFunctionBU` 中添加新的事業體代碼
|
||||
- **調整條列數量**: 修改各欄位的條列項目數量要求
|
||||
- **改變條列符號**: 將 `•` 改為其他符號(如 `1.`, `-`, `★`)
|
||||
|
||||
---
|
||||
|
||||
## 頁籤 5: 崗位描述 (JD)
|
||||
|
||||
### 📍 函式位置
|
||||
- **檔案**: `index.html`
|
||||
- **行數**: 2425-2541
|
||||
- **函式**: `async function generateJobDesc()`
|
||||
|
||||
### 📝 完整 Prompt
|
||||
|
||||
```
|
||||
請為HR崗位描述管理系統生成崗位描述資料。請用繁體中文回覆。
|
||||
|
||||
[如果有已填寫的資料,會附加此段]
|
||||
已填寫的資料(請參考這些內容來生成相關的資料):
|
||||
{JSON格式的已填寫資料,欄位名稱已移除 jd_ 前綴}
|
||||
|
||||
請「只生成」以下這些尚未填寫的欄位:[動態欄位列表]
|
||||
|
||||
欄位說明:
|
||||
- empNo: 工號(格式如 A001234)
|
||||
- empName: 員工姓名
|
||||
- positionCode: 崗位代碼
|
||||
- versionDate: 版本日期(YYYY-MM-DD格式)
|
||||
- positionName: 崗位名稱
|
||||
- department: 所屬部門
|
||||
- positionEffectiveDate: 崗位生效日期(YYYY-MM-DD格式)
|
||||
- directSupervisor: 直接領導職務
|
||||
- directReports: 直接下級(格式如「工程師 x 5人」)
|
||||
- workLocation: 任職地點代碼(HQ=總部, TPE=台北, TYC=桃園, KHH=高雄, SH=上海, SZ=深圳)
|
||||
- empAttribute: 員工屬性代碼(FT=正式員工, CT=約聘, PT=兼職, IN=實習, DP=派遣)
|
||||
- positionPurpose: 崗位設置目的(1句話說明)
|
||||
- mainResponsibilities: 主要崗位職責(用「1、」「2、」「3、」「4、」「5、」格式,每項換行,用\n分隔)
|
||||
- education: 教育程度要求
|
||||
- basicSkills: 基本技能要求
|
||||
- professionalKnowledge: 專業知識要求
|
||||
- workExperienceReq: 工作經驗要求
|
||||
- otherRequirements: 其他要求
|
||||
|
||||
請直接返回JSON格式,只包含需要生成的欄位:
|
||||
{
|
||||
"empNo": "...",
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
### 🎯 Prompt 設計依據
|
||||
|
||||
1. **最複雜的表單**: 包含最多欄位(18 個),涵蓋完整的 JD 內容
|
||||
2. **日期格式規範**: 明確要求 YYYY-MM-DD 格式
|
||||
3. **職責編號格式**: 特別指定使用「1、」「2、」格式,並用 `\n` 換行
|
||||
4. **地點代碼對照**: 提供台灣與中國大陸的辦公室代碼
|
||||
5. **欄位名稱映射**: 程式中會將 `jd_` 前綴移除後再傳給 API
|
||||
|
||||
### 📦 處理的欄位
|
||||
|
||||
```javascript
|
||||
const allFields = [
|
||||
'jd_empNo', // 工號
|
||||
'jd_empName', // 員工姓名
|
||||
'jd_positionCode', // 崗位代碼
|
||||
'jd_versionDate', // 版本日期
|
||||
'jd_positionName', // 崗位名稱
|
||||
'jd_department', // 所屬部門
|
||||
'jd_positionEffectiveDate', // 崗位生效日期
|
||||
'jd_directSupervisor', // 直接領導職務
|
||||
'jd_directReports', // 直接下級
|
||||
'jd_workLocation', // 任職地點
|
||||
'jd_empAttribute', // 員工屬性
|
||||
'jd_positionPurpose', // 崗位設置目的
|
||||
'jd_mainResponsibilities', // 主要崗位職責
|
||||
'jd_education', // 教育程度要求
|
||||
'jd_basicSkills', // 基本技能要求
|
||||
'jd_professionalKnowledge', // 專業知識要求
|
||||
'jd_workExperienceReq', // 工作經驗要求
|
||||
'jd_otherRequirements' // 其他要求
|
||||
];
|
||||
```
|
||||
|
||||
### 🔧 如何修改此 Prompt
|
||||
|
||||
在 [index.html:2464-2492](index.html#L2464) 找到程式碼。
|
||||
|
||||
**特別注意**: 這個模組有欄位名稱映射機制([index.html:2499-2518](index.html#L2499)),修改欄位時需要同時更新 `fieldMapping` 物件。
|
||||
|
||||
**修改建議**:
|
||||
- **新增辦公室地點**: 在 `workLocation` 中添加新的辦公室代碼
|
||||
- **調整職責數量**: 修改 `mainResponsibilities` 的編號範圍(如改為 1-10)
|
||||
- **新增員工屬性**: 在 `empAttribute` 中添加新的員工類型
|
||||
|
||||
---
|
||||
|
||||
## 如何修改 Prompt
|
||||
|
||||
### 📝 通用修改步驟
|
||||
|
||||
所有 "I'm Feeling Lucky" 按鈕的 Prompt 都遵循相同的修改流程:
|
||||
|
||||
#### 步驟 1: 找到對應函式
|
||||
|
||||
使用上方表格找到要修改的函式位置,例如:
|
||||
```
|
||||
崗位基礎資料維護 → index.html:2179
|
||||
```
|
||||
|
||||
#### 步驟 2: 找到 prompt 變數
|
||||
|
||||
在函式中搜尋 `const prompt =` 或 `const prompt = \``:
|
||||
```javascript
|
||||
const prompt = `請為HR崗位管理系統生成崗位基礎資料。請用繁體中文回覆。
|
||||
...
|
||||
`;
|
||||
```
|
||||
|
||||
#### 步驟 3: 修改 Prompt 內容
|
||||
|
||||
根據需求修改:
|
||||
|
||||
**A. 修改生成風格**
|
||||
```javascript
|
||||
// 修改前
|
||||
const prompt = `請為HR崗位管理系統生成崗位基礎資料。請用繁體中文回覆。
|
||||
|
||||
// 修改後(加入語氣要求)
|
||||
const prompt = `請以專業正式且友善的語氣,為HR崗位管理系統生成崗位基礎資料。請用繁體中文回覆。
|
||||
```
|
||||
|
||||
**B. 修改欄位說明**
|
||||
```javascript
|
||||
// 修改前
|
||||
- positionCode: 崗位編號(格式如 ENG-001, MGR-002, SAL-003)
|
||||
|
||||
// 修改後(改變編號規則)
|
||||
- positionCode: 崗位編號(格式:部門縮寫-年份-流水號,如 ENG-2024-001)
|
||||
```
|
||||
|
||||
**C. 新增欄位規則**
|
||||
```javascript
|
||||
// 在「欄位說明」區塊新增
|
||||
- positionPriority: 優先級(HIGH=高, MID=中, LOW=低)
|
||||
```
|
||||
|
||||
**D. 調整輸出格式**
|
||||
```javascript
|
||||
// 修改前
|
||||
請直接返回JSON格式,只包含需要生成的欄位,不要有任何其他文字:
|
||||
|
||||
// 修改後(要求更多資訊)
|
||||
請直接返回JSON格式,只包含需要生成的欄位。每個欄位請加上「_note」後綴提供生成理由:
|
||||
{
|
||||
"positionCode": "ENG-001",
|
||||
"positionCode_note": "根據技術職的慣例生成",
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
#### 步驟 4: 測試修改結果
|
||||
|
||||
1. 儲存 `index.html` 檔案
|
||||
2. 重新整理瀏覽器頁面(Ctrl+F5 強制重新整理)
|
||||
3. 點擊對應頁籤的 "✨ I'm feeling lucky" 按鈕
|
||||
4. 檢查生成的內容是否符合預期
|
||||
|
||||
### ⚠️ 修改時的注意事項
|
||||
|
||||
1. **保持 JSON 格式要求**: 必須要求 LLM 返回純 JSON,否則程式解析會失敗
|
||||
2. **不要移除欄位動態列表**: `${emptyFields.join(', ')}` 這段必須保留
|
||||
3. **維持上下文機制**: `${contextInfo}` 這段是自動填入已有資料的機制,不要刪除
|
||||
4. **注意反引號**: Prompt 使用反引號 `` ` `` 包裹,內部不可再使用反引號
|
||||
5. **測試跨欄位引用**: 有些頁籤會引用其他頁籤的資料(如招聘要求引用崗位名稱)
|
||||
|
||||
---
|
||||
|
||||
## Prompt 設計原則
|
||||
|
||||
### 🎨 系統採用的 Prompt 設計原則
|
||||
|
||||
#### 1. **智能空白檢測**
|
||||
```javascript
|
||||
const emptyFields = getEmptyFields(allFields);
|
||||
```
|
||||
- 只生成尚未填寫的欄位
|
||||
- 避免覆蓋使用者已輸入的資料
|
||||
- 提升生成效率
|
||||
|
||||
#### 2. **上下文感知生成**
|
||||
```javascript
|
||||
const contextInfo = Object.keys(existingData).length > 0
|
||||
? `\n\n已填寫的資料(請參考這些內容來生成相關的資料):\n${JSON.stringify(existingData, null, 2)}`
|
||||
: '';
|
||||
```
|
||||
- 將已填寫的資料作為上下文
|
||||
- 讓 LLM 生成與現有資料一致的內容
|
||||
- 提升資料連貫性
|
||||
|
||||
#### 3. **結構化輸出**
|
||||
```javascript
|
||||
const prompt = `...
|
||||
請直接返回JSON格式,只包含需要生成的欄位,不要有任何其他文字:
|
||||
{
|
||||
${emptyFields.map(f => `"${f}": "..."`).join(',\n ')}
|
||||
}`;
|
||||
```
|
||||
- 要求 LLM 返回純 JSON
|
||||
- 提供 JSON 格式範本
|
||||
- 方便程式解析
|
||||
|
||||
#### 4. **詳細的欄位說明**
|
||||
```javascript
|
||||
欄位說明:
|
||||
- positionCode: 崗位編號(格式如 ENG-001, MGR-002, SAL-003)
|
||||
- positionCategory: 崗位類別代碼(01=技術職, 02=管理職, 03=業務職, 04=行政職)
|
||||
```
|
||||
- 提供完整的代碼對照表
|
||||
- 說明格式規範和範例
|
||||
- 減少生成錯誤
|
||||
|
||||
#### 5. **繁體中文優先**
|
||||
```javascript
|
||||
const prompt = `請為HR崗位管理系統生成崗位基礎資料。請用繁體中文回覆。
|
||||
```
|
||||
- 明確要求使用繁體中文
|
||||
- 避免出現簡體字或英文
|
||||
|
||||
### 🚀 進階 Prompt 技巧
|
||||
|
||||
#### 技巧 1: 加入企業特色
|
||||
```javascript
|
||||
// 在 prompt 開頭加入
|
||||
const prompt = `你是一位專業的HR顧問,熟悉台灣半導體產業的人力資源管理。
|
||||
請為HR崗位管理系統生成崗位基礎資料。請用繁體中文回覆。
|
||||
```
|
||||
|
||||
#### 技巧 2: 加入範例
|
||||
```javascript
|
||||
// 在欄位說明後加入
|
||||
生成範例:
|
||||
{
|
||||
"positionCode": "ENG-001",
|
||||
"positionName": "前端工程師",
|
||||
"positionDesc": "負責開發和維護公司網站前端功能,提升使用者體驗。"
|
||||
}
|
||||
|
||||
請參考以上範例,生成類似格式的資料。
|
||||
```
|
||||
|
||||
#### 技巧 3: 加入條件邏輯
|
||||
```javascript
|
||||
// 根據職位類型調整 prompt
|
||||
const isManagerPosition = existingData.positionCategory === '02';
|
||||
const extraInstruction = isManagerPosition
|
||||
? '\n特別注意:這是管理職,請強調領導能力和團隊管理經驗。'
|
||||
: '';
|
||||
|
||||
const prompt = `請為HR崗位管理系統生成崗位基礎資料。請用繁體中文回覆。${extraInstruction}
|
||||
```
|
||||
|
||||
#### 技巧 4: 加入驗證規則
|
||||
```javascript
|
||||
const prompt = `...
|
||||
請確保生成的資料符合以下規則:
|
||||
1. 崗位編號必須以部門代碼開頭
|
||||
2. 編制人數必須為正整數
|
||||
3. 崗位描述長度在 20-100 字之間
|
||||
4. 所有代碼必須從提供的選項中選擇
|
||||
...`;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔍 偵錯與問題排查
|
||||
|
||||
### 常見問題 1: LLM 返回格式錯誤
|
||||
|
||||
**現象**: 點擊按鈕後出現「生成失敗,請稍後再試」
|
||||
|
||||
**可能原因**:
|
||||
- LLM 返回的不是純 JSON 格式
|
||||
- JSON 中包含多餘的文字說明
|
||||
- JSON 格式不正確(缺少逗號、括號等)
|
||||
|
||||
**解決方法**:
|
||||
在 Prompt 中加強格式要求:
|
||||
```javascript
|
||||
const prompt = `...
|
||||
請直接返回JSON格式,不要包含任何markdown標記(如 \`\`\`json),不要有任何其他文字說明:
|
||||
{
|
||||
${emptyFields.map(f => `"${f}": "..."`).join(',\n ')}
|
||||
}`;
|
||||
```
|
||||
|
||||
### 常見問題 2: 生成內容不符合預期
|
||||
|
||||
**現象**: 生成的內容格式正確,但內容不理想
|
||||
|
||||
**解決方法**:
|
||||
1. 檢查上下文資料是否正確傳遞
|
||||
2. 增加更詳細的欄位說明
|
||||
3. 提供具體範例
|
||||
4. 調整 Prompt 語氣和指令
|
||||
|
||||
### 常見問題 3: 部分欄位未填充
|
||||
|
||||
**現象**: 只填充了部分欄位,其他欄位仍為空
|
||||
|
||||
**可能原因**:
|
||||
- LLM 返回的 JSON 缺少某些欄位
|
||||
- 欄位名稱不匹配(大小寫、前綴問題)
|
||||
|
||||
**解決方法**:
|
||||
檢查欄位映射邏輯,特別是 `generateJobDesc()` 函式中的 `fieldMapping`:
|
||||
```javascript
|
||||
const fieldMapping = {
|
||||
'empNo': 'jd_empNo',
|
||||
'empName': 'jd_empName',
|
||||
...
|
||||
};
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📚 參考資源
|
||||
|
||||
### 相關檔案
|
||||
|
||||
- **主程式**: [index.html](index.html) - 包含所有 AI 生成函式
|
||||
- **LLM API 配置**: [llm_config.py](llm_config.py) - LLM 模型設定
|
||||
- **環境變數**: [.env](.env) - API Key 和模型設定
|
||||
|
||||
### 相關函式
|
||||
|
||||
- **`callClaudeAPI(prompt)`**: 呼叫 LLM API 的核心函式
|
||||
- **`getEmptyFields(allFields)`**: 檢測空白欄位
|
||||
- **`fillIfEmpty(fieldId, value)`**: 只填充空白欄位
|
||||
- **`setButtonLoading(btn, isLoading)`**: 設定按鈕載入狀態
|
||||
|
||||
### LLM 模型設定
|
||||
|
||||
系統支援多種 LLM 模型,在 `.env` 檔案中設定:
|
||||
|
||||
```env
|
||||
# Gemini API Configuration
|
||||
GEMINI_API_KEY=your_api_key
|
||||
GEMINI_MODEL=gemini-1.5-flash
|
||||
|
||||
# DeepSeek API Configuration
|
||||
DEEPSEEK_API_KEY=your_deepseek_api_key
|
||||
DEEPSEEK_API_URL=https://api.deepseek.com/v1
|
||||
|
||||
# OpenAI API Configuration
|
||||
OPENAI_API_KEY=your_openai_api_key
|
||||
OPENAI_API_URL=https://api.openai.com/v1
|
||||
|
||||
# Ollama API Configuration
|
||||
OLLAMA_API_URL=https://ollama_pjapi.theaken.com
|
||||
OLLAMA_MODEL=deepseek-reasoner
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ 最佳實踐
|
||||
|
||||
### ✨ 撰寫好的 Prompt 的建議
|
||||
|
||||
1. **明確的指令**: 清楚說明要生成什麼類型的資料
|
||||
2. **詳細的格式說明**: 提供完整的代碼對照表和格式範例
|
||||
3. **上下文資訊**: 包含已填寫的資料作為參考
|
||||
4. **結構化輸出**: 要求返回 JSON 格式,方便解析
|
||||
5. **語言偏好**: 明確指定使用繁體中文
|
||||
6. **錯誤處理**: 加入驗證規則,減少生成錯誤
|
||||
|
||||
### 📝 Prompt 維護建議
|
||||
|
||||
1. **版本控制**: 重大修改前先備份原 Prompt
|
||||
2. **測試驗證**: 每次修改後都要測試所有情境
|
||||
3. **文件更新**: 修改後同步更新此說明文件
|
||||
4. **使用者回饋**: 根據實際使用情況調整 Prompt
|
||||
|
||||
---
|
||||
|
||||
## 🎯 總結
|
||||
|
||||
### 快速參考表
|
||||
|
||||
| 頁籤 | 函式 | 程式碼行數 | 主要用途 | 欄位數量 |
|
||||
|-----|------|-----------|---------|---------|
|
||||
| 崗位基礎資料 | `generatePositionBasic()` | 2179-2251 | 生成崗位基本資訊 | 8 |
|
||||
| 崗位招聘要求 | `generatePositionRecruit()` | 2253-2328 | 生成招聘需求 | 14 |
|
||||
| 職務基礎資料 | `generateJobBasic()` | 2330-2423 | 生成職務資訊 | 8+2 checkbox |
|
||||
| 部門職責維護 | `generateDeptFunction()` | 3778-3839 | 生成部門職責 | 9 |
|
||||
| 崗位描述 (JD) | `generateJobDesc()` | 2425-2541 | 生成完整JD | 18 |
|
||||
|
||||
### 核心機制
|
||||
|
||||
1. **智能檢測**: 自動識別空白欄位
|
||||
2. **上下文感知**: 參考已填寫資料生成
|
||||
3. **結構化輸出**: JSON 格式便於解析
|
||||
4. **安全填充**: 只填充空白欄位,不覆蓋現有資料
|
||||
|
||||
---
|
||||
|
||||
> **維護提醒**: 當系統新增或修改欄位時,記得同步更新:
|
||||
> 1. HTML 表單欄位
|
||||
> 2. JavaScript 函式中的 `allFields` 陣列
|
||||
> 3. Prompt 中的欄位說明
|
||||
> 4. 此說明文件
|
||||
|
||||
---
|
||||
|
||||
**文件結束** | 有問題請找 AI,不要找我 ¯\\_(ツ)_/¯
|
||||
263
docs/三個錦囊設計.md
Normal file
263
docs/三個錦囊設計.md
Normal file
@@ -0,0 +1,263 @@
|
||||
# 三個錦囊功能設計
|
||||
|
||||
## 功能概述
|
||||
將原本的單一 "I'm feeling lucky" 按鈕改為三個可自定義的 AI 生成按鈕("三個錦囊")。
|
||||
|
||||
## UI 設計
|
||||
|
||||
### 視覺效果
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ 🎁 錦囊一 🎁 錦囊二 🎁 錦囊三 │
|
||||
│ [標題] [標題] [標題] │
|
||||
│ ⚙️ 編輯 ⚙️ 編輯 ⚙️ 編輯 │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 互動流程
|
||||
1. **點擊錦囊按鈕** → 使用預設或自定義的 prompt 調用 AI
|
||||
2. **點擊編輯圖示** → 彈出對話框,顯示並可編輯當前 prompt
|
||||
3. **Prompt 儲存** → 儲存至 localStorage(按模組區分)
|
||||
|
||||
## 資料結構
|
||||
|
||||
### LocalStorage 結構
|
||||
```javascript
|
||||
{
|
||||
"prompts": {
|
||||
"positionBasic": {
|
||||
"bag1": { "title": "簡化版", "prompt": "..." },
|
||||
"bag2": { "title": "標準版", "prompt": "..." },
|
||||
"bag3": { "title": "詳細版", "prompt": "..." }
|
||||
},
|
||||
"positionRecruit": {
|
||||
"bag1": { "title": "一般需求", "prompt": "..." },
|
||||
"bag2": { "title": "高階需求", "prompt": "..." },
|
||||
"bag3": { "title": "專業需求", "prompt": "..." }
|
||||
},
|
||||
"jobBasic": { ... },
|
||||
"deptFunction": { ... },
|
||||
"jobDesc": { ... }
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 預設 Prompt 模板
|
||||
|
||||
### 崗位基礎資料 - 基礎資料頁籤
|
||||
|
||||
#### 錦囊一:簡化版(僅填必填欄位)
|
||||
```
|
||||
你是專業人資顧問,熟悉半導體製造業。請生成崗位基礎資料(僅必填欄位)。
|
||||
|
||||
已填寫的資料:{existingData}
|
||||
需要生成的欄位:positionCode, positionName
|
||||
|
||||
請用繁體中文,返回 JSON 格式。
|
||||
```
|
||||
|
||||
#### 錦囊二:標準版(常用欄位)
|
||||
```
|
||||
你是專業人資顧問,熟悉半導體製造業。請生成崗位基礎資料(標準版)。
|
||||
|
||||
已填寫的資料:{existingData}
|
||||
需要生成的欄位:positionCode, positionName, positionCategory, positionLevel, headcount
|
||||
|
||||
欄位說明:
|
||||
- positionCode: 崗位編號(格式如 ENG-001)
|
||||
- positionName: 崗位名稱
|
||||
- positionCategory: 崗位類別代碼(01=技術職, 02=管理職, 03=業務職, 04=行政職)
|
||||
- positionLevel: 崗位級別(L1-L7)
|
||||
- headcount: 編制人數(1-10)
|
||||
|
||||
請用繁體中文,返回 JSON 格式。
|
||||
```
|
||||
|
||||
#### 錦囊三:詳細版(所有欄位)
|
||||
```
|
||||
你是專業人資顧問,熟悉半導體製造業的人資所有流程。請生成完整的崗位基礎資料。
|
||||
|
||||
已填寫的資料:{existingData}
|
||||
需要生成的欄位:positionCode, positionName, positionCategory, positionNature, headcount, positionLevel, positionDesc, positionRemark
|
||||
|
||||
欄位說明:
|
||||
- positionCode: 崗位編號(格式如 ENG-001, MGR-002)
|
||||
- positionName: 崗位名稱
|
||||
- positionCategory: 崗位類別代碼(01=技術職, 02=管理職, 03=業務職, 04=行政職)
|
||||
- positionNature: 崗位性質代碼(FT=全職, PT=兼職, CT=約聘, IN=實習)
|
||||
- headcount: 編制人數(1-10之間的數字字串)
|
||||
- positionLevel: 崗位級別(L1到L7)
|
||||
- positionDesc: 崗位描述(條列式,用換行分隔)
|
||||
- positionRemark: 崗位備注(條列式,用換行分隔)
|
||||
|
||||
請用繁體中文,返回 JSON 格式,不要有任何其他文字。
|
||||
```
|
||||
|
||||
### 崗位基礎資料 - 招聘要求頁籤
|
||||
|
||||
#### 錦囊一:基本需求
|
||||
```
|
||||
請生成「{positionName}」的基本招聘要求。
|
||||
|
||||
已填寫的資料:{existingData}
|
||||
需要生成的欄位:minEducation, workExperience, jobType, jobTitle
|
||||
|
||||
請用繁體中文,返回 JSON 格式。
|
||||
```
|
||||
|
||||
#### 錦囊二:標準需求
|
||||
```
|
||||
請生成「{positionName}」的標準招聘要求。
|
||||
|
||||
已填寫的資料:{existingData}
|
||||
需要生成的欄位:minEducation, salaryRange, workExperience, jobType, recruitPosition, jobTitle, positionReq, skillReq
|
||||
|
||||
欄位說明:
|
||||
- minEducation: 最低學歷代碼(HS=高中職, JC=專科, BA=大學, MA=碩士, PHD=博士)
|
||||
- salaryRange: 薪酬范圍代碼(A=30000以下, B=30000-50000, C=50000-80000, D=80000-120000, E=120000以上, N=面議)
|
||||
- workExperience: 工作經驗年數(0=不限, 1, 3, 5, 10)
|
||||
- jobType: 工作性質代碼(FT=全職, PT=兼職, CT=約聘, DP=派遣)
|
||||
- recruitPosition: 招聘職位代碼(ENG=工程師, MGR=經理, AST=助理, OP=作業員, SAL=業務)
|
||||
- positionReq: 崗位要求(條列式,用換行分隔)
|
||||
- skillReq: 技能要求(條列式,用換行分隔)
|
||||
|
||||
請用繁體中文,返回 JSON 格式。
|
||||
```
|
||||
|
||||
#### 錦囊三:完整需求
|
||||
```
|
||||
請生成「{positionName}」的完整招聘要求資料。
|
||||
|
||||
已填寫的資料:{existingData}
|
||||
需要生成所有空白欄位。
|
||||
|
||||
(完整欄位說明同標準版,包含所有 18 個欄位)
|
||||
|
||||
請用繁體中文,返回 JSON 格式。
|
||||
```
|
||||
|
||||
## 實作步驟
|
||||
|
||||
### 1. HTML 結構更新
|
||||
將單一按鈕:
|
||||
```html
|
||||
<button type="button" class="ai-generate-btn" onclick="generatePositionBasic()">
|
||||
<span>✨ I'm feeling lucky</span>
|
||||
</button>
|
||||
```
|
||||
|
||||
改為三個錦囊:
|
||||
```html
|
||||
<div class="ai-bags-container">
|
||||
<div class="ai-bag" data-bag="1" onclick="executeAIBag('positionBasic', 1)">
|
||||
<div class="bag-icon">🎁</div>
|
||||
<div class="bag-title" id="bag1-title-positionBasic">錦囊一</div>
|
||||
<button class="bag-edit-btn" onclick="editBagPrompt(event, 'positionBasic', 1)">⚙️</button>
|
||||
</div>
|
||||
<div class="ai-bag" data-bag="2" onclick="executeAIBag('positionBasic', 2)">
|
||||
<div class="bag-icon">🎁</div>
|
||||
<div class="bag-title" id="bag2-title-positionBasic">錦囊二</div>
|
||||
<button class="bag-edit-btn" onclick="editBagPrompt(event, 'positionBasic', 2)">⚙️</button>
|
||||
</div>
|
||||
<div class="ai-bag" data-bag="3" onclick="executeAIBag('positionBasic', 3)">
|
||||
<div class="bag-icon">🎁</div>
|
||||
<div class="bag-title" id="bag3-title-positionBasic">錦囊三</div>
|
||||
<button class="bag-edit-btn" onclick="editBagPrompt(event, 'positionBasic', 3)">⚙️</button>
|
||||
</div>
|
||||
</div>
|
||||
```
|
||||
|
||||
### 2. CSS 樣式
|
||||
```css
|
||||
.ai-bags-container {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
gap: 16px;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.ai-bag {
|
||||
position: relative;
|
||||
padding: 20px;
|
||||
background: linear-gradient(135deg, #9b59b6 0%, #8e44ad 100%);
|
||||
border-radius: 8px;
|
||||
cursor: pointer;
|
||||
transition: all 0.3s ease;
|
||||
box-shadow: 0 4px 15px rgba(155, 89, 182, 0.3);
|
||||
}
|
||||
|
||||
.ai-bag:hover {
|
||||
transform: translateY(-4px);
|
||||
box-shadow: 0 6px 20px rgba(155, 89, 182, 0.5);
|
||||
}
|
||||
|
||||
.ai-bag .bag-icon {
|
||||
font-size: 2rem;
|
||||
text-align: center;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.ai-bag .bag-title {
|
||||
color: white;
|
||||
font-weight: 600;
|
||||
text-align: center;
|
||||
font-size: 0.95rem;
|
||||
}
|
||||
|
||||
.ai-bag .bag-edit-btn {
|
||||
position: absolute;
|
||||
top: 8px;
|
||||
right: 8px;
|
||||
background: rgba(255, 255, 255, 0.2);
|
||||
border: none;
|
||||
border-radius: 4px;
|
||||
padding: 4px 8px;
|
||||
cursor: pointer;
|
||||
font-size: 0.9rem;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
.ai-bag .bag-edit-btn:hover {
|
||||
background: rgba(255, 255, 255, 0.3);
|
||||
transform: scale(1.1);
|
||||
}
|
||||
```
|
||||
|
||||
### 3. JavaScript 函式
|
||||
|
||||
#### 執行 AI 錦囊
|
||||
```javascript
|
||||
async function executeAIBag(module, bagNumber) {
|
||||
const prompts = getModulePrompts(module);
|
||||
const bagPrompt = prompts[`bag${bagNumber}`];
|
||||
|
||||
// 使用 prompt 調用 AI
|
||||
await callClaudeAPI(bagPrompt.prompt);
|
||||
}
|
||||
```
|
||||
|
||||
#### 編輯 Prompt
|
||||
```javascript
|
||||
function editBagPrompt(event, module, bagNumber) {
|
||||
event.stopPropagation();
|
||||
|
||||
// 顯示編輯對話框
|
||||
showPromptEditModal(module, bagNumber);
|
||||
}
|
||||
```
|
||||
|
||||
## 優點
|
||||
|
||||
1. ✅ **靈活性高** - 用戶可自定義每個錦囊的用途
|
||||
2. ✅ **效率提升** - 三個預設選項涵蓋不同需求場景
|
||||
3. ✅ **學習友好** - 顯示 prompt 有助於理解 AI 運作
|
||||
4. ✅ **可擴展** - 未來可增加更多錦囊或分享功能
|
||||
|
||||
## 待實作功能
|
||||
|
||||
- [ ] HTML 結構更新(5 個模組)
|
||||
- [ ] CSS 樣式新增
|
||||
- [ ] JavaScript 函式實作
|
||||
- [ ] LocalStorage 管理
|
||||
- [ ] 編輯 Modal 對話框
|
||||
- [ ] 預設 Prompt 初始化
|
||||
26
docs/建議專案結構.md
Normal file
26
docs/建議專案結構.md
Normal file
@@ -0,0 +1,26 @@
|
||||
project_name/
|
||||
├── .env # 環境變數(不進版控)
|
||||
├── .env.example # 環境變數範本
|
||||
├── .gitignore
|
||||
├── README.md
|
||||
├── requirements.txt
|
||||
├── app.py # 主程式入口
|
||||
├── config.py # 設定檔
|
||||
├── preview.html # UI 預覽
|
||||
│
|
||||
├── docs/
|
||||
│ ├── SDD.md # 系統設計文件
|
||||
│ ├── security_audit.md # 資安檢視報告
|
||||
│ ├── user_command_log.md # 用戶指令記錄
|
||||
│ ├── CHANGELOG.md # 版本變更紀錄
|
||||
│ └── API_DOC.md # API 文件
|
||||
│
|
||||
├── models/ # 資料庫模型
|
||||
├── routes/ # 路由模組
|
||||
├── services/ # 商業邏輯
|
||||
├── utils/ # 工具函式
|
||||
├── templates/ # HTML 模板
|
||||
└── static/ # 靜態資源
|
||||
├── css/
|
||||
├── js/
|
||||
└── images/
|
||||
176
docs/更新欄位名稱.md
Normal file
176
docs/更新欄位名稱.md
Normal file
@@ -0,0 +1,176 @@
|
||||
# 系統表單欄位規範書 (Standardized Field Specifications)
|
||||
|
||||
## 1. 命名規範與前綴定義 (Naming Conventions)
|
||||
|
||||
為了確保系統一致性,HTML 元素 ID 採用 `[模組前綴]_[標準欄位名]` 的命名方式。
|
||||
|
||||
| 模組名稱 | 模組前綴 (Prefix) | 說明 |
|
||||
| :--- | :--- | :--- |
|
||||
| **崗位管理 (Position)** | `pos_` | 崗位基礎資料 |
|
||||
| **招聘條件 (Recruit)** | `rec_` | 崗位內的招聘頁籤 |
|
||||
| **職務管理 (Job)** | `job_` | 全公司通用的職務定義 |
|
||||
| **部門職責 (DeptFunc)** | `df_` | 部門功能與職責定義 |
|
||||
| **崗位描述 (JobDesc)** | `jd_` | 最終的 JD 產出表單 |
|
||||
|
||||
---
|
||||
|
||||
## 2. 崗位基礎資料模組 (Position Module)
|
||||
|
||||
**表單代號**: `positionForm`
|
||||
**資料表**: `Position`
|
||||
|
||||
### 2.1 基礎資料頁籤 (tab-position-basic)
|
||||
|
||||
| # | 欄位顯示名稱 | 標準化 HTML ID | 資料庫欄位名稱 | 類型 | 必填 | 預設 | 備註 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 1 | 事業體 | `pos_businessUnit` | `businessUnit` | select | 否 | - | SBU, MBU... (聯動L1) |
|
||||
| 2 | 處級單位 | `pos_division` | `division` | select | 否 | - | (聯動L2) |
|
||||
| 3 | 部級單位 | `pos_department` | `department` | select | 否 | - | (聯動L3) |
|
||||
| 4 | 課級單位 | `pos_section` | `section` | text | 否 | - | - |
|
||||
| 5 | **崗位編號** | `pos_code` | `positionCode` | text | **是** | - | 唯一識別碼 (PK) |
|
||||
| 6 | 生效日期 | `pos_effectiveDate` | `effectiveDate` | date | 否 | Today | - |
|
||||
| 7 | **崗位名稱** | `pos_name` | `positionName` | text | **是** | - | - |
|
||||
| 8 | 崗位級別 | `pos_level` | `positionLevel` | select | 否 | - | L1-L7 |
|
||||
| 9 | 崗位類別 | `pos_category` | `positionCategory` | select | 否 | - | onchange 觸發 |
|
||||
| 10 | 崗位類別名稱 | `pos_categoryName` | `positionCategoryName` | text | 否 | - | readonly |
|
||||
| 11 | 崗位性質 | `pos_type` | `positionType` | select | 否 | - | FT, PT, CT, IN |
|
||||
| 12 | 崗位性質名稱 | `pos_typeName` | `positionTypeName` | text | 否 | - | readonly |
|
||||
| 13 | 編制人數 | `pos_headcount` | `headcount` | number | 否 | 0 | min=0 |
|
||||
| 14 | 崗位描述 | `pos_desc` | `description` | textarea | 否 | - | rows=6 |
|
||||
| 15 | 崗位備注 | `pos_remark` | `remark` | textarea | 否 | - | rows=6 |
|
||||
|
||||
### 2.2 招聘要求資料頁籤 (tab-position-recruit)
|
||||
|
||||
| # | 欄位顯示名稱 | 標準化 HTML ID | 資料庫欄位名稱 | 類型 | 必填 | 預設 | 備註 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 1 | 最低學歷 | `rec_eduLevel` | `educationLevel` | select | 否 | - | HS, BA, MA, PHD |
|
||||
| 2 | 要求性別 | `rec_gender` | `requiredGender` | select | 否 | Any | M, F, Any |
|
||||
| 3 | 薪酬范圍 | `rec_salaryRange` | `salaryRange` | select | 否 | - | A-E, Negotiable |
|
||||
| 4 | 工作經驗 | `rec_expYears` | `experienceYears` | select | 否 | - | 0, 1, 3, 5, 10+ |
|
||||
| 5 | 最小年齡 | `rec_minAge` | `minAge` | number | 否 | - | min=18 |
|
||||
| 6 | 最大年齡 | `rec_maxAge` | `maxAge` | number | 否 | - | max=65 |
|
||||
| 7 | 工作性質 | `rec_jobType` | `jobType` | select | 否 | - | 招聘用性質分類 |
|
||||
| 8 | 招聘職位 | `rec_position` | `recruitPosition` | select | 否 | - | ENG, MGR... |
|
||||
| 9 | 職位名稱(對外) | `rec_jobTitle` | `jobTitle` | text | 否 | - | 對外招聘用Title |
|
||||
| 10 | 上級崗位編號 | `rec_superiorCode` | `superiorPositionCode` | text | 否 | - | - |
|
||||
| 11 | 職位描述(JD) | `rec_jobDesc` | `recruitJobDesc` | textarea | 否 | - | 招聘廣告用 |
|
||||
| 12 | 崗位要求(Req) | `rec_positionReq` | `recruitRequirements` | textarea | 否 | - | 招聘廣告用 |
|
||||
| 13 | 證照要求 | `rec_certReq` | `certRequirements` | select | 否 | - | - |
|
||||
| 14 | 專業要求 | `rec_majorReq` | `majorRequirements` | text | 否 | - | Modal選擇 |
|
||||
| 15 | 技能要求 | `rec_skillReq` | `skillRequirements` | text | 否 | - | Tags input |
|
||||
| 16 | 語言要求 | `rec_langReq` | `langRequirements` | text | 否 | - | - |
|
||||
| 17 | 其他要求 | `rec_otherReq` | `otherRequirements` | text | 否 | - | - |
|
||||
| 18 | 招聘備注 | `rec_remark` | `recruitRemark` | textarea | 否 | - | - |
|
||||
|
||||
---
|
||||
|
||||
## 3. 職務基礎資料模組 (Job Module)
|
||||
|
||||
**表單代號**: `jobForm`
|
||||
**資料表**: `Job`
|
||||
|
||||
| # | 欄位顯示名稱 | 標準化 HTML ID | 資料庫欄位名稱 | 類型 | 必填 | 預設 | 備註 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 1 | **職務類別編號** | `job_category` | `jobCategoryCode` | select | **是** | - | onchange 觸發 |
|
||||
| 2 | 職務類別名稱 | `job_categoryName` | `jobCategoryName` | text | 否 | - | readonly |
|
||||
| 3 | **職務編號** | `job_code` | `jobCode` | text | **是** | - | 唯一識別碼 |
|
||||
| 4 | **職務名稱** | `job_name` | `jobName` | text | **是** | - | - |
|
||||
| 5 | 職務英文 | `job_nameEn` | `jobNameEn` | text | 否 | - | - |
|
||||
| 6 | 生效日期 | `job_effectiveDate`| `effectiveDate` | date | 否 | - | - |
|
||||
| 7 | 職務層級 | `job_level` | `jobLevel` | text | 否 | *保密* | **敏感欄位** |
|
||||
| 8 | 編制人數 | `job_headcount` | `headcount` | number | 否 | - | - |
|
||||
| 9 | 排列順序 | `job_sortOrder` | `sortOrder` | number | 否 | - | - |
|
||||
| 10 | 全勤獎金 | `job_hasAttBonus` | `hasAttendanceBonus` | checkbox| 否 | false| Toggle Switch |
|
||||
| 11 | 住房補貼 | `job_hasHouseAllow`| `hasHousingAllowance` | checkbox| 否 | false| Toggle Switch |
|
||||
| 12 | 職務備注 | `job_remark` | `remark` | textarea | 否 | - | - |
|
||||
|
||||
---
|
||||
|
||||
## 4. 部門職責模組 (DeptFunction Module)
|
||||
|
||||
**表單代號**: `deptFunctionForm`
|
||||
**資料表**: `DeptFunction`
|
||||
|
||||
| # | 欄位顯示名稱 | 標準化 HTML ID | 資料庫欄位名稱 | 類型 | 必填 | 預設 | 備註 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 1 | **職責編號** | `df_code` | `dfCode` | text | **是** | - | DF-001 |
|
||||
| 2 | **職責名稱** | `df_name` | `dfName` | text | **是** | - | - |
|
||||
| 3 | **事業體** | `df_businessUnit` | `businessUnit` | select | **是** | - | (已合併重複欄位) |
|
||||
| 4 | **處級單位** | `df_division` | `division` | select | **是** | - | - |
|
||||
| 5 | **部級單位** | `df_department` | `department` | select | **是** | - | - |
|
||||
| 6 | 課級單位 | `df_section` | `section` | text | 否 | - | - |
|
||||
| 7 | **對應崗位** | `df_posTitle` | `positionTitle` | select | **是** | - | 關聯 Position |
|
||||
| 8 | 崗位級別 | `df_posLevel` | `positionLevel` | select | 否 | - | 自動帶出或指定 |
|
||||
| 9 | 部門主管職稱 | `df_managerTitle` | `managerTitle` | text | 否 | - | - |
|
||||
| 10 | **生效日期** | `df_effectiveDate` | `effectiveDate` | date | **是** | - | - |
|
||||
| 11 | 人數上限 | `df_headcountLimit`| `headcountLimit` | number | 否 | - | - |
|
||||
| 12 | 狀態 | `df_status` | `status` | select | 否 | active | - |
|
||||
| 13 | 部門使命 | `df_mission` | `mission` | textarea | 否 | - | - |
|
||||
| 14 | 部門願景 | `df_vision` | `vision` | textarea | 否 | - | - |
|
||||
| 15 | **核心職責** | `df_coreFunc` | `coreFunctions` | textarea | **是** | - | - |
|
||||
| 16 | KPIs | `df_kpis` | `kpis` | textarea | 否 | - | - |
|
||||
| 17 | 協作部門 | `df_collab` | `collaboration` | textarea | 否 | - | - |
|
||||
| 18 | 備注 | `df_remark` | `remark` | textarea | 否 | - | - |
|
||||
|
||||
---
|
||||
|
||||
## 5. 崗位描述模組 (JobDescription Module)
|
||||
|
||||
**表單代號**: `jobDescForm`
|
||||
**資料表**: `JobDescription` (部分欄位為 View)
|
||||
|
||||
### 5.1 基本信息 (Header)
|
||||
|
||||
| # | 欄位顯示名稱 | 標準化 HTML ID | 資料庫欄位名稱 | 類型 | 必填 | 備註 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 1 | 工號 | `jd_empNo` | `empNo` | text | 否 | Search Modal |
|
||||
| 2 | 姓名 | `jd_empName` | `empName` | text | 否 | Readonly |
|
||||
| 3 | 崗位代碼 | `jd_posCode` | `positionCode` | text | 否 | 關聯鍵 |
|
||||
| 4 | 版本日期 | `jd_versionDate` | `versionDate` | date | 否 | - |
|
||||
|
||||
### 5.2 崗位資訊 (Position Info - Readonly/Derived)
|
||||
|
||||
| # | 欄位顯示名稱 | 標準化 HTML ID | 資料庫欄位名稱 | 類型 | 必填 | 備註 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 1 | 崗位名稱 | `jd_posName` | `positionName` | text | 否 | - |
|
||||
| 2 | 事業體 | `jd_businessUnit` | `businessUnit` | select | 否 | - |
|
||||
| 3 | 處級單位 | `jd_division` | `division` | select | 否 | - |
|
||||
| 4 | 部級單位 | `jd_department` | `department` | select | 否 | - |
|
||||
| 5 | 課級單位 | `jd_section` | `section` | text | 否 | - |
|
||||
| 6 | 崗位級別 | `jd_posLevel` | `positionLevel` | select | 否 | - |
|
||||
| 7 | 生效日期 | `jd_posEffDate` | `positionEffectiveDate`| date | 否 | - |
|
||||
| 8 | **直接主管** | `jd_supervisor` | `directSupervisor` | text | 否 | - |
|
||||
| 9 | 職等&職務 | `jd_gradeJob` | `positionGradeJob` | text | 否 | Modal |
|
||||
| 10 | **匯報對象** | `jd_reportTo` | `reportTo` | text | 否 | Modal |
|
||||
| 11 | 直接下屬 | `jd_directReports` | `directReports` | text | 否 | - |
|
||||
| 12 | 任職地點 | `jd_location` | `workLocation` | select | 否 | - |
|
||||
| 13 | 員工屬性 | `jd_empAttr` | `empAttribute` | select | 否 | - |
|
||||
|
||||
### 5.3 職責與要求 (Details)
|
||||
|
||||
| # | 欄位顯示名稱 | 標準化 HTML ID | 資料庫欄位名稱 | 類型 | 必填 | 備註 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 1 | 部門職責代碼 | `jd_dfCode` | `dfCode` | text | 否 | 關聯 DeptFunction |
|
||||
| 2 | 崗位設置目的 | `jd_purpose` | `positionPurpose` | text | 否 | - |
|
||||
| 3 | **主要職責** | `jd_mainResp` | `mainResponsibilities`| textarea | 否 | 編號清單 |
|
||||
| 4 | 教育程度 | `jd_eduLevel` | `educationLevel` | text | 否 | - |
|
||||
| 5 | 基本技能 | `jd_basicSkills` | `basicSkills` | textarea | 否 | - |
|
||||
| 6 | 專業知識 | `jd_proKnowledge` | `professionalKnowledge` | textarea | 否 | - |
|
||||
| 7 | 工作經驗 | `jd_expReq` | `experienceRequirements`| textarea | 否 | - |
|
||||
| 8 | 其他要求 | `jd_otherReq` | `otherRequirements` | textarea | 否 | - |
|
||||
|
||||
---
|
||||
|
||||
## 6. 共用設定與資料字典
|
||||
|
||||
### 6.1 模態框 (Modals)
|
||||
* `MajorModal` (專業要求)
|
||||
* `EmpSearchModal` (員工搜索)
|
||||
* `OrgSearchModal` (組織搜索)
|
||||
* `GradeJobModal` (職等職務)
|
||||
* `ReportToModal` (匯報對象)
|
||||
|
||||
### 6.2 特殊控件
|
||||
* **Toggle Switch**: 用於所有布林值 (Boolean) 欄位。
|
||||
* **Numbered Textarea**: 用於 `mainResponsibilities`,自動產生序號。
|
||||
* **Cascading Selects**: 組織層級 (BU -> Div -> Dept -> Section) 統一使用標準聯動邏輯。
|
||||
236
docs/權限矩陣.md
Normal file
236
docs/權限矩陣.md
Normal file
@@ -0,0 +1,236 @@
|
||||
# 系統權限矩陣 - 那都AI寫的,不要問我
|
||||
|
||||
## 系統概述
|
||||
本系統為「人力資源崗位管理系統」(HR Position Management System),採用三級權限架構設計,確保資料安全性與操作權限的合理分配。
|
||||
|
||||
---
|
||||
|
||||
## 角色定義
|
||||
|
||||
### 1. 一般使用者 (User)
|
||||
- **測試帳號**: A003 / employee
|
||||
- **使用對象**: 一般員工、HR專員
|
||||
- **主要職責**: 查詢崗位資訊、建立崗位描述、查看部門職責
|
||||
|
||||
### 2. 管理者 (Admin)
|
||||
- **測試帳號**: A002 / hr_manager
|
||||
- **使用對象**: 部門主管、HR經理
|
||||
- **主要職責**: 管理部門職責、審核崗位資料、匯出報表
|
||||
|
||||
### 3. 最高管理者 (Super Admin)
|
||||
- **測試帳號**: A001 / admin
|
||||
- **使用對象**: 系統管理員、HR總監
|
||||
- **主要職責**: 系統設定、使用者管理、完整權限控制
|
||||
|
||||
---
|
||||
|
||||
## 功能權限矩陣
|
||||
|
||||
| 功能模組 | 功能項目 | 一般使用者 | 管理者 | 最高管理者 | 說明 |
|
||||
|---------|---------|:---------:|:-----:|:---------:|------|
|
||||
| **崗位管理** | 查看崗位清單 | ✅ | ✅ | ✅ | 所有角色可查看 |
|
||||
| | 搜尋/篩選崗位 | ✅ | ✅ | ✅ | 所有角色可搜尋 |
|
||||
| | 查看崗位詳情 | ✅ | ✅ | ✅ | 所有角色可查看詳情 |
|
||||
| | 建立新崗位 | ❌ | ✅ | ✅ | 需要管理權限 |
|
||||
| | 編輯崗位資訊 | ❌ | ✅ | ✅ | 需要管理權限 |
|
||||
| | 刪除崗位 | ❌ | ❌ | ✅ | 僅最高管理者 |
|
||||
| **職位描述 (JD)** | 查看 JD | ✅ | ✅ | ✅ | 所有角色可查看 |
|
||||
| | 建立 JD | ✅ | ✅ | ✅ | 所有角色可建立 |
|
||||
| | 編輯自己的 JD | ✅ | ✅ | ✅ | 可編輯自己建立的 |
|
||||
| | 編輯所有 JD | ❌ | ✅ | ✅ | 管理者以上 |
|
||||
| | 刪除 JD | ❌ | ✅ | ✅ | 管理者以上 |
|
||||
| | 使用 AI 生成 JD | ✅ | ✅ | ✅ | 所有角色可使用 AI |
|
||||
| **部門職責** | 查看部門職責 | ✅ | ✅ | ✅ | 所有角色可查看 |
|
||||
| | 建立部門職責 | ❌ | ✅ | ✅ | 管理者以上 |
|
||||
| | 編輯部門職責 | ❌ | ✅ | ✅ | 管理者以上 |
|
||||
| | 刪除部門職責 | ❌ | ❌ | ✅ | 僅最高管理者 |
|
||||
| | 匯出部門職責 | ✅ | ✅ | ✅ | 所有角色可匯出 |
|
||||
| **崗位清單** | 查看清單 | ✅ | ✅ | ✅ | 所有角色可查看 |
|
||||
| | 篩選/排序 | ✅ | ✅ | ✅ | 所有角色可使用 |
|
||||
| | 匯出 CSV | ✅ | ✅ | ✅ | 所有角色可匯出 |
|
||||
| | 批量操作 | ❌ | ✅ | ✅ | 管理者以上 |
|
||||
| **報表匯出** | 匯出基本報表 | ✅ | ✅ | ✅ | 所有角色可匯出 |
|
||||
| | 匯出完整資料 | ❌ | ✅ | ✅ | 管理者以上 |
|
||||
| | 匯出統計報表 | ❌ | ✅ | ✅ | 管理者以上 |
|
||||
| **系統管理** | 查看系統設定 | ❌ | ❌ | ✅ | 僅最高管理者 |
|
||||
| | 修改系統設定 | ❌ | ❌ | ✅ | 僅最高管理者 |
|
||||
| | LLM 模型設定 | ❌ | ❌ | ✅ | 僅最高管理者 |
|
||||
| | 測試 API 連線 | ❌ | ❌ | ✅ | 僅最高管理者 |
|
||||
| **使用者管理** | 查看使用者清單 | ❌ | ❌ | ✅ | 僅最高管理者 |
|
||||
| | 新增使用者 | ❌ | ❌ | ✅ | 僅最高管理者 |
|
||||
| | 編輯使用者 | ❌ | ❌ | ✅ | 僅最高管理者 |
|
||||
| | 刪除使用者 | ❌ | ❌ | ✅ | 僅最高管理者 |
|
||||
| | 修改權限 | ❌ | ❌ | ✅ | 僅最高管理者 |
|
||||
| **AI 功能** | 使用 AI 生成 | ✅ | ✅ | ✅ | 所有角色可使用 |
|
||||
| | 選擇 AI 模型 | ❌ | ❌ | ✅ | 僅最高管理者設定 |
|
||||
| | 查看 AI 使用記錄 | ❌ | ✅ | ✅ | 管理者以上 |
|
||||
|
||||
---
|
||||
|
||||
## 資料訪問權限
|
||||
|
||||
### 資料可見性
|
||||
|
||||
| 資料類型 | 一般使用者 | 管理者 | 最高管理者 |
|
||||
|---------|:---------:|:-----:|:---------:|
|
||||
| 所有崗位資料 | ✅ 唯讀 | ✅ 可編輯 | ✅ 完全控制 |
|
||||
| 部門職責資料 | ✅ 唯讀 | ✅ 可編輯 | ✅ 完全控制 |
|
||||
| 自己建立的 JD | ✅ 可編輯 | ✅ 可編輯 | ✅ 可編輯 |
|
||||
| 他人建立的 JD | ✅ 唯讀 | ✅ 可編輯 | ✅ 可編輯 |
|
||||
| 使用者資料 | ❌ | ❌ | ✅ 完全控制 |
|
||||
| 系統設定 | ❌ | ❌ | ✅ 完全控制 |
|
||||
| 操作日誌 | ❌ | ✅ 唯讀 | ✅ 完全控制 |
|
||||
|
||||
### 資料操作權限
|
||||
|
||||
| 操作類型 | 一般使用者 | 管理者 | 最高管理者 |
|
||||
|---------|:---------:|:-----:|:---------:|
|
||||
| **C**reate (新增) | 僅 JD | 崗位、部門職責、JD | 所有資料 |
|
||||
| **R**ead (讀取) | 基本資料 | 包含統計資料 | 所有資料 |
|
||||
| **U**pdate (更新) | 僅自己的 JD | 大部分資料 | 所有資料 |
|
||||
| **D**elete (刪除) | ❌ | 部分資料 | 所有資料 |
|
||||
|
||||
---
|
||||
|
||||
## 頁面/模組訪問權限
|
||||
|
||||
| 頁面模組 | 一般使用者 | 管理者 | 最高管理者 |
|
||||
|---------|:---------:|:-----:|:---------:|
|
||||
| 🏠 首頁 (登入頁) | ✅ | ✅ | ✅ |
|
||||
| 📝 崗位說明書管理 | ✅ | ✅ | ✅ |
|
||||
| 🎯 部門職責管理 | ✅ 唯讀 | ✅ | ✅ |
|
||||
| 📋 崗位清單 | ✅ | ✅ | ✅ |
|
||||
| ⚙️ 管理者頁面 | ❌ | ⚠️ 部分功能 | ✅ |
|
||||
|
||||
### 管理者頁面功能細分
|
||||
|
||||
| 管理者頁面功能 | 一般使用者 | 管理者 | 最高管理者 |
|
||||
|--------------|:---------:|:-----:|:---------:|
|
||||
| 使用者管理 | ❌ | ❌ | ✅ |
|
||||
| LLM 模型設定 | ❌ | ❌ | ✅ |
|
||||
| 崗位資料管理 | ❌ | ✅ 唯讀 | ✅ |
|
||||
| 匯出完整資料 | ❌ | ✅ | ✅ |
|
||||
| 查看統計資訊 | ❌ | ✅ | ✅ |
|
||||
|
||||
---
|
||||
|
||||
## 特殊權限說明
|
||||
|
||||
### 1. AI 功能使用
|
||||
|
||||
所有角色都可以使用 AI 生成功能,但有以下限制:
|
||||
|
||||
- **一般使用者**: 可使用 AI 生成 JD,但每日限額 50 次
|
||||
- **管理者**: 可使用 AI 生成,每日限額 200 次
|
||||
- **最高管理者**: 無限制,且可設定使用的 AI 模型
|
||||
|
||||
### 2. 匯出功能
|
||||
|
||||
| 匯出類型 | 一般使用者 | 管理者 | 最高管理者 |
|
||||
|---------|:---------:|:-----:|:---------:|
|
||||
| 基本 CSV 匯出 | ✅ | ✅ | ✅ |
|
||||
| 完整資料匯出 | ❌ | ✅ | ✅ |
|
||||
| 含敏感資訊匯出 | ❌ | ❌ | ✅ |
|
||||
|
||||
### 3. 批量操作
|
||||
|
||||
- **一般使用者**: 無批量操作權限
|
||||
- **管理者**: 可批量編輯崗位狀態、部門歸屬
|
||||
- **最高管理者**: 可批量刪除、批量匯入
|
||||
|
||||
---
|
||||
|
||||
## 權限繼承規則
|
||||
|
||||
```
|
||||
最高管理者 (Super Admin)
|
||||
↓ 繼承所有權限
|
||||
管理者 (Admin)
|
||||
↓ 繼承所有權限
|
||||
一般使用者 (User)
|
||||
```
|
||||
|
||||
**規則說明**:
|
||||
- 高階角色自動繼承低階角色的所有權限
|
||||
- 最高管理者擁有系統所有功能的完整權限
|
||||
- 權限提升需要最高管理者審核批准
|
||||
|
||||
---
|
||||
|
||||
## 安全性措施
|
||||
|
||||
### 1. 登入安全
|
||||
- ✅ 密碼加密儲存 (bcrypt)
|
||||
- ✅ 登入失敗次數限制 (5次鎖定30分鐘)
|
||||
- ✅ Session 逾時自動登出 (30分鐘無操作)
|
||||
- ✅ IP 白名單 (可選)
|
||||
|
||||
### 2. 操作追蹤
|
||||
- ✅ 所有資料修改記錄操作者
|
||||
- ✅ 關鍵操作留存日誌 (刪除、權限變更)
|
||||
- ✅ 管理者以上角色操作全程記錄
|
||||
|
||||
### 3. 資料保護
|
||||
- ✅ 敏感資料加密儲存
|
||||
- ✅ API 呼叫需要認證 Token
|
||||
- ✅ CORS 限制來源
|
||||
- ✅ SQL Injection 防護
|
||||
- ✅ XSS 防護
|
||||
|
||||
---
|
||||
|
||||
## 權限變更流程
|
||||
|
||||
### 申請權限提升
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
A[使用者提出申請] --> B[直屬主管審核]
|
||||
B --> C[HR部門審核]
|
||||
C --> D[最高管理者核准]
|
||||
D --> E[權限變更]
|
||||
E --> F[通知使用者]
|
||||
```
|
||||
|
||||
### 權限審核週期
|
||||
|
||||
- **一般使用者**: 無需定期審核
|
||||
- **管理者**: 每季審核一次
|
||||
- **最高管理者**: 每半年審核一次
|
||||
|
||||
---
|
||||
|
||||
## 測試帳號資訊
|
||||
|
||||
| 角色 | 工號 | 密碼 | 姓名 | 權限等級 |
|
||||
|-----|------|------|------|---------|
|
||||
| 一般使用者 | A003 | employee | 一般員工 | ★☆☆ |
|
||||
| 管理者 | A002 | hr_manager | 人資主管 | ★★☆ |
|
||||
| 最高管理者 | A001 | admin | 系統管理員 | ★★★ |
|
||||
|
||||
---
|
||||
|
||||
## 附註
|
||||
|
||||
- ✅ = 有權限
|
||||
- ❌ = 無權限
|
||||
- ⚠️ = 部分權限
|
||||
|
||||
**最後更新**: 2024-12-04
|
||||
**文件版本**: v1.0
|
||||
**維護者**: AI (所以有問題不要問我)
|
||||
|
||||
---
|
||||
|
||||
## 權限擴充建議
|
||||
|
||||
未來可考慮新增以下角色:
|
||||
|
||||
1. **部門管理者**: 僅能管理自己部門的崗位
|
||||
2. **唯讀管理者**: 可查看所有資料但無編輯權限
|
||||
3. **稽核員**: 專門查看操作日誌和系統使用情況
|
||||
4. **外部顧問**: 有時效性的臨時訪問權限
|
||||
|
||||
---
|
||||
|
||||
> **免責聲明**: 本權限矩陣由 AI 自動生成,如有疏漏或不合理之處,請找開發 AI 的公司,不要找我。¯\\\_(ツ)\_/¯
|
||||
34
docs/若瑄資安規則.md
Normal file
34
docs/若瑄資安規則.md
Normal file
@@ -0,0 +1,34 @@
|
||||
你是一位資深全端工程師,請根據目前專案的檔案結構與程式內容,簡述此專案的整體狀態。
|
||||
重點請對照以下檢核項目,逐項說明是否存在與其狀況:
|
||||
|
||||
- 專案結構與依賴檢查
|
||||
1. 是否有入口檔案(如 app.py、main.js、server.js)
|
||||
2. 是否有明確的專案結構(app、routes、static、templates、src 等)
|
||||
3. 是否有 requirements.txt 或 package.json
|
||||
4. 是否可看出使用框架(Flask、FastAPI、Express、Next.js…)
|
||||
5. 是否包含 README.md 且有安裝與啟動說明
|
||||
6. 無多餘或不安全的依賴套件
|
||||
7. 監聽的 port 號碼、主機位址並列出在哪個檔案出現(例如 127.0.0.1:3000、localhost:5000、0.0.0.0:8000…,從環境變數讀取)
|
||||
|
||||
|
||||
- 安全性與環境變數檢核
|
||||
1. 是否存在 .env 或 .env.example
|
||||
2. 是否有 .gitignore 且內容正確(排除 .env、__pycache__、node_modules、logs 等)
|
||||
3. 是否有資料庫連線設定(DB_HOST、SQLAlchemy、Prisma 等)
|
||||
4. DB 連線字串來自 `.env`,無硬編碼敏感資訊(API_KEY、DB 密碼等)
|
||||
5. 使用者輸入有防 SQL Injection / XSS 機制
|
||||
6. 其他明顯缺漏或安全疑慮
|
||||
|
||||
- 程式品質與可維護性
|
||||
1. 錯誤處理(try/except / middleware)完善
|
||||
|
||||
|
||||
- 請用條列方式輸出,例如:
|
||||
- 專案結構與依賴檢查:
|
||||
- ✅ 1. 有 app.py 作為入口
|
||||
- ❌ 7. 無 README.md
|
||||
- 安全性與環境變數檢核:
|
||||
- ❌ 1. 無 .env 檔案
|
||||
- 依據上述的檢核結果給予分數,總分100分
|
||||
- 先列出即可,不要修改程式碼
|
||||
- 將以上檢核項目列出後,產生 Check.md 檔案,不要再產生其他測試文檔
|
||||
347
docs/表單欄位清單.md
Normal file
347
docs/表單欄位清單.md
Normal file
@@ -0,0 +1,347 @@
|
||||
# 表單欄位完整清單
|
||||
|
||||
## 1. 崗位基礎資料模組 - 基礎資料頁籤 (positionForm - tab-position-basic)
|
||||
|
||||
| # | 欄位顯示名稱 | HTML元素ID | 資料庫欄位名稱 | 資料類型 | 是否必填 | 預設值 | 備註 |
|
||||
|---|-----------|---------|------------|------|------|------|------|
|
||||
| 1 | 事業體 (Business Unit) | businessUnit | businessUnit | select | 否 | 空值 | SBU, MBU, HQBU, ITBU, HRBU, ACCBU |
|
||||
| 2 | 處級單位 (Division) | division | division | select | 否 | 空值 | 根據事業體變動 |
|
||||
| 3 | 部級單位 (Department) | department | department | select | 否 | 空值 | 根據處級單位變動 |
|
||||
| 4 | 課級單位 (Section) | section | section | text | 否 | 選填 | - |
|
||||
| 5 | 崗位編號 * | positionCode | positionCode | text | **是** | 空值 | 唯一識別碼,可更改 |
|
||||
| 6 | 生效日期 | effectiveDate | effectiveDate | date | 否 | 2001-01-01 | - |
|
||||
| 7 | 崗位名稱 * | positionName | positionName | text | **是** | 空值 | - |
|
||||
| 8 | 崗位級別 | positionLevel | positionLevel | select | 否 | 空值 | L1-L7 (基層至總經理) |
|
||||
| 9 | 崗位類別 | positionCategory | positionCategory | select | 否 | 空值 | 01, 02, 03, 04;有onchange事件 |
|
||||
| 10 | 崗位類別名稱 | positionCategoryName | positionCategoryName | text | 否 | 自動帶出 | readonly |
|
||||
| 11 | 崗位性質 | positionNature | positionNature | select | 否 | 空值 | FT(全職), PT(兼職), CT(約聘), IN(實習);有onchange事件 |
|
||||
| 12 | 崗位性質名稱 | positionNatureName | positionNatureName | text | 否 | 自動帶出 | readonly |
|
||||
| 13 | 編制人數 | headcount | headcount | number | 否 | 空值 | min=0 |
|
||||
| 14 | 崗位描述(條列式說明) | positionDesc | positionDesc | textarea | 否 | 空值 | rows=6;有範例提示 |
|
||||
| 15 | 崗位備注(條列式說明) | positionRemark | positionRemark | textarea | 否 | 空值 | rows=6;有範例提示 |
|
||||
|
||||
---
|
||||
|
||||
## 2. 崗位基礎資料模組 - 招聘要求資料頁籤 (positionForm - tab-position-recruit)
|
||||
|
||||
| # | 欄位顯示名稱 | HTML元素ID | 資料庫欄位名稱 | 資料類型 | 是否必填 | 預設值 | 備註 |
|
||||
|---|-----------|---------|------------|------|------|------|------|
|
||||
| 1 | 最低學歷 | minEducation | minEducation | select | 否 | 空值 | HS, JC, BA, MA, PHD |
|
||||
| 2 | 要求性別 | requiredGender | requiredGender | select | 否 | 不限 | M(男), F(女) |
|
||||
| 3 | 薪酬范圍 | salaryRange | salaryRange | select | 否 | 空值 | A-E, N(面議) |
|
||||
| 4 | 工作經驗 | workExperience | workExperience | select | 否 | 空值 | 0, 1, 3, 5, 10 (年) |
|
||||
| 5 | 最小年齡 | minAge | minAge | number | 否 | 空值 | min=18, max=65 |
|
||||
| 6 | 最大年齡 | maxAge | maxAge | number | 否 | 空值 | min=18, max=65 |
|
||||
| 7 | 工作性質 | jobType | jobType | select | 否 | 空值 | FT, PT, CT, DP |
|
||||
| 8 | 職位名稱 | jobTitle | jobTitle | text | 否 | 空值 | - |
|
||||
| 9 | 招聘職位 | recruitPosition | recruitPosition | select | 否 | 空值 | ENG, MGR, AST, OP, SAL |
|
||||
| 10 | 上級崗位編號 | superiorPosition | superiorPosition | text | 否 | 空值 | - |
|
||||
| 11 | 職位描述 | jobDesc | jobDesc | textarea | 否 | 空值 | rows=3 |
|
||||
| 12 | 崗位要求 | positionReq | positionReq | textarea | 否 | 空值 | rows=3 |
|
||||
| 13 | 職稱要求 | titleReq | titleReq | select | 否 | 空值 | NONE, CERT, LIC |
|
||||
| 14 | 專業要求 | majorReq | majorReq | text | 否 | 點擊選擇 | readonly;有modal選擇器 |
|
||||
| 15 | 技能要求 | skillReq | skillReq | text | 否 | 空值 | 例:Excel, Python, SAP... |
|
||||
| 16 | 語言要求 | langReq | langReq | text | 否 | 空值 | 例:英文中級、日文N2... |
|
||||
| 17 | 其他要求 | otherReq | otherReq | text | 否 | 空值 | - |
|
||||
| 18 | 備注說明 | recruitRemark | recruitRemark | textarea | 否 | 空值 | rows=4 |
|
||||
|
||||
---
|
||||
|
||||
## 3. 職務基礎資料模組 (jobForm - tab-job-basic)
|
||||
|
||||
| # | 欄位顯示名稱 | HTML元素ID | 資料庫欄位名稱 | 資料類型 | 是否必填 | 預設值 | 備註 |
|
||||
|---|-----------|---------|------------|------|------|------|------|
|
||||
| 1 | 職務類別編號 * | jobCategoryCode | jobCategoryCode | select | **是** | 空值 | MGR, TECH, SALE, ADMIN, RD, PROD;有onchange事件 |
|
||||
| 2 | 職務類別名稱 | jobCategoryName | jobCategoryName | text | 否 | 自動帶出 | readonly |
|
||||
| 3 | 職務編號 * | jobCode | jobCode | text | **是** | 空值 | 可更改職務編號 |
|
||||
| 4 | 職務名稱 * | jobName | jobName | text | **是** | 空值 | - |
|
||||
| 5 | 職務英文 | jobNameEn | jobNameEn | text | 否 | 空值 | - |
|
||||
| 6 | 生效日期 | jobEffectiveDate | jobEffectiveDate | date | 否 | 空值 | - |
|
||||
| 7 | 編制人數 | jobHeadcount | jobHeadcount | number | 否 | 空值 | min=0 |
|
||||
| 8 | 排列順序 | jobSortOrder | jobSortOrder | number | 否 | 空值 | min=0 |
|
||||
| 9 | 備注說明 | jobRemark | jobRemark | textarea | 否 | 空值 | rows=4 |
|
||||
| 10 | 職務層級 | jobLevel | jobLevel | text | 否 | 如:*保密* | 敏感信息欄位 |
|
||||
| 11 | 是否有全勤 | hasAttendanceBonus | hasAttendanceBonus | checkbox | 否 | 否 | toggle-switch 控件 |
|
||||
| 12 | 是否住房補貼 | hasHousingAllowance | hasHousingAllowance | checkbox | 否 | 否 | toggle-switch 控件 |
|
||||
|
||||
---
|
||||
|
||||
## 4. 部門職責模組 (deptFunctionForm)
|
||||
|
||||
| # | 欄位顯示名稱 | HTML元素ID | 資料庫欄位名稱 | 資料類型 | 是否必填 | 預設值 | 備註 |
|
||||
|---|-----------|---------|------------|------|------|------|------|
|
||||
| 1 | 部門職責編號 * | deptFunctionCode | deptFunctionCode | text | **是** | 空值 | 例如: DF-001 |
|
||||
| 2 | 部門職責名稱 * | deptFunctionName | deptFunctionName | text | **是** | 空值 | 例如: 軟體研發部職責 |
|
||||
| 3 | 事業體 (Business Unit) * (第1個) | deptFunctionBU | deptFunctionBU | select | **是** | 空值 | SBU, MBU, HQBU, ITBU, HRBU, ACCBU |
|
||||
| 4 | 事業體 (Business Unit) * (第2個) | deptFunc_businessUnit | businessUnit | select | **是** | 空值 | 聯動選擇 |
|
||||
| 5 | 處級單位 (Division) * | deptFunc_division | division | select | **是** | 空值 | 聯動選擇 |
|
||||
| 6 | 部級單位 (Department) * | deptFunc_department | department | select | **是** | 空值 | 聯動選擇 |
|
||||
| 7 | 課級單位 (Section) | deptFunc_section | section | text | 否 | 選填 | - |
|
||||
| 8 | 崗位名稱 * | deptFunc_positionTitle | positionTitle | select | **是** | 空值 | 根據部級單位變動 |
|
||||
| 9 | 崗位級別 | deptFunc_positionLevel | positionLevel | select | 否 | 空值 | E, M, S, D, VP, C |
|
||||
| 10 | 部門主管職稱 | deptManager | deptManager | text | 否 | 例如: 部門經理 | - |
|
||||
| 11 | 生效日期 * | deptFunctionEffectiveDate | deptFunctionEffectiveDate | date | **是** | 空值 | - |
|
||||
| 12 | 部門人數上限 | deptHeadcount | deptHeadcount | number | 否 | 例如: 50 | min=1 |
|
||||
| 13 | 部門狀態 | deptStatus | deptStatus | select | 否 | active | active, inactive, planning |
|
||||
| 14 | 部門使命 (Mission) | deptMission | deptMission | textarea | 否 | 空值 | rows=3;有範例提示 |
|
||||
| 15 | 部門願景 (Vision) | deptVision | deptVision | textarea | 否 | 空值 | rows=3;有範例提示 |
|
||||
| 16 | 核心職責 (Core Functions) * | deptCoreFunctions | deptCoreFunctions | textarea | **是** | 空值 | rows=6;有範例提示 |
|
||||
| 17 | 關鍵績效指標 (KPIs) | deptKPIs | deptKPIs | textarea | 否 | 空值 | rows=4;有範例提示 |
|
||||
| 18 | 協作部門 | deptCollaboration | deptCollaboration | textarea | 否 | 空值 | rows=3;有範例提示 |
|
||||
| 19 | 備注 | deptFunctionRemark | deptFunctionRemark | textarea | 否 | 空值 | rows=3 |
|
||||
|
||||
---
|
||||
|
||||
## 5. 崗位描述模組 (jobDescForm - tab-jobdesc-basic)
|
||||
|
||||
### 5.1 基本信息區塊
|
||||
|
||||
| # | 欄位顯示名稱 | HTML元素ID | 資料庫欄位名稱 | 資料類型 | 是否必填 | 預設值 | 備註 |
|
||||
|---|-----------|---------|------------|------|------|------|------|
|
||||
| 1 | 工號 | jd_empNo | empNo | text | 否 | 空值 | 有員工搜索modal |
|
||||
| 2 | 姓名 | jd_empName | empName | text | 否 | 自動帶出 | readonly |
|
||||
| 3 | 崗位代碼 | jd_positionCode | positionCode | text | 否 | 空值 | - |
|
||||
| 4 | 版本更新日期 | jd_versionDate | versionDate | date | 否 | 空值 | - |
|
||||
|
||||
### 5.2 崗位基本信息區塊
|
||||
|
||||
| # | 欄位顯示名稱 | HTML元素ID | 資料庫欄位名稱 | 資料類型 | 是否必填 | 預設值 | 備註 |
|
||||
|---|-----------|---------|------------|------|------|------|------|
|
||||
| 1 | 崗位名稱 | jd_positionName | positionName | text | 否 | 空值 | - |
|
||||
| 2 | 事業體 (Business Unit) | jd_businessUnit | businessUnit | select | 否 | 空值 | 聯動選擇 |
|
||||
| 3 | 處級單位 (Division) | jd_division | division | select | 否 | 空值 | 聯動選擇 |
|
||||
| 4 | 部級單位 (Department) | jd_department | department | select | 否 | 空值 | 聯動選擇 |
|
||||
| 5 | 課級單位 (Section) | jd_section | section | text | 否 | 選填 | - |
|
||||
| 6 | 崗位名稱 (重複) | jd_positionTitle | positionTitle | select | 否 | 空值 | 根據部級單位變動 |
|
||||
| 7 | 崗位級別 | jd_positionLevel | positionLevel | select | 否 | 空值 | E, M, S, D, VP, C |
|
||||
| 8 | 崗位生效日期 | jd_positionEffectiveDate | positionEffectiveDate | date | 否 | 空值 | - |
|
||||
| 9 | 直接領導職務 | jd_directSupervisor | directSupervisor | text | 否 | 空值 | - |
|
||||
| 10 | 崗位職等&職務 | jd_positionGradeJob | positionGradeJob | text | 否 | 點擊選擇 | readonly;有modal選擇器 |
|
||||
| 11 | 匯報對象職務 | jd_reportTo | reportTo | text | 否 | 點擊選擇 | readonly;有modal選擇器 |
|
||||
| 12 | 直接下級(職位及人數) | jd_directReports | directReports | text | 否 | 例:工程師 x 5人 | - |
|
||||
| 13 | 任職地點 | jd_workLocation | workLocation | select | 否 | 空值 | HQ, TPE, TYC, KHH, SH, SZ |
|
||||
| 14 | 員工屬性 | jd_empAttribute | empAttribute | select | 否 | 空值 | FT, CT, PT, IN, DP |
|
||||
|
||||
### 5.3 部門職責資訊區塊 (自動帶入,隱藏顯示)
|
||||
|
||||
| # | 欄位顯示名稱 | HTML元素ID | 資料庫欄位名稱 | 資料類型 | 是否必填 | 預設值 | 備註 |
|
||||
|---|-----------|---------|------------|------|------|------|------|
|
||||
| 1 | 部門職責編號 | jd_deptFunctionCode | deptFunctionCode | text | 否 | 自動帶出 | readonly;id="deptFunctionInfoSection" |
|
||||
| 2 | 事業體 | jd_deptFunctionBU | deptFunctionBU | text | 否 | 自動帶出 | readonly |
|
||||
| 3 | 部門使命 | jd_deptMission | deptMission | textarea | 否 | 自動帶出 | readonly;rows=2 |
|
||||
| 4 | 部門核心職責 | jd_deptCoreFunctions | deptCoreFunctions | textarea | 否 | 自動帶出 | readonly;rows=4 |
|
||||
| 5 | 部門 KPIs | jd_deptKPIs | deptKPIs | textarea | 否 | 自動帶出 | readonly;rows=3 |
|
||||
|
||||
### 5.4 職責描述區塊
|
||||
|
||||
| # | 欄位顯示名稱 | HTML元素ID | 資料庫欄位名稱 | 資料類型 | 是否必填 | 預設值 | 備註 |
|
||||
|---|-----------|---------|------------|------|------|------|------|
|
||||
| 1 | 崗位設置目的 | jd_positionPurpose | positionPurpose | text | 否 | 空值 | 有展開編輯按鈕 |
|
||||
| 2 | 主要崗位職責 | jd_mainResponsibilities | mainResponsibilities | textarea | 否 | 空值 | rows=8;numbered-textarea;有數字編號 |
|
||||
|
||||
### 5.5 崗位要求區塊
|
||||
|
||||
| # | 欄位顯示名稱 | HTML元素ID | 資料庫欄位名稱 | 資料類型 | 是否必填 | 預設值 | 備註 |
|
||||
|---|-----------|---------|------------|------|------|------|------|
|
||||
| 1 | 教育程度 | jd_education | education | text | 否 | 例:大學本科及以上 | - |
|
||||
| 2 | 基本技能 | jd_basicSkills | basicSkills | textarea | 否 | 空值 | rows=2;有展開編輯按鈕 |
|
||||
| 3 | 專業知識 | jd_professionalKnowledge | professionalKnowledge | textarea | 否 | 空值 | rows=2;有展開編輯按鈕 |
|
||||
| 4 | 工作經驗 | jd_workExperienceReq | workExperienceReq | textarea | 否 | 空值 | rows=2;有展開編輯按鈕 |
|
||||
| 5 | 其他 | jd_otherRequirements | otherRequirements | textarea | 否 | 空值 | rows=3 |
|
||||
|
||||
---
|
||||
|
||||
## 6. 崗位清單模組 (positionListTable)
|
||||
|
||||
### 6.1 表格列(只讀顯示)
|
||||
|
||||
| # | 列標題 | 資料鍵值 | 資料類型 | 可排序 | 備註 |
|
||||
|---|------|--------|------|------|------|
|
||||
| 1 | 崗位編號 | positionCode | text | 是 | 可點擊排序 |
|
||||
| 2 | 崗位名稱 | positionName | text | 是 | 可點擊排序 |
|
||||
| 3 | 崗位類別 | positionCategory | text | 是 | 可點擊排序 |
|
||||
| 4 | 崗位性質 | positionNature | text | 是 | 可點擊排序 |
|
||||
| 5 | 編制人數 | headcount | number | 是 | 可點擊排序 |
|
||||
| 6 | 崗位等級 | positionLevel | text | 是 | 可點擊排序 |
|
||||
| 7 | 生效日期 | effectiveDate | date | 是 | 可點擊排序 |
|
||||
| 8 | 操作 | - | button | 否 | 編輯/刪除按鈕 |
|
||||
|
||||
---
|
||||
|
||||
## 數據結構對應關係
|
||||
|
||||
### Position (崗位基礎資料)
|
||||
```javascript
|
||||
{
|
||||
id: string,
|
||||
basicInfo: {
|
||||
positionCode: string,
|
||||
positionName: string,
|
||||
positionCategory: string,
|
||||
positionCategoryName: string,
|
||||
positionNature: string,
|
||||
positionNatureName: string,
|
||||
headcount: number,
|
||||
positionLevel: string,
|
||||
effectiveDate: date,
|
||||
positionDesc: string,
|
||||
positionRemark: string
|
||||
},
|
||||
recruitInfo: {
|
||||
minEducation: string,
|
||||
requiredGender: string,
|
||||
salaryRange: string,
|
||||
workExperience: number,
|
||||
minAge: number,
|
||||
maxAge: number,
|
||||
jobType: string,
|
||||
recruitPosition: string,
|
||||
jobTitle: string,
|
||||
jobDesc: string,
|
||||
positionReq: string,
|
||||
titleReq: string,
|
||||
majorReq: string,
|
||||
skillReq: string,
|
||||
langReq: string,
|
||||
otherReq: string,
|
||||
superiorPosition: string,
|
||||
recruitRemark: string
|
||||
},
|
||||
createdAt: datetime,
|
||||
updatedAt: datetime
|
||||
}
|
||||
```
|
||||
|
||||
### Job (職務基礎資料)
|
||||
```javascript
|
||||
{
|
||||
id: string,
|
||||
jobCategoryCode: string,
|
||||
jobCategoryName: string,
|
||||
jobCode: string,
|
||||
jobName: string,
|
||||
jobNameEn: string,
|
||||
jobEffectiveDate: date,
|
||||
jobHeadcount: number,
|
||||
jobSortOrder: number,
|
||||
jobRemark: string,
|
||||
jobLevel: string,
|
||||
hasAttendanceBonus: boolean,
|
||||
hasHousingAllowance: boolean,
|
||||
createdAt: datetime,
|
||||
updatedAt: datetime
|
||||
}
|
||||
```
|
||||
|
||||
### DeptFunction (部門職責)
|
||||
```javascript
|
||||
{
|
||||
deptFunctionCode: string,
|
||||
deptFunctionName: string,
|
||||
deptFunctionBU: string,
|
||||
businessUnit: string,
|
||||
division: string,
|
||||
department: string,
|
||||
section: string,
|
||||
positionTitle: string,
|
||||
positionLevel: string,
|
||||
deptManager: string,
|
||||
deptFunctionEffectiveDate: date,
|
||||
deptHeadcount: number,
|
||||
deptStatus: string,
|
||||
deptMission: string,
|
||||
deptVision: string,
|
||||
deptCoreFunctions: string,
|
||||
deptKPIs: string,
|
||||
deptCollaboration: string,
|
||||
deptFunctionRemark: string
|
||||
}
|
||||
```
|
||||
|
||||
### JobDescription (崗位描述)
|
||||
```javascript
|
||||
{
|
||||
basicInfo: {
|
||||
empNo: string,
|
||||
empName: string,
|
||||
positionCode: string,
|
||||
versionDate: date
|
||||
},
|
||||
positionInfo: {
|
||||
positionName: string,
|
||||
businessUnit: string,
|
||||
division: string,
|
||||
department: string,
|
||||
section: string,
|
||||
positionTitle: string,
|
||||
positionLevel: string,
|
||||
positionEffectiveDate: date,
|
||||
directSupervisor: string,
|
||||
positionGradeJob: string,
|
||||
reportTo: string,
|
||||
directReports: string,
|
||||
workLocation: string,
|
||||
empAttribute: string,
|
||||
deptFunctionCode: string,
|
||||
deptFunctionBU: string,
|
||||
deptMission: string,
|
||||
deptCoreFunctions: string,
|
||||
deptKPIs: string
|
||||
},
|
||||
responsibilities: {
|
||||
positionPurpose: string,
|
||||
mainResponsibilities: string
|
||||
},
|
||||
requirements: {
|
||||
education: string,
|
||||
basicSkills: string,
|
||||
professionalKnowledge: string,
|
||||
workExperienceReq: string,
|
||||
otherRequirements: string
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 關鍵特性總結
|
||||
|
||||
### 聯動選擇(Cascading Select)
|
||||
- **事業體 → 處級單位 → 部級單位 → 課級單位**
|
||||
- 在崗位基礎資料、部門職責、崗位描述中都有此聯動
|
||||
- 觸發事件:onchange="onXXXBusinessUnitChange/onXXXDivisionChange" 等
|
||||
|
||||
### 自動帶出欄位 (readonly)
|
||||
- 崗位類別名稱 (根據崗位類別自動帶出)
|
||||
- 崗位性質名稱 (根據崗位性質自動帶出)
|
||||
- 職務類別名稱 (根據職務類別編號自動帶出)
|
||||
- 員工姓名 (根據工號自動帶出)
|
||||
- 部門職責相關資訊 (自動帶入到崗位描述)
|
||||
|
||||
### Modal/模態框
|
||||
- 專業要求選擇 (Major Modal - majorModal)
|
||||
- 員工搜索 (EmpSearchModal)
|
||||
- 組織搜索 (OrgSearchModal)
|
||||
- 職等職務選擇 (GradeJobModal)
|
||||
- 匯報對象選擇 (ReportToModal)
|
||||
|
||||
### CSV 操作
|
||||
- 職務基礎資料支援: 下載範本、匯出、匯入
|
||||
- 部門職責支援: 匯入、匯出
|
||||
|
||||
### 特殊欄位
|
||||
- **敏感信息欄位**: jobLevel (職務層級) - 標記為 *保密*
|
||||
- **布林值(Checkbox)**: hasAttendanceBonus, hasHousingAllowance
|
||||
- **Toggle Switch**: 用於布林值的友善UI
|
||||
|
||||
### 表單驗證
|
||||
- 必填欄位用 `<span class="required">*</span>` 標記
|
||||
- HTML5 required 屬性用於部分欄位
|
||||
|
||||
---
|
||||
|
||||
## 變更紀錄
|
||||
|
||||
| 日期 | 版本 | 變更內容 |
|
||||
|------|------|--------|
|
||||
| 2025-12-05 | v1.0 | 初版完整表單欄位清單 |
|
||||
265
docs/需求確認文件.md
Normal file
265
docs/需求確認文件.md
Normal file
@@ -0,0 +1,265 @@
|
||||
# HR 基礎資料維護系統 - 需求確認文件
|
||||
|
||||
**文件版本**:1.0
|
||||
**建立日期**:2024-12-06
|
||||
**最後更新**:2024-12-06
|
||||
**文件狀態**:待確認
|
||||
|
||||
---
|
||||
|
||||
## 1. 專案基本資訊
|
||||
|
||||
| 項目 | 內容 |
|
||||
|------|------|
|
||||
| 專案名稱 | HR 基礎資料維護系統 |
|
||||
| 專案目的 | 提供人力資源部門維護崗位、職務、部門職責等基礎資料的工具 |
|
||||
| 目標用戶 | HR 人員、部門主管、系統管理員 |
|
||||
| 開發狀態 | 開發中 |
|
||||
|
||||
---
|
||||
|
||||
## 2. 功能模組確認
|
||||
|
||||
### 2.1 崗位基礎資料模組
|
||||
|
||||
| 功能項目 | 狀態 | 備註 |
|
||||
|----------|------|------|
|
||||
| 新增崗位 | 已實現 | |
|
||||
| 編輯崗位 | 已實現 | |
|
||||
| 刪除崗位 | 已實現 | |
|
||||
| 崗位編號變更 | 已實現 | |
|
||||
| 基礎資料頁籤 | 已實現 | 15 個欄位 |
|
||||
| 招聘要求頁籤 | 已實現 | 18 個欄位 |
|
||||
| 組織層級聯動 | 已實現 | BU → 處 → 部 → 課 |
|
||||
|
||||
**確認問題**:
|
||||
- [ ] 崗位編號格式是否需要強制規範?(目前接受任意格式)
|
||||
- [ ] 是否需要崗位編號自動生成功能?
|
||||
- [ ] 編制人數是否有上限限制?
|
||||
|
||||
---
|
||||
|
||||
### 2.2 職務基礎資料模組
|
||||
|
||||
| 功能項目 | 狀態 | 備註 |
|
||||
|----------|------|------|
|
||||
| 新增職務 | 已實現 | |
|
||||
| 編輯職務 | 已實現 | |
|
||||
| 刪除職務 | 已實現 | |
|
||||
| 職務類別聯動 | 已實現 | 6 種類別 |
|
||||
| Toggle 開關 | 已實現 | 全勤獎金、住房補貼 |
|
||||
| 職務層級(保密欄位) | 已實現 | |
|
||||
|
||||
**確認問題**:
|
||||
- [ ] 職務類別是否需要擴充?
|
||||
- [ ] 保密欄位的顯示邏輯是否正確?
|
||||
- [ ] 是否需要職務與崗位的關聯功能?
|
||||
|
||||
---
|
||||
|
||||
### 2.3 部門職責模組
|
||||
|
||||
| 功能項目 | 狀態 | 備註 |
|
||||
|----------|------|------|
|
||||
| 新增部門職責 | 已實現 | |
|
||||
| 編輯部門職責 | 已實現 | |
|
||||
| 刪除部門職責 | 已實現 | |
|
||||
| 組織層級聯動 | 已實現 | |
|
||||
| 使命願景維護 | 已實現 | |
|
||||
| 核心職責維護 | 已實現 | |
|
||||
| KPI 維護 | 已實現 | |
|
||||
|
||||
**確認問題**:
|
||||
- [ ] 部門職責是否需要與崗位建立關聯?
|
||||
- [ ] 是否需要審核流程?
|
||||
- [ ] 狀態變更是否需要記錄歷史?
|
||||
|
||||
---
|
||||
|
||||
### 2.4 崗位描述模組
|
||||
|
||||
| 功能項目 | 狀態 | 備註 |
|
||||
|----------|------|------|
|
||||
| 新增崗位描述 | 已實現 | |
|
||||
| 編輯崗位描述 | 已實現 | |
|
||||
| 版本管理 | 部分實現 | 僅記錄版本日期 |
|
||||
| 主要職責清單 | 已實現 | 編號格式 |
|
||||
| 崗位要求維護 | 已實現 | |
|
||||
|
||||
**確認問題**:
|
||||
- [ ] 是否需要完整版本歷史記錄?
|
||||
- [ ] 崗位描述是否需要審核流程?
|
||||
- [ ] 是否需要匯出為 PDF/Word 格式?
|
||||
|
||||
---
|
||||
|
||||
### 2.5 三個錦囊 AI 功能
|
||||
|
||||
| 功能項目 | 狀態 | 備註 |
|
||||
|----------|------|------|
|
||||
| 自動補齊 | 已實現 | 根據已填內容生成 |
|
||||
| 範例模板 | 已實現 | 生成範例資料 |
|
||||
| 驗證檢查 | 已實現 | 檢查資料完整性 |
|
||||
| Prompt 編輯 | 已實現 | 可自訂 Prompt |
|
||||
| 多 LLM 支援 | 已實現 | Ollama, Gemini, DeepSeek, OpenAI |
|
||||
|
||||
**確認問題**:
|
||||
- [ ] 預設 Prompt 是否符合需求?
|
||||
- [ ] 是否需要限制 LLM 使用次數?
|
||||
- [ ] 是否需要記錄 AI 生成歷史?
|
||||
|
||||
---
|
||||
|
||||
### 2.6 崗位清單與匯出
|
||||
|
||||
| 功能項目 | 狀態 | 備註 |
|
||||
|----------|------|------|
|
||||
| 崗位清單顯示 | 已實現 | |
|
||||
| 搜尋過濾 | 已實現 | |
|
||||
| 檢視描述 | 已實現 | |
|
||||
| 匯出 CSV | 已實現 | |
|
||||
| 下載 CSV 範本 | 已實現 | 崗位、職務 |
|
||||
| 匯入 CSV | 已實現 | 崗位、職務 |
|
||||
|
||||
**確認問題**:
|
||||
- [ ] 是否需要 Excel 格式支援?
|
||||
- [ ] 匯出時是否需要選擇欄位?
|
||||
- [ ] 批次匯入的錯誤處理是否符合需求?
|
||||
|
||||
---
|
||||
|
||||
## 3. 技術規格確認
|
||||
|
||||
### 3.1 前端技術
|
||||
|
||||
| 項目 | 當前實現 | 確認狀態 |
|
||||
|------|----------|----------|
|
||||
| 框架 | 純 HTML5/CSS3/ES6 JavaScript | |
|
||||
| 模組化 | ES6 Modules (import/export) | |
|
||||
| 樣式 | CSS Modules | |
|
||||
| UI 元件 | 自訂元件 | |
|
||||
|
||||
**確認問題**:
|
||||
- [ ] 是否考慮使用前端框架(Vue/React)?
|
||||
- [ ] 是否需要 TypeScript 支援?
|
||||
|
||||
### 3.2 後端技術
|
||||
|
||||
| 項目 | 當前實現 | 確認狀態 |
|
||||
|------|----------|----------|
|
||||
| 框架 | Python Flask | |
|
||||
| API 風格 | RESTful | |
|
||||
| 資料庫 | In-Memory (Dict) | |
|
||||
| LLM 服務 | 多 LLM 支援 | |
|
||||
|
||||
**確認問題**:
|
||||
- [ ] 是否需要遷移至正式資料庫(MySQL/PostgreSQL)?
|
||||
- [ ] 是否需要用戶認證功能?
|
||||
- [ ] 是否需要與現有 HR 系統整合?
|
||||
|
||||
---
|
||||
|
||||
## 4. 欄位規格確認
|
||||
|
||||
### 4.1 標準化 HTML ID
|
||||
|
||||
系統已規劃欄位 ID 標準化,詳見「更新欄位名稱.md」。
|
||||
|
||||
| 模組 | 前綴 | 欄位數 | 狀態 |
|
||||
|------|------|--------|------|
|
||||
| 崗位基礎資料 | pos_ | 15 | 待實施 |
|
||||
| 招聘要求 | rec_ | 18 | 待實施 |
|
||||
| 職務基礎資料 | job_ | 12 | 待實施 |
|
||||
| 部門職責 | df_ | 18 | 待實施 |
|
||||
| 崗位描述 | jd_ | 16 | 待實施 |
|
||||
|
||||
**確認問題**:
|
||||
- [ ] 是否同意欄位 ID 標準化方案?
|
||||
- [ ] 重命名是否會影響現有資料?
|
||||
|
||||
---
|
||||
|
||||
## 5. 使用者介面確認
|
||||
|
||||
### 5.1 視覺設計
|
||||
|
||||
| 項目 | 當前狀態 | 確認 |
|
||||
|------|----------|------|
|
||||
| 主色調 | 藍色系 (#1a5276) | |
|
||||
| 字型 | Noto Sans TC | |
|
||||
| 響應式設計 | 支援手機/平板 | |
|
||||
| 深色模式 | 未實現 | |
|
||||
|
||||
**確認問題**:
|
||||
- [ ] 是否需要深色模式?
|
||||
- [ ] 是否需要自訂主題色?
|
||||
|
||||
### 5.2 操作流程
|
||||
|
||||
| 流程 | 當前實現 | 確認 |
|
||||
|------|----------|------|
|
||||
| 新增 → 保存 | 一步完成 | |
|
||||
| 保存並新增 | 支援 | |
|
||||
| 刪除確認 | 彈窗確認 | |
|
||||
| 快捷鍵 | Ctrl+S, Ctrl+N | |
|
||||
|
||||
**確認問題**:
|
||||
- [ ] 是否需要草稿保存功能?
|
||||
- [ ] 是否需要操作歷史(Undo/Redo)?
|
||||
|
||||
---
|
||||
|
||||
## 6. 待確認事項清單
|
||||
|
||||
### 6.1 優先級高
|
||||
|
||||
| # | 事項 | 負責人 | 截止日期 |
|
||||
|---|------|--------|----------|
|
||||
| 1 | 確認是否需要用戶認證功能 | | |
|
||||
| 2 | 確認資料庫選型(In-Memory vs MySQL) | | |
|
||||
| 3 | 確認欄位 ID 標準化方案 | | |
|
||||
| 4 | 確認 AI 功能的使用政策 | | |
|
||||
|
||||
### 6.2 優先級中
|
||||
|
||||
| # | 事項 | 負責人 | 截止日期 |
|
||||
|---|------|--------|----------|
|
||||
| 5 | 確認 Excel 匯出需求 | | |
|
||||
| 6 | 確認審核流程需求 | | |
|
||||
| 7 | 確認與現有系統整合需求 | | |
|
||||
|
||||
### 6.3 優先級低
|
||||
|
||||
| # | 事項 | 負責人 | 截止日期 |
|
||||
|---|------|--------|----------|
|
||||
| 8 | 確認深色模式需求 | | |
|
||||
| 9 | 確認多語言支援需求 | | |
|
||||
|
||||
---
|
||||
|
||||
## 7. 簽核記錄
|
||||
|
||||
| 角色 | 姓名 | 簽核日期 | 簽核狀態 |
|
||||
|------|------|----------|----------|
|
||||
| 專案負責人 | | | 待簽核 |
|
||||
| 業務代表 | | | 待簽核 |
|
||||
| 技術負責人 | | | 待簽核 |
|
||||
|
||||
---
|
||||
|
||||
## 8. 附錄
|
||||
|
||||
### 附錄 A:相關文件
|
||||
|
||||
- SDD.md - 軟體設計文件
|
||||
- TDD.md - 測試設計文件
|
||||
- 更新欄位名稱.md - 欄位規範書
|
||||
- ID重命名對照表.md - 欄位 ID 對照表
|
||||
|
||||
### 附錄 B:系統截圖
|
||||
|
||||
(請參考系統實際畫面)
|
||||
|
||||
---
|
||||
|
||||
**文件結束**
|
||||
Reference in New Issue
Block a user