FR-161 · Pre-engagement Materials — 需求討論稿 · 2026-10-23 · 決策者已裁 D2/D4/D5/D6/D7/D8,待審雛形

事前資料區

客戶在訪談前把手上有的資料丟進分類格子;每個合規資源庫的程序書池打開時東西已經在;大類在系統設定、跟著公司

顧問去客戶現場訪談之前,會請客戶先把手上有的東西準備好:網路架構、組織架構、資產清單、政策文件與程序書。現在這些檔案走信件與雲端硬碟,系統裡沒有落點,顧問整理 SSP 時還要再傳一次。本案加一頁很簡單的事前資料區——就是一個能上傳的地方:客戶把檔案丟進大類格子;大類跟著公司、顧問可以改成自己習慣的分法;檔案屬於公司不屬於任何框架,每個合規資源庫的「程序書池」tab 打開時照大類分段全部已經在(不多開 tab,只重新設計這一個),第二個框架不用客戶從頭再傳、也不用顧問再挑。大類在系統設定裡管。不做審閱、不做留言、不做通知——這些跟顧問的作業流程綁得太深,等系統更完善再慢慢補。

已裁:另開介面;一個上傳的地方;大類在系統設定、跟著公司;檔案公司層、程序書池 tab 重新設計照大類分段自動帶入、不多開 tab;不做審閱留言 待審:三頁雛形 順手補齊:OSCAL 匯出 back-matter 目前為空(另開卡)
§1

需求背景與目標

決策者描述的流程(2026-10-23 原話整理)

  1. 企業要導入法規合規,找了顧問來,說要導入某個框架(例如 ISO 27001)。
  2. 顧問去開會前,先請客戶把目前知道的資料上傳到系統。項目會依公司或框架不同,常見有:網路架構、組織架構、資產盤點(硬體、軟體、服務)、政策文件與程序書。
  3. 顧問去訪談之前,先看過客戶提供的事前準備資料。
  4. 再去現場訪談,訪談完回來才做 SSP,再往後面走原本的專案流程。

討論中定下來的事

定下來的事 決策者的話 落到設計上
分類只到大類 「只要大類就好,有分類即可」 沒有子項目、沒有必填規則
要另開介面 「user 不會進去 SSP UI」 側選單獨立一頁,不出現控制項、評估目標、OSCAL 任何字眼
掛在合規資源庫、其他框架也能引用 「掛資源庫,但要考慮未來導入其他框架也可以引用」 入口在資源庫列表;檔案本體存公司層,不屬於任何一份 SSP
不要顧問再挑一次 「要顧問再挑一次就多一道工」 每個資源庫的程序書池打開時預設全部帶入;顧問只有反向的「這框架不用」
四類都是附件、不多開 tab 「D2 四項啊,都是附件吧」「把原本的程序書那個 tab 重新設計就好,不要多一堆 tab 出來」 資源庫只重新設計「程序書池」tab:照公司大類分段,客戶事前資料與顧問上傳並排;不開「附件」「網路架構圖」tab
不做審閱 「太複雜了,可以有一個地方讓他們上傳就好;大多作業跟顧問綁,系統還不是很完善,慢慢再補」 沒有「看過」勾、沒有審閱紀錄、沒有留言、沒有通知
大類跟著公司、在系統設定管 「每個顧問的大類又會不同」→ 選「跟著公司」;「那現在大類要在哪邊設定?」→ 系統設定 系統出貨給四個起始值;「系統設定 / 事前資料大類」一頁增刪改名排序,只影響這家公司;事前資料頁與程序書池 tab 只讀這份
導入期間持續更新、進稽核才鎖 「有可能在導入期間又有人換了或異動,應該要可以持續更新才對;除了專案進入稽核這時才應該鎖」 事前資料區永遠可更新;稽核開始那刻給稽核輪一份鎖住的副本(與程序書池同一條 clone)

