Date: 2026-06-21 · Branch:
FR-040-AP-improvement(沿用當前 branch;不另切) 前置:FR-040(AP 行程 + Phase 7 每方法查核指引)已完成。 OSCAL 依據:v1.2.2 Assessment Results model(Observation → Finding → Risk → POA&M 四段)。 決策脈絡見本檔 §3(A/B/C 評估與排除選項)。
稽核員在「稽核結果判定頁」(RoundAuditReviewView.vue)對每個控制項下判定、記觀察、開風險。現況痛點:
met/not_met/pending + 一段自由文字;觀察是「自由新增」與規劃無連動;風險在另一分頁手動開、與判定流程斷開;缺失 → 風險 → 矯正(POA&M)三段未串。關鍵認知:現有畫面已具備 OSCAL 四段對應區塊(判定=Finding、觀察=Observation、風險分頁=Risk、POA&M 獨立模組)。本 feature 不是重做,是針對既有面板的漸進增強。
觀察(Observation) → 發現(Finding) → 風險(Risk) → 矯正(POA&M)
看到什麼+證據(事實) 滿足/不滿足(結論) 嚴重度+影響 矯正計畫+里程碑+負責人
OSCAL 兩條鐵則(本設計必守):
import-ap 承接 AP 規劃(reviewed-controls 含 objectives + methods)→ AR「照 AP 規劃填實際結果」本就是 OSCAL 預期。| OSCAL 段 | 落在現有畫面 | 現況 | 增強 | 量 | |
|---|---|---|---|---|---|
| A 繼承 AP 指引 | import-ap(跨段) | 中欄「控制參考」面板 AuditControlRef |
只顯示 SSP 實作狀態/描述 | 加顯示 AP 規劃的查核指引 + 方法(FR-040 Phase 7 steps);BE 在 AR init 把 steps 一併 snapshot | 小(唯讀面板加料 + BE echo) |
| B 缺失→風險→矯正 | Finding→Risk→POA&M | 「風險」分頁 + POA&M 模組 | 風險另分頁手動開、無矯正建議欄、與判定斷開 | 判定 not_met 時就地帶出風險(嚴重度+影響)+ 矯正建議欄 → 接既有 POA&M 生成 |
中(串接 + 加欄) |
| C 觀察引導化 | Observation | 右欄「觀察記錄」區 | 自由「+新增觀察」,與規劃無連動 | 改成照 A 帶進的規劃方法逐項引導填「看到什麼 + 證據」,roll up 成 Finding | 大(面板內互動重整) |
排除的做法:把嚴重度/矯正塞進 Finding(違反 OSCAL,B 改走 Risk/POA&M);整頁重寫(現有四段結構可沿用,不需要);per-AO 展開(FR-040 已定案維持 per-method,AR 同步走控制層 + 既有 AO fallback)。
相依:C 依賴 A(C 的「逐項引導」要 A 把規劃方法/指引帶進 AR 才有母體)。B 獨立。→ 實作序 A → B → C。
assessment_result_app_service.init_ar_matrix_for_round)時,除既有 echo(reviewed-controls / subjects / _assessment_log_from_tasks 的 methods/timing)外,把 AP ap_assessment_activities(含 steps 查核指引 + props methods + related_controls)依控制項 snapshot 進 AR(落點:assessment_log entry 擴充,或 AR result 一個 planning_context JSONB;pre-flight 決定,傾向不動 schema、塞 assessment_log)。get_findings / control detail API)依控制項回傳規劃脈絡:{control_id: {methods:[], guidance:[{method, description}], subjects:[]}},供 FE 中欄面板顯示。AuditControlRef 加一區「規劃查核指引」:列出該控制項規劃的方法 + 各方法指引(唯讀,唯讀面板加料、不改判定/觀察邏輯)。risks 表 + severity + link findings + CRUD 端點)。加「矯正建議 / remediation」欄(pre-flight 驗 risk entity 有無對應欄;無則於 jedi_oscal_v2 risk model 補 remediation 或用 props 承載 → 對齊 OSCAL risk.remediation/POA&M)。poam_app_service 生成路徑,確認讀 risk 還是 finding)。not_met 時就地展開「風險」小表單(嚴重度 + 影響/風險描述 + 矯正建議),存判定時一併建/更新 risk 並 link 該 finding(沿用既有 risk 端點)。POST /observations,methods 預填該項方法)。loadEvidence)。import-ap 承接規劃,OSCAL-native(只是把規劃脈絡顯示出來)。A / B / C 已實作上線(2026-06-21,commit 見 §2 交接表)。缺失改善(POA&M)頁 A 版重設計 + 延伸已完成(§11)。
規格:
handoff/2026-06-21-poam-page-redesign-spec.md(A 模式:DataTable + Sidebar 抽屜)。 commit:BE98371f40;FEe5dd953(+e4e8dc3AP 唯讀、cb22aa5OSCAL 文案)。
DataTable(控制項/嚴重度/狀態/期限/進度,排序 + 狀態篩選)+ 點列滑出 Sidebar,抽屜三分頁(矯正措施 / 缺失脈絡 / 證據)。GRC_POAM_RECOMMENDATION_PROTECTED 409)。YYYY-MM-DD。_item_status = 里程碑全 done 才 closed(無里程碑 → open,無法空著結案)。close_round 要本輪所有 item closed(GRC_POAM_NOT_ALL_CLOSED)、manager 守門。pending_reverify(不自宣告通過)→ launch_reverify 開 close-out 覆核輪 → 覆核確認連動關母輪。e4e8dc3)。e5dd953 + cb22aa5)。全程沿用既有表/端點,無 migration。BE 新增端點走 BaseRepositoryImpl.delete_by_id,未動 jedi_oscal_v2 套件 model。