add-med-record

andr81's avatarfrom andr81

Добавляет медицинские записи в Notion. Используй когда пользователь просит добавить запись в карточку Богданы, Андрея или Вани по файлу анализов/обследований.

⭐0stars🔀0forks📁View on GitHub🕐Updated Dec 25, 2025

When & Why to Use This Skill

This Claude skill automates the extraction and organization of medical data from lab reports and health documents directly into Notion. It intelligently parses patient information, test dates, medical providers, and specific clinical results—including highlighting abnormal values—to maintain a structured and searchable digital health history without manual data entry.

Use Cases

  • Automated Lab Result Logging: Extracting data from blood tests (CBC, biochemistry) or urine analysis PDFs and automatically populating a structured Notion database.
  • Family Health Tracking: Identifying the specific family member (e.g., Bogdana, Andrey, or Vanya) from a medical file and routing the data to their individual health card.
  • Clinical Abnormality Highlighting: Scanning medical reports for out-of-range biomarkers and automatically flagging them with visual indicators (e.g., ⬆️ or ⚠️) in the digital record.
  • Medical History Centralization: Consolidating reports from various clinics and laboratories (like HELIX, SYNLAB, or INVITRO) into a single, unified Notion workspace for long-term health monitoring.
nameadd-med-record
descriptionДобавляет медицинские записи в Notion. Используй когда пользователь просит добавить запись в карточку Богданы, Андрея или Вани по файлу анализов/обследований.

Add Medical Record Skill

Добавляет медицинские записи (анализы, обследования, консультации) в карточки пациентов в Notion.

⛔ КРИТИЧЕСКИЕ ПРАВИЛА

ТОЛЬКО MCP инструменты для Notion (кроме workaround):

  • mcp__notion__API-post-page — НЕ РАБОТАЕТ (MCP bug, см. workaround)
  • ВМЕСТО: scripts/create-notion-page.sh — создание страницы через curl
  • mcp__notion__API-patch-page — обновление свойств ✅
  • mcp__notion__API-patch-block-children — добавление контента ✅

ЗАПРЕЩЕНО:

  • Писать скрипты для Notion кроме утвержденного workaround
  • Делать curl запросы кроме workaround скрипта
  • Искать другие обходные пути если скрипт не работает

При ошибке MCP:

Исправить параметры вызова, а НЕ искать обходные пути. Частые ошибки:

  • Неверный формат properties — см. примеры ниже
  • database_id вместо parent.database_id
  • Неверный формат даты (нужен YYYY-MM-DD)

🛠️ Технические ограничения

MCP Bug Workaround

Проблема: Инструмент mcp__notion__API-post-page не работает из-за бага в Claude Code (double-stringification JSON параметров).

Решение: Используется bash-скрипт scripts/create-notion-page.sh для создания страниц через прямой API запрос.

Workflow:

  1. ✅ Bash script → создает страницу → возвращает page_id
  2. ✅ mcp__notion__API-patch-page → обновляет свойства
  3. ✅ mcp__notion__API-patch-block-children → добавляет контент

Когда MCP bug будет исправлен, можно вернуться к mcp__notion__API-post-page.


Использование

добавь в карточку [Богданы|Андрея|Вани] запись по файлу {путь}

Если пациент НЕ указан, попробуй определить по переданному документу, иначе спросить через AskUserQuestion. Если передано несколько файлов, то сперва нужно определить какие из них могут быть сгруппированы в один документ.


Базы данных

⚠️ Данные берутся из конфигурационного файла:

  • Файл: config/settings.yaml
  • Путь: skills.add-med-record.patients
  • Каждый пациент содержит: name и database_id

Если файл не найден — выдать ошибку:

⚠️ Файл settings.yaml не найден!
Скопируй settings.yaml.example в settings.yaml и заполни данные.

Схема базы (одинаковая для всех):

  • Name (title) — название записи
  • Date (date) — дата анализа
  • Type (multi_select) — тип(ы) анализа
  • Place (multi_select) — место проведения
  • Doctor (multi_select) — фамилия врач, если указан
  • Note (rich_text) — заметки

Workflow

1. Загрузить конфигурацию пациентов

  • Прочитать файл settings.yaml через Read tool
  • Извлечь раздел skills.add-med-record.patients
  • Сохранить список пациентов (name → database_id) для дальнейшего использования
  • Если файл не найден или раздел пуст — вывести ошибку и остановить выполнение

2. Определить пациента

