# 稽核人員 Dashboard — 前端整合規格

## 功能概述

新增「我的稽核任務」獨立頁面（路由建議：`/auditor/dashboard`），讓稽核人員登入後直接看到所有待稽核的 AP 清單，點擊直接進入稽核頁面，不需要經過專案管理的層層導航。

---

## 功能流程

```
稽核人員登入
    ↓
進入「我的稽核任務」頁面
    ↓
看到所有待稽核的 AP 清單（排序：最需處理的在最上面）
    ↓
點擊某個 AP
    ↓
直接跳轉到該 AP 的稽核頁面
（/project/<project_uid>/ap/<ap_uid>/audit 或現有的稽核路由）
```

---

## API 規格

### 取得稽核人員的稽核任務清單

```
POST /api/1.0/grc/audits/my/list
Authorization: Bearer <token>
Content-Type: application/json
```

**Request：**

```json
{
  "filters": {
    "status": "auditing",
    "keyword": "CMMC"
  }
}
```

| 欄位 | 必填 | 說明 |
|------|------|------|
| `filters.status` | 選填 | 篩選 AP 狀態：`auditing` / `remediation` / `closed` 等 |
| `filters.keyword` | 選填 | 搜尋專案名稱或 AP 標題 |

**Response：**

```json
{
  "status": true,
  "data": {
    "items": [
      {
        "project_uid": "7824c6f9-...",
        "project_name": "CMMC 2.0 Level 1 稽核",
        "ap_uid": "4ca3da6a-...",
        "ap_title": "CMMC 2.0 Level 1 系統稽核",
        "run_no": 1,
        "ap_status": "auditing",
        "total_controls": 17,
        "verdict_completed": 12,
        "verdict_pending": 5,
        "verdict_summary": {
          "pass": 10,
          "fail": 1,
          "partial": 1,
          "na": 0
        },
        "finding_count": 3,
        "evidence_ready_count": 55,
        "evidence_total_count": 59,
        "started_at": "2026-03-01",
        "deadline": "2026-06-30"
      },
      {
        "project_uid": "abc123-...",
        "project_name": "ISO 27001 年度稽核",
        "ap_uid": "def456-...",
        "ap_title": "ISO 27001 第二輪覆核",
        "run_no": 2,
        "ap_status": "auditing",
        "total_controls": 93,
        "verdict_completed": 88,
        "verdict_pending": 5,
        "verdict_summary": {
          "pass": 85,
          "fail": 0,
          "partial": 3,
          "na": 0
        },
        "finding_count": 5,
        "evidence_ready_count": 110,
        "evidence_total_count": 110,
        "started_at": "2026-02-15",
        "deadline": "2026-05-31"
      }
    ]
  }
}
```

**欄位說明：**

| 欄位 | 說明 | 前端用途 |
|------|------|---------|
| `project_uid` | 專案 UID | 跳轉用 |
| `project_name` | 專案名稱 | 顯示 |
| `ap_uid` | AP UID | 跳轉用 |
| `ap_title` | AP 標題 | 顯示 |
| `run_no` | 稽核輪次 | 顯示（第 1 輪 / 第 2 輪覆核） |
| `ap_status` | AP 狀態 | 狀態標籤 |
| `total_controls` | 控制項總數 | 進度分母 |
| `verdict_completed` | 已判定數 | 進度分子 |
| `verdict_pending` | 待判定數 | 顯示剩餘工作量 |
| `verdict_summary.pass` | 通過數 | 結果概覽 |
| `verdict_summary.fail` | 未通過數 | 結果概覽 |
| `verdict_summary.partial` | 部分通過數 | 結果概覽 |
| `verdict_summary.na` | 不適用數 | 結果概覽 |
| `finding_count` | Finding 數量 | 顯示已記錄的問題 |
| `evidence_ready_count` | 證據就緒的 AO 數 | 證據就緒率分子 |
| `evidence_total_count` | AO 總數 | 證據就緒率分母 |
| `started_at` | AP 開始日期 | 顯示 |
| `deadline` | AP 截止日期 | 顯示、到期提醒 |

---

## 前端 UI 設計建議

