FR-135 · 第三期討論稿 · 2026-10-13

CRA 專案從「填資料」走到「出文件、看期限」

三份法定文件 docx 匯出、資訊系統版本支援期剩餘天數徽章——兩張卡、文件格式已裁

決策者已在 CM-2706 看過假資料雛形,並於 2026-10-13 裁定第三期範圍:X1 三份法定文件匯出、S1 支援期剩餘天數徽章。本稿把兩張卡展開成可開工的規格:每件事列出現在系統裡有什麼(附檔案行號或 DEV 查詢)、資料從哪來、畫面改哪裡。通報、提醒、支援期到期通知併入平台級 FR「週期任務與條件通知」(FR-137),設計草案集中在 phase3-deferred-to-recurring-tasks-fr。

已裁 D4:只出 docx 兩張卡:X1 → S1 通報與提醒併入 FR-137 CMMC 專案一個像素都不變

狀態:討論稿(D4 已裁,展開規格) | 日期:2026-10-13 | 輸入:Notion CM-2711、FR-135-STATE.md「功能補齊」範圍、雛形

§1

變更紀錄

日期 變更 對應
2026-10-13 v1:第三期兩卡規格(X1 三份法定文件、S1 支援期徽章);通報、提醒相關設計草案移至 phase3-deferred-to-recurring-tasks-fr CM-2710、CM-2711

§2

分工概述(30 秒版)

整案一句話:CRA 專案結案時從已填資料產出三份法定文件(docx,顧問可再改),資訊系統版本表直接看得到支援期還剩幾天。CMMC 專案一個像素都不變。

給非工程讀者的背景:CRA(歐盟網路韌性法)要求製造商備妥技術文件(Annex VII)、給使用者的資訊(Annex II)、EU 符合性聲明,並對每個產品版本宣告支援期。這些內容大多已在 CRA 專案各頁填過(受評標的、風險評估、參與單位、資訊系統版本),本期把它們組成可下載的文件,並讓支援期快到的版本一眼看得出來。

本期前提(決策者 2026-10-13 已裁,不再討論)

① 第三期兩張卡,順序 X1 → S1。② D4:文件只出 docx(見「已裁決策」節)。③ 通報、提醒排程、支援期到期寄信不在本期,併入 FR-137「週期任務與條件通知」;掃描結果加處理狀態屬 FR-134。④ 雛形不改,要改的點寫在本稿。

卡 做什麼 產出 決策者檢查法
X1 三份法定文件 三份 docx 範本(Annex VII 技術文件、Annex II 使用者資訊、EU 符合性聲明),沿用 docxtpl 產生器 範本三份、組資料的 service、下載端點 對照雛形 phase3-docs-export:下載的 docx 欄位對得上畫面填的值
S1 支援期到期畫面 資訊系統版本子表加「剩餘天數」徽章與篩選 FE 為主 對照雛形 phase3-support-reminder 版本列

兩卡互不依賴,可平行;X1 排前面,因為決策者先看得到成品。

