Skip to content

Repository files navigation

Терминал: команда anamnesis login принимает ссылку временного доступа и код, затем anamnesis all выгружает 198 документов, собирает 1173 показателя, 133 события хронологии и находит 12 замечаний

Anamnesis

Медкарта из ЕМИАС — в базу, по которой агент найдёт то, что потерялось между приёмами

Тесты Python Зависимостей Лицензия Проверено

Выгружает всё, что о вас накопило московское здравоохранение, раскладывает в markdown с датами и нормами — и ищет незакрытые назначения, дефициты без лечения и показатели, которые никто не пересдавал.

▶ Открыть страницу проекта  ·  Установка  ·  Что находит  ·  Приватность


Установка (30 секунд)

Anamnesis — это агентские скиллы плюс CLI на Python. Без зависимостей, без ключей, без сборки.

Любой агент — одна команда. Ставит оба скилла туда, где их найдёт ваш агент:

npx skills add AutoPasha/anamnesis

Claude Code · Codex · Cursor · OpenCode · Gemini CLI · Windsurf · Cline · Goose · Copilot и ещё десятки — skills.sh. Только один скилл: npx skills add AutoPasha/anamnesis --skill medcard-audit.

Claude Code, как плагин — ставится и обновляется на месте:

/plugin marketplace add AutoPasha/anamnesis
/plugin install anamnesis@anamnesis

Просто CLI, без агента:

git clone https://github.com/AutoPasha/anamnesis && cd anamnesis
python -m anamnesis.cli --vault ./medcard login   # ссылка временного доступа + код
python -m anamnesis.cli --vault ./medcard all     # выгрузить, разложить, проверить

Зачем

Медкарту целиком не видит никто. Терапевт смотрит свой приём, невролог — свой, лаборатория выдаёт результат одним листом. Ферритин ниже нормы в декабре и жалоба на слабость в августе живут в разных разделах и никогда не встречаются. Рекомендация «пересдать через три месяца» лежит внутри текста выписки, которую с тех пор никто не открывал.

Человек видит список PDF в личном кабинете. Агент, у которого те же документы разложены по датам, показателям и нормам, видит связи.

Что находит

Часть проверок — детерминированные: считаются по числам и датам, без модели, и каждая ссылается на конкретный файл.

Правило Что ищет
urgent_values значения, при которых лаборатория звонит врачу немедленно
critical_values свежие показатели за порогами — вопрос к врачу, но не срочный
unreadable_values показатели, к которым порог не применился: единица не распознана
pregnancy_unsupported признаки беременности — часть порогов отключается, нормы другие
worsening_trend три измерения подряд в одну сторону с выходом за норму
abnormal_not_rechecked нашли отклонение — и полгода не проверяли
deficiency_untreated дефицит подтверждён анализом, лечения в карте нет
malabsorption_panel после операций на ЖКТ не контролируются B12, железо, витамин D, медь, цинк
drug_risk сочетания препаратов: НПВС с антикоагулянтом, статин с фибратом и ещё четыре
allergy_conflict назначен препарат, похожий на упомянутую в анамнезе непереносимость
chronic_care_gap диагноз на наблюдении, а контрольных анализов за год в карте нет
followup_gap диагноз на диспансерном наблюдении без профильного врача
loose ends назначено или рекомендовано, а результата в карте нет

Каждая находка ссылается на файл-источник, а отчёт начинается с раздела «Границы этой проверки»: что прочитано, сколько файлов без машинного текста, какие правила промолчали и что не проверяется в принципе. Пустой отчёт нельзя прочитать как «здоров» — так и написано.

Правила знают пол и возраст: границы нормы у мужчин и женщин разные, а на карте ребёнка числовые пороги не применяются вовсе — детские нормы возрастные, и взрослые на них врут.

Справочники вместо захардкоженных списков

Диагнозов в МКБ-10 больше пятнадцати тысяч, лекарств — десятки тысяч. Перечислять их в коде бессмысленно, поэтому справочники подключаются как данные:

python -m anamnesis.cli knowledge          # что подключено
python -m anamnesis.cli knowledge --sync   # скачать доступное
Справочник Доступ Что даёт
МКБ-10 (выгрузка ФРНСИ, 15 038 кодов) скачивается сам правило пишется для блока E10-E14 и накрывает весь диабет, а не перечисленные вручную коды
Номенклатура медуслуг, приказ 804н нужен ключ ФРНСИ «Определение витамина B12» и «Витамин В12 (цианокобаламин)» — одна услуга
Справочник препаратов ФРНСИ нужен ключ ФРНСИ торговое название сопоставляется с международным
LOINC скачать вручную международные коды тестов и совместимость с другими системами

