Item Master 正式規格

日期:2026-03-19 目的:定義以 發票名稱群組 -> SI 為中心的 item master 架構,並說明既有做法應該如何重新定位。 相關文件:

1. 問題定義

本專案最重要的任務不是單獨建立「barcode 主檔」,而是建立一個能穩定輸出下列結果的系統:

發票名稱群組 -> SI -> BI

其中:

2. 目標與非目標

2.1 目標

  1. 發票名稱 穩定映射到 SI
  2. barcode、通路資料、圖片、群眾蒐集成為可追溯的證據。
  3. 區分單品、組合包、箱購三種可售層級。
  4. 在證據不足時,允許進審核或待補證據,不強迫做錯誤映射。

2.2 非目標

  1. 不以逐筆人工審核所有通路網站資料作為主要工作模式。
  2. 不把 channel_master 直接當作最終主檔。
  3. 不把 barcode 直接定義為最終商品 key。

3. 核心設計決策

3.1 審核單位

主要審核單位是:

invoice_name_cluster -> SI

只有在候選彼此打架時,才回頭追查哪一筆通路證據、barcode 證據或 crowd 證據比較可信。

3.2 兩層身份

發票資料通常應先對到 SI,再視需求往上彙總到 BI

3.3 barcode 的角色

barcode 的正確角色是:

它不是唯一身份鍵,原因包含:

3.4 為什麼 barcode 很重要,但不能單獨當真相

barcode 的商業價值很高,因為:

但它不能直接被當成唯一真相,原因是:

  1. barcode 只能證明「有一個碼」,不能自動證明「這筆資料中的碼和商品關聯一定正確」
  2. 同一個碼在原始資料中,可能被貼到錯頁、促銷頁、組合包頁或箱購頁
  3. 合法的 barcode 仍可能配到錯的名稱、錯的圖片、錯的包裝層級
  4. 外部世界交付常用 Barcode-PN,但內部建主檔時若直接以此當唯一主鍵,會把原始污染一起放大

所以:

barcode 很重要
但它應該是高權重證據與交付欄位
不是單獨決定真相的唯一主鍵

3.5 對外交付若需要 Barcode-PN

若對外部客戶、合作方或下游系統需要交付 Barcode-PN,本規格的建議是:

  1. 可以交付 Barcode-PN
  2. 但交付值應來自已確認的 SI
  3. Barcode-PN 應視為 item master 的輸出格式,不是 item master 的唯一定義方式

實務上建議:

3.6 channel_master 的角色

channel_master 應定位為:

它不應直接等於正式 item master。

4. 既有兩條能力線的定位

4.1 發票名稱 ML

這條能力線應保留,但定位為:

不應要求它單獨完成最終身份判定。

4.2 PN-barcode 連結

這條能力線也應保留,但定位為:

不應直接當最終 key。

5. 核心資料流

發票行
  ↓
同商家發票名稱聚類
  ↓
產生候選 SI
  - 歷史已確認對照
  - 發票名稱相似度
  - channel_master 證據
  - barcode 證據
  - 圖片證據
  - crowd 證據
  ↓
候選打分
  ↓
決策
  - 自動確認
  - 人工審核
  - 需更多證據
  - 新建商品
  ↓
確認結果
發票名稱群組 -> SI -> BI

6. 哪些因子影響 BI / SI

因子 BI 的影響 SI 的影響 正確角色
口味、配方、商品線 常決定是否要新開 BI
容量、入數 常決定是否要新開 SI
包裝層級 unit / bundle / carton 會直接影響 SI
包裝型式 低到中 中到高 可能影響 SI
時間 主要用來切開有效期間與衝突
品牌 高權重提示,不是唯一真值
品類 候選過濾與 sanity check
通路 低到中 上下文與先驗,不是身份
店點、統編 低到中 在同商家範圍內做消歧
barcode 中到高 強證據,不是身份主鍵

規則可以濃縮成兩句:

7. 單品、組合包、箱購規則

item master 至少要分出三種 item_level

建議判定順序:

  1. 文案明確含 箱購整箱/箱整箱出貨,優先視為 carton
  2. 文案明確含 組合套組超值組買 N 送 M加贈,優先視為 bundle
  3. 2入24包x3 這類訊號只代表規格時,不應單獨把商品判成 bundle
  4. 若同一個 barcode 同時出現在 unitbundle/carton 文案裡,應先保留 unit 為正式候選,其餘留在證據層。

8. 分類與品牌的定位

brandcategory 都很重要,但角色不同:

既有 c0~c2 分類樹與品牌系統可以直接接進來,但不應被拿來取代身份鍵。

9. 最小營運模型

  1. 對每個 invoice_name_cluster 產生 2 到 5 個候選 SI
  2. 用多種證據組合打分,而不是單一來源說了算。
  3. 分數高、與第二名差距大、且沒有 veto 時,才可自動確認。
  4. 其餘進人工審核、群眾確認或待補證據。

10. 金級、銀級、銅級的定位

金 / 銀 / 銅 不是身份層,不用來取代 BI / SI
它們是成熟度分級,用來回答「這個商品或這個對應目前可靠到什麼程度」。

10.1 item_tier

item_tier 用在商品本身,回答的是:

這個 BI 或 SI 本身整理得夠不夠完整、夠不夠穩

建議定義:

10.2 mapping_tier

mapping_tier 用在:

invoice_name_cluster -> SI

它回答的是:

這個發票名稱群組,對到這個 SI 的可信度有多高

建議定義:

10.3 為什麼要分成兩層

因為:

例子:

11. 對團隊既有做法的結論

做法 是否保留 正確位置 主要風險
發票名稱 ML 保留 聚類、分類、候選生成 名稱太短、跨商家不穩
PN-barcode 連結 保留 證據層 同碼重用、組合包污染
channel_master 保留 候選池與證據池 把原始證據誤當真值
invoice_name_cluster -> SI 採用 主決策流程 前期要先把 SI 層建起來

12. 落地優先順序

  1. 先把發票名稱聚類做好。
  2. 再建立最小 BI / SI 層。
  3. PN-barcodechannel_master 轉進證據層。
  4. 最後才放大自動化比例。

13. 一句話收尾

這個專案真正要穩住的,不是「某個 barcode 是不是完美」,而是「這個發票名稱群組最後要對到哪個 SI」。