現況:缺的不是資料表,是一個入口

四類資料在系統裡大多有家(程序書池、設備主檔、資訊系統、部門人員),但都是顧問在維護、沒有客戶交件的入口。網路架構圖連畫面都沒有:套件 ssp_diagrams 表與 repo 都有,主專案沒有任何程式寫它。

所以本案要補的是:① 客戶能上傳的一頁;② 大類可管理;③ 資源庫自動帶入。

§2

使用情境(決策者 2026-10-23 看過點頭,依後續裁示修訂)

甲公司要導 ISO 27001,找了乙顧問公司。小美是甲公司 IT 主管,老王是乙顧問公司的顧問。

時間 誰 做什麼 系統裡發生什麼
第 1 天 老王 建 ISO 27001 合規資源庫「甲公司 2026 ISO 27001 導入」;到「系統設定 / 事前資料大類」看到四個起始大類,加一個「機房與實體環境」;點資源庫那一列的「事前資料」把連結寄給小美 甲公司的事前資料區有五個空格子
第 2~5 天 小美 登入後側選單只有「事前資料」,把網路拓樸圖、組織圖、門禁規定、三年前的資產 Excel、兩份政策文件各丟進對的格子 五個大類有檔案;沒有必填、沒有任何合規術語
第 6 天 老王 出發前打開同一頁逐一下載來看 系統不記錄他看過沒;他自己整理筆記帶去開會
第 7 天 老王 現場訪談,帶既有訪談表 Excel 流程不變(FR-139)
第 8 天 老王 回來打開資源庫整理 SSP 程序書池 tab 照五個大類分段,七個檔已經在;控制項「從程序書池選用」照舊能挑到政策文件;拓樸圖那檔勾「當網路架構圖匯出」。接著匯入訪談表、存版,全是既有流程
第 20 天 小美 公司換了一台防火牆,重畫網路圖,在原本那份底下按「上傳新版」 舊版留著可看;老王規劃中的資源庫程序書池看到的自動變成新版
第 30 天 老王 按「送審」,稽核開始 稽核輪拿到一份當下附件清單的副本,之後小美再傳什麼都不影響這次稽核
半年後 老王 建第二個資源庫「甲公司 CMMC L2」 程序書池同一批檔案自動在,連小美這半年補傳的也在;老王只把「機房門禁管理規定」點「這框架不用」。小美那頁沒有任何變化(事前資料屬於公司、不分框架),超過一年沒更新的檔案旁多一個「可能過時」

關鍵:小美始終只看一頁;老王「挑」的動作只有反向的「這框架不用」;檔案本體從頭到尾各一份;大類是甲公司自己那套。

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#E2F0F1','primaryTextColor':'#14201F','primaryBorderColor':'#0E7C86','secondaryColor':'#EEF2F3','secondaryTextColor':'#14201F','tertiaryColor':'#FBFCFC','tertiaryTextColor':'#14201F','lineColor':'#4A5A5C','textColor':'#14201F','mainBkg':'#E2F0F1','nodeBorder':'#0E7C86','nodeTextColor':'#14201F','edgeLabelBackground':'#FBFCFC','titleColor':'#14201F','clusterBkg':'#FBFCFC','clusterBorder':'#E4EAEB','actorBkg':'#E2F0F1','actorTextColor':'#14201F','actorBorder':'#0E7C86','actorLineColor':'#C7D1D2','signalColor':'#4A5A5C','signalTextColor':'#14201F','labelBoxBkgColor':'#EEF2F3','labelBoxBorderColor':'#C7D1D2','labelTextColor':'#14201F','loopTextColor':'#14201F','noteBkgColor':'#F6EBD5','noteTextColor':'#14201F','noteBorderColor':'#9C6B12','activationBkgColor':'#EEF2F3','activationBorderColor':'#C7D1D2','sequenceNumberColor':'#FFFFFF'}}}%%
sequenceDiagram
  participant K as 客戶(小美)
  participant P as 事前資料區(公司層)
  participant C as 顧問(老王)
  participant R1 as 資源庫 ISO 27001
  participant A as 稽核輪
  participant R2 as 資源庫 CMMC(半年後)
  C->>R1: 建資源庫,點「事前資料」
  R1->>P: 第一次開:建公司事前資料區+四個起始大類
  C->>P: 加大類「機房與實體環境」
  K->>P: 五個格子各丟檔案
  C->>R1: 整理 SSP
  R1->>P: 讀公司全部檔 − 此資源庫排除 → 程序書池 tab 照大類分段
  Note over R1: 顧問不用挑,東西已經在
  K->>P: 網路圖上傳新版
  R1->>P: 規劃中的資源庫看到新版
  C->>A: 送審
  A->>P: 拍一份當下程序書池清單的副本(鎖)
  K->>P: 之後再傳的不影響這次稽核
  C->>R2: 半年後建第二個資源庫
  R2->>P: 同一批檔案自動帶入
  C->>R2: 把「門禁規定」點「這框架不用」
