- Загрузка архива (§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>