Ключ ФРНСИ выдаётся бесплатно после входа через Госуслуги, LOINC — после бесплатной регистрации. Без справочников всё работает, просто с меньшим охватом: правила падают обратно на встроенные списки кодов.

Карточка находки из AUDIT.md: правило malabsorption_panel сообщает, что после упомянутой в документах операции на кишечнике ни разу не проверялись витамин B12, фолиевая кислота, витамин D, кальций с паратгормоном, медь, цинк и витамин B1, со ссылками на документ и таблицу показателей
Находка из демо-хранилища на выдуманном пациенте. У каждой — правило, объяснение и ссылки на источники.

Остальное делает агент по методологии из скилла medcard-audit: сверяет хронологию симптомов с официальной датой начала болезни, ищет неинтерпретируемые результаты, которые в следующих документах цитируются как отрицательные, сравнивает рекомендации федеральных центров с фактическими назначениями, проверяет побочные эффекты текущей терапии по свежим анализам.

Цифры, которые можно повторить

Всё, что здесь названо числом, считается на выдуманном пациенте: мужчина 61 года, три года наблюдения, гипертония, гипотиреоз и развивающийся железодефицит. Хранилище генерируется одной командой, поэтому цифры проверяются, а не берутся на веру:

python examples/make_bench.py
Документов выгружено 198, ошибок — 0
Файлов markdown на выходе 210
Показателей разобрано с нормами 1173
Событий в хронологии 133
Замечаний от проверок 12

Инструмент проверялся и на настоящей медкарте за три года, но её цифры здесь не приводятся. Счётчик документов вместе с датами, диагнозами и названиями больниц сужает круг до одного человека — это чужие медицинские данные, и место им не в витрине.

Что получается на выходе

Структура хранилища: сводные файлы INDEX, PROFILE, TIMELINE, AUDIT, LOOSE-ENDS, labs.csv и labs-trends.md, папка md с документами по разделам, files с PDF и сканами, raw с ответами API

Имена файлов начинаются с даты, поэтому папка сортируется хронологически, а внутри каждого — YAML-фронтматтер с датой, разделом, врачом и организацией. Агент грепает, читает кусками и цитирует по имени файла:

grep -i "ферритин" medcard/labs.csv          # все значения показателя с нормами
grep -ril "омепразол" medcard/md/            # где упоминается препарат
ls medcard/md/inspections/ | grep -i невролог

Посмотреть, не выгружая свою карту

В репозитории лежит готовое демо на выдуманном пациенте — examples/demo: профиль, хронология, показатели и отчёт проверок.

python examples/make_demo.py   # пересобрать демо с нуля
python tests/test_pipeline.py  # тесты: конвертация, нормы, правила, обезличивание

Демо заодно работает интеграционным тестом: входные данные подобраны так, чтобы сработали правила про ухудшающийся тренд, дефицит без лечения и непроверенную панель после операции.

Скиллы

Скилл О чём
medcard-pull Выгрузка: где взять ссылку доступа, какие команды, какие грабли у этого API
medcard-audit Разбор: восемь линий проверки, правила верификации находок, формат результата

К medcard-audit приложены красные флаги — что искать глазами поверх автоматики, и карта API ЕМИАС — всё, что удалось выяснить о неофициальном API личного кабинета.

Методология — обычный markdown: её можно скормить любому агенту или прочитать самому, без всяких скиллов.

Как получить доступ к своей карте

Инструмент не спрашивает пароль от mos.ru и не логинится за вас. Он работает по ссылке временного доступа, которую вы создаёте сами:

  1. Войти на mos.ru под своей учётной записью.
  2. Открыть услугу «Запрос, изменение и отмена доступа к электронной медицинской карте».
  3. Создать доступ: отметить разделы, срок и адрес электронной почты.
  4. Ссылка придёт на почту, код доступа — отдельно.

Всё остальное — идентификатор карты и список разрешённых разделов — лежит внутри токена доступа, спрашивать не нужно.

Приватность

