本文件定義 compliance-manager 系統的四階段稽核流程,對齊 OSCAL 標準。 適用於 CLAUDE.md 或作為 Claude Code session 的上下文輸入。
系統遵循 OSCAL 三層架構(Control → Implementation → Assessment), 實作為四階段專案生命週期,支援多輪稽核(audit round)的持續合規管理。
| 角色 | 職責 |
|---|---|
| PM 專案主持人 | 建立專案、編輯 SSP、定義任務、指派人員、啟動稽核、管理 POA&M |
| 執行人員 | 依指派完成 job(上傳文件、填問卷、截圖等) |
| 內部稽核人員 | Phase 2 審閱證據、Phase 4 驗證矯正 |
| 外部稽核人員 | Phase 3 獨立審查、判定 satisfied/not-satisfied |
操作者:PM
PM 呼叫 start_oscal_project,系統執行:
audit_round(round_number=1, status=preparing)PM 編輯 SSP:
PM 定義每個 ap_task 的 job:
PM 指派人員:
PM 確認所有設定完成後,點擊「啟動專案」:
操作者:執行人員 + 內部稽核人員
compliance.job_evidencescompliance.job_execution_surveyscompliance.job_execution_commentslaunch_audit操作者:外部稽核人員
launch_audit 系統動作:
assessment_results(此時才建 AR)assessment_result_controls(從 ap_controls 對應)外部稽核員看到快速瀏覽介面,每個控制項顯示:
外部稽核員逐項審查,寫入 ar_findings:
ar_evidences 引用 job_evidences(FK: job_evidence_id),不複製
稽核員如需補充資料 → 系統產生新 job(evidence source=audit)
完成所有審查後,PM 確認 AR → 進入矯正
操作者:PM + 執行人員 + 內部稽核人員
系統自動動作:
poams(status=open)PM 填寫 POA&M 矯正計畫:
poam_job_mappings 關聯執行人員執行矯正:
內部稽核驗證矯正到位:
PM 確認所有 POA&M 都 closed 後結案:
PM 點擊「開啟新一輪稽核」→ launch_new_round:
oscal.audit_roundsid UUID PK
project_id FK → projects
round_number INTEGER (1, 2, 3...)
name VARCHAR(例如「2025 年度稽核」)
status VARCHAR: preparing / in_progress / auditing / remediation / closed
ssp_snapshot_id FK → ssp (optional)
started_at TIMESTAMPTZ
completed_at TIMESTAMPTZ
created_at TIMESTAMPTZ
oscal.poamsid UUID PK
audit_round_id FK → audit_rounds
finding_id FK → assessment_result_findings
ap_task_id FK → assessment_plan_tasks (冗餘但實用)
title VARCHAR(500)
description TEXT(從 finding 帶入)
remediation_plan TEXT
risk_level VARCHAR: high / medium / low
status VARCHAR: open / planned / in_progress / verification / closed
assigned_to FK → users
due_date DATE
closed_at TIMESTAMPTZ
closed_by FK → users
created_at TIMESTAMPTZ
updated_at TIMESTAMPTZ
created_by FK → users
oscal.poam_milestonesid UUID PK
poam_id FK → poams (CASCADE)
title VARCHAR(500)
description TEXT
sequence_order INTEGER
due_date DATE
status VARCHAR: open / completed
completed_at TIMESTAMPTZ
created_at TIMESTAMPTZ
oscal.poam_job_mappingsid UUID PK
poam_id FK → poams (CASCADE)
job_execution_id FK → compliance.job_executions
milestone_id FK → poam_milestones (nullable)
created_at TIMESTAMPTZ
oscal.assessment_plans — 加欄位audit_round_id FK → audit_roundsoscal.assessment_results — 加欄位audit_round_id FK → audit_roundsoscal.assessment_result_evidences — 改為引用job_evidence_id FK → compliance.job_evidences(引用而非複製)relevance_note TEXT(稽核員註記)compliance.job_evidences — 加欄位source VARCHAR: preparation / audit / remediation修改步驟 4:原本「建立 AP + 空白 AR」→ 改為「只建 AP,不建 AR」 新增步驟:建立 audit_round(round_number=1, status=preparing) 其餘步驟不變
launch_auditlaunch_new_round| 系統概念 | OSCAL Model | 說明 |
|---|---|---|
| compliant_frameworks | Catalog | 控制項定義來源 |
| module_frames(合規資源庫) | Profile | 選取/裁剪的 baseline |
| SSP / system_characteristics | SSP | 系統安全計畫 |
| 元件定義(未來) | Component Definition | 預填控制項實作範本 |
| assessment_plan + ap_tasks | Assessment Plan | 檢查項目與任務 |
| assessment_results + ar_findings | Assessment Results | 稽核判定結果 |
| poams | POA&M | 矯正計畫與追蹤 |
class ProjectStatus(StrEnum):
PENDING = "pending" # Phase 1: 規劃
IN_PROGRESS = "in_progress" # Phase 2-4: 執行中(細部用 audit_round.status 區分)
COMPLETED = "completed" # 本輪稽核結案
SUSPENDED = "suspended" # 暫停/延期
ARCHIVED = "archived" # 封存Phase 2/3/4 的區分靠 audit_round.status,不靠 ProjectStatus。