Из запроса, документа или через AskUserQuestion.

  • Сопоставить имя пациента с записями из settings.yaml
  • Получить соответствующий database_id

3. Прочитать и проанализировать файл

Использовать Read tool. Извлечь:

  • Дата (формат в файле может быть DD.MM.YYYY → конвертировать в YYYY-MM-DD)
  • Место (по логотипу/заголовку: HELIX, SYNLAB, ЛОДЭ и т.д.)
  • Тип(ы) анализа (ОАК, БАК, УЗИ и т.д.)
  • Показатели вне нормы (обычно выделены)
  • ФИО пациента (для проверки)
  • Врач только фамилия (если указан в файле)

4. Сформировать название записи

Формат: `{Типы анализов}

Примеры:

  • ОАК + СОЭ
  • УЗИ щитовидной железы
  • Кардиолог

5. Создать запись в Notion

Шаг 5.1: Создать страницу с названием

⚠️ Используем bash workaround вместо сломанного MCP tool

# Извлечь NOTION_TOKEN из .mcp.json
NOTION_TOKEN=$(python3 -c "import json; print(json.load(open('.mcp.json'))['mcpServers']['notion']['env']['NOTION_TOKEN'])")

# Создать страницу
PAGE_ID=$(NOTION_TOKEN="$NOTION_TOKEN" .claude/skills/add-med-record/scripts/create-notion-page.sh "$DATABASE_ID" "$PAGE_TITLE")

# Проверить успешность
if [ -z "$PAGE_ID" ]; then
    echo "❌ Ошибка создания страницы"
    exit 1
fi

echo "✅ Создана страница: $PAGE_ID"

Где:

  • $DATABASE_ID — из settings.yaml для пациента
  • $PAGE_TITLE — название записи (например: "ОАК + СОЭ")

Сохранить $PAGE_ID для Шагов 5.2 и 5.3!

Шаг 5.2: Обновить свойства страницы

mcp__notion__API-patch-page

page_id: "<id из шага 5.1>"
properties: {
  "Date": {"date": {"start": "2024-11-19"}},
  "Type": {"multi_select": [{"name": "ОАК"}, {"name": "СОЭ"}]},
  "Place": {"multi_select": [{"name": "HELIX"}]},
  "Note": {"rich_text": [{"text": {"content": "Эритроциты ⬆️ 5.2 (норма до 4.7)"}}]}
}

Шаг 5.3: Добавить детальный контент в тело документа (ОБЯЗАТЕЛЬНО)

Важно: Поле Note содержит краткую сводку для табличного вида (1-2 строки). Тело документа содержит полную расшифровку анализа — это позволяет ознакомиться с результатами не открывая PDF-файл.

Структура тела документа:

  1. Заголовки секций — параграфы с эмодзи (📋, 🧪, 🩸, 💉, 🦠 и т.д.)
  2. Результаты — маркированные списки с показателями
  3. Формат показателя: Название: значение единицы (норма X-Y) + флаг
    • ✓ — в норме (можно опустить для краткости)
    • ⚠️ или ⬆️ — повышено
    • ⬇️ — понижено

Пример для биохимии:

mcp__notion__API-patch-block-children

block_id: "<id из шага 5.1>"
children: [
  {
    "type": "paragraph",
    "paragraph": {
      "rich_text": [{"type": "text", "text": {"content": "🧪 Биохимия крови"}}]
    }
  },
  {
    "type": "bulleted_list_item",
    "bulleted_list_item": {
      "rich_text": [{"type": "text", "text": {"content": "АЛТ: 15.9 Ед/л (норма 1-41) ✓"}}]
    }
  },
  {
    "type": "bulleted_list_item",
    "bulleted_list_item": {
      "rich_text": [{"type": "text", "text": {"content": "⚠️ Глюкоза: 6.23 ммоль/л (норма 4.1-5.9) — повышена"}}]
    }
  },
  {
    "type": "paragraph",
    "paragraph": {
      "rich_text": [{"type": "text", "text": {"content": "🩸 Липидограмма"}}]
    }
  },
  {
    "type": "bulleted_list_item",
    "bulleted_list_item": {
      "rich_text": [{"type": "text", "text": {"content": "Холестерин общий: 4.8 ммоль/л (норма <5.2) ✓"}}]
    }
  }
]

Пример для ПЦР/инфекций:

children: [
  {"type": "paragraph", "paragraph": {"rich_text": [{"type": "text", "text": {"content": "🦠 ПЦР-исследование (урогенитальный соскоб)"}}]}},
  {"type": "bulleted_list_item", "bulleted_list_item": {"rich_text": [{"type": "text", "text": {"content": "Chlamydia trachomatis — не обнаружено ✓"}}]}},
  {"type": "bulleted_list_item", "bulleted_list_item": {"rich_text": [{"type": "text", "text": {"content": "Mycoplasma genitalium — не обнаружено ✓"}}]}},
  {"type": "bulleted_list_item", "bulleted_list_item": {"rich_text": [{"type": "text", "text": {"content": "⚠️ Ureaplasma urealyticum — ОБНАРУЖЕНО"}}]}}
]

Пример для бак посева с антибиотикочувствительностью:

children: [
  {"type": "paragraph", "paragraph": {"rich_text": [{"type": "text", "text": {"content": "🧫 Посев секрета простаты"}}]}},
  {"type": "bulleted_list_item", "bulleted_list_item": {"rich_text": [{"type": "text", "text": {"content": "Выделен: Enterococcus faecalis 10^5 КОЕ/мл"}}]}},
  {"type": "paragraph", "paragraph": {"rich_text": [{"type": "text", "text": {"content": "💊 Антибиотикочувствительность:"}}]}},
  {"type": "bulleted_list_item", "bulleted_list_item": {"rich_text": [{"type": "text", "text": {"content": "Ампициллин — S (чувствителен)"}}]}},
  {"type": "bulleted_list_item", "bulleted_list_item": {"rich_text": [{"type": "text", "text": {"content": "Ципрофлоксацин — R (устойчив)"}}]}}
]

Пример для ОАК:

children: [
  {"type": "paragraph", "paragraph": {"rich_text": [{"type": "text", "text": {"content": "🩸 Общий анализ крови"}}]}},
  {"type": "bulleted_list_item", "bulleted_list_item": {"rich_text": [{"type": "text", "text": {"content": "Гемоглобин: 152 г/л (норма 130-160) ✓"}}]}},
  {"type": "bulleted_list_item", "bulleted_list_item": {"rich_text": [{"type": "text", "text": {"content": "Эритроциты: 5.1 ×10¹²/л (норма 4.0-5.5) ✓"}}]}},
  {"type": "bulleted_list_item", "bulleted_list_item": {"rich_text": [{"type": "text", "text": {"content": "⬇️ Лейкоциты: 3.8 ×10⁹/л (норма 4.0-9.0) — снижены"}}]}},
  {"type": "bulleted_list_item", "bulleted_list_item": {"rich_text": [{"type": "text", "text": {"content": "Тромбоциты: 245 ×10⁹/л (норма 180-320) ✓"}}]}},
  {"type": "bulleted_list_item", "bulleted_list_item": {"rich_text": [{"type": "text", "text": {"content": "СОЭ: 8 мм/ч (норма 2-15) ✓"}}]}}
]

6. Вывести результат

✅ Запись добавлена в карточку [Имя]!

📋 Название: ОАК + СОЭ (19.11.2024)
📅 Дата: 19.11.2024
🏥 Место: HELIX
📊 Типы: ОАК, СОЭ

🔗 Ссылка: [URL из ответа API]

📎 Не забудь прикрепить файлы вручную! (вывести список файлов для данного документа)

Справочники

Если значение не найдено в справочнике, то оно может быть добавлено. Эти списки не фиксированы.

Типы анализов

Кровь: ОАК, БАК, СОЭ, СРБ, РевмаФактор, АСЛ-О, Anti-HCV, ТТГ, Т4св, Эстрадиол, Пролактин, Тестостерон, ДГЭА-С, Гликированный гемоглобин, АЛТ, АСТ, холестерин, глюкоза

Моча: ОАМ, ОФМ

Инструментальные: УЗИ, ЭКГ, Рентген, Флюорография, ТРУЗИ

Специалисты: Кардиолог, Эндокринолог, Офтальмолог, ЛОР, Невролог, Уролог, Стоматолог, Дерматолог, Аллерголог, Хирург, Травматолог

Места

HELIX, SYNLAB, ЛОДЭ, INVITRO, Доктор ТУТ, Любимый доктор, Поликлиника, medicplus, Кравира, 2 ГКДБ, 4 ДГКБ, 5 ГДП, 6 ГКБ


Обработка ошибок

Ошибка Решение
Файл не найден Сообщить пользователю, попросить проверить путь
Не читается PDF Попросить проверить файл или дать данные вручную
Не определены данные Спросить у пользователя недостающее
Ошибка MCP Исправить параметры вызова, НЕ писать скрипты