V10.542 拆分可用比價覆蓋率口徑

This commit is contained in:
OoO
2026-06-01 10:01:48 +08:00
parent 7e057435c5
commit 4bc271f7ed
16 changed files with 57 additions and 10 deletions

View File

@@ -75,7 +75,7 @@ def test_competitor_coverage_counts_only_active_product_intersection():
"def _fetch_manual_review_summary", 1
)[0]
assert "coverage:v7" in source
assert "coverage:v8" in source
assert "rescore_accepted_count" in coverage_source
assert "(SELECT COUNT(*) FROM valid_competitor) AS valid_matches" not in coverage_source
assert "identity_competitor AS" in coverage_source
@@ -85,6 +85,8 @@ def test_competitor_coverage_counts_only_active_product_intersection():
assert "WHERE fc.sku IS NULL" in coverage_source
assert "\"fresh_matches\": fresh" in coverage_source
assert "\"stale_matches\": stale" in coverage_source
assert "\"decision_ready_matches\": fresh" in coverage_source
assert "\"decision_ready_rate\": round(fresh / max(active, 1) * 100, 1)" in coverage_source
assert "FROM products p\n JOIN LATERAL" in coverage_source
assert "WHERE p.status = 'ACTIVE'" in coverage_source
@@ -129,6 +131,7 @@ def test_competitor_review_queue_is_canonical_unit_price_handoff():
assert "competitor_intel.review_queue" in daily_template
assert "coverage.fresh_matches" in growth_template
assert "coverage.fresh_match_rate" in growth_template
assert "coverage.decision_ready_rate" in growth_template
assert "coverage.stale_matches" in growth_template
assert "coverage.unit_comparable_count" in growth_template
assert "coverage.rescore_accepted_count" in growth_template
@@ -139,6 +142,7 @@ def test_competitor_review_queue_is_canonical_unit_price_handoff():
assert "comp_coverage.rescore_accepted_count" in daily_template
assert "重算待人工覆核" in daily_template
assert "comp_coverage.stale_matches" in daily_template
assert "comp_coverage.decision_ready_rate" in daily_template
def test_competitor_review_filters_split_low_score_operational_buckets():

View File

@@ -542,6 +542,7 @@ def test_ai_product_pick_agent_uses_real_competitor_data_and_dashboard_action():
assert "JSON.stringify({ limit: 50 })" in template
assert "完成後會重算 AI 挑品清單" in route_source
assert "match_rate" in route_source
assert "decision_ready_rate" in route_source
assert "product_pick_count" in route_source
dashboard_route_source = (ROOT / "routes/dashboard_routes.py").read_text(encoding="utf-8")
dashboard_template = (ROOT / "templates/dashboard_v2.html").read_text(encoding="utf-8")
@@ -586,6 +587,7 @@ def test_ai_product_pick_agent_uses_real_competitor_data_and_dashboard_action():
assert "formatBackfillCoverageSummary" in dashboard_js
assert "formatBackfillLimitedCount" in dashboard_js
assert "status.coverage" in dashboard_js
assert "可用比價 ${formatBackfillRate(coverage.decision_ready_rate)}" in dashboard_js
assert "待刷新 ${formatBackfillCount(coverage.stale_matches)}" in dashboard_js
assert "待補抓 ${formatBackfillCount(coverage.pending)}" in dashboard_js
assert "可重評 ${formatBackfillLimitedCount(preview.candidate_count" in dashboard_js

View File

@@ -43,6 +43,8 @@ def test_webcrumbs_host_data_maps_price_alert_exact_rows(monkeypatch):
"match_rate": 12.3,
"fresh_matches": 70,
"fresh_match_rate": 79.5,
"decision_ready_matches": 70,
"decision_ready_rate": 9.8,
"stale_matches": 18,
"pending": 612,
},
@@ -62,6 +64,9 @@ def test_webcrumbs_host_data_maps_price_alert_exact_rows(monkeypatch):
assert payload["metadata"]["fetches_external"] is False
assert payload["metadata"]["matched_count"] == 88
assert payload["metadata"]["coverage_rate"] == 12.3
assert payload["metadata"]["identity_coverage_rate"] == 12.3
assert payload["metadata"]["decision_ready_count"] == 70
assert payload["metadata"]["decision_ready_rate"] == 9.8
assert payload["metadata"]["fresh_match_count"] == 70
assert payload["metadata"]["fresh_match_rate"] == 79.5
assert payload["metadata"]["stale_match_count"] == 18
@@ -82,6 +87,7 @@ def test_webcrumbs_host_data_uses_empty_state_without_risks(monkeypatch):
assert payload["marketSnapshot"][0]["freshness_status"] == "no_current_exact_risk"
assert payload["aiCandidate"]["release_status"] == "blocked"
assert payload["metadata"]["matched_count"] == 3
assert payload["metadata"]["decision_ready_count"] == 1
assert payload["metadata"]["fresh_match_count"] == 1
assert payload["metadata"]["stale_match_count"] == 2
assert payload["metadata"]["pending_match_count"] == 9