[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"] "scripts/fix_ref_ids.py" = ["E501"] # одноразовая миграция, SQL-строки длиннее 100