日期:2026-03-20 目的:定義
invoice_name_cluster -> SI
的審核流程、候選打分、金銀銅分級、AI 與眾包介面,以及最小 API 契約。
相關文件:
審核流程真正要決定的不是某筆通路資料真不真,而是:
這個 invoice_name_cluster 應該對到哪個 SI
所以:
invoice_name_clusterbarcode、圖片、通路資料、crowd 回報都只是證據每個 queue item 至多呈現 2 到 5 個候選
SI,至少要附上:
cluster_idmerchant_codechannel_codestore_tax_idrepresentative_pnline_countinvoice_date_rangebrand_hintcategory_hintcandidate_counttop_candidate_scorereview_reasoncurrent_mapping_tier| 特徵 | 建議權重區間 | 說明 |
|---|---|---|
| 名稱相似度 | 0 到 35 | 發票名稱與候選名稱、別名的相似程度 |
| 歷史已確認對照 | 0 到 20 | 同商家同名稱曾被確認過 |
| barcode 支持 | 0 到 20 | 條碼直接支持候選,但需先過風險檢查 |
| 包裝層級與容量一致 | 0 到 12 | unit / bundle / carton、容量、入數是否一致 |
| 品牌一致 | 0 到 8 | 品牌提示一致時加分 |
| 品類一致 | 0 到 5 | 作為候選過濾與 sanity check |
| 圖片支持 | 0 到 8 | 圖片相似或人工確認 |
| 通路、店點、時間上下文 | 0 到 10 | 同商家、同統編、有效時間內 |
命中以下任一條件,就不應直接 auto_confirm:
200 prefix978/979 prefixbundle / carton 文案,卻去支持
unit 候選auto_confirm 建議同時滿足:
>= 85>= 12其他情況:
60 到 84:進人工審核60 或命中高風險條件:隔離或補證據先驗可分三層,但不能取代其他證據:
pxmart_mega、pxgo、tomods、jpmed、homeda、weixinrx、matsukiyopxbox、dingding、rakuten、angelbaby、treebuy、costco、babyezckcare、yourchance、rakuten-amart、cosmedbrand:高權重提示,不是唯一真值category:候選過濾與 sanity checkstore_tax_id:很適合同商家內消歧時間:對條碼重用、包裝改版、通路誤貼很重要mapping_tier:invoice_name_cluster -> SI
這條對應有多可靠item_tier:BI / SI 本身成熟到什麼程度mapping_tier 標準| 分級 | 建議條件 |
|---|---|
銅級 |
分數低於 60,只有單一弱證據,或仍有明顯衝突 |
銀級 |
分數 60 到
84,且至少兩種證據支持,或已有一次人工確認 |
金級 |
分數 >= 85,與第二名有差距,沒有
veto,且已人工確認或長期穩定 |
item_tier 標準| 分級 | 建議條件 |
|---|---|
銅級 |
已建立
BI / SI,但欄位仍缺、證據來源少,或包裝層級待釐清 |
銀級 |
名稱、品牌、包裝層級、容量等主欄位已完整,且至少兩種證據支持 |
金級 |
主要衝突已解,條碼與包裝關係清楚,且可穩定供下游使用 |
| 角色 | 可提議 mapping_tier |
可提議 item_tier |
備註 |
|---|---|---|---|
| 規則引擎 | 可以 | 可以 | 不直接當最終裁決 |
| AI | 可以 | 可以 | 必須輸出理由與阻擋旗標 |
| 眾包 | 不可直接標 | 不可直接標 | 只做拆解任務 |
| 人工審核 | 可以確認 | 可以確認 | 最終升降級權在人工 |
mapping_tierBI / SI 時,item_tier 先預設為
銅級open
↓
shortlisted
↓
under_review
↓
confirmed / rejected / needs_more_evidence / create_new_item
confirm_candidatereject_allneeds_more_evidencecreate_new_item左側
- 代表發票名稱
- 同群組別名
- 商家 / 通路 / 統編
- 出現次數
- 日期範圍
中間
- 候選 A / B / C
- 候選名稱
- item_level
- 品牌 / 品類 / 規格
- package_form 與 net_content
- 主要 barcode
- 主要圖片
- 支持與衝突證據摘要
右側
- 確認候選
- 全部駁回
- 需要更多證據
- 新建商品
審核者至少要同時看到:
item_levelitem_tiermapping_tierAI 或規則引擎若要提議分級,最少應輸出:
{
"target": "mapping_tier",
"label": "silver",
"reasons": [
"名稱相似度高",
"容量與 item_level 一致",
"同商家歷史對照支持"
],
"blocking_flags": [],
"needs_human_review": false
}遇到以下情況,AI 不應硬給 金級:
200、978/979、全零碼unit 與
bundle/carton可樂、雞精、衛生紙眾包不應自由上傳大雜燴,應只做候選確認任務:
candidate_confirmbarcode_confirmimage_confirmnew_item_triage眾包不應直接做這些事:
無法判定:保持 銅級銀級金級但系統仍須再檢查:
GET /review/clusters用途:取得待審核 cluster 清單。
查詢參數:
merchant_codestatuslimitcursor回傳範例:
{
"items": [
{
"cluster_id": 123,
"merchant_code": "PXMART",
"channel_code": "PXMART_ONLINE",
"store_tax_id": "12345678",
"representative_pn": "白蘭氏雞精6入",
"line_count": 87,
"invoice_date_range": ["2025-01-01", "2026-03-01"],
"candidate_count": 3,
"top_candidate_score": 0.93,
"review_reason": "close_candidates",
"current_mapping_tier": "bronze"
}
],
"next_cursor": "abc123"
}GET /review/clusters/{cluster_id}回傳至少應包含:
item_tiermapping_tierPOST /review/decisions請求範例:
{
"cluster_id": 123,
"decision_type": "confirm_candidate",
"candidate_id": 1001,
"reviewer": "alice",
"mapping_tier": "silver",
"decision_note": "名稱、容量、通路與歷史資料一致"
}POST /crowd/tasks請求至少應包含:
task_typecluster_idcandidate_idsquestion_text這份文件現在同時負責審核流程、候選打分與金銀銅分級。
真正目標只有一個:替每個 invoice_name_cluster 選出最合理的
SI。