FR-161 · Pre-engagement Materials — 需求討論稿 · 2026-10-23 · 決策者已裁 D2/D4/D5/D6/D7/D8,待審雛形
客戶在訪談前把手上有的資料丟進分類格子;每個合規資源庫的程序書池打開時東西已經在;大類在系統設定、跟著公司
顧問去客戶現場訪談之前,會請客戶先把手上有的東西準備好:網路架構、組織架構、資產清單、政策文件與程序書。現在這些檔案走信件與雲端硬碟,系統裡沒有落點,顧問整理 SSP 時還要再傳一次。本案加一頁很簡單的事前資料區——就是一個能上傳的地方:客戶把檔案丟進大類格子;大類跟著公司、顧問可以改成自己習慣的分法;檔案屬於公司不屬於任何框架,每個合規資源庫的「程序書池」tab 打開時照大類分段全部已經在(不多開 tab,只重新設計這一個),第二個框架不用客戶從頭再傳、也不用顧問再挑。大類在系統設定裡管。不做審閱、不做留言、不做通知——這些跟顧問的作業流程綁得太深,等系統更完善再慢慢補。
| 定下來的事 | 決策者的話 | 落到設計上 |
|---|---|---|
| 分類只到大類 | 「只要大類就好,有分類即可」 | 沒有子項目、沒有必填規則 |
| 要另開介面 | 「user 不會進去 SSP UI」 | 側選單獨立一頁,不出現控制項、評估目標、OSCAL 任何字眼 |
| 掛在合規資源庫、其他框架也能引用 | 「掛資源庫,但要考慮未來導入其他框架也可以引用」 | 入口在資源庫列表;檔案本體存公司層,不屬於任何一份 SSP |
| 不要顧問再挑一次 | 「要顧問再挑一次就多一道工」 | 每個資源庫的程序書池打開時預設全部帶入;顧問只有反向的「這框架不用」 |
| 四類都是附件、不多開 tab | 「D2 四項啊,都是附件吧」「把原本的程序書那個 tab 重新設計就好,不要多一堆 tab 出來」 | 資源庫只重新設計「程序書池」tab:照公司大類分段,客戶事前資料與顧問上傳並排;不開「附件」「網路架構圖」tab |
| 不做審閱 | 「太複雜了,可以有一個地方讓他們上傳就好;大多作業跟顧問綁,系統還不是很完善,慢慢再補」 | 沒有「看過」勾、沒有審閱紀錄、沒有留言、沒有通知 |
| 大類跟著公司、在系統設定管 | 「每個顧問的大類又會不同」→ 選「跟著公司」;「那現在大類要在哪邊設定?」→ 系統設定 | 系統出貨給四個起始值;「系統設定 / 事前資料大類」一頁增刪改名排序,只影響這家公司;事前資料頁與程序書池 tab 只讀這份 |
| 導入期間持續更新、進稽核才鎖 | 「有可能在導入期間又有人換了或異動,應該要可以持續更新才對;除了專案進入稽核這時才應該鎖」 | 事前資料區永遠可更新;稽核開始那刻給稽核輪一份鎖住的副本(與程序書池同一條 clone) |
四類資料在系統裡大多有家(程序書池、設備主檔、資訊系統、部門人員),但都是顧問在維護、沒有客戶交件的入口。網路架構圖連畫面都沒有:套件 ssp_diagrams 表與 repo 都有,主專案沒有任何程式寫它。
所以本案要補的是:① 客戶能上傳的一頁;② 大類可管理;③ 資源庫自動帶入。
甲公司要導 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: 把「門禁規定」點「這框架不用」
整案一句話:客戶有一頁可以把檔案丟進大類格子;大類在系統設定、跟著公司;每個合規資源庫的程序書池打開時檔案照大類全部在,不用再傳、不用再挑;稽核開始才鎖一份副本。
| 階段 | 做什麼 | 產出 | 完成怎麼判定(決策者檢查法) |
|---|---|---|---|
| 一、大類設定+事前資料頁 | 公司層大類表與檔案表(含版本);「系統設定 / 事前資料大類」一頁(增刪改名排序,有檔案的不能刪);事前資料頁:上傳、上傳新版、看舊版、刪除、標過時,客戶顧問完全同一頁;側選單與資源庫列表兩個入口;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 的送審存版與複製資源庫(已上線)。決策者功課:審兩頁雛形。
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 取消)
決策者原話:「太複雜了,可以有一個地方讓他們上傳就好;大多作業跟顧問綁,系統還不是很完善,慢慢再補。」顧問看過沒是顧問自己的事,系統不記;要留話走既有管道。
三頁雛形在 prototype/index.html,用現有設計系統刻、純假資料。
| 頁 | 誰看 | 重點 |
|---|---|---|
| 畫面 1 事前資料頁 | 受稽方與顧問看完全同一頁 | 側選單一個入口;頂欄左側是既有租戶切換;頁首只有大標與「公司:甲公司」(不顯示框架或資源庫名稱、不顯示顧問、不顯示總數、沒有提示文字);每個大類一張卡:拖檔上傳、檔案列(檔名、版本、誰傳、何時、過時標記)、上傳新版、看舊版、刪除;在某格上傳與該格已有資料同名的檔時,對話框先問「當成新版/另存一份」。沒有設定鈕、沒有合規術語、沒有勾、沒有留言 |
| 畫面 2 程序書池 tab 重新設計 | 顧問 | tab 列不變;程序書池照公司大類分段,客戶事前資料與顧問上傳並排、各標來源;每檔「這框架不用」;顧問上傳時選大類;「網路架構」段可勾「當網路架構圖匯出」;右上可切 ISO 與 CMMC 看同一批檔 |
| 畫面 3 系統設定:事前資料大類 | 有「管理大類」權限者 | 表格模式:排序把手、名稱(起始值標籤)、說明、資料數、最後更新、操作;新增與編輯開對話框;拖曳排序;有檔案的不能刪;改名立刻反映到畫面 1 與 2 |
| 表 | 層 | 放什麼 | 備註 |
|---|---|---|---|
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
| 既有東西 | 本案動作 |
|---|---|
合規資源庫列表(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 分層表 | 補兩顆系統層權限 |
| 風險 | 怎麼擋 |
|---|---|
| 自動帶入把客戶亂丟的檔全進程序書池,顧問覺得吵 | 照大類分段看得清楚來源,一鍵「這框架不用」;丟錯格在事前資料頁可搬 |
| 送審漏帶附件,稽核計畫頁看不到 | 走程序書池同一條 clone,並在 FR-139 送審存版的驗收清單加一條 |
| 網路架構圖從零補,範圍膨脹 | 不開畫面,只在程序書池那檔上一個勾+一行圖說寫進 ssp_diagrams,不做預覽、不做線上繪圖 |
| 權限兩顆與 FR-160 重整撞期 | 先掛 capability 軸,FR-160 定稿時歸位 |
| 既有程序書池升級 | 升級前的程序書池列歸「政策文件與程序書」段;沒有大類表的公司第一次開時自動帶起始值 |
| 版本累積吃儲存 | 舊版不刪,但 upload_files 本來就不刪(既有缺 GC 的已知事項),不因本案惡化 |