共用領域物件 (Domain Model) Functional Spec
性質:跨 feature 共用領域物件規格(Published Language)。非由單一 requirement 衍生,從多個消費 feature 的共同需求抽出。 消費方:rough-cut-scheduler(完整清單以 backlinks 為準,不手動維護) 下游:domain-model.ooa.md(欄位級定義落於此) 狀態:已簽核
這份文件是什麼、不是什麼
- 是:多個 feature 共用的領域物件,在這裡定義一次它們的 identity、業務意義、與大家都同意的核心不變量(Published Language)。各 feature 只引用 + 投影,不再各自重述定義。
- 不是:欄位/型別 schema、class diagram、DB schema。那些是 OOA 的事(Stage 2 禁區),落在
domain-model.ooa.md。本文件用具體實例表達,不列欄位表。
引用紀律(給各 feature 看)
- 定義權只在此處。各 feature spec 對共用物件採相對 markdown 連結(如
[VSM](../domain-model/domain-model.fp.md#vsm))引用,只說明「我用到哪部分、為什麼」+ 給自己的情境 example。 - 一句話:
import,不是redeclare。複製定義 = 隱性發散。 - 「誰引用我」不在此手維護,以消費方 → 本檔的相對 markdown 連結為權威 breadcrumb,由 backlinks 自動彙整(Quartz 站對 markdown 連結自動建 backlinks)。
拆分策略
現為單一 consolidated spec。當某個物件長出自己的下游鏈(OOA → code 共用 class)時,再拆成 per-aggregate spec(如 vsm.md、production-order.md),屆時本檔保留 stub + 轉址。
VSM(Value Stream Map / 製程樹)
-
identity:某產品的製程路徑,呈樹狀(多上游分支匯流);每個節點 = 一個「工單-料號-工作站-製程-工序」。
-
業務意義:定義一張投產單要流經的製造路由與拓樸,子階端(上游)→ 節拍點(takt)→ 成品端(下游)的相對位置:
- 子階端(上游):製程樹葉節點側,多條不等長分支朝節拍點匯流。
- 節拍點(takt):製程樹的節奏錨點(指定節點;未指定時由消費方決定 fallback)。
- 成品端(下游):節拍點之後、一路推進到末站出貨。
flowchart LR L1[子階端·上游葉節點] --> T L2[子階端·上游葉節點] --> T["★ 節拍點 takt"] T --> D[成品端·下游末站出貨] -
核心不變量:
- 節點是「工單-料號-工作站-製程-工序」的單一對(不支援單節點多製程)。
- 樹可有多條不等長上游分支匯流至同一下游節點。
- 節拍點(takt/節奏點)是 VSM 上的一個指定節點;未指定時由消費方決定 fallback(粗排:取最後一站,§RCS-FS-1)。
- 每個節點帶有製程時間參數:製造時間(CT)、前置換模時間(CO)、後置等待時間、移動至下站時間。
- 節點之間以上下游 link 構成製程樹。
- 每個節點帶有所需物料列表:即該工單的領料清單;部分料於製程中途才領,未特別指定者以第一站為領料節點。
Stage 2 邊界:上列僅描述「節點帶有哪些性質」的概念層;欄位名、型別、單位(秒)等欄位級定義留
domain-model.ooa.md(Stage 2 禁區:欄位定義屬 OOA)。領域真相 superset:部分性質(
工序-級 identity、物料列表、後置等待/移動時間)目前無消費方投影使用,刻意保留為領域真相(裁定 2026-06-05,見 domain-model-2026-06-05-fs.md ⚠️1)。重跑 audit 時無需重新 flag。 -
粗排投影:用到製程樹拓樸 + 各節點的 CT(cycle time)/CO(changeover)以推 leadtime。
-
具體實例:9 節點 toy 樹見 rough-cut-scheduler 圖 2:VSM 製程樹結構。
投產單(Production Order)
- identity:
poNo(如 5001)。 - 業務意義:一筆「在
dueDate前,依某 VSM 生產product數量qty」的生產請求;另帶進入順序prioritySeq。 - 核心不變量:
prioritySeq= 進入順序(input),用於搶資源時的處理先後;與輸出的「投產順序」(依完工日排序)是兩個不同概念,不可混用。- 一張單對應一個 product 與一棵 VSM。
- 粗排投影:用
{poNo, product, qty, dueDate, prioritySeq};prioritySeq決定多單搶節拍點產能的處理先後(§RCS-FS-12)。 - 具體實例:
{ poNo: 5001, product: P, qty: 100, dueDate: 2026-06-15, prioritySeq: 1 }(見 O 範例)。
可用產能(Available Capacity)
- identity:某節點在某日是否可用(以「節點 × 日」為觀察單位)。
- 業務意義:告訴排程引擎每個節點哪些日子可開工。已合併行事曆/班別,並已含外部決定的 Freeze 預佔。
- 核心不變量:
- 對排程引擎而言是唯讀 input;引擎讀取、不設定、不寫回。
- 已涵蓋行事曆(週末/假日屬此,不另外建模)。
- 粗排投影:讀各節點每日可用,作為節拍點有限產能堆疊(§RCS-FS-2)與排程依據。
- 具體實例:粗排 toy 中「節拍點 A 全部日皆空(Freeze 未佔用)」即此物件的一個狀態(見 O 範例)。
Freeze(看板凍結產能)
- identity:在排程之外、由看板決定的產能預佔。
- 業務意義:排程前已被凍結/保留的產能;對排程引擎而言是「可用產能」中已被佔走的那部分。
- 核心不變量:
- 粗排投影:作為可用產能的預佔日讀入。
- 具體實例:見 異常情境 §RCS-FS-9。
RoughScheduleResult(粗排結果)
- identity:粗排對「每個 VSM 節點」算出的一筆結果,可回溯其輸入的 VSM 節點。
- 業務意義:在 VSM 節點之上掛三個輸出(LeanPlay 交期、LSD、投產順序)。結果可回溯其輸入 VSM,使後續 debug/報表/排程 reasoning 不必反查、減少資訊誤差。
- 核心不變量:
- 每筆結果對應一個 VSM 節點,並攜帶該節點的三個輸出(LeanPlay 交期、LSD、投產順序)。
- 「結果是否內嵌完整 VSM databox 快照」屬實作/OOA 層的便利取捨,Stage 2 不在此釘死,本層只保證「結果可回溯其輸入 VSM」。
- 粗排投影:粗排的輸出(見 rough-cut-scheduler 圖 3:粗排輸出結構)。
下游 OOA 待辦(欄位級 single source of truth)
以下落於 domain-model.ooa.md,本 Stage 2 文件不展開: