🏥 Doctor Opus (Optima Edition)
Версия: 4.8.x | Дата: 15 марта 2026 | Статус: 🚀 Laboratory + Camera + Skin Analysis Update
Комплексное веб-приложение для врачей и экспертных клиник, построенное на Next.js 14. Помогает анализировать медицинские данные с помощью агентских AI-цепочек (через OpenAI-compatible LLM-шлюз: OpenRouter/Polza и др.). Поддерживает DICOM, лабораторные анализы, генетические отчёты, голосовые протоколы, прямое подключение медоборудования через USB и клиническую анонимизацию данных.
Внимание: это вспомогательный инструмент для врачей. Все выводы носят рекомендательный характер и требуют клинического подтверждения.
🚀 Ключевые особенности
🛡️ Трёхуровневая анонимизация (ФЗ-152 Compliant)
- Серверная автоматическая защита: 100% анонимизация всех изображений перед отправкой во внешний LLM/STT-контур (работает всегда).
- Быстрая анонимизация: Одна кнопка для автоматического закрашивания краёв и углов снимков.
- Точная ручная анонимизация: Редактор с кистью для прицельного закрашивания любых областей.
- Текстовая анонимизация: Автоматическое обнаружение и замена ФИО, паспортов, СНИЛС, телефонов.
- Уровень защиты: 99.9% | Документация:
docs/ANONYMIZATION_GUIDE.md
🤖 Продвинутый AI-анализ
- Мультимодельный Консилиум:
- Claude Opus 5.5: Глубокая логика для сложных клинических случаев и генетики.
- Claude Sonnet 5.5: Оптимальный баланс точности и скорости для большинства задач.
- GPT-6.1 Sol: Лучший выбор для рентгена, МРТ, КТ и общего клинического анализа.
- Gemini 3.8 Flash/Pro: Скоростное извлечение данных (OCR), скрининг, vision-анализ.
- Двухэтапный Workflow: Извлечение структурированных данных (JSON) → Формирование клинической директивы.
📸 Анализ изображений и DICOM
- Native DICOM: Просмотр и анализ снимков прямо в браузере.
- Поддержка: ЭКГ, Рентген, МРТ, КТ, УЗИ, Дерматоскопия, Гистология.
- Генетика: Анализ VCF-файлов и сложных PDF-отчетов.
🔬 Лаборатория (USB) — новое
- ЭКГ напрямую: Запись 1/3/4/6/12-канальной ЭКГ с прибора через USB. Автодетект скорости и формата. Анализ Gemini 3.8 + Claude Sonnet 5.5.
- Спирометрия: Подключение спирометра через USB или ручной ввод FVC/FEV1/PEF. Кривая поток-объём, интерпретация по ATS/ERS/GOLD.
- Глюкозный профиль (CGM): Импорт CSV из FreeStyle Libre / Dexcom. AGP-график, TIR, GMI, CV, анализ гипо/гипергликемий.
- УЗИ / Эндоскоп: Захват кадра с любого UVC-устройства или через HDMI capture-карту. Анализ Gemini 3.8 + Claude Sonnet 5.5.
🩹 Анализ кожи и ран — новое
- Дерматоскопия: ABCDE критерии, оценка риска меланомы.
- Анализ раны: Стадия раневого процесса, некроз, грануляции, признаки инфекции, рекомендации.
- Кожные изменения: Морфология элементов, дифдиагноз, план обследования.
🧠 Обновления для врачей (июль 2026)
- Консилиум → «Глубокий анализ» в чате: гибридная архитектура — быстрый параллельный раунд (динамически подобранные специальности + фиксированная роль «Скептик» для критических флагов), эскалация в полноценные дебаты (Claude Opus 5.5 + Fable 5.1) только при значимом расхождении мнений.
- Семантическая оценка расхождения: согласие между «школами» консилиума теперь считается по смыслу диагнозов (через LLM-кластеризацию), а не по точному совпадению текста — исключены ложные срабатывания на синонимичные формулировки.
- Обязательная проверка врачом для тяжёлых случаев: если по потенциально жизнеугрожающему диагнозу итоговая уверенность модели ниже 60%, случай всегда помечается «требует проверки врачом», независимо от согласия агентов.
- Chain-of-Verification (по запросу): кнопка «🔍 Проверить ответ» в чате и в разборе изображений/ЭКГ/КТ/МРТ — отдельный вызов-«адвокат дьявола», ищущий пропущенные альтернативы и необоснованные утверждения в уже готовом ответе.
- RAG-gate: при ответах с опорой на загруженные документы модель явно помечает утверждения, не подтверждённые источниками.
- Triage-подсказка сложности: в обычном чате при описании сложного мультисистемного случая появляется совет переключиться на модель с более глубоким рассуждением (Fable 5.1) — ничего не переключается автоматически, решение остаётся за врачом.
- Умные рекомендации модели (без автопереключения): в чате, протоколе и модулях анализа система показывает подсказку «Рекомендуем: …» и причину выбора. Врач может применить рекомендацию в 1 клик или оставить свой текущий выбор.
- Навигатор обновлён: добавлен отдельный сценарий про Консилиум/Глубокий анализ, обновлены подсказки про кнопку самопроверки.
- Закрашивание краёв снимка теперь включено по умолчанию на всех страницах анализа изображений (рентген, КТ, МРТ, УЗИ, ЭКГ, дерматоскопия, лаборатория, документы) и отделено от чекбокса «не сохранять в базу пациентов» — раньше маскирование срабатывало только при ручном включении общей галочки. Отключить можно отдельным чекбоксом при явной уверенности в отсутствии ПДн.
- Генетический модуль: текстовая анонимизация (ФИО/даты/адреса) теперь применяется всегда, а не только при включённом чекбоксе «Разовый анонимный анализ».
🧭 Обновления для врачей (июнь 2026)
- Диагноз-ориентированные источники: в разделе
Медицинские изображения блок Релевантные источники теперь подбирается по вероятным диагнозам/находкам из результата, а не только по типу модальности.
- Приоритет клинического вывода: при стриминге учитывается финальная клиническая часть (
Заключение/Диагноз) с нормализацией терминов RU/EN и ICD-кодов; промежуточный шум отбрасывается.
- Покрытие по модальностям: добавлены источники для ЭКГ, дерматоскопии, рентгена, КТ, МРТ, УЗИ, офтальмологии (retinal), маммографии и гистологии.
- Устойчивые ссылки на источники: для сайтов с нестабильным внутренним поиском используется site-search (например, через Google), чтобы открывались сразу результаты по теме.
- Визуальный поиск по атласам: в
Медицинские изображения и Дерматоскопии доступен поиск похожих снимков по вашему атласу (описание, фото, текущий снимок).
- Навигатор обновлён: добавлен сценарий
Как работают релевантные источники, включая отдельные шаги для PDF/сканов.
Mini Changelog: что где включено
| Раздел | Диагноз-ориентированные источники | Источники | Статус |
|---|
Медицинские изображения (универсальный режим) | Да, кросс-модально по вероятным диагнозам/находкам из результата | DermNet, LITFL, ECGWaves, Radiopaedia, Radiology Assistant, POCUS Atlas, EyeWiki, AAO, ACR/BI-RADS, PathologyOutlines | ✅ Включено |
Оценка ЭКГ | Да, по ЭКГ-паттернам (STEMI, AF, VT, блокады, QT и др.) | LITFL, ECGWaves | ✅ Включено |
Оценка дерматоскопии | Да, по дерматологическим диагнозам и паттернам | DermNet | ✅ Включено |
Описание рентгена | Да, по находкам CXR (пневмония, пневмоторакс, выпот и т.д.) | Radiopaedia, Radiology Assistant (site-search) | ✅ Включено |
Описание КТ | Да, по КТ-находкам (в т.ч. mass effect, hydrocephalus и др.) | Radiopaedia, Radiology Assistant (site-search) | ✅ Включено |
Описание МРТ | Да, по МР-находкам (очаговые/объемные изменения и др.) | Radiopaedia, Radiology Assistant (site-search) | ✅ Включено |
Описание УЗИ | Да, по УЗИ-находкам (абдоминальные, сосудистые, эхо, акушерство) | Radiopaedia, POCUS Atlas | ✅ Включено |
Сканирование документов (PDF/сканы) | Косвенно: через извлечение текста (OCR) и передачу клинического фрагмента в Медицинские изображения | Зависит от выбранной модальности после OCR | ✅ Поддержано через workflow |
Примечание: в стриминге ссылки стабилизируются по мере накопления текста; финальный пересчет выполняется по итоговому клиническому выводу (Заключение/Диагноз).
🎙️ Голосовые протоколы
- Запись разговора врач–пациент: поддерживается как источник для структурирования протокола.
- Voice-to-Protocol: Заполнение медицинских протоколов голосом через Polza STT (primary
aiesa/transcribe, fallback openai/whisper-large-v3).
- Экспорт: Генерация профессиональных заключений в формате Word (.docx).
📚 Персональная библиотека и атласы
- Индексация атласов (изображения): поддержан визуальный поиск похожих снимков по PDF-атласам.
- Векторизация текстов (RAG): загруженные документы превращаются в поисковый индекс для релевантных выдержек в анализе и чате.
- Рекомендация: для качественной векторизации использовать PDF с текстовым слоем (не сканы), либо предварительно прогонять через OCR.
💰 Биллинг и Баланс
- Интеграция платежных систем: Покупка пакетов единиц для доступа к анализам.
- Система Баланса: Списание по стоимости сервиса (модели + инфраструктура: серверная обработка, хранение, доставка).
🛠️ Технологический стек
- Frontend/Backend: Next.js 14 (App Router), TypeScript.
- Database: PostgreSQL (Neon) для хранения балансов, согласий и статистики.
- AI Integration: OpenAI-compatible API (настраиваемый шлюз), Streaming API (SSE).
- Auth: Next-Auth (JWT Strategy).
- Deployment: Timeweb VPS, Docker Compose, Nginx.
📋 Быстрый старт
Требования
- Node.js 20.x или выше (обязательно).
- API-ключ LLM-провайдера (OpenAI-compatible: OpenRouter/Polza и др.).
- База данных PostgreSQL (Neon).
1. Установка
git clone https://github.com/vasiliys961/doctor-opus.git
cd doctor-opus
npm install
2. Настройка (.env)
LLM_BASE_URL=https://openrouter.ai/api/v1
LLM_API_KEY=ваш_ключ
# backward compatibility:
# OPENROUTER_API_KEY=ваш_ключ
POSTGRES_URL=ссылка_на_базу
NEXTAUTH_SECRET=случайная_строка
NEXTAUTH_URL=https://doctor-opus.ru
POLZA_API_KEY=ваш_ключ
MIGRATION_SECRET=случайная_строка_32_символа
ENCRYPTION_SALT=случайная_строка_32_символа
Рекомендуется взять полный шаблон из .env.example и заполнить его:
cp .env.example .env
Для STT через Polza (Aiesa primary + Whisper fallback) + ролевая диаризация (врач/пациент):
SPEECH_PROVIDER=polza
POLZA_BASE_URL=https://polza.ai/api/v1
POLZA_API_KEY=ваш_ключ
POLZA_STT_PRIMARY_MODEL=aiesa/transcribe
POLZA_STT_FALLBACK_MODEL=openai/whisper-large-v3
STT_ENABLE_DIARIZATION=true
STT_ROLE_DIARIZATION_ENABLED=true
STT_ROLE_DIARIZATION_MODEL=anthropic/claude-haiku-4.5
3. Запуск
npm run dev
Команда поднимает:
🔐 Безопасность
Критические улучшения:
✅ Защита API: Middleware с NextAuth JWT — все endpoints требуют авторизацию
✅ Серверный биллинг: PostgreSQL транзакции с FOR UPDATE — защита от race conditions
✅ Безопасные логи: Автоматическая маскировка API ключей, токенов и email
✅ Расширенная анонимизация: ИНН, СНИЛС, паспорта, телефоны, адреса удаляются из PHI данных
Privacy by Design:
- Персональные данные фильтруются на уровне API-роутов
- Баланс пользователей хранится в защищенной PostgreSQL (не в localStorage)
- API-ключи никогда не передаются на клиент и маскируются в логах
- Полная анонимизация перед отправкой в AI-модели
🐳 Деплой на Timeweb (Docker Compose)
Перед любыми действиями по прод-деплою смотрите правила веток и окружений: DEPLOY.md.
Предусловия
- Docker + Docker Compose plugin установлены на VPS.
- DNS домена указывает на сервер.
- Сертификаты лежат в
nginx/ssl/ (fullchain.crt, privkey.key).
Обязательные переменные окружения
LLM_BASE_URL
LLM_API_KEY (или OPENROUTER_API_KEY для обратной совместимости)
NEXTAUTH_SECRET
NEXTAUTH_URL
MIGRATION_SECRET
ENCRYPTION_SALT
Быстрый запуск
docker compose pull
docker compose build --no-cache medical-assistant
docker compose up -d
docker compose ps
Проверка после старта
docker compose logs -f medical-assistant
curl -I https://doctor-opus.ru
Важно
- В
docker-compose.yml переменные без значений будут пустыми, если не задать их в .env.
- Для SMTP Timeweb заполните
SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS, SMTP_FROM.
- Для платежей (PayAnyWay) заполните
PAYMENT_PROVIDER=payanyway, PAYANYWAY_MNT_ID, PAYANYWAY_SECRET, PAYANYWAY_TEST_MODE.
- Storefront-callback включайте только при необходимости:
PAYANYWAY_STOREFRONT_ENABLED=true и обязательно задайте PAYANYWAY_STOREFRONT_TOKEN.
- Для bridge-reconcile (автозакрытие
pending без transaction_id через API PayAnyWay) задайте PAYANYWAY_OPERATION_LOOKUP_KEY, PAYANYWAY_OPERATION_LOOKUP_SECRET, при необходимости PAYANYWAY_OPERATION_LOOKUP_ACCOUNT.
📁 Структура (Optima Core)
doctor-opus/
├── app/ # Маршруты Next.js (Pages & API)
├── components/ # UI-компоненты (React)
├── lib/ # Ядро: база данных, логика биллинга, AI-стриминг
├── public/ # Статические ресурсы
├── types/ # TypeScript определения
└── docs/history/ # Архив отчетов и документации
📚 Документация
Безопасность и анонимизация
Техническая документация
Для врачей
⚖️ Лицензия
Разработчик не несет ответственности за клинические решения, принятые на основе рекомендаций системы.