Claude-skill-registry add-med-record
Добавляет медицинские записи в Notion. Используй когда пользователь просит добавить запись в карточку Богданы, Андрея или Вани по файлу анализов/обследований.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/add-med-record" ~/.claude/skills/majiayu000-claude-skill-registry-add-med-record && rm -rf "$T"
skills/data/add-med-record/SKILL.md- makes HTTP requests (curl)
Add Medical Record Skill
Добавляет медицинские записи (анализы, обследования, консультации) в карточки пациентов в Notion.
⛔ КРИТИЧЕСКИЕ ПРАВИЛА
ТОЛЬКО MCP инструменты для Notion (кроме workaround):
— НЕ РАБОТАЕТ (MCP bug, см. workaround)mcp__notion__API-post-page- ВМЕСТО:
— создание страницы через curlscripts/create-notion-page.sh
— обновление свойств ✅mcp__notion__API-patch-page
— добавление контента ✅mcp__notion__API-patch-block-children
ЗАПРЕЩЕНО:
- Писать скрипты для Notion кроме утвержденного workaround
- Делать curl запросы кроме workaround скрипта
- Искать другие обходные пути если скрипт не работает
При ошибке MCP:
Исправить параметры вызова, а НЕ искать обходные пути. Частые ошибки:
- Неверный формат
— см. примеры нижеproperties
вместоdatabase_idparent.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 - Каждый пациент содержит:
иnamedatabase_id
Если файл не найден — выдать ошибку:
⚠️ Файл settings.yaml не найден! Скопируй settings.yaml.example в settings.yaml и заполни данные.
Схема базы (одинаковая для всех):
(title) — название записиName
(date) — дата анализаDate
(multi_select) — тип(ы) анализаType
(multi_select) — место проведенияPlace
(multi_select) — фамилия врач, если указанDoctor
(rich_text) — заметкиNote
Workflow
1. Загрузить конфигурацию пациентов
- Прочитать файл
через Read toolsettings.yaml - Извлечь раздел
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
Сохранить
для Шагов 5.2 и 5.3!$PAGE_ID
Шаг 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 | Исправить параметры вызова, НЕ писать скрипты |