圖 1 — 事前資料從客戶上傳到進入資源庫與稽核
§3

分工概述(30 秒版)

整案一句話:客戶有一頁可以把檔案丟進大類格子;大類在系統設定、跟著公司;每個合規資源庫的程序書池打開時檔案照大類全部在,不用再傳、不用再挑;稽核開始才鎖一份副本。

階段 做什麼 產出 完成怎麼判定(決策者檢查法)
一、大類設定+事前資料頁 公司層大類表與檔案表(含版本);「系統設定 / 事前資料大類」一頁(增刪改名排序,有檔案的不能刪);事前資料頁:上傳、上傳新版、看舊版、刪除、標過時,客戶顧問完全同一頁;側選單與資源庫列表兩個入口;system_menus 四個起始大類 兩張新表、API、兩個 Vue 頁、seed 顧問到系統設定把「網路架構」改名「網路與連線」並新增「機房」;用受稽方帳號登入只看到「事前資料」一頁、格子名稱已變,丟一個檔到「網路與連線」,再對它按「上傳新版」看到 v2 與舊版可看;換顧問帳號從資源庫列表點「事前資料」看到同一個檔
二、程序書池 tab 重新設計 不多開 tab;程序書池改成照公司大類分段:讀公司全部檔(各取最新版)減去此資源庫排除,顧問上傳的也選一個大類進對應段並排;每檔「這框架不用」與「恢復」;「網路架構」段的檔可勾「當網路架構圖匯出」(寫套件 ssp_diagrams);控制項「從程序書池選用」照舊、清單排除「不用」的 排除表、程序書池讀寫端改動、diagram 勾選與 app service 第一階段丟的檔,不做任何事直接開資源庫程序書池,照大類分段看得到;再建第二個資源庫同樣看得到;點「這框架不用」只有這個資源庫看不到;某條控制項「從程序書池選用」能挑到政策文件、挑不到「不用」的
三、稽核鎖定與匯出 送審時把程序書池清單(含事前資料各檔當時那版)快照進凍結 SSP(既有 clone,共用 file_id);匯出 OSCAL 時進 back-matter、勾了的進 network-architecture diagram;複製資源庫時排除表跟著複製 clone 與匯出改動 送審後客戶再傳新版,稽核計畫頁看到的程序書仍是舊版;匯出 OSCAL JSON 的 back-matter 有這些檔;被快照引用的檔按刪除被擋、只能標過時

依賴:第二階段吃第一階段的表;第三階段吃 FR-139 的送審存版與複製資源庫(已上線)。決策者功課:審兩頁雛形。

§4

已定案事項

D2 四類全部當附件,不分落點;資源庫不多開 tab,只重新設計「程序書池」

