feat(ingest+поиск): приём ZIP через интерфейс, регистронезависимый поиск, чистка очереди
- Загрузка архива (§4.1): POST /ingest распаковывает ZIP, дораспознаёт и догружает прайсы в базу (append). Виджет в админке. Кэш эмбеддингов справочника (dict_emb.npy) — догрузка считает только новый файл, эмбеддинги best-effort с откатом на fuzzy при сбое Gemini. - Поиск по name_norm (lowercase): «УЗИ» и «узи» дают одинаковый результат — SQLite LIKE не сворачивает регистр для кириллицы. - Фильтр названий: код-мнемоники («МОЗО.15») больше не попадают в очередь. - /stats считается из базы — цифры на дашборде обновляются после загрузки. - Деплой через Dockerfile (зависимости в образе, код монтируется томом). - ruff: ядро и весь репозиторий проходят проверку. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
ошибка → error, предупреждение → needs_review, иначе → done. Конвертация валют и
|
||||
сравнение с прошлой версией (детектор аномалий) тоже здесь.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
@@ -34,7 +35,9 @@ def validate_prices(prices: dict[str, float]) -> list[Flag]:
|
||||
flags: list[Flag] = []
|
||||
for tier, value in prices.items():
|
||||
if value is None or value <= 0:
|
||||
flags.append(Flag("warning", "price_nonpositive", f"тариф «{tier}»: цена не положительна"))
|
||||
flags.append(
|
||||
Flag("warning", "price_nonpositive", f"тариф «{tier}»: цена не положительна")
|
||||
)
|
||||
resident, nonresident = prices.get("resident"), prices.get("nonresident")
|
||||
if resident and nonresident and nonresident < resident:
|
||||
flags.append(
|
||||
@@ -50,7 +53,11 @@ def validate_date(effective_date: date | None, today: date | None = None) -> lis
|
||||
|
||||
|
||||
def validate_anomaly(new_price: float | None, previous_price: float | None) -> list[Flag]:
|
||||
if previous_price and new_price and abs(new_price - previous_price) / previous_price > ANOMALY_RATIO:
|
||||
if (
|
||||
previous_price
|
||||
and new_price
|
||||
and abs(new_price - previous_price) / previous_price > ANOMALY_RATIO
|
||||
):
|
||||
return [
|
||||
Flag(
|
||||
"warning",
|
||||
|
||||
Reference in New Issue
Block a user