本卡屬 FR-161(母卡見「母卡」欄),修 CM-3043/CM-3045 的帶入規則:改成顧問在資源庫挑選引用,不再預設全部帶入;並放寬同名比對。決策者 2026-10-23 裁示。BE+FE 一張卡做完。

問題是什麼(白話)

目前客戶在「事前準備資料」上傳一份檔案,系統會自動把它塞進這家公司「每一個」合規資源庫的程序書池。專案頁用的就是資源庫那一份程序書池(FR-139 一對一),所以每個專案的程序書管理也會一起變多。

決策者在 DEV 專案 1619「鈞拓 JT-EP700 SEMI E187 送驗查核」的規劃頁看到:程序書管理原本是顧問整理的 9 份 SEMI E187 文件,現在多了 13 份別家公司(宏碩精密)的範例檔,共 22 份。原因是 DEV 一個租戶(Billows Tech,102)底下有好幾家客戶的資源庫,自動帶入讓每家都被塞滿。正式落地版一台一家公司不會這麼嚴重,但 SaaS 或顧問公司自己架一台服務多家時一模一樣。

決策者原話:「專案程序書那邊不是說要用引用的嗎,為什麼變成全部載入?」——要的是:顧問選了哪些,這個框架才有哪些。

改成什麼(定案)

在哪裡(首腦已查證)

BE
app/pre_engagement/service/pre_engagement_pool_sync_service.py(193 行)
  52  on_created          ← 改成不落列(保留函式、回 0,或刪掉呼叫端)
  60  on_new_version      ← 照舊(只動已有的列)
  63  on_updated          ← 照舊
  70  on_deleted          ← 照舊
  91  backfill_template_ssp ← 拿掉自動補齊
  111 backfill_for_ssp     ← 拿掉自動補齊
  154 _writable_template_ssp_ids / 160 _rows_in_writable_libraries ← 照舊用
呼叫端:
  app/pre_engagement/service/pre_engagement_file_app_service.py:82  on_created
  app/oscal/service/ssp_document_pool_service.py:67                 backfill_for_ssp(list_pool 時)
  app/module_frame/service/module_frame_reference_document_service.py:90  backfill_for_ssp(資源庫頁 list)
  app/oscal/service/resource_library_app_service.py:633             backfill_template_ssp(新建資源庫)
  api/oscal/routes/ssp/ssp_document_pool_route.py                   exclusion PUT/DELETE(要拿掉)
FE
src/components/grc/ModuleFrameDocumentPoolPanel.vue(231 行)
src/components/grc/document-pool/DocumentPoolCategoryGroups.vue(113 行)  ← 「這框架不用」改「移出」
src/components/grc/document-pool/useDocumentPoolGroups.js(53 行)
src/components/grc/DocumentLinkDialog.vue、src/components/grc/module-frame/MfRefDocList.vue ← 有讀 is_excluded,確認語意

怎麼做

① BE:拿掉自動帶入

② BE:新增選用端點(先 grep 既有能力,程序書池已有 add_to_pool、掛載有 add_control_mappings,能 reuse 就 reuse)

GET  /module-frame/<uid>/reference-documents/pre-engagement-candidates
     回這家公司(資源庫的 tenant)所有未過時的事前準備資料,照大類分組,每份帶
     { pre_engagement_file_uid, title, category_uid/name, latest:{version_no,file_name,file_uid,created_at},
       is_referenced: 此資源庫範本 SSP 是否已有列 }
POST /module-frame/<uid>/reference-documents/pre-engagement-references
     { pre_engagement_file_uids: [...] } → 每份在範本 SSP 程序書池加一列(已有的跳過),回新增筆數
DELETE /module-frame/<uid>/reference-documents/<doc_uid>
     既有刪除端點;客戶事前資料列現在也要允許刪(=移出),連帶刪掛載。回傳帶 mapping_count 讓 FE 先確認