diff --git a/apps/api/src/api/v1/stats.py b/apps/api/src/api/v1/stats.py index fe7c227a..ea1375df 100644 --- a/apps/api/src/api/v1/stats.py +++ b/apps/api/src/api/v1/stats.py @@ -360,6 +360,11 @@ class WeeklyReportResponse(BaseModel): ai_success_rate: float = Field(description="AI 成功率 (%)") commits_count: int = Field(description="本週 Commits 數") deploy_count: int = Field(description="本週部署次數") + source_ok_count: int = Field(default=0, description="報表資料源可讀數") + source_total_count: int = Field(default=0, description="報表資料源總數") + source_confidence_percent: int = Field(default=0, description="報表資料源可信度") + source_gap_ids: list[str] = Field(default_factory=list, description="報表資料源缺口工作項") + formatted_preview: str = Field(default="", description="Telegram HTML no-send preview") @router.get( @@ -385,6 +390,11 @@ async def preview_weekly_report( ai_success_rate=report.ai_success_rate, commits_count=report.commits_count, deploy_count=report.deploy_count, + source_ok_count=report.report_source_ok_count, + source_total_count=report.report_source_total_count, + source_confidence_percent=report.report_source_confidence_percent, + source_gap_ids=report.report_source_gap_ids, + formatted_preview=report.format(), ) diff --git a/apps/api/tests/test_weekly_report_preview_api.py b/apps/api/tests/test_weekly_report_preview_api.py new file mode 100644 index 00000000..87a7bf08 --- /dev/null +++ b/apps/api/tests/test_weekly_report_preview_api.py @@ -0,0 +1,27 @@ +from fastapi.testclient import TestClient + +from src.main import app + + +def test_weekly_report_preview_exposes_source_health_no_send_preview(): + client = TestClient(app) + response = client.get("/api/v1/stats/weekly/preview") + + assert response.status_code == 200 + data = response.json() + assert "week_range" in data + assert "alert_total" in data + assert "source_ok_count" in data + assert "source_total_count" in data + assert "source_confidence_percent" in data + assert "source_gap_ids" in data + assert "formatted_preview" in data + assert data["source_total_count"] >= 0 + assert data["source_ok_count"] >= 0 + + preview = data["formatted_preview"] + assert "報表資料信任度" in preview + if data["source_total_count"] > 0: + assert "報表資料源 / 沉澱" in preview + assert f"來源: {data['source_ok_count']}/{data['source_total_count']}" in preview + assert "不自動改排程" in preview