● Medtech · Terricon Valley · день 1

MedArchive — итоги первого дня

Автоматическая обработка архива прайсов клиник-партнёров.
Отчёт перед трекером · 26.06.2026

● работает в проде: med.secondbrain.tools

Что сделано за день

Собран и развёрнут сквозной конвейер — от сырого архива до живого интерфейса.

архив (PDF/скан/DOCX/XLSX) извлечение нормализация валидация БД API UI сравнения
8 871позиций извлечено
73,9%нормализовано авто (цель ≥70%)
8 / 10клиник / файлов
liveразвёрнуто на домене

Стек технологий

СлойРешение
ИзвлечениеPython · pdfplumber, PyMuPDF, openpyxl/xlrd, python-docx
Vision-доборGemini gemini-2.5-flash (по API)
Нормализациякаскад + эмбеддинги Gemini gemini-embedding-001
Валидацияправила ТЗ §4.4 (цена, тарифы, аномалии, версии)
ХранилищеSQLite (MVP) · PostgreSQL + pgvector (боевая схема)
APIFastAPI · 7 эндпоинтов + /stats + Swagger
Фронтодностраничный (Tailwind) · поиск и сравнение цен
ДеплойDocker (контейнер API) за Caddy · Selectel KZ

Ключевые инженерные решения

  • PDF без линий таблиц → реконструкция по координатам слов (обычный парсер таблиц их не находит).
  • Эмбеддинги через Gemini API, не локальный torch → лёгкий контейнер, не упирается в RAM на VPS.
  • Битый слой / скан → Gemini Vision по картинке. Чистое берут парсеры, трудное добирает Vision.
  • Порог 0,70 + очередь unmatched: услуг нет в справочнике → на ручную разметку (ТЗ §4.3).
  • SQLite для MVP (без Docker), боевая схема Postgres + pgvector — наготове.

Нормализация: каскад

код тарификатора точное совпадение эмбеддинги Gemini нечёткое (fuzzy) очередь unmatched
МетодПозицийКомментарий
код тарификатора1 414точное, бесплатно — где клиника указала код
точное имя167совпадение нормализованного названия
эмбеддинги4 903семантическая близость названий
fuzzy71запасной сигнал
→ авто всего6 555 (73,9%)цель ТЗ ≥70% взята
в очередь оператора2 316ручная разметка (ТЗ §4.3)

Готовность по ТЗ

Раздел%Состояние
§2 Форматы на вход90PDF/скан/DOCX/XLSX/XLS + справочник
§3 Схема БД (4 сущности)80есть; БИН/город/контакты пока не извлекаются
§4.1 Загрузка архива55CLI-конвейер; загрузки ZIP в UI нет
§4.2 Извлечение по формату85работает; tracked-changes неявно
§4.3 Нормализация90каскад + порог + unmatched, 73,9%
§4.4 Валидация + верификация60валидация ✅; UI верификации неполный
§4.5 API907 эндпоинтов + /stats + Swagger
§4.6 Интерфейс70поиск+сравнение+дашборд; нет загрузки/разметки
§7 Что сдаём65БД/отчёт/OpenAPI/README ✅; слайды-каркас, видео нет

Готовность по рубрике оценки

Критерий жюривессделано
Качество извлечения данных30%~85%
Нормализация и сопоставление25%~90%
Валидация и верификация20%~60%
API и поиск15%~90%
UX административного раздела10%~65%

≈ 80% по рубрике · общая готовность по ТЗ ≈ 75% · плюс бонус — живой деплой, которого ТЗ не требует.

Что осталось (план дня 2)

  • Экран верификации оператора — главный пробел (вес 20%): оригинал + извлечённое + подтвердить / исправить / сопоставить.
  • Загрузка ZIP-архива через интерфейс (§4.1) — сейчас CLI.
  • Полный прогон Vision по трудным клиникам (3, 5, 2-2025) — больше охват и качество.
  • Упаковка к защите: слайды с цифрами, демо-видео.
  • Мелочи: извлечение БИН/города, явная обработка tracked-changes.

День 1: продукт работает целиком

Собран и развёрнут весь путь — от сырого архива до живого интерфейса.
Ядро (55% оценки: извлечение, нормализация, валидация) проверено на реальных данных.
Дальше — экран верификации, загрузка архива через интерфейс, упаковка к защите.

Демо — med.secondbrain.tools
документация API — med.secondbrain.tools/api/docs