fix(stats): процент по всем извлечённым позициям (76,1%) — как в отчёте и деке

Дашборд считал по активным (после версионирования) и показывал 75,3% — расходилось
с презентацией. Канон — по всем извлечённым.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-27 15:57:08 +05:00
parent a2d3a1fa92
commit 1a4cc039b2
+4 -3
View File
@@ -547,12 +547,13 @@ def manual_match(item_id: int, service_id: str):
@app.get("/stats", response_model=Stats, summary="Сводка качества обработки") @app.get("/stats", response_model=Stats, summary="Сводка качества обработки")
def stats(): def stats():
"""Считается из базы — так после загрузки нового архива цифры обновляются сразу.""" """Качество обработки по ВСЕМ извлечённым позициям — как в отчёте о качестве и
презентации (не только по активным; иначе версионирование занижает процент)."""
with db() as conn: with db() as conn:
docs = conn.execute("SELECT COUNT(*) FROM price_document").fetchone()[0] docs = conn.execute("SELECT COUNT(*) FROM price_document").fetchone()[0]
items = conn.execute("SELECT COUNT(*) FROM price_item WHERE is_active = 1").fetchone()[0] items = conn.execute("SELECT COUNT(*) FROM price_item").fetchone()[0]
matched = conn.execute( matched = conn.execute(
"SELECT COUNT(*) FROM price_item WHERE is_active = 1 AND service_id IS NOT NULL" "SELECT COUNT(*) FROM price_item WHERE service_id IS NOT NULL"
).fetchone()[0] ).fetchone()[0]
if items: if items:
return Stats( return Stats(