對 OSCAL 來說四類都是 back-matter resource。資源庫的 tab 列完全不動,只把「程序書池」這一個改成照公司大類分段:客戶事前資料(各取最新版)與顧問自己上傳的並排在對應的段。不開「附件」tab、不開「網路架構圖」tab;「網路架構」段的檔要當 OSCAL diagram 匯出,在那檔上勾「當網路架構圖匯出」即可(寫套件 ssp_diagrams,主專案原本沒程式寫它)。控制項與 AO「從程序書池選用」照舊,清單就是這個 tab 看得到的檔。大類只是分類標籤,沒有「落點」欄。

D4 事前資料區永遠可更新,稽核開始那刻才鎖一份副本

導入期間人員異動、網路圖改版,客戶照傳,規劃中的資源庫看到的永遠是最新版。只有稽核輪拿到的那份副本是鎖的:送審那刻把「當下附件清單」複製進凍結 SSP,客戶之後傳的新檔或新版不影響這次稽核。覆核輪回到規劃中、或新年度複製資源庫時,顧問整理的那份又回到看最新版。這與程序書池送審時的 clone 是同一條路。

D5 兩顆系統層權限

「事前資料:上傳與查看」(受稽方、顧問)、「事前資料:管理大類」(顧問)。這個動作沒有「專案」這個對象,照 FR-160 的分層判準屬系統層;掛 common/authz capability 軸,不另開守門。FR-160 分層表定稿時列進去。

D6 客戶與顧問都能刪,被稽核副本引用的不能刪只能標過時

規劃中資源庫的引用不算鎖,刪了就從它的程序書池消失。一旦某次送審把這份檔拍進副本,誰都不能刪(刪了稽核的副本就破洞),只能標「已過時」並上傳新版。

D7 既有程序書池的檔怎麼辦

程序書池 tab 重新設計後,顧問直接上傳的檔也要選一個大類;既有資料(升級前的程序書池列)一律歸進「政策文件與程序書」段,不搬進事前資料區、不要求客戶重傳。

順帶記一筆:目前匯出 OSCAL 時 back-matter 是空的——主專案沒有任何地方寫套件的 resources 表,程序書池是另一張表。本案把附件寫進 resources 會打通這條路;程序書池要不要一併搬過去另開卡裁,不在本案。

D8 時效性:同一份資料上傳新版,舊版留著、引用跟最新版

每個檔案可「上傳新版」,新版接在原檔底下,客戶頁面一份資料永遠只顯示一列,旁邊標 v2、v3,舊版可看。頁面上不放提示文字教客戶這件事,改在上傳時擋:在某個大類上傳一個與該格已有資料同檔名(比對去掉副檔名與版本字樣後的檔名,或同顯示名稱)的檔,對話框先問「當成新版/另存一份新資料」,預設當成新版。不擋的後果是同一份資料變兩列,程序書池出現兩份網路圖、送審兩份都進稽核副本、舊那份刪不掉。規劃中的資源庫看最新版;稽核副本停在當時那版(D4)。每個檔案顯示最後一版日期,超過一年標「可能過時」提醒,不自動催客戶。所以「第二個框架不用客戶再傳」精確說是「不用從頭再傳,只要更新有變的」。

大類跟著公司,在「系統設定 / 事前資料大類」管

系統出貨 system_menus 給四個起始大類(網路架構、組織架構、資產盤點、政策文件與程序書),公司第一次開系統設定那頁時帶進公司層那張表;之後在那頁增刪改名排序,只影響這家公司;底下還有檔案的大類不能刪。事前資料頁與資源庫程序書池 tab 都只讀這份,不在頁面上改大類(設定不該藏在客戶也看得到的頁裡)。不跟著資源庫:一個檔只屬於一個大類,跟資源庫走會讓同一個檔在第二個框架再歸一次類。落地版一台機器一家公司,與「跟著系統」看起來幾乎一樣,差別到 SaaS 多家公司才顯出來。

