手冊首頁 / 專案與任務 / 專案總覽頁

專案總覽頁(Project Auditor Overview)

功能群:專案管理|狀態機與共用概念先讀 功能群總覽

事實基準:2026-07-05 從 FE / BE code 掃出(FR-038 v2 round-based 架構);endpoint 對照 routes.json,schema 對照 marshmallow serializer 與 service 組裝碼;表結構取自 db_schema.json

變更紀錄:2026-07-09 FR-047 —— 規劃期判定改輪次驅動(isPlanningPhase,對齊專案狀態機 B 案,原依 project.status==='pending');輪次 header 開始 / 結束日期改 locale-aware 格式化(原直接渲染 wire ISO 字串 2026-06-22T00:00:00+00:00end_at null 不再留懸空破折號)

1. 功能描述

專案總覽頁是單一稽核專案的儀表板與導覽中樞:切換稽核輪次、看整體指標(控制母體 / 任務完成 / SSP 完成 / 覆核進度)、瀏覽控制群組→控制項→AO 樹與其 SSP 現況、做覆核標記、管理群組 / 控制項層參與人員、並依輪次階段導向各階段主場頁(規劃 / 稽核計畫 / 稽核判定 / POA&M)。

同一元件 ProjectAuditorOverview.vue 掛三條 route 變體:project-auditor-overview(純,無 round)、project-auditor-overview-roundFR-038 v2 推薦/round/:roundUid)、project-auditor-overview-ap(legacy AP,/ap/:apUid)。差異見 §12。

主要使用者:專案 manager / auditor / reviewer / viewer(動作列依輪次狀態與角色顯示)。

角色速覽(完整定義與 manager 全域代行慣例見 _overview §3):

角色 一句話
manager 專案經理 — 動作列最全,可代行 auditor 的規劃 / 判定入口
auditor 稽核員 — audit_planning 編 AP、auditing 進判定
reviewer 覆核者 — 可對控制項 / AO 做覆核標記
viewer 一般參與者 — 只能檢視

1.1 功能總覽(本頁全部功能)

# 功能 說明 位置 詳述
1 輪次切換下拉 選本專案某一輪,決定 apStatus / sspUid;無 roundUid 自動選最新一輪 Header UC-PO-01
2 四張指標卡 控制群組 / 控制項數、任務完成(三態分解)、整體完成度、SSP 完成度 / 覆核進度 Header 下 §6.2
3 專案資訊面板(可摺疊) 參與人員、受評標的、資產(設備+系統)、SSP 範圍提示 摺疊區 §6
4 開始執行任務 PM 於 planning 把已指派 TODO 任務批次轉 PROCESSING + 通知 動作列(限 PM/planning) §6.4
5 進專案規劃頁 導向 planning 主場頁 動作列 →規劃頁 spec
6 進稽核計畫頁(編輯 / 檢視) audit_planning 且 auditor/manager 可編輯,其餘檢視 動作列 →稽核執行群
7 進稽核判定頁 auditing 且 auditor 進判定,其餘檢視結果 動作列 →稽核執行群
8 進 POA&M 頁 remediation / pending_reverify / closed 且 PM 動作列 →稽核執行群
9 控制樹導覽 / 搜尋 / 只看我的任務 群組→控制項→AO 三層;搜尋、展開全部、我的任務篩選 左樹 UC-PO-02
10 控制項 / AO SSP 現況檢視 右面板讀 SSP 實作狀態 / 描述 / 備註 / 程序書(唯讀) 右面板 UC-PO-02
11 覆核標記(控制項 / AO) manager / reviewer 對已完成控制項 / AO 標記覆核閉環 右面板覆核鈕 UC-PO-02
12 群組 / 控制項層參與人員管理 對控制群組或控制項指派 / 移除管理人員(影響三層編輯權) 右面板 → 側欄 UC-PO-04
13 任務執行抽屜 檢視某 AO 任務的指派 / 證據 / 狀態 右側抽屜 §6
14 AI 證據分類 觸發證據自動分類 job(非同步輪詢狀態) 動作列 → dialog 另屬證據管理功能群
15 結案 / 覆核生命週期 輪次結案 / 發起覆核等轉換(狀態機見 _overview §2) 動作列 / 由 banner 驅動 §12(含 FE 常數 drift)

