69a9884db5
- Загрузка архива (§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>
37 lines
1.7 KiB
TOML
37 lines
1.7 KiB
TOML
[project]
|
|
name = "medarchive"
|
|
version = "0.1.0"
|
|
description = "Автоматическая обработка архива прайсов клиник-партнёров и база услуг с ценами"
|
|
requires-python = ">=3.12"
|
|
dependencies = [
|
|
"fastapi>=0.115",
|
|
"uvicorn[standard]>=0.32",
|
|
"pydantic>=2.9",
|
|
"psycopg[binary]>=3.2",
|
|
"python-multipart>=0.0.12", # загрузка ZIP-архива
|
|
"openpyxl>=3.1", # xlsx
|
|
"xlrd>=2.0", # старый xls
|
|
"python-docx>=1.1", # docx (+ принятие правок)
|
|
"pdfplumber>=0.11", # PDF с текстовым слоем
|
|
"pymupdf>=1.24", # рендер страниц для Vision
|
|
"rapidfuzz>=3.10", # нечёткое сопоставление
|
|
"numpy>=2.0", # векторные операции при сопоставлении
|
|
"google-genai>=1.0", # Gemini Vision + эмбеддинги (API, без локального torch)
|
|
]
|
|
|
|
[tool.ruff]
|
|
line-length = 100
|
|
target-version = "py312"
|
|
|
|
[tool.ruff.lint]
|
|
select = ["E", "F", "I", "UP", "B"] # стиль, ошибки, импорты, апгрейды, баги
|
|
|
|
[tool.ruff.lint.flake8-bugbear]
|
|
# Вызовы-маркеры FastAPI в значениях по умолчанию — идиома фреймворка, не баг B008.
|
|
extend-immutable-calls = ["fastapi.File", "fastapi.Query", "fastapi.Depends"]
|
|
|
|
[tool.ruff.lint.per-file-ignores]
|
|
# Разведочные скрипты этапа разбора форматов — черновики, не часть продукта.
|
|
"scripts/proof/*" = ["E402", "E501", "E741", "B007"]
|
|
"scripts/gen_fixtures.py" = ["E402", "E501", "E741"]
|