--- name: add-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** ```bash # Извлечь 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: "" 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: "" 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) ✓"}}] } } ] ``` **Пример для ПЦР/инфекций:** ```json 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 — ОБНАРУЖЕНО"}}]}} ] ``` **Пример для бак посева с антибиотикочувствительностью:** ```json 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 (устойчив)"}}]}} ] ``` **Пример для ОАК:** ```json 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 | **Исправить параметры вызова**, НЕ писать скрипты |