### 頁面路由
建議：`/auditor/dashboard` 或 `/audit/my-tasks`

### 頁面結構

```
┌──────────────────────────────────────────────────────────────┐
│  我的稽核任務                                [狀態篩選 ▼] [搜尋] │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  ┌────────────────────────────────────────────────────────┐  │
│  │ CMMC 2.0 Level 1 稽核                    [稽核中] 第1輪 │  │
│  │ CMMC 2.0 Level 1 系統稽核                               │  │
│  │                                                        │  │
│  │ 判定進度  ████████████░░░░░  12/17 (71%)               │  │
│  │ 證據就緒  █████████████████  55/59 (93%)               │  │
│  │                                                        │  │
│  │ ✓ 10  ✗ 1  △ 1  — 0    Finding: 3                     │  │
│  │                                                        │  │
│  │ 期限：2026-06-30                          [進入稽核 →]  │  │
│  └────────────────────────────────────────────────────────┘  │
│                                                              │
│  ┌────────────────────────────────────────────────────────┐  │
│  │ ISO 27001 年度稽核                       [稽核中] 第2輪 │  │
│  │ ISO 27001 第二輪覆核                                    │  │
│  │                                                        │  │
│  │ 判定進度  █████████████████  88/93 (95%)               │  │
│  │ 證據就緒  █████████████████ 110/110 (100%)             │  │
│  │                                                        │  │
│  │ ✓ 85  ✗ 0  △ 3  — 0    Finding: 5                     │  │
│  │                                                        │  │
│  │ 期限：2026-05-31                          [進入稽核 →]  │  │
│  └────────────────────────────────────────────────────────┘  │
│                                                              │
└──────────────────────────────────────────────────────────────┘
```

### 卡片設計重點

每張卡片（一個 AP）應包含：

1. **標題區**
   - 第一行：`project_name` + 狀態標籤（`ap_status`）+ 輪次（`run_no`）
   - 第二行：`ap_title`

2. **進度區**
   - 判定進度：`verdict_completed / total_controls` 進度條
   - 證據就緒：`evidence_ready_count / evidence_total_count` 進度條

3. **結果摘要**
   - ✓ pass數  ✗ fail數  △ partial數  — na數
   - Finding 數量

4. **底部**
   - 期限日期（接近到期用紅色提醒）
   - 「進入稽核」按鈕

### 狀態標籤顏色建議

| 狀態 | 顏色 | 說明 |
|------|------|------|
| `auditing` | 藍色 | 正在稽核 |
| `remediation` | 橘色 | 等待覆核 |
| `closed` | 綠色 | 已結案 |
| `active` | 灰色 | 執行中（稽核人員暫不需操作） |
| `preparing` | 淡灰 | 準備中 |

### 篩選功能

- **狀態篩選**：下拉選單，選項：全部 / 稽核中 / 矯正中 / 已結案
- **關鍵字搜尋**：搜尋框，即時過濾專案名稱或 AP 標題

### 排序邏輯（後端已處理）

API 回傳已按以下優先級排序，前端直接依序顯示即可：
1. `auditing`（正在稽核，最急）
2. `remediation`（等待覆核）
3. `active`（執行中）
4. `preparing`（準備中）
5. `closed`（已結案）

### 點擊跳轉

點擊「進入稽核」按鈕或整張卡片：

```javascript
// 跳轉到稽核頁面
router.push({
  path: `/project/${item.project_uid}/ap/${item.ap_uid}/audit`
  // 或直接跳到 AR 控制項列表頁
})
```

### 空狀態

如果 API 回傳 `items` 為空：
- 顯示：「目前沒有待稽核的任務」
- 可能原因：使用者不具備 `auditor` 角色，或所有 AP 已結案

---

## 導航整合

建議在左側選單新增入口：

```
📋 專案管理        ← 現有（管理者用）
🔍 我的稽核任務    ← 新增（稽核人員用）
📝 我的工作        ← 現有（執行人員用）
```

可依使用者角色控制選單顯示：
- 有 `auditor` 角色 → 顯示「我的稽核任務」
- 有被指派 Job → 顯示「我的工作」
- 有 `manager` 角色 → 顯示「專案管理」
