# FR-144 交接現況（STATE）

> **這份是 living 檔**：每棒就地 Edit，只描述「此刻」。歷史脈絡看同資料夾的 `FR-144-LOG.md`。

| 項目 | 值 |
|------|-----|
| 最後更新 | 2026-10-17（首腦第一棒交棒；實作全部完成、待決策者畫面驗收） |
| branch | BE／FE／套件皆 `feature/FR-139`（主工作樹）；**未 push**（BE 領先 66、FE 領先 29，含 FR-142／143／145 的 commit） |
| 母案卡 | CM-2837 https://app.notion.com/p/FR-144-3fc346da4cd0816e8322df62eba7a711 （Not started；收尾時才收 Done） |
| 子卡 | CM-2838、2839、2852、2853、2861，**全部「修正待驗證」、首腦已復核** |
| Notion 回寫規範 | `docs/claude/notion-issue-tracker.md` |
| 接手前必讀 | §0 讀序 |

## 🧭 原始需求 / WHY

**決策者原話（2026-10-17）**：「目前稽核計畫都只能從專案進入，很繞。我想直接增加一個入口在左側選單，進去就是看到跟自己相關的稽核計畫清單，一樣可以連到稽核計畫頁面。」

**需求的演變**（每次都是決策者看畫面後改，全部已實作）：
1. 卡片式 → 表格，可搜尋排序；風格要跟 FR-142「稽核作業」統一，不要一個功能設計一次。
2. 進度不用進度條、用百分比；只列查核項目進度。一格一件事，最多一行小字。名稱拿掉「我的」，叫「稽核計畫」。日期完整帶時間。
3. 左側選單重排：儀表板 → 待辦任務 → 專案管理 → 稽核計畫 → 稽核作業 → （改善計畫）→ 專案調查結果。
4. **改依專案分組展開**（同 FR-142 CM-2850 規則）：一專案一列、點開看每一次。
5. 拿掉獨立「稽核次」欄，照稽核作業把稽核次放在專案欄；頁尾每頁 10／25／50。
6. **改待辦視角**：稽核中／待覆核／矯正中／已結案在這頁沒意義（計畫進入稽核即唯讀），分段只留「待處理／已完成／全部」，狀態只分「待填寫／未指派／已完成」。「已完成」是決策者在「已鎖定」等候選中選定。
7. 分頁要跟全站（待辦任務）同一模式——已由 FR-145 runner 換成共用元件 `GroupedListPaginator`（FE `88ca7ca8`）。

**現在長什麼樣**：左側「專案與任務」群組的「稽核計畫」（帶待填寫數字）→ 表格一專案一列、預設「待處理」、點列直達 FR-141 稽核計畫頁（麵包屑與左側高亮回到「稽核計畫」）。

## §0 接手讀序

### 0.1 先懂需求
1. 本檔 WHY 節
2. `../README.md`（結論、總進度、需求討論紀錄）
3. 雛形 `../prototype/my-audit-plans-grouped.html`（現行定案長相；`my-audit-plans.html` 是已被取代的平列版，留作對照）

### 0.2 需要細節才開
- `../design.md`：v1 設計（平列版時代），決策表與清單 SQL 仍有效，但「一稽核次一列」「五個狀態分段」已被 §2 改判取代
- 各子卡卡尾的 runner 回寫與「✅ 首腦復核」段

### 0.3 冷接自檢
- 「跟我有關」用哪張表判？（答：`project_participants`，不用 AP 稽核人員 party——它沒連帳號）
- 分段「已完成」包含哪些稽核次狀態？（答：auditing、pending_reverify、remediation、closed）
- 為什麼分組要動後端而 FR-142 不用？（答：本頁是後端分頁，前端分組會把同一專案切在兩頁）

## §1 當前狀態

| 卡 | 做什麼 | 關鍵 commit | 狀態 |
|---|---|---|---|
| CM-2838 | BE 清單端點＋選單登記 | BE `e1812865c`、`96de53fb7`（舊稽核次 null 防呆）、`328006511`（圖示 pi-list） | 修正待驗證 |
| CM-2839 | FE 清單頁＋選單徽章 | FE `00fa1a78` | 修正待驗證 |
| CM-2852 | BE 改以專案分頁 | BE `1b4acbeea`、`9f592b002`（首腦補 round_max） | 修正待驗證 |
| CM-2853 | FE 分組展開、拿掉稽核次欄 | FE `1625d42e`、`8c779e57`、`b3ad3170`（首腦補 round_max） | 修正待驗證 |
| CM-2861 | 待辦視角（BE＋FE） | BE `ae9c1e3d4`、FE `9efd1267` | 修正待驗證 |
| — | 首腦直接修：選單重排 | BE `056ec5e21`（migration） | 已套 DEV |
| — | 首腦直接修：麵包屑與左側高亮 | FE `3f554369`（`?from=audit-plan-list`、`AppMenuItem.isItemActive` 帶 from 時只認來源頁） | 已驗 |
| — | FR-145 runner 改分頁器 | FE `88ca7ca8`（`GroupedListPaginator`） | 首腦未目視 |