%%{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
    SC[受評標的 ext 欄] -.-> X[X1 三份 docx]
    R[風險評估 ssp_risks] -.-> X
    V[資訊系統版本<br/>information_system_versions] -.-> X
    P[參與單位 Party] -.-> X
    V -.-> S[S1 剩餘天數徽章]
圖 1 — 兩張卡的資料流(實線=既有,虛線=本期新增)

§3

現況盤點:可直接用 vs 要新做

座標皆於 2026-10-12 實查。FE 路徑相對 compliance-manager-fe/。

接入點 現況(證據) 本期動作
docx 產生器 app/oscal/service/export/ssp_docx_generator.py(260 行)用 DocxTemplate(:23)+ python-docx 補章節;範本路徑寫死 templates/ssp/ssp_cmmc_template.docx(:29),建構子可傳別的範本(:52);資料模型 ssp_export_model.py(169 行)已有 Party、盤點、元件 X1 沿用產生器的「範本+context」作法,各文件各寫 context 組裝
CRA 範本池 app/oscal/templates/cra/ 現有 5 份(CVD 政策、安全通告、支援期聲明、更新與汰除程序、使用者資訊),由 scripts/generate_cra_doc_templates.py(309 行)產;是空骨架、沒有 {{ }} 欄位(grep 0 處) X1 另加 3 份帶欄位的範本,不改這 5 份
受評標的 ext 欄 app/oscal/service/framework_library_defaults/cra_2024.py:13-53 定義 ext:cra-* 欄(用途、環境、分級、產品名與識別、SBOM 取得、文件位置、支援期結束日) X1 讀取
風險評估 oscal.ssp_risks(R1-a a6cef11f3),含 threat_ids 依據標準 X1 讀取(Annex VII 風險評估、符合性聲明的適用標準)
Party 角色 cra_2024.py:136-138 預建「Manufacturer」「Vulnerability contact」兩個 party(role manufacturer/vulnerability-contact),名稱含 (to be filled) 佔位 X1 三份文件讀同一個 party
資訊系統版本 compliance.information_system_versions(jedi-asset migration 006)有 support_end_date、support_end_reason;DEV 0 筆;FE src/views/information-system/InformationSystemVersionTable.vue(169 行)支援期欄 :136-141 S1 加徽章;X1 讀支援期
顯示時區 FE 顯示時區寫死 src/utils/dateTime.js:9(getDisplayTimeZone()) S1 以此算「今天」

§4

X1 三份法定文件

做什麼

CRA 專案的「匯出」多三個下載:Annex VII 技術文件、Annex II 使用者資訊、EU 符合性聲明(Annex V)。都是 docx,顧問下載後可再改字(D4)。

作法

沿用 SspDocxGenerator 的路線:DocxTemplate(範本).render(context)。三份範本各配一支 context 組裝函式,放新檔(不往 260 行的 ssp_docx_generator.py 塞,也不改它的 CMMC 流程);範本放 app/oscal/templates/cra/,檔名加 -Export 之類後綴與 C3 五份空骨架區分。範本產生方式比照 scripts/generate_cra_doc_templates.py 用腳本產(可重產、可 diff),不手工編 docx。

欄位來源對照

文件 主要欄位 來源
Annex VII 技術文件 產品描述與預期用途、設計架構、風險評估、採用標準、漏洞處理流程、支援期、SBOM 取得方式 受評標的 ext:cra-intended-purpose/ext:cra-operational-environment/ext:cra-product-class(cra_2024.py:13-53)、ssp_risks 全表(含 threat_ids 依據標準)、控制項實作說明、information_system_versions、ext:cra-sbom-access
Annex II 使用者資訊 製造商名稱地址聯絡、漏洞通報窗口、產品識別、預期用途、可預見誤用、符合性聲明網址、支援期結束日、SBOM 取得處 Party manufacturer/vulnerability-contact、ext:cra-product-name/ext:cra-product-identifier、ext:cra-intended-purpose/ext:cra-foreseeable-misuse、ext:cra-doc-location、版本 support_end_date(或 ext:cra-support-end-date)、ext:cra-sbom-access;條文順序照 docs/reference/CRA/annex-I-II-original-text.md Annex II 第 1~9 項
EU 符合性聲明 產品名與識別、製造商、聲明唯一性、適用標準、簽署欄 Party、受評標的 ext、ssp_risks.threat_ids 依據標準;簽署人與日期留空給人填

匯出權限比照既有 SSP 匯出(參與者可讀即可下載)。


§5

S1 支援期到期畫面

做什麼

資訊系統盤點的版本子表,每個版本多一個「剩餘天數」徽章(超過 90 天灰、90 天內橘、30 天內紅、已過期深紅),並可篩選「90 天內到期」。不另建產品主檔,讀既有 support_end_date。

現況與改動

  • FE InformationSystemVersionTable.vue:136-141 已有支援期欄,加徽章即可;剩餘天數以 src/utils/dateTime.js 的顯示時區算「今天」,純日期照字面(不換算)。
  • 雛形 phase3-support-reminder 的「專案首頁提醒卡」與「通知設定」本期不做:提醒卡雛形寫明是提案;到期通知屬 FR-137。
  • 不寄提醒信。
  • DEV 版本表 0 筆,S1 驗收前要先在 DEV 建幾筆不同到期日的版本。

§6

已裁決策

✅ D4 — 文件格式

定案:只出 docx,沿用 ssp_docx_generator.py 的 docxtpl 路線,顧問可再改字;不做 PDF。

理由:法定文件交出去前幾乎一定要人改;docx 產生器已有、已出貨。

被排除:common/util/html_pdf.py(HTML 轉 PDF,27 行)是第二條路,本期不做——產出不可改字,且要另維護一套 HTML 版型。

D1、D2、D3、D5、D6 作廢(2026-10-13 改裁,見歸檔 phase3-deferred-to-recurring-tasks-fr)。


§7

拆卡草案(依「何時看得到畫面」排序)

順序 卡 規模 主要檔案 前置
1 X1 三份法定文件 M 範本產生腳本、三份 docx、context 組裝新檔、下載端點 無
2 S1 支援期到期畫面 S FE InformationSystemVersionTable.vue 無(可與 X1 平行)

兩卡都不建新表、不寫 migration。


§8

不做清單

  • 通報案件頁籤:通報在系統裡只剩「掃描掃到 high 以上時通知通報人員並留紀錄」,併入 FR-137;CRA.ART.14.RP 的證據由客戶上傳 ENISA 平台送件截圖。
  • 弱點處理狀態/揭露狀態:掃描結果要不要加狀態欄屬 FR-134(STATE §3 第 14 列),證據來源已指到掃描頁,稽核員看那頁判定。
  • 提醒排程與寄信紀錄(通報期限提醒、支援期到期提醒):併入 FR-137。
  • 早期警示、72 小時通知、最終報告三份文件:沒有案件資料,產不出內容。
  • 多法規(台灣資安法、NIS2、GDPR)、多送件對象、情資來源(STIX/TAXII)、ENISA SRP 對接(平台無 API)。
  • PDF 版法定文件(D4)。
  • 專案首頁支援期提醒卡、通知設定畫面(雛形提案)。
  • 改 C3 五份空骨架範本;改 source_scan_findings 表結構。
  • 自家 SBOM 成證據(STATE 總圖第三期另一列,D14)不在這兩卡內。

沿革見 handoff/FR-135-LOG.md 與 git log。