合規框架 — v1 FE 流程 ↔︎ v2 BE 逐欄比對 + 遷移評估

目的:判斷現行 FE 框架 4 畫面能否直接吃 v2 BE,或要怎麼遷移。 方法:v1 FE 實際呼叫/讀寫欄位(FE code 盤點)↔︎ v2 BE adapter(framework維護工作我寫的)逐欄對照。 信心:URL/欄位比對為客觀(已查 FE code + BE 註冊);標 ⚠️ 者為需重啟後對真實 FE 複驗。

§1

一句話結論

框架 CRUD(畫面1)可直接套用、FE 零改;版本管理/匯入/catalog 編輯(畫面2~4)流程都接得上,但有 4 個具體對不上點要修 —— 多數是 BE adapter 小修,不是 FE 重寫。 其中「AO 欄位對映」一處改就同時修好 3 個畫面。


§2

畫面 1:框架 CRUD(ComplianceFrameworkManage)→ ✅ 直接套用

FE 動作 FE 端點 v2 BE 結果
列表 POST /oscal-frameworks 已註冊舊 URL,回 uid/name/main_version/authority/publish_status/description ✅ 欄位全對
新增 POST /oscal-framework {name,code,main_version,authority,publish_status,description} OscalFrameworkCreateRequestSchema 接受
編輯 PUT /oscal-framework/<uid>
刪除 DELETE /oscal-framework/<uid> 我補了 delete

→ FE 零改動可用。(仍需重啟後實點確認)

§3

畫面 2:版本管理(ComplianceFrameworkVersionManage)→ 🔧 接得上,4 點要修

FE 動作 FE 端點 v2 BE 現況 結果
框架詳情 GET /oscal-framework/<uid> ✅ 註冊
版本列表 POST /oscal-framework-versions(filters: framework_uid / is_root / parent_version_uid) adapter 回 version/release_date/publish_status/parent/children/is_root/parent_version_uid ✅ 樹/欄位對
新增/編輯/刪除版本 POST/PUT/DELETE /oscal-framework-version[/<uid>] ✅ 註冊 + release_date 已支援
❶ 版本詳情預覽 version.catalog.groups[].controls[].assessments[].description adapter 只回 catalog={uid,id}、無內容 🟥 預覽空白
❷ PDF 預覽 version.file_uid/file/pdf-preview/<uid>,否則舊 /oscal-framework-version/download/pdf/<uid> adapter 回 file_uid=None、舊下載端點未註冊 🟥 預覽/下載壞
❸ 此頁匯入版本 POST /oscal-framework-version/import/<type>(json blob) 未註冊(只有新 /oscal/framework-versions/import,shape 不同) 🟥 此頁匯入鈕壞
❹ 下載 excel/oscal/sample /oscal-framework-version/download/{excel,oscal,sample}/<uid> 未註冊 🟥 壞
§4

畫面 3:兩階段 PDF 匯入(FrameworkImportPage)→ 🔧 流程接上,AO 欄位要修

FE 動作 FE 端點 v2 BE 結果
草稿列表 / parse / detail / confirm / discard /oscal-framework-parse-jobs[...] ✅ 全註冊舊 URL ✅ 流程接上
❺ AO 預覽/編輯 FE 讀寫 assessment.descriptionFrameworkArticleContent.vue:245,248 _tree_to_dict 輸出 name=prose, description=None;confirm _persist_catalogname 🟥 AO 文字不顯示 + 使用者編輯丟失
confirm payload {decisions, overrides, target_version/release_date/publish_status} ✅ 接受 ✅(除 AO override 走 description)
⚠️ parse 上傳 multipart file + json blob {target_framework_uid, parser_type, ...} route 解析方式需複驗跟 FE 送法一致 ⚠️ 待驗
§5

畫面 4:catalog 編輯(FrameworkVersionEditView)→ 🔧 接得上,AO + 已知限制

FE 動作 FE 端點 v2 BE 結果
catalog-tree GET /oscal-framework-version/<uid>/catalog-tree adapter 回 flat groups/controls/assessments + group_uid/control_uid 連結 + has_references + publish_status ✅ 結構對(flat,同舊)
改/刪 group/control/AO PUT/DELETE /oscal-catalog-group|control|control-assessment/<uid> ✅ 註冊 ✅ URL 對
❺ AO description FE 讀寫 ao.description adapter _flattenname=prose, description=Noneupdate_assessmentprose←name 🟥 同畫面3
❻ group.description / control.guidance FE 顯示/編輯這兩欄 v2 無對應欄 → 回 None、寫忽略(已知限制) ⚠️ 顯示空、編輯不保存
重新上傳(覆蓋) parse + target_version_uid ✅ 我有支援

§6

要修的點(彙整,多數 BE adapter 小修)

# 問題 影響畫面 修法(建議)
❺ AO 欄位對映 FE 讀寫 assessment.description,v2 adapter 放在 name 2、3、4(一改三修) adapter 把 AO 文字對映回 description(↔︎ part.prose),寫入也 description→prose BE(一處)
❶ 版本詳情 catalog 內容 list adapter 無 catalog 內容 2 FE 改成點預覽時另呼 catalog-tree(輕);或 BE list 補內容(重) FE 優先
❷ PDF 預覽 / file_uid adapter file_uid=None + 舊下載端點未註冊 2 parse-job 有存 file_path(=file_uid),adapter 回填 version.file_uid → 走 /file/pdf-preview;或補舊下載端點 BE
❸ 此頁匯入 /oscal-framework-version/import/<type> 未註冊 2 此頁匯入入口導去兩階段匯入頁(畫面3,已 live)即可,不必補舊端點 FE
❹ 下載 excel/oscal/sample 未註冊 2 評估是否還需要;要的話補 export 端點(B5 已有 /oscal/export/<doc_type>/<uid> 可借) BE/FE
❻ group.desc / control.guidance v2 無欄 2、4 決定:接受空白 / 或 v2 加 part 承載 決策
§7

遷移結論

  • 可直接套用:畫面 1(框架 CRUD)。
  • 小幅遷移即可:畫面 2~4。核心是 ❺ AO 欄位對映(BE 一處改、修好 3 畫面),其餘是 catalog 預覽改走 tree 端點、PDF/下載端點補齊、匯入入口導向兩階段頁。不需要 FE 重寫,跟專案/稽核那種大重構不同。
  • 「直接套用」前都需重啟 BE 對真實 FE 實點複驗(標 ⚠️ 處)。
§8

建議下一步

  1. 先修 ❺(AO 對映,BE adapter,一處改三畫面)—— 風險低、效益大。
  2. 重啟 BE,實點畫面 1~4,把 ⚠️ 待驗翻成事實。
  3. 依實點結果處理 ❶~❹。