Медицинские данные не покидают компьютер: инструмент ходит только в API ЕМИАС и пишет файлы локально. Никакой телеметрии, никаких серверов проекта.

Но разбор картой занимается агент, а агент может работать в облаке. Если вы отдаёте папку облачной модели, туда уходят ваши диагнозы, анализы — и ФИО врачей из документов. Своими данными вы вправе распоряжаться, данными врачей — нет; медицинские сведения относятся к специальной категории персональных данных (152-ФЗ, ст. 10). Поэтому:

  • medcard/.tokens.json — ключи от карты. Уже в .gitignore; не коммитьте, не выкладывайте, не отправляйте в чат.
  • Показать карту кому-то или загрузить в облачную модель — сначала anamnesis anonymize: команда вычищает ФИО, полис, СНИЛС, телефоны, почту и адреса из текстов и не копирует сканы, потому что на них персональные данные напечатаны прямо в изображении.
  • «Обезличенная медкарта» и «анонимная» — не одно и то же: по набору дат и диагнозов человека можно узнать. Решайте с этим знанием.
  • Для облачного разбора используйте обезличенную копию, а не оригинал. anamnesis anonymize вычищает и ФИО врачей тоже.

Ограничения

  • Работает с ЕМИАС (Москва) — единственный поддерживаемый источник. Архитектура готова к другим коннекторам, но их пока нет.
  • API личного кабинета неофициальный: не документирован и может измениться в любой момент. Карта эндпоинтов собрана обратной разработкой фронтенда и лежит в anamnesis/emias/catalog.py — если что-то отвалится, чинить там.
  • Гостевая сессия одна: открытый в браузере кабинет по той же ссылке выкидывает скрипт, и наоборот.
  • Проверки — эвристики. Они дают кандидатов, которых нужно открыть и проверить, а не готовые выводы.

Это не медицинское заключение

Инструмент читает документы и считает числа. Он не ставит диагнозов, не назначает лечение и не отменяет назначенное. Всё, что он производит, — это подготовленные данные и список вопросов, с которым идут к врачу.

Это и не медицинское изделие. Программа не предназначена для оказания медицинской помощи: она адресована человеку, который разбирается в собственной карте, и всё, что она находит, — повод для вопроса врачу, а не вывод.

Пустой отчёт не означает, что вы здоровы. Правила не анализируют симптомы, не видят данных из платных клиник, не читают сканы и ничего не знают про беременность, онкологический поиск и скрининги. Отчёт всегда начинается с раздела «Границы этой проверки» — прочитайте его первым.

Отдельный уровень важности urgent — для значений, при которых лаборатория обязана немедленно позвонить врачу (гемоглобин ниже 70 г/л, калий вне 3,0–6,0, тромбоциты ниже 20, нейтрофилы ниже 0,5 и подобные). Если такое нашлось в свежем анализе — это повод связаться с врачом сегодня, а не дочитывать документацию. При боли в груди, одышке, крови в стуле, внезапной слабости в половине тела — 103 или 112, независимо от того, что написано в отчёте.

Сделано в Автопаше

Автопаша — AI-разработчик, который работает как удалённый сотрудник: ставите задачу, получаете результат, платите за неделю работы, а не за часы.

Этот репозиторий вырос из одной бытовой задачи — «выгрузи мою медкарту». Выгрузка заняла вечер, разбор — второй, а на третий стало ясно, что из этого получается инструмент, который пригодится не только автору.

Кто оператор персональных данных

Инструмент работает на вашем компьютере и никуда ничего не отправляет, поэтому авторы проекта не получают доступа к чьим-либо медицинским данным и не являются их оператором. Обработку выполняете вы сами и для себя — на такой случай 152-ФЗ делает исключение (ст. 1, ч. 2: обработка для личных и семейных нужд).

Ситуация меняется, если вы отдаёте карту кому-то ещё: облачной модели, врачу через мессенджер, коллеге. Тогда наружу уходят и ФИО врачей из документов, а на их передачу у вас полномочий нет. Для таких случаев есть anamnesis anonymize.

Лицензия

MIT — делайте что хотите, но без гарантий. См. LICENSE.

About

Электронная медкарта из ЕМИАС — в папку markdown-файлов, по которой AI-агент находит то, что потерялось между приёмами: отклонение без пересдачи, дефицит без лечения, назначение без результата. Без зависимостей, всё локально.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages