Архитектура¶
Обзор¶
AI Medical Assistant — монолитное FastAPI-приложение с асинхронными задачами Celery, PostgreSQL (или SQLite в dev), Redis, Chroma (RAG) и статическим фронтендом (Vanilla JS). Кодовая база развивалась из клинического SaaS-стека; поверх него добавлены модули обучения и RAG.
flowchart TB
subgraph Client
Browser[Browser]
end
subgraph Docker
App[app :8001 FastAPI]
Worker[celery worker]
Beat[celery beat]
Redis[(redis host :6380)]
Chroma[(Chroma)]
end
subgraph Data
DB[(PostgreSQL / SQLite)]
Storage[storage/ age + DICOM]
end
subgraph External
ProxyAPI[ProxyAPI / OpenAI]
SMTP[SMTP]
TG[Telegram]
end
Browser -->|HTTP/WS| App
App --> DB
App --> Redis
App --> Chroma
App --> Storage
App --> ProxyAPI
Worker --> Redis
Worker --> DB
Worker --> Storage
Worker --> ProxyAPI
Beat --> Redis
App --> SMTP
App --> TG
Слои приложения¶
| Слой | Каталог | Ответственность |
|---|---|---|
| Routes | app/routes/ |
HTTP API, валидация |
| Services | app/services/ |
Бизнес-логика (tutor, cases, exam, RAG, clinical) |
| Models | app/models/ |
SQLAlchemy ORM |
| Tasks | app/tasks/ |
Celery (парсинг, DICOM, бэкап) |
| Static | app/static/ |
HTML/JS/CSS (tutor, cases, exam, progress) |
| Auth | app/auth.py |
JWT, регистрация |
| Access | app/services/access.py |
RBAC |
Модули обучения и RAG¶
| Модуль | Назначение |
|---|---|
| Tutor | Чат-сессии (ChatSession / ChatMessage), ответы с контекстом RAG |
| Cases | Интерактивные ClinicalCase |
| Exam | Тесты (Test) и проверка ответов |
| Progress | Записи Progress по модулям |
| RAG | Chroma + embeddings; режимы local / external / hybrid |
Мультитенантность¶
Каждая клиника — Tenant с уникальным subdomain. Все запросы фильтруются по tenant_id из JWT.
RBAC¶
Роли: student, resident, admin, head_of_department, doctor, nurse, researcher, viewer, superadmin.
Проверки в app/services/access.py:
can_read_patient,can_write_patientcan_upload_document,can_delete_user- анонимизация для
researcher
Асинхронные задачи¶
| Задача | Файл | Назначение |
|---|---|---|
parse_document |
document_task.py |
PDF/DOCX → текст, диагнозы |
process_dicom |
dicom_task.py |
DICOM → серии, PNG |
run_prediction |
prediction_task.py |
GPT / fallback |
run_backup |
backup_task.py |
age-архив |
self_heal |
self_heal_task.py |
Redis/Celery health |
Шифрование¶
Файлы документов и DICOM шифруются age перед записью на диск (app/services/encryption.py).
WebSocket¶
/ws/notifications — push о готовности документов, прогнозов, DICOM.
Frontend¶
SPA-подобные страницы без фреймворка:
- обучение:
pages/tutor.html,cases.html,exam.html,progress.html - клинические:
index.html+dashboard.js,login.html,admin.html dicom.html,dicom-viewer.html
CI/CD¶
GitHub Actions → SSH VPS → deploy.sh production.