Files
AR 15 M4 dc9538027c chore(data): чистка датасетов под чанкер v2 + кейсы регрессии 4 веток
- data/datasets/*.md: вынесены служебные блоки (мета, источники, что доделать)
  в отдельные docs/wiki_meta_<branch>.md по конвенции ТЗ 8.5 — парсер
  индексирует только то, что физически лежит в data/datasets/
- data/datasets/doctors.md: новый датасет (список врачей по специальностям)
- eval/branch_cases_<intent_code>.jsonl: новые наборы для price_question,
  medical_question, escalate_human, reschedule (база для Спринта 8.6)
- eval/branch_cases_general_info.jsonl: точечная правка кейсов

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 10:04:07 +05:00

133 lines
17 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Перенос и отмена записи
## Когда срабатывает эта ветка
Триггеры, которые бот узнаёт как реплики ветки `reschedule`:
- «я сегодня не смогу подойти», «не получится прийти на приём», «не смогу быть в назначенное время»;
- «перенесите запись на другой день», «можно перенести на вечер?»;
- «отмените мой визит на завтра», «снимите запись», «удалите запись»;
- «мне отменили приём, что делать?» — это особый подвид (отмена со стороны клиники, см. ниже).
Ключевой признак: пациент говорит, что **не придёт** или хочет **поменять время** — значит запись уже была сделана ранее. Если пациент хочет записаться впервые или на новый приём, это `new_booking`.
## Что бот должен собрать у пациента
Минимальный набор данных, чтобы администратор мог найти и обработать запись:
- ФИО пациента, на кого оформлена запись (особенно если пишет родственник).
- Дата и время текущей записи.
- Врач или специальность (если пациент помнит).
- Что хочет — отменить или перенести.
- Если хочет перенести — желаемый интервал нового времени: «утро / день / вечер», «будни / выходные», конкретные дни. **Конкретные слоты бот не подтверждает** — реальный календарь к ветке не подключён.
- Контактный телефон для подтверждения, если он отличается от номера, с которого пишет пациент.
Если пациент изначально написал кратко («не приду сегодня»), нужно мягко уточнить хотя бы ФИО и время — без этого администратор не найдёт запись в Полимеде.
## Базовое поведение бота
- **Извинение за неудобство** одной короткой фразой («Понимаю, планы меняются»).
- **Уточнение, какую именно запись** надо изменить.
- **Уточнение — отмена или перенос.**
- **Если перенос** — желаемый интервал нового времени.
- **Финал:** «Сейчас уточню расписание у администратора и вернусь с вариантами» (или «Передам ваш запрос администратору, он свяжется с вами для уточнения нового времени»).
Бот не называет конкретные новые даты и часы как доступные. Реальный календарь подключается отдельно, а до этого формулировка только обещающая.
## Готовые формулировки для отмены
Из шаблонов вики, минимально подогнанные под чат-формат:
- «Информацию получили, спасибо, что сообщили. Запись отменена. Если хотите подобрать другое удобное время — напишите, я передам администратору».
- «Запись на приём отменили. Чтобы перенести на другую дату и время — напишите желаемый интервал, и я передам администратору».
- «Запись на приём удалена. Хотели бы перенести её на другой день?» (после ответа «нет» на напоминание о приёме).
Главное в формулировке — благодарность за то, что предупредили (а не просто «не пришёл»), и предложение перенести.
## Готовые формулировки для переноса
- «Хорошо, перенесу — подскажите желаемый день и время, чтобы я передал администратору. Конкретное время он подтвердит сам».
- «Понял, передам администратору, что нужен перенос с {старая_дата} на {желаемый_интервал}. Он свяжется с вами в течение дня и подтвердит новое время».
- Если пациент не определился с новым временем: «Без проблем, давайте сделаем так — отменим текущий приём, а когда захотите подобрать новое время, напишите сюда. Я передам администратору».
Стандартная фраза-резерв (пока нет интеграции с календарём): «Сейчас уточню у администратора и вернусь с вариантами».
## Особые ситуации
### Отмена со стороны клиники (пациенту отменили приём)
Триггеры: «мне отменили приём», «врач отменил смену», «клиника прислала, что приёма не будет».
Ситуация: смена врача отменилась по объективной причине. Из вики, шаблон-уведомление: «По объективным причинам рабочая смена у доктора отменена. Приносим извинения и предлагаем перенести приём на другое удобное время. Свяжитесь с нами по телефону (342) 207-03-03 для уточнения новой даты».
Поведение бота: подтвердить факт, извиниться от лица клиники, предложить перенести. Если пациент раздражён — `[INTENT_CHANGE: escalate_human]` с `reason=angry` или `explicit_request`.
### Пациент заболел перед операцией
Триггеры: «мне завтра операция, но я заболел», «температура перед операцией».
Поведение бота: подтвердить, что в этой ситуации операция переносится. Цитата из вики: «Доктор решение о проведении операции принимает после осмотра ребёнка перед операцией. Необходимо подойти, сообщить доктору жалобы. Он посмотрит, если пациент болен, перенесёт операцию, назначит лечение».
То есть пациент всё равно приезжает в день операции — врач осматривает и решает. Если пациент хочет отменить заранее (за день, за два) — это уже `escalate_human` с `reason=surgery`, потому что отмена операции — не рутинный перенос, тут участвует и хирург, и анестезиолог, и предоперационная подготовка.
### Опоздание на текущий приём
Триггеры: «я опаздываю на 10 минут», «застрял в пробке, успею к 16:00 вместо 15:30».
В вики прямого правила «допустимое опоздание» нет. Поведение бота: поблагодарить за предупреждение, передать в чат администраторам, чтобы держали место. Если опоздание серьёзное (>20–30 минут) и непонятно, успевает ли пациент — мягко предупредить, что администратор может предложить перенос на другое время. Если пациент уверенно говорит «доеду» — фиксируем как «опоздание, держим запись».
Технически это пограничный случай между `reschedule` и обычным служебным сообщением. Если бот видит фразу «опоздаю», по умолчанию остаётся в `reschedule` — администратор всё равно решает, держать запись или переносить.
### Запрос на перенос к конкретному врачу с ограниченным расписанием
Триггеры: упоминание Ворончихиной Н. В., сурдологов, врача в отпуске.
Из вики: запись к Ворончихиной Н. В. ведётся **только через лист ожидания**; сурдологов записывают надолго вперёд, есть лист ожидания «вдруг освободится». Если пациент хочет перенести приём у такого врача на более раннюю дату — честно сказать: «Запись к {врач} ведётся через лист ожидания. Я передам администратору, он внесёт вас в лист и свяжется, когда появится подходящее окно».
Особый случай — Лебединская Е. А.: запись и переносы ведёт только её личный ассистент Медведева Н. В. Бот в этом случае собирает данные и передаёт.
### Перенос приёма по ДМС
Триггеры: «у меня запись по ДМС, нужно перенести».
Логика: сама запись в системе переносится администратором как обычно. Особенность — гарантийное письмо страховой может иметь срок действия. Из вики: в гарантийном письме указан срок (для Адониса — 30 дней с даты исходящего), и если новая дата не укладывается, пациенту нужно запросить новое гарантийное письмо в страховой. Бот в чате об этом мягко предупреждает: «При переносе по ДМС обратите внимание — у гарантийного письма страховой есть срок действия. Если новая дата за пределами срока, нужно будет запросить у страховой новое письмо. Администратор уточнит детали при подтверждении переноса».
### Пациент хочет перенести, но фактически рассказывает про другую жалобу или запись
Триггеры: «не пойду к ЛОРу — лучше запишите к сурдологу», «отмените приём, и хочу записаться к аллергологу».
Это уже `new_booking``[INTENT_CHANGE: new_booking]`. Старую запись можно зафиксировать слотом «отменить» в реплике перед переключением, но всю сборку нового приёма ведёт ветка `new_booking`.
## Когда переключать в другие ветки
- Острая боль, кровотечение, высокая температура → `[INTENT_CHANGE: escalate_human]` с `reason=acute_pain`. Перенос подождёт — пациента сначала надо вывести из острой ситуации.
- Упоминание операции, наркоза, стационара → `[INTENT_CHANGE: escalate_human]` с `reason=surgery`. Касается и записи на операцию, и переноса операции.
- Пациент явно злится из-за отмены/переноса (включая отмену со стороны клиники) → `[INTENT_CHANGE: escalate_human]` с `reason=angry`.
- Пациент спрашивает «вернёте ли деньги», «штраф за неявку» → `[INTENT_CHANGE: price_question]` (там должен быть отдельный блок про возвраты, см. датасет `price_question.md`).
- Пациент решил записаться на новый приём, не связанный со старым → `[INTENT_CHANGE: new_booking]`.
## Чего бот НЕ делает в этой ветке
- Не подтверждает конкретные новые слоты («во вторник в 14:00») как доступные. Расписание уточняет администратор.
- Не отменяет реальную запись в Полимеде. Бот собирает данные и передаёт в чат «Администраторы». Реальное действие — на стороне человека.
- Не озвучивает штрафов, неустойки за неявку. В вики таких правил нет, см. раздел «Что нужно дополнить».
- Не обсуждает медицинскую тему — если пациент по ходу переноса жалуется на симптомы, это не повод уходить в `medical_question`. Жалоба фиксируется только если она объясняет причину переноса (например, «перенесите, у меня температура» — это не диагноз, это причина).
- Не переадресует на конкретный внутренний добавочный — пациенту озвучивается только основной номер клиники: 8 (342) 207-03-03 (КУГН), 8 (342) 200-02-03 (Г. Звезда), 8 (342) 207-03-00 (Пирогов).
## Контекст: как клиника обычно узнаёт об отмене
Это нужно боту скорее как фон, чтобы понимать поведение пациентов:
- За 4 часа до приёма пациент получает автоматическое напоминание в WhatsApp (утренние приёмы — с вечера). В Полимеде у администратора это отображается «зелёным квадратиком».
- Пациент отвечает «да» (придёт) или «нет» (отменяет).
- При «нет» запись в системе удаляется, пациенту предлагают перенести.
- Если пациент пишет «перенести», это уже не автоматическая отмена — оператор перезванивает по телефону.
Поэтому, когда бот отвечает на отмену, имеет смысл предлагать перенос сразу — это типовой сценарий «нет → давайте на другой день».
## Связанные практики (для контекста)
- **Лист ожидания** — отдельная сущность в Полимеде. Пациента вносят, если: запись к врачу полная, врач в отпуске, к врачу записывают только через лист ожидания (Ворончихина Н. В., сурдологи). Бот в ветке `reschedule` упоминает лист ожидания, только когда пациент явно хочет на конкретного врача с ограниченным расписанием. В обычном переносе про лист ожидания не говорим — это создаёт лишнее ощущение «у вас всё плохо со слотами».
- **Заявка операторам** — внутренний механизм у администраторов. Бот в чате воспроизводит этот механизм неявно: собирает в реплику пациента всю информацию, которая нужна по шаблону «ФИО, какой врач, со скольки до скольки, что делать с освободившимся временем». Сам пациент эту структуру не видит — для него это обычный диалог.