本卡屬 FR-143,第 2 棒:主專案新 app service 與 API。依賴第 1 棒的 task 形狀。

這一棒在做什麼(白話)

給新頁面用的後端:一次讀回這個稽核次所有不符合的評估目標(含為什麼不符合、底下有哪些任務、原指派人、目前設定);PM 存一條評估目標底下全部任務的設定;按送出時檢查每個任務都填齊了,鎖定計畫,把執行人員和到期日寫回任務,再推進流程(內稽退卡走第 5 棒,外稽進待覆核)。

在哪裡

api/project/__init__.py:109-114            既有 POA&M 路由掛法(/audit-round/<round_uid>/poam-items 等)
api/project/routes/audit_round_route.py:380  既有 POA&M route class(485 行,可加)
pkg/jedi-compliance-audit/.../poam_app_service.py  既有 list_items/get_item(讀 AR finding/risk/observation 的 helper 可沿用)
pkg/jedi-compliance-audit/.../audit_round_app_service.py:522  close_round(送出後呼叫)
app/flow_control/service/not_met_job_redo_service.py  退卡(第 5 棒改)
common/code/flow_control_error_code.py:100-109,285-286  GRC_POAM_*;最大 409 序號 041(:619)
public.workflow_execution_control_mapping  評估目標 → 任務流程的對應(control_id、ao_part_id)

怎麼修

先查再寫:讀 finding/risk/observation 的 helper 在套件 poam_app_service._item_findings/_item_risks/_item_observations,直接呼叫不重寫;任務站清單用 job_execution_domain_service.get_latest_station_jobs;指派人 task_assignee_domain_service.get_all。審計欄位回 created_user_name 等照 CLAUDE.md。

要寫測試

碎片政策:本棒不強制新 unit test;commit 前跑守衛 pytest test/test_module_boundaries.py 與 RLS 形狀測試。

手測

連帶