198 документов0 ошибок3 годаодна папка

Медкартацеликом

Anamnesis выгружает электронную медкарту из ЕМИАС в папку, где у каждого факта есть дата, документ и цитата. Дальше её читает агент — и находит то, что потерялось между приёмами.

python -m anamnesis.cli login
python -m anamnesis.cli all
Python 3.9+ · без зависимостей · MIT

Снаружи они одинаковые

Разложить документы по датам умеет и личный кабинет. Часть из этих ста девяноста восьми требует вопроса врачу — и снаружи они ничем не отличаются от остальных.

01 / ВЫГРУЗКА

Две команды

login принимает ссылку временного доступа и код из письма: инструмент не спрашивает пароль от mos.ru и не логинится за вас. all выгружает карту, раскладывает её по файлам и прогоняет проверки.

Дальше вы открываете INDEX.md — или отдаёте папку агенту.

Вывод команды на демо-хранилище из репозитория.

medcard/
├── INDEX.md          с чего начать
├── PROFILE.md        наблюдение, лекарства, госпитализации
├── TIMELINE.md       вся история одной лентой
├── AUDIT.md          результаты проверок
├── LOOSE-ENDS.md     назначено, результата нет
├── labs.csv          показатели: значение, норма, отклонение
├── labs-trends.md    динамика измеренного 3+ раз
├── md/               каждый документ в markdown
├── files/            PDF и загруженное пациентом
└── raw/              ответы API как есть

Имена файлов начинаются с даты, внутри — фронтматтер с врачом и организацией.

Разбор одной карты

демо-хранилище · вымышленный пациент

← дорожки шире экрана, их можно прокрутить →

Показатели демо-карты во времени Гемоглобин: 132 → 121 → 108 → 105 при норме 120–150. Объём эритроцита: 91 → 84 → 77 → 75 при норме 80–100. Ферритин: 64 → 12 → <10 при норме 15–150. Тиреотропин: 7.90 при норме 0,4–4. Заштрихованное — сколько показатель не пересдавали: до 13 месяцев. 2024 2025 2026 События 14.02.2024 · Осмотр гастроэнтеролога 23.07.2025 · Осмотр терапевта 23.07.2025 · Месалазин Гемоглобин г/л · 120–150 132 121 108 105 Объём эритроцита фл · 80–100 91 84 77 75 Ферритин мкг/л · 15–150 64 12 <10 Тиреотропин мЕд/л · 0,4–4 7.90 сегодня Полоса — референсный диапазон бланка. Красное — за его границей.

Выберите находку — увидите, из чего она посчитана.

malabsorption_panel

После операции на ЖКТ не проверялись семь показателей

В документах упоминается «резекции подвздошной» (20.02.2024). После таких вмешательств всасывание микроэлементов нарушается пожизненно. Перечисленных показателей в карте нет ни разу.

  • B12
  • фолиевая
  • витамин D
  • кальций и ПТГ
  • медь
  • цинк
  • B1

Источники:
md/inspections/2024-02-20_Осмотр-гастроэнтеролога_v1.md
labs.csv

02 / ПРОВЕРКИ

Считается по цифрам

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

Справа — сколько каждое правило нашло в демо-карте из семи документов. Ноль тоже результат: правило отработало и не нашло ничего.

Счёт со временем меняется: critical_values смотрит на свежесть значения, и когда анализ стареет, находка уходит сама.

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

03 / АГЕНТ

Остальное читает агент

Правила дают кандидатов. Всё, для чего нужно прочитать текст, разобрать формулировку и сверить её с клиническими критериями, делает агент по методологии из скилла medcard-audit. Это обычный markdown: его можно скормить любому агенту или прочитать самому.

  1. Хронология против официального дебюта. Первое упоминание симптома против даты начала заболевания в документах.
  2. Диагноз против критериев. По каким критериям поставлен, что они требуют, что из этого сделано.
  3. Невалидные результаты. «Идентификация затруднена», «недостаточно материала» — такое потом цитируется как отрицательный результат.
  4. Дефициты и всё, что мешает усвоению. Операции, диеты, длительная терапия — и контролируются ли связанные показатели.
  5. Рекомендации против назначений. Что советовал стационар или федеральный центр и что назначено по факту.
  6. Побочные эффекты текущей терапии. Известные эффекты действующих препаратов против свежих анализов.
  7. Лекарственные риски. Сочетания и противопоказания на фоне анамнеза.
  8. Незакрытые хвосты. Каждый кандидат из LOOSE-ENDS.md открывается и проверяется руками.

ПРОГОН, КОТОРЫЙ МОЖНО ПОВТОРИТЬ

  • 198документов выгружено за три года. Ошибок — ноль.
  • 210markdown-файлов на выходе
  • 1173показателя анализов разобрано вместе с нормами
  • 133событий в хронологии
  • 12замечаний от детерминированных правил

Выдуманный пациент, три года наблюдения. Хранилище собирается командой python examples/make_bench.py — цифры можно проверить, а не поверить. Настоящих медкарт в этом репозитории нет.

04 / ГРАНИЦЫ

Что он не делает

Данные не уезжают

Ваш компьютер ./medcard API ЕМИАС lk.emias.mos.ru серверы проекта
  • Инструмент ходит только в API ЕМИАС и пишет файлы локально. Ни телеметрии, ни серверов проекта.
  • medcard/.tokens.json — ключи от карты, уже в .gitignore.
  • anamnesis anonymize вычищает ФИО пациента и врачей, полис, СНИЛС, телефоны и адреса, а сканы не копирует вовсе.

Чужую карту не выгрузить

  • Доступ создаёт сам пациент на mos.ru: услуга «Запрос, изменение и отмена доступа к электронной медицинской карте».
  • Ссылка приходит на почту, код доступа — отдельно. Инструмент принимает эти два значения и больше ничего не знает.
  • Обезличенная копия не равна анонимной: по набору дат и диагнозов человека можно узнать.

Ограничения

  • Только ЕМИАС и только Москва. Других коннекторов пока нет.
  • API неофициальный: не документирован и может измениться в любой момент.
  • Проверки — эвристики с общепринятыми порогами для взрослых, а не ваши персональные нормы.

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

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

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

Если находка выглядит срочной — критические цифры в свежем анализе, признаки кровотечения, — это повод позвонить врачу, а не читать дальше документацию.

05 / УСТАНОВКА

Установка

Через skills.sh

npx skills add AutoPasha/anamnesis

Ставит оба скилла туда, где их найдёт ваш агент: Claude Code, Codex, Cursor, OpenCode и ещё десятки.

Плагин Claude Code

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

Ставится и обновляется на месте.

Просто клонировать

git clone https://github.com/
  AutoPasha/anamnesis

Зависимостей нет, Python 3.9+.

Как это появилось

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

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