日期:2026-03-19 目的:定義以 發票名稱群組 -> SI
為中心的 item master 架構,並說明既有做法應該如何重新定位。
相關文件:
本專案最重要的任務不是單獨建立「barcode 主檔」,而是建立一個能穩定輸出下列結果的系統:
發票名稱群組 -> SI -> BI
其中:
BI 代表商品家族。SI 代表實際可售版本。barcode、通路資料、圖片、群眾蒐集都屬於證據來源。發票名稱 穩定映射到 SI。barcode、通路資料、圖片、群眾蒐集成為可追溯的證據。channel_master 直接當作最終主檔。barcode 直接定義為最終商品 key。主要審核單位是:
invoice_name_cluster -> SI
只有在候選彼此打架時,才回頭追查哪一筆通路證據、barcode 證據或 crowd 證據比較可信。
BI:商品家族,例如
白蘭氏雞精、可口可樂、品客原味。SI:可售版本,例如
330ml 單罐、6 入組、24 入箱。發票資料通常應先對到 SI,再視需求往上彙總到
BI。
barcode 的正確角色是:
它不是唯一身份鍵,原因包含:
200 prefix、978/979、全零 placeholder
這類風險碼。Barcode-PN
關聯一定正確。barcode 很重要,但不能單獨當真相barcode 的商業價值很高,因為:
Barcode-PN但它不能直接被當成唯一真相,原因是:
barcode
只能證明「有一個碼」,不能自動證明「這筆資料中的碼和商品關聯一定正確」barcode
仍可能配到錯的名稱、錯的圖片、錯的包裝層級Barcode-PN,但內部建主檔時若直接以此當唯一主鍵,會把原始污染一起放大所以:
barcode 很重要
但它應該是高權重證據與交付欄位
不是單獨決定真相的唯一主鍵
Barcode-PN若對外部客戶、合作方或下游系統需要交付
Barcode-PN,本規格的建議是:
Barcode-PNSIBarcode-PN 應視為 item master 的輸出格式,不是 item
master 的唯一定義方式實務上建議:
Barcode-PN:可直接交付Barcode-PN:需標注風險或暫不發布SI
解決後,再決定是否輸出一對一 Barcode-PNchannel_master
的角色channel_master 應定位為:
它不應直接等於正式 item master。
這條能力線應保留,但定位為:
不應要求它單獨完成最終身份判定。
PN-barcode 連結這條能力線也應保留,但定位為:
不應直接當最終 key。
發票行
↓
同商家發票名稱聚類
↓
產生候選 SI
- 歷史已確認對照
- 發票名稱相似度
- channel_master 證據
- barcode 證據
- 圖片證據
- crowd 證據
↓
候選打分
↓
決策
- 自動確認
- 人工審核
- 需更多證據
- 新建商品
↓
確認結果
發票名稱群組 -> SI -> BI
BI / SI| 因子 | 對 BI 的影響 |
對 SI 的影響 |
正確角色 |
|---|---|---|---|
| 口味、配方、商品線 | 高 | 高 | 常決定是否要新開 BI |
| 容量、入數 | 低 | 高 | 常決定是否要新開 SI |
| 包裝層級 | 低 | 高 | unit / bundle / carton 會直接影響 SI |
| 包裝型式 | 低到中 | 中到高 | 可能影響 SI |
| 時間 | 低 | 低 | 主要用來切開有效期間與衝突 |
| 品牌 | 中 | 低 | 高權重提示,不是唯一真值 |
| 品類 | 低 | 低 | 候選過濾與 sanity check |
| 通路 | 低 | 低到中 | 上下文與先驗,不是身份 |
| 店點、統編 | 低 | 低到中 | 在同商家範圍內做消歧 |
| barcode | 低 | 中到高 | 強證據,不是身份主鍵 |
規則可以濃縮成兩句:
BI、新
SI。BI。item master 至少要分出三種 item_level:
unitbundlecarton建議判定順序:
箱購、整箱、/箱、整箱出貨,優先視為
carton。組合、套組、超值組、買 N 送 M、加贈,優先視為
bundle。2入、24包、x3
這類訊號只代表規格時,不應單獨把商品判成 bundle。barcode 同時出現在 unit 與
bundle/carton 文案裡,應先保留 unit
為正式候選,其餘留在證據層。brand 與 category
都很重要,但角色不同:
BI / SI 管身份category 管貨架、導航、查詢、報表brand 管品牌結構、搜尋聚合與提示既有 c0~c2
分類樹與品牌系統可以直接接進來,但不應被拿來取代身份鍵。
invoice_name_cluster 產生 2 到 5 個候選
SI。金 / 銀 / 銅 不是身份層,不用來取代
BI / SI。
它們是成熟度分級,用來回答「這個商品或這個對應目前可靠到什麼程度」。
item_tieritem_tier 用在商品本身,回答的是:
這個 BI 或 SI 本身整理得夠不夠完整、夠不夠穩
建議定義:
銅級
BI / SI銀級
金級
mapping_tiermapping_tier 用在:
invoice_name_cluster -> SI
它回答的是:
這個發票名稱群組,對到這個 SI 的可信度有多高
建議定義:
銅級
銀級
金級
因為:
例子:
白蘭氏雞精 6 入組 這個 SI 可能已是
金級 item雞精禮盒 對到它,可能仍只是
銅級 mapping| 做法 | 是否保留 | 正確位置 | 主要風險 |
|---|---|---|---|
| 發票名稱 ML | 保留 | 聚類、分類、候選生成 | 名稱太短、跨商家不穩 |
PN-barcode 連結 |
保留 | 證據層 | 同碼重用、組合包污染 |
channel_master |
保留 | 候選池與證據池 | 把原始證據誤當真值 |
invoice_name_cluster -> SI |
採用 | 主決策流程 | 前期要先把 SI 層建起來 |
BI / SI 層。PN-barcode 與 channel_master
轉進證據層。這個專案真正要穩住的,不是「某個 barcode
是不是完美」,而是「這個發票名稱群組最後要對到哪個
SI」。