diff --git a/routes/ai_routes.py b/routes/ai_routes.py index 68f7b05..58bfc8f 100644 --- a/routes/ai_routes.py +++ b/routes/ai_routes.py @@ -2210,6 +2210,10 @@ def _build_pchome_backfill_coverage_payload(): 'decision_support_non_exact_count': int(coverage.get('decision_support_non_exact_count') or 0), 'catalog_comparable_count': int(coverage.get('catalog_comparable_count') or 0), 'catalog_comparable_rate': float(coverage.get('catalog_comparable_rate') or 0), + 'catalog_variant_review_count': int(coverage.get('catalog_variant_review_count') or 0), + 'catalog_unit_review_count': int(coverage.get('catalog_unit_review_count') or 0), + 'catalog_identity_review_count': int(coverage.get('catalog_identity_review_count') or 0), + 'catalog_review_plan': coverage.get('catalog_review_plan') or {}, 'stale_matches': int(coverage.get('stale_matches') or 0), 'pending': int(coverage.get('pending') or 0), 'actionable_review_count': int(coverage.get('actionable_review_count') or 0), @@ -2268,6 +2272,21 @@ def _build_pchome_operation_backlog(coverage, revalidation_preview, stale_recove 'count': int((coverage or {}).get('unit_comparable_count') or 0), 'endpoint': '/vendor-stockout/list?review_status=unit_comparable', }, + 'catalog_variant_review': { + 'label': '型錄選項待核', + 'count': int((coverage or {}).get('catalog_variant_review_count') or 0), + 'endpoint': '/vendor-stockout/list?review_status=catalog_variant_review', + }, + 'catalog_unit_review': { + 'label': '型錄入數待核', + 'count': int((coverage or {}).get('catalog_unit_review_count') or 0), + 'endpoint': '/vendor-stockout/list?review_status=catalog_unit_review', + }, + 'catalog_identity_review': { + 'label': '型錄身份待核', + 'count': int((coverage or {}).get('catalog_identity_review_count') or 0), + 'endpoint': '/vendor-stockout/list?review_status=catalog_identity_review', + }, 'stale_search_recovery_preview': { 'label': '過期 identity 搜尋救援預覽', 'count': int((stale_recovery_preview or {}).get('candidate_count') or 0), diff --git a/tests/test_frontend_v2_assets.py b/tests/test_frontend_v2_assets.py index 972617f..321259e 100644 --- a/tests/test_frontend_v2_assets.py +++ b/tests/test_frontend_v2_assets.py @@ -539,11 +539,18 @@ def test_ai_product_pick_agent_uses_real_competitor_data_and_dashboard_action(): assert "_build_pchome_revalidation_preview_payload" in route_source assert "_build_pchome_stale_recovery_preview_payload" in route_source assert "fetch_competitor_coverage" in route_source + assert "'catalog_variant_review_count': int(coverage.get('catalog_variant_review_count') or 0)" in route_source + assert "'catalog_unit_review_count': int(coverage.get('catalog_unit_review_count') or 0)" in route_source + assert "'catalog_identity_review_count': int(coverage.get('catalog_identity_review_count') or 0)" in route_source + assert "'catalog_review_plan': coverage.get('catalog_review_plan') or {}" in route_source assert "preview_retryable_candidate_revalidation" in route_source assert "preview_expired_identity_recovery" in route_source assert "revalidation_preview" in route_source assert "stale_recovery_preview" in route_source assert "_build_pchome_operation_backlog" in route_source + assert "'catalog_variant_review': {" in route_source + assert "'catalog_unit_review': {" in route_source + assert "'catalog_identity_review': {" in route_source assert "_pick_pchome_recommended_next_action" in route_source assert "'operation_backlog': operation_backlog" in route_source assert "'recommended_next_action': _pick_pchome_recommended_next_action(operation_backlog)" in route_source