Тихий сторож. Спасает жизни молча. Silent guardian. Saves lives quietly.
Система не требует замены вашей МИС. Она слушает данные сбоку и шепчет на ухо, только когда всё плохо.
It doesn't replace your EHR. It listens from the side and whispers only when things go bad.
Этот проект не про технологии. Он про людей.
В мае 2023 года женщина поступила в приёмный покой с подозрением на инсульт. Рентгенолог не передал заключение КТ неврологу. Невролог неверно интерпретировал снимки. Поставил другой диагноз. Вместо экстренного лечения пациентку отправили в другую больницу. Она скончалась через 12 дней. Муж получил 150 000 рублей компенсации. Они были вместе 41 год.
Одно уведомление на экране врача — «Признаки ишемии. Терапевтическое окно 4 часа. Требуется невролог» — могло изменить всё.
Если MedSentinel когда-нибудь спасёт хотя бы одну жизнь или убережёт хотя бы одного врача от несправедливого обвинения — значит, уже не зря.
Это бесплатно. Это открыто. Это для всех.
Open-source система фонового мониторинга критических состояний пациентов. Подключается к существующей медицинской информационной системе (МИС). Не ставит диагнозов. Не мешает работать. Молчит, пока всё хорошо. Сигнализирует только когда видит реальную угрозу жизни.
Не требует замены текущей МИС. Система подключается сбоку — через FHIR, HL7, REST API или простой экспорт данных. Ваши процессы не меняются. Врач работает как обычно. MedSentinel наблюдает в фоне.
Данные не покидают больницу. По умолчанию используется локальная LLM (Ollama). Никаких облаков, никаких внешних серверов. Для медицины это ключевое.
- Скорая помощь — фельдшер на вызове. Система анализирует данные, сигнализирует если критично, автоматически отправляет данные дежурному специалисту. Ещё в пути решается куда ехать.
- Приёмный покой — врач осматривает поступившего. Система видит снимки, анализы, историю из базы. Если врач что-то пропустил — сигнал.
- Любое отделение — где есть электронная карта и данные пациента.
Пациент поступает → врач/фельдшер работает как обычно
↓
МИС / EHR (существующая база)
↓
MedSentinel подтягивает сбоку:
история, диагнозы, назначения, аллергии, анализы
↓
+ новые данные текущего визита
↓
Локальная LLM анализирует всё в совокупности
↓
Критично?
├── Нет → молчит
└── Да → ОДНОВРЕМЕННО:
├── 1. ОБЯЗАТЕЛЬНОЕ уведомление врачу/фельдшеру
│ (с объяснением, фиксируется в журнале)
└── 2. АВТООТПРАВКА дежурному специалисту
→ скорая знает КУДА ЕХАТЬ
Слой 1 — Тихий сторож (автоматически). Молчит → сигнал только при угрозе жизни.
Слой 2 — Диспетчер (автоматически, при алерте). Определяет нужного специалиста → отправляет данные → скорая знает куда ехать.
Слой 3 — Консилиум (по запросу врача). 19 специалистов в реестре — от невролога до неонатолога. Система сама определяет кого позвать, исходя из случая. Травма → хирург + травматолог + нейрохирург + анестезиолог. Беременность → акушер + гинеколог + неонатолог. Каждый ищет более простое решение.
- Не мешает. Берёт данные из того, что уже есть. Врач не заполняет ничего дополнительного.
- Молчит, пока всё хорошо. Никаких подсказок на каждый чих. Только жизнеугрожающее.
- Объясняет. Не просто «тревога» — конкретно: что увидела, почему критично, что проверить.
- Маршрутизирует. Фельдшер ещё в пути, а невролог уже готовится.
- Фиксирует. Каждое уведомление и реакция врача в журнале. Защита и пациента, и врача.
- Знает историю. Бабушка с давлением 150/90 в 47-й раз — не тревога. Она же с нарушением речи — тревога.
Скачайте, запустите демо — и увидите в консоли: «Внимание! У пациентки признаки ишемического инсульта, а невролог не назначен. Терапевтическое окно 4 часа. Заключение КТ не поступило.» Это пробирает сильнее любого описания.
git clone https://github.com/YOUR_USERNAME/medsentinel.git
cd medsentinel
python examples/run_demo.py --no-llm # без LLM, покажет данные и логикуС Ollama — полный цикл с анализом и алертами:
ollama pull llama3.1:8b
python examples/run_demo.py # 4 кейса: инсульт, паникёрша, сепсис, скорая
python examples/ambulance_demo.py # скорая с маршрутизацией- НЕ замена врачу. Не ставит диагнозов, не принимает решений.
- НЕ сертифицированное медицинское изделие. Авторы не несут ответственности.
- Может ошибаться. Не полагайтесь как на единственный инструмент контроля.
- Данные пациентов — ваша ответственность. Соблюдайте законодательство.
This project is not about technology. It's about people.
In May 2023, a woman was admitted to an emergency department with suspected stroke. The radiologist failed to submit the CT report to the neurologist. The neurologist misinterpreted the scans. Made a wrong diagnosis. Instead of emergency treatment, the patient was transferred to another hospital. She never regained consciousness and died 12 days later. Her husband received roughly $1,500 in compensation. They had been together for 41 years.
One notification on the doctor's screen — "Signs of ischemia. Therapeutic window 4 hours. Neurologist required" — could have changed everything.
If MedSentinel ever saves even one life, or protects even one doctor from an unjust conviction — it was worth it.
This is free. This is open. This is for everyone.
Open-source background monitoring system for critical patient conditions. Connects to your existing Electronic Health Record (EHR). Does not diagnose. Does not interfere. Stays silent when everything is fine. Alerts only when it sees a real threat to life.
Does not replace your current EHR. The system connects from the side — via FHIR, HL7, REST API, or simple data export. Your workflows don't change. The doctor works as usual. MedSentinel watches in the background.
Patient data stays in the hospital. By default, it uses a local LLM (Ollama). No cloud, no external servers. For healthcare, this is the killer feature.
- Ambulance / EMS — paramedic on scene. System analyzes data, alerts if critical, automatically sends patient data to the on-call specialist. Routing decision made while still en route.
- Emergency Department — physician examines the patient. System sees imaging, labs, history. If the doctor missed something — alert.
- Any ward — wherever electronic medical records exist.
Patient arrives → doctor/paramedic works as usual
↓
EHR / HIS (existing database)
↓
MedSentinel pulls data from the side:
history, diagnoses, medications, allergies, labs
↓
+ new data from current visit
↓
Local LLM analyzes everything together
↓
Critical?
├── No → stays silent
└── Yes → SIMULTANEOUSLY:
├── 1. MANDATORY alert to doctor/paramedic
│ (with explanation, logged in audit trail)
└── 2. AUTO-DISPATCH to on-call specialist
→ ambulance knows WHERE TO GO
Layer 1 — Silent Guardian (automatic). Silent → alerts only when life-threatening.
Layer 2 — Dispatcher (automatic, on alert). Identifies needed specialist → sends patient data → ambulance knows where to go.
Layer 3 — Consilium (on doctor's request). 19 specialists in registry — from neurologist to neonatologist. System picks who to invite based on the case. Trauma → surgeon + traumatologist + neurosurgeon + anesthesiologist. Pregnancy → obstetrician + gynecologist + neonatologist. Each looks for a simpler approach.
- Non-intrusive. Uses data that already exists. Doctor fills in nothing extra.
- Silent when everything is fine. No alerts for minor issues. Only life-threatening.
- Explains. Not just "alert" — specifically: what it found, why it's critical, what to check.
- Routes. Paramedic is still driving, neurologist is already preparing.
- Logs everything. Every alert and doctor response recorded. Protects both patient and doctor.
- Knows the history. BP 150/90 for the 47th time — no alert. Same patient with sudden speech impairment — alert.
Download, run the demo — and see in the console: "Warning! Patient shows signs of ischemic stroke. Neurologist not assigned. Therapeutic window 4 hours. CT report not received." That hits harder than any description.
git clone https://github.com/YOUR_USERNAME/medsentinel.git
cd medsentinel
python examples/run_demo.py --no-llm # no LLM needed, shows data and logicWith Ollama — full cycle with analysis and alerts:
ollama pull llama3.1:8b
python examples/run_demo.py # 4 cases: stroke, anxiety patient, sepsis, ambulance
python examples/ambulance_demo.py # ambulance with routing- NOT a replacement for a doctor. Does not diagnose or make decisions.
- NOT a certified medical device. Use at your own risk.
- Can be wrong. May miss threats or trigger false alarms.
- Patient data is your responsibility. Comply with HIPAA, GDPR, or your local laws.
medsentinel/
├── core/
│ ├── analyzer.py # Silent guardian (Layer 1)
│ ├── context.py # Patient context builder
│ ├── alert.py # Alert model + LLM response parser
│ ├── dispatcher.py # Auto-dispatch to specialist (Layer 2)
│ └── consilium.py # Multi-agent consultation, 19 specialists (Layer 3)
├── connectors/ # EHR plugins
│ ├── base.py # Interface
│ ├── fhir.py # FHIR/HL7
│ └── csv_demo.py # Demo/testing
├── llm/ # LLM providers (user's choice)
│ ├── base.py # Interface
│ ├── ollama.py # Local (Ollama, llama.cpp, vLLM)
│ └── api_proxy.py # Cloud with anonymization barrier
├── notifiers/ # Alert delivery
│ ├── email.py
│ ├── webhook.py
│ └── log.py
├── pipeline.py # Full pipeline
└── config.py
Copy / Скопируйте config.example.yaml → config.yaml:
llm:
provider: ollama # ollama / api_proxy
model: llama3.1:8b # any model / любая модель
endpoint: http://localhost:11434
# Cloud: provider: api_proxy, anonymize: true
connector:
type: csv_demo # csv_demo / fhir / custom
notifier:
type: log # log / email / webhook
alert:
severity_threshold: critical
require_acknowledgment: true
dispatch:
enabled: true
specialists:
- name: "On-call neurologist"
specialty: невролог
facility: "Stroke Center"
contact: "https://ehr.hospital/api/alerts"
contact_type: webhook- Doctors / Врачи: describe real cases where monitoring could have helped. Help define rules for critical conditions.
- Developers / Разработчики: write an EHR connector for your system, improve LLM prompts, add tests.
- Researchers / Исследователи: help validate on clinical data, measure sensitivity and specificity.
- Everyone / Все: spread the word. Write about it. Share the link. The more people know — the sooner it helps.
See CONTRIBUTING.md.
Apache 2.0 — use, modify, distribute freely / используйте, модифицируйте, распространяйте свободно.
Inspired by real events. Built with the belief that technology should protect people.
Вдохновлён реальными событиями. Создан с верой в то, что технологии должны защищать людей.