add-med-record
Добавляет медицинские записи в Notion. Используй когда пользователь просит добавить запись в карточку Богданы, Андрея или Вани по файлу анализов/обследований.
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.
| name | add-med-record |
|---|---|
| description | Добавляет медицинские записи в Notion. Используй когда пользователь просит добавить запись в карточку Богданы, Андрея или Вани по файлу анализов/обследований. |
Add Medical Record Skill
Добавляет медицинские записи (анализы, обследования, консультации) в карточки пациентов в Notion.
⛔ КРИТИЧЕСКИЕ ПРАВИЛА
ТОЛЬКО MCP инструменты для Notion (кроме workaround):
— НЕ РАБОТАЕТ (MCP bug, см. workaround)mcp__notion__API-post-page- ВМЕСТО:
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:
- ✅ Bash script → создает страницу → возвращает
page_id - ✅
mcp__notion__API-patch-page→ обновляет свойства - ✅
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-файл.
Структура тела документа:
- Заголовки секций — параграфы с эмодзи (📋, 🧪, 🩸, 💉, 🦠 и т.д.)
- Результаты — маркированные списки с показателями
- Формат показателя:
Название: значение единицы (норма 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 | Исправить параметры вызова, НЕ писать скрипты |