UC(§2)展開本頁所有具實質後端邏輯的操作路徑:輪次切換導覽(1)、控制樹瀏覽與覆核標記(9~11)、開始執行任務(4)、群組/控制項層參與人員管理(12)。純顯示 / 導覽類(2 指標卡、3 專案資訊面板、13 任務執行抽屜)見 §6;階段推進(15)與各階段主場頁入口(5~8)另屬各階段主場頁 spec 與 _overview §2,AI 證據分類(14)另屬證據管理功能群,於此只交叉連結不重複。

2. Use Case

角色速覽(完整定義與 manager 全域代行慣例見 _overview §3):

角色 一句話
manager 專案經理 — 動作列最全,可代行 auditor 的規劃 / 判定入口
auditor 稽核員 — audit_planning 編 AP、auditing 進判定
reviewer 覆核者 — 可對控制項 / AO 做覆核標記
viewer 一般參與者 — 只能檢視

流程圖視覺慣例:菱形 = 判斷、橘底 = 例外 / 擋下、紅框 = 錯誤(標 error code)、綠框 = 成功終點、虛線 = 可選路徑。

UC-PO-01 切換輪次並進入階段主場頁

項目 內容
角色 專案參與者(動作列依狀態 / 角色)
前置條件 已登入;為專案參與者;專案至少一輪次
產出 / 後置條件 定位輪次 → apStatus / sspUid;載入控制樹與指標;動作列導向對應階段頁
uc_po_01 start load 載入專案+輪次清單 GET /grc/project/{uid} POST /projects/{uid}/audit-rounds/list start->load pick 選輪次(下拉)→ 決定 apStatus / sspUid 無 roundUid 時自動選最新一輪 load->pick tree 載入控制樹 GET /ssp/{sspUid}/control-tree +儀表板指標 pick->tree gate 依輪次 status × 使用者角色 決定動作列哪些鈕可用 tree->gate plan planning → 專案規劃頁 (PM 另可開始執行任務) gate->plan planning ap audit_planning → 稽核計畫頁 (編輯:auditor/manager;其餘檢視) gate->ap audit_planning audit auditing → 稽核判定頁 (auditor;其餘檢視結果) gate->audit auditing poam remediation / pending_reverify / closed → POA&M 頁(PM) gate->poam 後階段 goto 導向該階段主場頁 (見稽核執行功能群) plan->goto ap->goto audit->goto poam->goto
UC-PO-01 流程:載入專案+輪次→選輪次定 sspUid→載控制樹→依 status×角色決定動作列→導向階段主場頁

UC-PO-02 瀏覽控制樹並做覆核標記

項目 內容
角色 檢視:任一參與者;覆核:manager / reviewer(純 auditor 不可覆核)
前置條件 控制項 / AO 已完成(未完成則覆核鈕禁用);輪次未結案
產出 / 後置條件 is_reviewed / reviewers 更新(本地 state,不重載整樹)
uc_po_02 start browse 左樹選群組 / 控制項 右面板讀 SSP 現況+展開 AO 任務 start->browse lazy 按需載入控制項 SSP 現況 GET /ssp/{sspUid}/control-implementation/{cid} browse->lazy click 點控制項 / AO 的覆核鈕 lazy->click done 該控制項 / AO 已完成? (未完成→鈕禁用) click->done blocked 鈕禁用(需先完成) done->blocked role 使用者為 manager / reviewer? (純 auditor 不可覆核) done->role deny 無覆核權(FE 隱藏 / 禁用) role->deny call POST / DELETE .../control/{cid}/review .../ao/{aoId}/review role->call sync 回填 is_reviewed / reviewers (本地 state 更新,無重載) call->sync
UC-PO-02 流程:選節點讀 SSP 現況(按需載入)→點覆核鈕→完成度+角色雙重 gate→POST/DELETE review→回填標記