Migration（只套 DEV，seed 類）：`scripts/sql/2026-10-17-fr144-audit-plan-list-route.sql`、`scripts/sql/2026-10-17-fr144-project-task-menu-order.sql`。

## §2 已定裁示（不要重新討論）

- 選單名「稽核計畫」，sort 40；sort 60 留給 FR-143「改善計畫」。
- 規劃中（還沒到填寫站）的稽核次不列。
- 外稽未指派稽核人員時，專案經理那列「去指派」跳專案規劃頁；只是 auditor 看不到該列。
- 一專案一列；「目前這一次」＝待填寫優先、同為待填寫取填寫期限最近、都已完成取最新。
- 專案小字：多次「共 N 次 · 第 R 輪」（R 取整個專案、不受篩選），篩選後加「（符合篩選 M 次）」；只有一次直接寫稽核次。
- 只有一次、或篩選後只剩一次的專案不展開。沒有可展開時藏「全部展開／收合」鈕。
- 分段「待處理／已完成／全部」，預設待處理；狀態「待填寫（橘）／未指派（紅）／已完成（綠）」。
- 每頁 10／25／50 個專案；分段筆數仍算稽核次。

## §3 下一步：全面測試時要特別看的（DEV 沒真資料、還沒人看過）

1. **開一個新專案走到「稽核計畫填寫」站**，看：
   - 左側選單「稽核計畫」旁的數字＝待填寫筆數
   - 清單「待處理」出現該列，狀態橘色「待填寫」，最右鉛筆「填寫」，點進去可編輯、網址無 `?pass=`
   - 預設展開邏輯（有待填寫的多次專案）
2. **外稽走到填寫站、尚未指派稽核人員**：PM 帳號看到紅色「未指派」與「去指派」，跳專案規劃頁；只是 auditor 的帳號看不到該列。
3. **只有一次稽核的專案**：小字直接寫「第 1 輪 · 內稽第 1 次」、沒有箭頭。
4. **分頁器**：頁尾跟待辦任務一致（FR-145 改的，首腦沒目視過）。
5. 登出再登入後左側選單順序正確。

## §4 待辦與風險

**收尾（等決策者下令）**：SPEC 新增「稽核計畫清單」頁＋使用手冊；兩支 migration 出貨基線重產（隨 FR-140／141）；e2e 一棒；母卡 CM-2837 收 Done；push。

**掛著**：FR-146 清單工具列統一（CM-2847～2849，決策者裁暫不做）。三個分組清單頁分頁器兩種實作並存（稽核作業、改善計畫用 DataTable 內建；稽核計畫、結案報告用 `GroupedListPaginator`），畫面一致，留 FR-146 收。分段按鈕選中色仍寫死 `rgba(99,102,241,0.2)`，同上。

## §5 Pre-flight

```bash
cd ~/Projects/Billows/Audit-Manager/compliance-manager-be && git log --oneline -3 && git status --short | head
git -C ../compliance-manager-fe log --oneline -3
# 8000 是否跑最新碼：比 BE 啟動時間與最新 FR-144 commit 時間
lsof -tiTCP:8000 -sTCP:LISTEN | head -1 | xargs -I{} ps -o lstart= -p {}
# 選單登記
psql -h localhost -p 5432 -U cmmgr -d guidant_ai_dev -At -c "select name,sort from public.ui_routes where pid=42 and is_menu order by sort"   # 密碼查 .env DB_PASSWORD
```

## §6 環境座標

- 頁面：FE `http://localhost:5180/project/audit-plans`；`src/views/project/AuditPlanListView.vue`
- 端點：`POST /api/1.0/audit-plans/my/list`、`GET /api/1.0/audit-plans/my/count`；BE `infra/readmodel/audit/audit_plan_list_query.py`、`app/readmodel/service/audit_plan_list_service.py`
- 登入：blsadmin，密碼查 test repo `.env.e2e` 的 `TEST_PASSWORD`
- 雛形：BE 根 `docs/features/` 起 `python3 -m http.server 8799`

## §7 行為規範提醒

- FE 工作樹常有其他 FR session 的未 commit 檔，只 add 自己的檔。
- `?from=audit-plan-list` 不能拿掉，麵包屑與左側高亮靠它。