「公司」=租戶,與專案、資源庫同一套,不另做「選公司」

系統裡資源庫(module_frames)與專案(compliance.projects)都帶 tenant_id,DEV 實查 5 個專案、8 個資源庫全在 Billows Tech(102)底下。事前資料區的大類表與檔案表同樣 tenant-scoped;顧問服務多家客戶=帳號掛多個租戶、頂欄切換(既有 AppTopbar 租戶選單)。頁首印公司名。落地版一台機器一家公司,客戶不會有「這是哪間公司」的疑問;SaaS 多家客戶掛在顧問公司底下時靠頂欄切。

不做審閱、留言、通知(原 D1/D3/D9 取消)

決策者原話:「太複雜了,可以有一個地方讓他們上傳就好;大多作業跟顧問綁,系統還不是很完善,慢慢再補。」顧問看過沒是顧問自己的事,系統不記;要留話走既有管道。

§5

做出來長什麼樣

三頁雛形在 prototype/index.html,用現有設計系統刻、純假資料。

頁 誰看 重點
畫面 1 事前資料頁 受稽方與顧問看完全同一頁 側選單一個入口;頂欄左側是既有租戶切換;頁首只有大標與「公司:甲公司」(不顯示框架或資源庫名稱、不顯示顧問、不顯示總數、沒有提示文字);每個大類一張卡:拖檔上傳、檔案列(檔名、版本、誰傳、何時、過時標記)、上傳新版、看舊版、刪除;在某格上傳與該格已有資料同名的檔時,對話框先問「當成新版/另存一份」。沒有設定鈕、沒有合規術語、沒有勾、沒有留言
畫面 2 程序書池 tab 重新設計 顧問 tab 列不變;程序書池照公司大類分段,客戶事前資料與顧問上傳並排、各標來源;每檔「這框架不用」;顧問上傳時選大類;「網路架構」段可勾「當網路架構圖匯出」;右上可切 ISO 與 CMMC 看同一批檔
畫面 3 系統設定:事前資料大類 有「管理大類」權限者 表格模式:排序把手、名稱(起始值標籤)、說明、資料數、最後更新、操作;新增與編輯開對話框;拖曳排序;有檔案的不能刪;改名立刻反映到畫面 1 與 2
§6

資料模型草案

