資源篩選 I/O 範例 — 驗證執行結果

⚙️ 本檔由 resource-selection.fp.validate.py 執行時自動產生,請勿手改。 上游 spec:resource-selection.fp.md(§I/O 範例) 共用樣本:機台能力(製程,工作站) 涵蓋 {M1,M2};限制關聯 OP1→{M1,M2}OP2→{M3}。 輸出={有參與的資源型別 → 已排序合格序列},每元素帶 resourceSelectionPriority§RS-FS-9);模組不做任何產能計算(§RS-FS-7)。@N 表該元素的 resourceSelectionPriority。 規則重點:有宣告才回§RS-FS-6,不靠物理反推);指派路徑韌性放行——耦合只在有替代時縮減、不清空(§RS-FS-3);只有能力路徑空集才 fail-fast(§RS-FS-5)。


UC-A 正常值:能力匹配(無指派)

VSMNode 無指派 → 走能力 fallback(§RS-FS-1);能力涵蓋 {M1,M2}。

input:料號E@(P5,W5),無指派/無限制

資源型別已排序合格序列(resource@resourceSelectionPriority)
機台M1@1, M2@2

UC-A 邊界值:能力僅剩一台

能力只剩 {M2} 涵蓋該 (製程,工作站)。

input:料號E2@(P5b,W5b),無指派;能力={M2}

資源型別已排序合格序列(resource@resourceSelectionPriority)
機台M2@1

UC-A 異常值:能力空集 → Exception

無任何資源能力涵蓋該 (製程,工作站)(§RS-FS-5)。能力路徑無韌性可言,直接 fail-fast。

input:料號E3@(Pe,We),能力={}

→ 拋 ResourceSelectionEmptyError(必要型別「機台」候選為空,§RS-FS-5 / UC-D)。

UC-B 正常值:純指派(料號 D)

指派覆寫能力、依指派順序(§RS-FS-2);無其他限制 → 只回機台一條(§RS-FS-6)。

input:料號D,機台指派 [M1,M2,M3]

資源型別已排序合格序列(resource@resourceSelectionPriority)
機台M1@1, M2@2, M3@3

UC-B 邊界值①:韌性放行(指派含能力不符的 MX)

MX 能力不符該 (製程,工作站),但指派覆寫、仍放行(BR-1 / §RS-FS-3)。

input:料號Bx,機台指派 [M1,M2,MX];能力={M1,M2}

資源型別已排序合格序列(resource@resourceSelectionPriority)
機台M1@1, M2@2, MX@3

UC-B 邊界值②:韌性放行(指派唯一機台、操作員跑不了它)

指派只有 M3,但所需 OP1 跑不了 M3(OP1→{M1,M2})。剔光會空 → 韌性放行、整批回 M3(不 throw;對照料號 C 有替代故剔 M3)。

input:料號Bz,機台指派 [M3]、需 OP1

資源型別已排序合格序列(resource@resourceSelectionPriority)
機台M3@1
操作員OP1@1

UC-C 正常值:操作員耦合剔除(料號 C)

需 OP1,OP1→{M1,M2} 跑不了 M3;因 M1/M2 為相容替代 → 機台序列剔除 M3(§RS-FS-4)。

input:料號C,機台指派 [M1,M2,M3]、需 OP1

資源型別已排序合格序列(resource@resourceSelectionPriority)
機台M1@1, M2@2
操作員OP1@1

UC-C 邊界值:模具 + 技師參與(料號 A)

能力機台 {M1,M2};節點宣告需 MOLD1、且宣告 MOLD1 由 MOP1 換 → 模具/技師各回一條(§RS-FS-4/6)。

input:料號A@(P1,W1),無指派、宣告需 MOLD1 + 技師 MOP1

資源型別已排序合格序列(resource@resourceSelectionPriority)
機台M1@1, M2@2
模具MOLD1@1
技師MOP1@1

UC-C 補充:指派 + 模具、未宣告技師(料號 B)

機台指派 {M1,M2,M3}(無操作員約束故全留)+宣告需 MOLD1,但未宣告技師 → 只回機台/模具,不回技師§RS-FS-6:有宣告才回,不靠物理反推)。

input:料號B,機台指派 [M1,M2,M3]、宣告需 MOLD1(未提技師)

資源型別已排序合格序列(resource@resourceSelectionPriority)
機台M1@1, M2@2, M3@3
模具MOLD1@1