UC-PO-03 開始執行任務(PM 批次啟動)

項目 內容
角色 專案 manager
前置條件 輪次 = planning;有已指派且 TODO 的準備任務
產出 / 後置條件 job_executions.status TODO→PROCESSING;站內通知送出;activated_count 回傳(idempotent 可重按)

(流程與 endpoint 同專案規劃頁 UC-PP-02 的批次啟動段;本頁 Header 動作列亦提供此入口。)

uc_po_03 start entry 專案總覽頁 Header 點「開始執行任務」 (isProjectManager 才看得到入口) start->entry pre 輪次 = planning 且有已指派、狀態 TODO 的準備任務? entry->pre none 無可啟動任務 (按鈕 disabled/無動作) pre->none mgr BE 檢查:使用者是專案 manager? pre->mgr deny 403 GRC_403002 mgr->deny exec POST /start-task-execution job_executions 批次 TODO → PROCESSING +站內通知(activated_count 回傳,idempotent 可重按) mgr->exec
UC-PO-03 流程:Header 點「開始執行任務」(僅 PM 可見)→ 檢查輪次=planning 且有 TODO 準備任務→BE 驗專案 manager(否則 GRC_403002)→POST /start-task-execution 批次 TODO→PROCESSING+站內通知(idempotent)

UC-PO-04 管理群組 / 控制項層參與人員

項目 內容
角色 canManageGroupParticipants / canManageControlParticipants
前置條件 已選中群組或控制項節點;輪次未結案
產出 / 後置條件 control_group_participants / project_control_participants 增改刪;直接影響該群組 / 控制項的三層編輯權(見 §3)
uc_po_04 start node0 右面板選群組節點 or 控制項節點 → 開參與人員側欄 start->node0 gate canManageGroupParticipants / canManageControlParticipants? node0->gate deny 無管理權:側欄不提供指派操作 gate->deny act 新增 / 修改 / 移除? gate->act add POST /control-group-participant 或 /project-control-participant act->add 新增 upd PUT(改設定) act->upd 修改 rm DELETE(移除人員) act->rm 移除 eff control_group_participants / project_control_participants 增改刪 → 影響該節點三層編輯權(見 §3) add->eff upd->eff rm->eff
UC-PO-04 流程:右面板選群組/控制項節點開側欄→檢查管理權→新增(POST)/修改(PUT)/移除(DELETE)對應 participant→影響該節點三層編輯權

3. 權限矩陣

專案層角色基調見 _overview §3。本頁的實際檢查點(FE 判定與 BE 強制分欄並列):

操作 FE 判定 BE 強制 BE 檢查位置
進頁 / 讀樹 / 讀 SSP 參與者即可 require_participant / SSP 權限 common/middleware/permission/ssp_permission.py
開始執行任務 isProjectManager && status==='planning' _check_managerGRC_403002 app/grc/service/task_execution_service.py
進稽核計畫頁(編輯) `audit_planning && (isAuditor isProjectManager) && hasAuditStage`
進稽核判定頁 isAuditor && status==='auditing' 判定寫入端強制 AR app service
覆核標記 !isApClosed && (manager/reviewer at 專案/群組/控制項層) && 非純 auditor review endpoint 端 api/grc/routes/review_route.py
群組 / 控制項參與人員管理 canManageGroupParticipants / canManageControlParticipants 對應 participant API participant routes
輪次生命週期(launch / close / reverify) manager / auditor(依轉換,見 _overview §2) _check_role(manager override)→ GRC_403002 / GRC_403001 app/grc/service/audit_round_app_service.py:99-110

⚠️ 覆核權三層遞進:FE 允許專案 / 群組 / 控制項任一層的 manager/reviewer 做覆核;改權限時比照規劃頁 §3 的三層 canEdit 一併看。純 auditor 被排除在覆核之外(判定與覆核分權)。

4. 狀態機與前置條件

輪次 7 態狀態機(含轉換動作 / 角色 / 前置條件 / error code)見 _overview §2——本頁是它的主要呈現與導覽面。本頁相關 gate:

條件 效果 出處
選中輪次 status 決定動作列哪些鈕顯示 / 可用(見 §1.1 4~8) ProjectAuditorOverview.vue computed(canEditApAuthoring 等)
isPlanningPhase(round 模式=該輪 status==='planning';無輪次時 fallback project.status==='pending' 顯示「開始執行任務」(限 PM)+規劃提示條、規劃期專屬 SSP 編輯提示 ProjectAuditorOverview.vue computed(狀態機 B 案後改輪次驅動,取代原 isPending
isApClosed(closed) 覆核 / 管理鈕禁用、顯示結案提示 同上
sspUid 取值 planning 用 living SSP;audit_planning 後用凍結快照(round.ssp_id _overview §4
覆核鈕 控制項 / AO 未完成 → 禁用 FE canReviewControl + 完成度
生命週期轉換前置 _overview §2(living SSP、POA&M 全 closed、母輪 pending_reverify 等) audit_round_app_service.py

5. UI 設計

版面骨架與區塊職責(右面板依左樹選中節點型別切換;彩色區塊可點跳對應小節錨點,API 僅標代表性):

Header:輪次切換下拉(帶狀態徽章)+ 動作列(自動分類證據/規劃/稽核計畫/判定/POA&M) POST /projects/{uid}/audit-rounds/list ・ POST /grc/project/{uid}/start-task-execution 控制母體 任務完成(三態) 整體完成度 SSP/覆核進度 GET /grc/project/{uid}/ap/{apUid}/dashboard(§6.2 載入類) ▸ 專案資訊面板(可摺疊):參與人員/受評標的/資產(設備+系統)/SSP 範圍 控制樹 master-detail — 右面板依左樹選中節點型別切換 左樹導覽 群組 → 控制項 → AO 搜尋/完成度/只看我的 GET /ssp/{sspUid}/ control-tree 跳至 §2 Use Case(UC-PO-02 瀏覽控制樹並做覆核標記) 控制項/AO SSP 現況(唯讀)+ 覆核標記 實作狀態/描述/備註/程序書(唯讀) 右上「標記為已審閱」(完成度+角色雙 gate) GET /ssp/{uid}/control-implementation/{cid} POST/DELETE …/control/{cid}/review(及 …/ao/{id}/review) → 點我跳 §2 UC-PO-02 跳至 §2 Use Case(UC-PO-04 管理群組/控制項層參與人員) 群組/控制項層 參與人員側欄 POST/PUT/DELETE /control-group-participant /project-control-participant → §2 UC-PO-04 任務執行抽屜 某 AO 任務的 指派/證據/狀態 讀 control-tree 內嵌任務/task_assignees 彩色=可點跳本頁小節錨點(框內標錨點+代表性 API)|灰=本頁描述|虛線框=依選中節點才出現的側欄/抽屜 API 僅列代表性 2~3 條,完整規格見 §6
專案總覽頁版面 wireframe:Header 輪次切換+動作列、四指標卡、可摺疊專案資訊、左樹+右面板 master-detail、參與人員側欄/任務執行抽屜

實機截圖(STG,亮色模式,2026-07-05,帳號 blsadmin,專案「亞○ CMMC L1 合規」/ auditing 輪次):

整頁:Header 輪次下拉+動作列(自動分類證據/專案規劃/檢視稽核計畫/檢視稽核結果)+四指標卡

專案資訊摺疊面板展開:參與人員(4)/ 受評標的 / 資產(3)

左樹 + Control 右面板:SSP 現況說明 + 右上角「標記為已審閱」覆核鈕

輪次切換下拉展開(目前 STG 該專案僅 1 輪,故只顯示單一輪次項)

狀態呈現:輪次下拉每項帶狀態徽章(AP_STATUS_SEVERITY 色階);樹節點帶完成度、覆核勾、可執行任務脈動點;覆核鈕依完成度 / 角色禁用;SSP 現況為 white-space:pre-line 純文字(不渲染 markdown);無 socket,操作後本地 state 更新。

6. API 規格

Envelope:成功 {"status": true, "data": …}、失敗 {"error_code": "…", "msg": "…"}(HTTP 4xx/5xx)。

6.1 總清單(本頁呼叫的全部 endpoint)

分類 Method + Path 說明 完整規格
載入 GET /grc/project/{uid} 專案基本資料+參與人員(進頁權限判定) GAI-SD-02
載入 POST /projects/{uid}/audit-rounds/list 輪次清單(切換下拉來源,定位當前輪) §6.2
載入 GET /ssp/{sspUid}/control-tree 群組→控制項→AO 樹(含內嵌任務) 規劃頁 §6.2
載入 GET /grc/project/{uid}/ap/{apUid}/dashboard 四張指標卡資料 §6.2
SSP 現況 GET /ssp/{sspUid}/control-implementation/{cid} 控制項 / AO 現況(按需載入,唯讀顯示) 規劃頁 §6.3
覆核 POST/DELETE /grc/project/{uid}/ap/{apUid}/control/{cid}/review(及 .../ao/{aoId}/review 控制項 / AO 覆核標記增刪 §6.3
任務 POST /grc/project/{uid}/start-task-execution PM 批次啟動已指派任務 規劃頁 §6.4
參與人員 POST/PUT/DELETE /control-group-participant/project-control-participant 群組 / 控制項層人員增改刪 GAI-SD-02
階段 GET/POST /project/{uid}/audit-round/{roundUid}/stage/{info,advance} 階段資訊 / 推進(FlowPhaseBanner) 規劃頁 §6.5
輪次生命週期 POST /audit-round/{roundUid}/{launch-audit,start-auditing,close-round,launch-reverify,ar/finalize} 輪次狀態轉換(多由 banner / 各階段頁驅動) §6.3 / _overview §2
legacy 載入 GET /grc/project/{uid}/assessment-plans/menu AP 變體用的舊清單(見 §12) GAI-SD-02

以下 §6.2~6.3 為核心 endpoint 完整規格;標 GAI-SD-02 者屬常規 CRUD,多數 endpoint 的欄位規格與規劃頁 spec 共用(已標指向)。

6.2 載入類

[POST] /projects/{project_uid}/audit-rounds/list

輪次清單(切換下拉來源)。無 body。Response data(陣列,每項)欄位見 規劃頁 §6.2(同 _to_dto):uid / name / round_no / round_type / status / parent_round_uid / ap_uid / ssp_uid / ar_result_id / poam_id / flow_template_snapshot_uid / workflow_execution_uid / start_at / end_at / created_at / created_user / created_user_name。出處:app/grc/service/audit_round_app_service.py:164-191_to_dto

[GET] /grc/project/{project_uid}/ap/{ap_uid}/dashboard

指標卡資料。Response data

欄位 型別 說明
total_controls int 控制項總數
control_group_count int 控制群組數
total_tasks int 任務總數
completed_tasks int 已完成任務數
task_status_breakdown object 任務三態分解:{completed, in_progress, not_started}
completion_rate number 整體完成度
reviewed_controls_count int 已覆核控制項數

若無 task counts,FE 退回以樹的 AO 任務數估算(見 §12)。出處:api/grc/routes/assessment_plan_route.py(dashboard resource)

6.3 覆核 / 輪次類

[POST]|[DELETE] /grc/project/{project_uid}/ap/{ap_uid}/control/{control_uid}/review(及 .../ao/{ao_uid}/review)

控制項 / AO 覆核標記。POST 標記、DELETE 取消,無 body。Response data

欄位 型別 說明
is_reviewed bool 是否已覆核
reviewers array 覆核者清單,每項 {uid, name, reviewed_at}

前置:該控制項 / AO 已完成、使用者具覆核權。出處:api/grc/routes/review_route.py

輪次生命週期轉換(POST /audit-round/{round_uid}/...)

launch-audit / start-auditing / close-round / launch-reverify / ar/finalize——轉換權限、前置條件與 error code 見 _overview §2(enforcement 在 audit_round_app_service.py)。角色守門 _check_role:manager override 慣例,失敗 GRC_403002(缺 manager)/ GRC_403001(缺 auditor)。關鍵 error code:GRC_412034(無 living SSP)、GRC_412005(POA&M 未全 closed)、GRC_412037(母輪不在待複驗)、GRC_412041(已發起覆核)、GRC_412032(狀態轉換不合法)。出處:app/grc/service/audit_round_app_service.py

⚠️ 本頁對輪次生命週期的呼叫多由 FlowPhaseBanner(stage/advance)或各階段主場頁觸發,非本頁獨有;且部分 FE 常數仍指向 legacy path(見 §12)。

7. 前端檔案地圖(compliance-manager-fe/)

檔案 角色
src/views/project/ProjectAuditorOverview.vue 主檢視(約 2,500 行;輪次切換、指標卡、專案資訊、控制樹 master-detail、覆核、參與人員、任務抽屜)
src/config/router/index.js:773-841 三 route 變體:-overview(純)/ -roundv2)/ -ap(legacy)
src/components/grc/FlowPhaseBanner.vue 階段推進橫幅
src/components/grc/JobExecutionDrawer.vue 任務執行抽屜
src/components/grc/ParticipantsPanel.vue 參與人員管理側欄
src/components/grc/project/AIEvidenceClassificationDialog.vue AI 證據分類 dialog
src/components/grc/{StatusBadge,SspStatusTag,GrcProgressBar,UserAvatar,ReferenceDocumentList}.vue 徽章 / 進度 / 頭像 / 程序書清單
src/composables/useEvidenceClassificationJobs.js 證據分類 job 輪詢
src/service/SspService.js SSP 現況按需載入
src/config/locales/i18n/zh-tw/auditor-overview.json 頁面 i18n

8. 後端檔案地圖(本頁核心鏈路)

鏈路 Route App Service 底層
輪次清單 api/project/routes/audit_round_route.py::AuditRoundsListRoute app/grc/service/audit_round_app_service.py::list_rounds_to_dto compliance.project_audit_rounds
專案詳情 api/grc/routes/project_route.py::ProjectDetailResource.get app/grc/service/project_service.py::get_project jedi_project + participant service
控制樹 api/oscal/routes/ssp/ssp_control_implementation_route.py::SspControlTreeRoute app/oscal/service/ssp_control_implementation_service.py::get_control_tree ProfileResolutionService.resolve + catalog repos
指標卡 api/grc/routes/assessment_plan_route.py(dashboard) AP dashboard service 統計查詢
覆核 api/grc/routes/review_route.py review app service oscal.ssp_implemented_requirements / ssp_statements(覆核標記)
啟動任務 api/grc/routes/task_execution_route.py::StartTaskExecutionRoute app/grc/service/task_execution_service.py::start_task_execution 查已指派 TODO → 批次 activate + 通知
輪次生命週期 api/project/routes/audit_round_route.py(launch-audit / start-auditing / close-round / launch-reverify / ar/finalize) audit_round_app_service.py(各方法,_check_role 守門) 凍結 SSP snapshot / AP / AR / POA&M / BPMN 綁定

DDD 提醒:控制樹核心 build_control_tree_by_ssp_id 免權限(背景任務共用),權限在 route / app service 層把關;輪次寫入照 _check_role + 狀態前置。

9. DB

9.1 資料表總清單(本頁讀寫的全部表)

讀/寫 說明 欄位詳述
compliance.project_audit_rounds 輪次切換來源(狀態 / 凍結 SSP 指標 / 覆核母輪) §9.3
compliance.projects / project_participants 專案主檔 / 角色(動作列判定) GAI-SD-03
compliance.project_extensions living_ssp_id 錨點 規劃頁 §9.3
oscal.system_security_plans living / 凍結 SSP GAI-SD-03
oscal.ssp_implemented_requirements / ssp_statements 讀 / (覆核標記) 控制項 / AO 現況(唯讀顯示)+ is_reviewed GAI-SD-03
oscal.catalog_groups / catalog_controls / catalog_control_parts 控制項結構三層 GAI-SD-03
oscal.ssp_reference_documents 程序書(唯讀顯示) GAI-SD-03
compliance.job_executions 讀 / (狀態) AO 任務(樹內+抽屜);start-task-execution 轉 PROCESSING 規劃頁 §9.3
compliance.task_assignees 任務指派(可執行判定 / 我的任務篩選) GAI-SD-03
compliance.control_group_participants / project_control_participants 群組 / 控制項層參與人員 GAI-SD-03
compliance.stage_objects 階段定義(banner) GAI-SD-03

9.2 ER 圖(本頁讀寫範圍)

po_er proj compliance.projects uid / name / status ext compliance.project_extensions living_ssp_id 錨點 owner_id / module_frame_id proj->ext 1:1 round compliance.project_audit_rounds 輪次切換來源 status / round_no / round_type ssp_id(凍結)/ parent_round_id proj->round 1:N part compliance.project_participants 專案層角色(動作列判定) proj->part 1:N ssp oscal.system_security_plans living(planning) 或凍結快照(audit_planning+) ext->ssp living_ssp_id round->ssp ssp_id(凍結) stage compliance.stage_objects 階段定義(precondition / handler) round->stage BPMN 階段 ir oscal.ssp_implemented_requirements ssp_statements 控制項 / AO 現況(唯讀顯示) +覆核標記(寫) ssp->ir 1:N job compliance.job_executions AO 任務(樹內+抽屜) start-task-execution 轉 PROCESSING ir->job per-AO
專案總覽讀寫範圍:黃 = 輪次 / SSP(唯讀為主)、藍 = 控制現況(覆核標記寫入)、任務啟動;虛線 = soft ref / 凍結指標

9.3 核心表欄位(取自 DEV DB dump,含 DB comment)

compliance.project_audit_rounds — 稽核輪次主檔

輪次切換下拉的資料來源;欄位(uid / round_no / round_type / status / parent_round_id / assessment_plan_id / ssp_id(凍結快照)/ ar_result_id / poam_id / flow_template_snapshot_uid / workflow_execution_uid)與說明見 規劃頁 §9.3——本頁只讀不改(狀態轉換走 API,不直接 UPDATE,見 _overview §5)。

其餘表(SSP 現況 / 任務 / 參與人員)欄位詳見規劃頁 §9.3 與 GAI-SD-03。

10. 頁面邏輯與資料對應

載入時序:見 §2 UC-PO-01 流程圖(專案+輪次清單 → 選輪次定 sspUid → 控制樹+指標)。

關鍵欄位對應(API ↔︎ 畫面):

畫面元素 FE state API 欄位
輪次下拉 apList / selectedAp audit-rounds/list 的 {uid, name, round_no, status, ssp_uid}
目前 SSP sspUid(computed) selectedAp.ssp_uid(凍結)→ fallback project.ssp.id(living)
四指標卡 controlGroupCount / taskStats / completionRate / sspOverallStats / reviewStats dashboard 回傳 + tree 統計
樹節點狀態 ctrlStatus / ctrlProgress(computed) control-tree 的 ssp_implementation_status / 完成度
覆核勾 is_reviewed / reviewers review endpoint 回傳
SSP 現況面板 sspDescriptions[cid] control-implementation 的 implementation_description / objectives[]
動作列可用性 isProjectManager / isAuditor / canEditApAuthoring / … status × participant role 推導

儲存流程:本頁多為讀取 + 覆核標記 / 參與人員 / 啟動任務等點狀寫入;覆核回填本地 state,不重載整樹。控制項 SSP 現況為按需載入(展開才 GET)。

錯誤對應:BE error envelope → toast;覆核 / 啟動任務 / 生命週期常見碼見 §3 / §6.3 與 _overview §2

11. 背景行為與外部依賴

類型 內容
通知 「開始執行任務」→ 按人聚合送站內通知(同規劃頁)
AI 證據分類 dialog 觸發後由 useEvidenceClassificationJobs 非同步輪詢 job 狀態(scope = 專案 × 輪次 / AP)
BPMN 輪次狀態由綁定 workflow 驅動;階段推進 = BPMN 前進;直接 UPDATE status 會脫鉤(見 _overview §5
Socket 本頁 socket / 輪詢(AI 分類的輪詢是 HTTP polling,非 socket);一般資料更新靠操作後 state 更新與重載
jedi-* 套件 jedi-oscal-v2(SSP / catalog)、jedi-flow-engine(輪次 / 任務 / 階段)、jedi-auth(JWT)
系統參數 無 feature flag;輪次 / 階段行為由 BPMN 範本與 stage_objects 定義

12. 邊界情況與已知坑

  1. 三 route 變體差異-round(v2 推薦)走 /audit-rounds/list、有完整階段功能;-ap(legacy)走舊 assessment-plans/menu、2026-06-18 起棄用但仍相容;-overview(純)自動選最新輪。修 bug 先確認使用者走哪條 route
  2. FE 生命週期常數仍指 legacy pathGRC_CLOSE_ROUND / GRC_LAUNCH_AUDITapi.js 仍組成 /grc/project/{pid}/ap/{apUid}/close-round/launch-audit),但這些 path 不在現行 routes.json——現行輪次生命週期在 /audit-round/{roundUid}/...。AP 變體上呼叫這些常數可能打到死路;動生命週期功能前務必對照 routes.json 確認實際 endpoint(此為 FR-038 遷移留下的 drift,屬待清理)
  3. living vs 凍結 SSPsspUid 於 planning 取 living、audit_planning 後取凍結快照(round.ssp_id);同一 control-tree endpoint 兩者皆服務。看到「現況跟規劃頁不同步」多半是一個讀 living 一個讀凍結
  4. 指標卡 fallback 估算:dashboard 無 task counts 時 FE 退回用樹的 AO 任務數估算,legacy AP 與 round 資料來源不一致時可能誤判完成度(FE 有註記的已知邊界)
  5. 覆核與完成度分離:控制項可 100% 完成但未「覆核」;覆核鈕需完成度達標 + 覆核角色;純 auditor 不可覆核(判定與覆核分權)
  6. 狀態值兩套:AP 狀態 enum 與輪次 status enum 不同,頁面映射到同一 AP_STATUS_SEVERITY 色階顯示;勿把兩套值混用
  7. BPMN 驅動狀態:輪次 status 由 workflow 前進,直接改 DB 會脫鉤(見 _overview §5
  8. 覆核 / 生命週期 endpoint 用 apUid 或 roundUid:注意 review 走 ap/{apUid}、生命週期走 audit-round/{roundUid}——兩種識別碼不可混填
  9. SSP 現況純文字white-space:pre-line 顯示,不渲染 markdown / HTML;後端若推格式化內容會破版
  10. 無輪次空狀態:新專案若第一輪 best-effort 失敗(見 專案建立 §12),apList 為空;選單無可選項時右面板停在空狀態

13. 開發與驗證

  • 跑起來:BE python main_socketio.py(port 8000,log 在 log/app.log);FE 在 compliance-manager-fe/ 起 Vite dev server。BE 改 service code 後必須重啟(無 hot reload)
  • 測試帳號:dev 環境 blsadmin(manual 測試用;密碼見 .env / 部署文件)
  • 導航路徑:專案列表 → 點專案名稱(→ 輪次清單)→ 進某輪 → 總覽;或直接 /project/projects/:id/round/:roundUid
  • 前置資料:專案需已成立(有 living SSP 與 ≥1 輪次);不同 status 的輪次才能驗動作列各鈕的顯示條件
  • E2Ecompliance-manager-test/ repo(Cucumber + Playwright);以 專案總覽 / auditor-overview 搜尋 feature 檔
  • 相關文件:建立見 專案建立、清單見 專案列表頁、規劃頁 專案規劃頁、輪次狀態機 _overview §2;FR-038(v2 輪次)docs/features/FR-038-2606-oscal-redesign/;DB / API 全量見 GAI-SD-02/03