表 層 放什麼 備註
compliance.pre_engagement_categories 公司層(tenant) 大類:name、description(給客戶看的一句提示,選填)、sort 第一次開啟時從 system_menus group pre_engagement_category 帶四筆;之後只在這張表增刪改
compliance.pre_engagement_files 公司層(tenant) 一份資料:category_id、title(顯示名,預設檔名)、is_obsolete 審計四欄;RLS 同其他 tenant-scoped 表
compliance.pre_engagement_file_versions 公司層 pre_engagement_file_id、version_no、file_id(→ upload_files)、上傳者、時間 最新版=version_no 最大;舊版留著可看
compliance.pre_engagement_exclusions 資源庫層 module_frame_id × pre_engagement_file_id 「這框架不用」;複製資源庫時跟著複製
引用(讀取時計算) — 某資源庫程序書池 = 公司全部未過時檔(各取最新版) - 該資源庫排除 + 該資源庫顧問上傳 不另存引用表,免兩份真相
稽核副本 凍結 SSP 送審時把程序書池清單(指到當時的 file_id)照既有 clone 複製;匯出寫 resources(back-matter)與勾了的 ssp_diagrams 與程序書池 clone 同一條路;刪除守門查這裡
%%{init: {'theme':'base','themeVariables':{'primaryColor':'#E2F0F1','primaryTextColor':'#14201F','primaryBorderColor':'#0E7C86','secondaryColor':'#EEF2F3','secondaryTextColor':'#14201F','tertiaryColor':'#FBFCFC','tertiaryTextColor':'#14201F','lineColor':'#4A5A5C','textColor':'#14201F','mainBkg':'#E2F0F1','nodeBorder':'#0E7C86','nodeTextColor':'#14201F','edgeLabelBackground':'#FBFCFC','titleColor':'#14201F','clusterBkg':'#FBFCFC','clusterBorder':'#E4EAEB','actorBkg':'#E2F0F1','actorTextColor':'#14201F','actorBorder':'#0E7C86','actorLineColor':'#C7D1D2','signalColor':'#4A5A5C','signalTextColor':'#14201F','labelBoxBkgColor':'#EEF2F3','labelBoxBorderColor':'#C7D1D2','labelTextColor':'#14201F','loopTextColor':'#14201F','noteBkgColor':'#F6EBD5','noteTextColor':'#14201F','noteBorderColor':'#9C6B12','activationBkgColor':'#EEF2F3','activationBorderColor':'#C7D1D2','sequenceNumberColor':'#FFFFFF'}}}%%
flowchart LR
  subgraph T[公司層 tenant]
    CAT[大類<br/>pre_engagement_categories]
    F[資料<br/>pre_engagement_files]
    V[版本<br/>pre_engagement_file_versions]
    U[upload_files]
    CAT --> F --> V --> U
  end
  subgraph L[資源庫層 module_frame]
    EX[排除<br/>pre_engagement_exclusions]
    SSP[範本 SSP 程序書池 tab]
    EX -.這框架不用.-> F
    SSP -.讀取時:全部檔最新版 − 排除.-> F
  end
  subgraph Z[凍結 SSP(送審副本)]
    BM[back-matter resources]
  end
  SSP ==送審==> BM
  BM -.共用 file_id,指當時那版.-> U
圖 2 — 資料關係
§7

與既有功能的接點

既有東西 本案動作
合規資源庫列表(ModuleFrame.vue) 每列加「事前資料」鈕,開同一頁並帶 module_frame_uid 當頁首與排除的脈絡
程序書池頁籤(DocumentPoolPanel.vue) 重新設計:照大類分段、合併事前資料與顧問上傳、「這框架不用」、上傳時選大類、「當網路架構圖匯出」勾(寫套件 ssp_diagrams,主專案補 app service)
系統設定 新頁「事前資料大類」
FR-139 送審存版、複製資源庫 快照附件清單、複製排除表
OSCAL 匯出 _build_back_matter 第一次有東西可匯
system_menus 新 group pre_engagement_category 四筆起始值
側選單 ui_routes 新入口「事前資料」、系統設定下新入口「事前資料大類」
FR-160 分層表 補兩顆系統層權限
§8

不做什麼

  • 不做審閱、看過勾、留言、通知。
  • 不做子項目、必填、進度百分比、截止日。
  • 不把組織圖自動變成部門人員、不把資產 Excel 自動變成設備主檔。
  • 不接 Agent 掃描結果進事前資料區。
  • 不搬既有程序書池的檔到事前資料區。
  • 不自動催客戶更新過時檔案。
§9

風險

風險 怎麼擋
自動帶入把客戶亂丟的檔全進程序書池,顧問覺得吵 照大類分段看得清楚來源,一鍵「這框架不用」;丟錯格在事前資料頁可搬
送審漏帶附件,稽核計畫頁看不到 走程序書池同一條 clone,並在 FR-139 送審存版的驗收清單加一條
網路架構圖從零補,範圍膨脹 不開畫面,只在程序書池那檔上一個勾+一行圖說寫進 ssp_diagrams,不做預覽、不做線上繪圖
權限兩顆與 FR-160 重整撞期 先掛 capability 軸,FR-160 定稿時歸位
既有程序書池升級 升級前的程序書池列歸「政策文件與程序書」段;沒有大類表的公司第一次開時自動帶起始值
版本累積吃儲存 舊版不刪,但 upload_files 本來就不刪(既有缺 GC 的已知事項),不因本案惡化