V10.570 補 PChome 身份報價證據契約

This commit is contained in:
OoO
2026-06-02 11:18:52 +08:00
parent a32982395e
commit 01119c2c82
8 changed files with 434 additions and 2 deletions

View File

@@ -202,6 +202,32 @@ def test_competitor_review_reasons_prefer_json_payload_labels():
"match_type": "no_match",
"price_basis": "none",
"alert_tier": "suppress",
"identity_evidence": {
"version": "identity_evidence_v1",
"brand": {"momo": ["mac"], "competitor": ["mac"], "shared": ["mac"]},
"product_type": {"momo": "唇膏", "competitor": "唇膏", "matched": True},
"identity_anchor": "macximal 柔霧唇膏",
"shared_model_tokens": [],
"specs": {
"momo": {"volumes_ml": [], "weights_g": [], "dosages_mg": [], "counts": [], "total_piece_count": None},
"competitor": {"volumes_ml": [], "weights_g": [], "dosages_mg": [], "counts": [], "total_piece_count": None},
"mismatches": [],
},
"variant_guardrails": {
"hard_veto": True,
"conflict_reasons": ["makeup_finish_conflict"],
"catalog_count_omission": False,
},
},
"offer_evidence": {
"version": "offer_evidence_v1",
"price_basis": "none",
"alert_tier": "suppress",
"momo_price": 990,
"competitor_price": 880,
"gap_pct": 12.5,
"price_is_identity_evidence": False,
},
"reasons": [
"makeup_finish_conflict",
"nail_tool_function_conflict",
@@ -215,6 +241,9 @@ def test_competitor_review_reasons_prefer_json_payload_labels():
assert item["price_basis_label"] == "不可比"
assert item["alert_tier_label"] == "不告警"
assert item["diagnostic_reason_text"] == "妝效質地不同、工具功能不同、除毛刀品線不同"
assert item["identity_evidence_summary"].startswith("品牌 mac")
assert item["offer_evidence"]["price_is_identity_evidence"] is False
assert item["difference_highlights"][0]["dimension"] == "妝效/質地不同"
assert [reason["code"] for reason in item["diagnostic_reasons"]] == [
"makeup_finish_conflict",
"nail_tool_function_conflict",
@@ -227,9 +256,17 @@ def test_competitor_review_reasons_prefer_json_payload_labels():
assert envelope["guardrails"]["can_auto_execute"] is False
assert envelope["guardrails"]["data_quality"] == "partial"
assert envelope["guardrails"]["match_type"] == "no_match"
assert envelope["guardrails"]["identity_evidence_version"] == "identity_evidence_v1"
assert envelope["guardrails"]["price_is_identity_evidence"] is False
assert envelope["identity_evidence"]["brand"]["shared"] == ["mac"]
assert envelope["offer_evidence"]["gap_pct"] == 12.5
assert envelope["difference_highlights"][0]["dimension"] == "妝效/質地不同"
assert envelope["recommended_action"]["requires_hitl"] is True
assert envelope["recommended_action"]["action"] == "verify_or_reject_identity"
assert any(evidence["metric"] == "reasons" for evidence in envelope["evidence"])
assert any(evidence["metric"] == "identity_evidence" for evidence in envelope["evidence"])
assert any(evidence["metric"] == "offer_evidence" for evidence in envelope["evidence"])
assert any(evidence["metric"] == "difference_highlights" for evidence in envelope["evidence"])
def test_rescore_accepted_review_item_has_actionable_decision_envelope():