Date: 2026-07-04 · Branch
feature/FR-044(BE + FE + 套件,皆未 push)· 狀態:修正待驗證(user STG 逐輪手測,五個非直觀 bug 已修)· Notion Case No: FR-044
稽核員 / PM 上傳顧問逐條檢查紀錄 xlsx → 解析成控制層判定 + 逐 AO 觀察 + 佐證連結 → 三步 wizard 預覽 / 修改 / 確認 → 批次寫入本輪 AR(走既有 AssessmentResultAppService 的 judge_finding / create_observation / add_risk / link_risk_findings), 本期支援亞航 CMMC L1 格式,架構 mirror FR-043 三段式管線(parse→preview→confirm)。
compliance-manager-be,時序倒序)| commit | 內容 |
|---|---|
48ef1380 |
設計規格 |
a6365a29 |
執行交接 handoff |
76a53649 |
finalize na(第四態收斂) |
75c25d10 |
ar_xlsx_parse_jobs 表 migration(org_unit_id / RLS / GRANT cm_app) |
d6fc20de |
持久層(entity/model/mapper/repo/domain service) |
2cfb363b |
_METHOD_KEYWORDS 自 FR-043 上收 |
a47ca7eb |
import registry base 自 FR-043 上收 |
7fdecd31 |
亞航 CMMC L1 xlsx adapter(openpyxl,59 列 snapshot) |
f3cbf6b6 |
純函式 ar_import/(ao_alignment / aggregation / evidence_matcher) |
bee7e139 |
佐證 matcher(精確/模糊/無配對 + (同N) 交叉引用) |
84b0926a |
AR service 擴充 + error codes |
8105c7ce |
parse / preview |
08d37743 |
confirm_import |
22346aeb |
route + DI wiring |
108af39a |
pin jedi-oscal-v2 2.2.0 |
fc566d26 |
實作計畫 |
5b024097 / 5a522a29 |
design 更新 |
72d377fb |
fix identity-first 兩代 catalog(AG 式 / 舊 NIST 式共存) |
43c3c4d8 |
fix 避開 return_response 頂層 meta 魔法分支(meta → report_meta + 契約測試) |
f7ac04df |
feat 佐證分級配對接上(每控制候選佐證池餵 matcher) |
766d8a61 |
fix 佐證池跨控制汙染(workflow_execution_control_mapping 權威 scope) |
85b9a1e9 |
fix 佐證預覽查無檔案(file_uid 存字串 uid、file_size 用 .size) |
f58701ad |
feat 重匯 = 最新覆蓋(清上一批匯入觀察) |
compliance-manager-fe)| commit | 內容 |
|---|---|
f676692 |
na 第四態 |
6a620a7 |
三步 wizard ArImportDialog.vue |
16b7931 |
report_meta 對齊(配合 BE meta 陷阱修法) |
e80e9d6 |
佐證分級配對 UI |
450289e |
代碼美化 |
| commit | 內容 |
|---|---|
5245f29 |
release 2.2.0:FindingState 加 NOT_APPLICABLE;ArFindingMatrixService token not-applicable + stats na 桶(已推 Nexus;該 release 同時含 FR-045 v2.13 PDF parser) |
oscal.ar_xlsx_parse_jobs + DDD 資料層(grc 模組,表在 oscal schema)app/grc/service/import_adapter/(共用 registry base + _METHOD_KEYWORDS,自 FR-043 上收)app/grc/service/ar_report_parser/(亞航 CMMC L1 xlsx adapter)app/grc/service/ar_framework_profile/cmmc_l1.py(AG→NIST + verdict 詞彙)app/grc/service/ar_import/(ao_alignment / aggregation / evidence_matcher 純函式)app/grc/service/ar_xlsx_import_app_service.py(parse/preview/confirm/discard)api/project/routes/ar_xlsx_import_route.py + api/project/serializers/ar_xlsx_import.pyAssessmentResultAppService(匯入寫入方法對接 + error codes)common/util/response_util.py 使用端避讓(回傳改 report_meta,未動 helper 本身)docs/claude/domain-capabilities.md(登記 return_response 頂層 meta 陷阱)src/components/grc/ar-xlsx-import/ArImportDialog.vue(三步 wizard)+ 佐證分級配對 UIsrc/service/ArImportService.js + api.js 端點常數稽核執行頁(auditing 階段 + manager/auditor + AR 已存在)多一顆「匯入稽核紀錄」按鈕。 上傳亞航 xlsx → 三步 wizard:① 控制層判定(AO 聚合成控制層四態)② 逐 AO 觀察 ③ 佐證分級配對 (精確自動勾/模糊勾+徽章/無配對人工補)→ 確認批次寫入:每控制 judge_finding、每 AO create_observation(帶佐證連結)、NOT MET 自動建風險(嚴重度預設「中」)並連結 finding。 重傳同輪 xlsx = 最新覆蓋(上批匯入觀察被替換、手動觀察保留)。既有手動流程不變。
| # | 症狀 | root cause | 修法 | commit |
|---|---|---|---|---|
| 1 | 交集空、誤觸 GRC_400095 | 兩代 catalog 格式共存、無條件 AG_TO_NIST | identity-first candidate resolution | 72d377fb |
| 2 | preview data: null |
return_response 頂層 meta 魔法分支丟其餘欄位 | meta → report_meta + 登記陷阱 | 43c3c4d8 / 16b7931 |
| 3 | 稽核頁佐證顯示不出 | control-tree 池吸別控制同名證據、matcher 誤配 | workflow_execution_control_mapping 二次 scope | 766d8a61 |
| 4 | 佐證預覽查無檔案 | 數字 file_id 誤存進 file_uid(端點要字串 uid) | file_uid 存字串 uid、file_size 用 .size | 85b9a1e9 |
| 5 | 重傳觀察累加重複 | observation 累加語意 vs 匯入應覆蓋 | import_summary 追蹤 observation_uids、confirm 前清上批 | f58701ad |
詳見 docs/analysis/2026-07-04-fr044-stg-bugfix-decisions.md。
ar_xlsx_parse_jobs 已套 DEV + STG(STG 另補 FR-043 ap_docx_parse_jobs 落後的 2 支);POC / PROD 待套ar_xlsx_parse_jobs;PROD 亦待)c80f1e51(v2.13 AG 式 catalog):user 逐輪手測,五個非直觀 bug 已修並驗證design.mddocs/analysis/2026-07-03-ar-import-verdict-mapping.mdimplementation-plan.mddocs/analysis/2026-07-04-fr044-stg-bugfix-decisions.mddocs/changelog/2026-07-04-feat-fr044-ar-xlsx-import.md(+ 4 份 fix/feat 分主題)docs/claude/domain-capabilities.md(return_response 頂層 meta)