共用領域物件 (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.mdproduction-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。

  • 粗排投影:用到製程樹拓樸 + 各節點的 CTcycle time)/COchangeover)以推 leadtime

  • 具體實例:9 節點 toy 樹見 rough-cut-scheduler 圖 2:VSM 製程樹結構

投產單(Production Order)

  • identitypoNo(如 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-2§RCS-FS-9)。
    • 「時間範圍長度與決定方式」屬消費方/業務側議題,不在本物件定義內(粗排:Q2 待裁定)。
  • 粗排投影:作為可用產能的預佔日讀入。
  • 具體實例:見 異常情境 §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 文件不展開:

  • 各物件的欄位/型別、關係(VSM 節點與投產單可用產能的關聯)。
  • 共用 value object / class 的 §編號(供 Stage 5 code Javadoc 引用)。