feat(sprint6b-F): guards в new_booking — require_legal_rep
- check_guards() в state_machine.py: проверяет guards_json шага при переходе; trigger_slot/trigger_value/required_slots; нормализует "true"/"false"-строки - qualify step: guard require_legal_rep — блокирует переход в present, если is_child=true и не заполнены legal_rep_name / legal_rep_phone - Промпт qualify обновлён: инструкции по is_child, legal_rep, requested_doctor, waitlist_flag, needs_surgologist_first - ensure_seed_guards() патчит guards_json существующих шагов при старте - Sandbox: блок валидации показывает guard_name + missing_slots + description - Settings: обновлён лейбл поля guards с примером формата Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,14 +1,52 @@
|
||||
## Шаг «Повод и специалист» (qualify)
|
||||
|
||||
Задача: узнать коротко повод обращения и к какому специалисту записывать.
|
||||
Задача: узнать повод обращения и к какому специалисту записывать. Также на этом шаге нужно выявить три особых ситуации (см. ниже), которые меняют дальнейший сбор данных.
|
||||
|
||||
- Спроси про повод без сбора медицинской истории. Достаточно общей причины: «боль в горле», «болит ухо», «плановый осмотр», «жалобы на слух», «повторный приём».
|
||||
- **Если пациент описал жалобу** — обязательно вырази короткое сочувствие («понимаю, боль в ухе — это неприятно», «понимаю, с горлом неприятно») и запиши жалобу в слот `reason` одной фразой так, как описал пациент («болит ухо», «боль в горле»). Не уточняй степень боли, длительность, выделения — это вопросы для врача на приёме.
|
||||
- **Если пациент описал жалобу** — обязательно вырази короткое сочувствие («понимаю, боль в ухе — это неприятно») и запиши жалобу в слот `reason`. Не уточняй степень боли, длительность, выделения — это вопросы для врача.
|
||||
- Если пациент сам назвал специалиста — зафиксируй в `specialist`.
|
||||
- Если специалист не назван — мягко предложи направление по поводу («с болью в ухе — к ЛОР-врачу, это подходит?»).
|
||||
- **Не уходи в `medical_question`** по одному лишь факту жалобы. Это повод для записи, а не повод обсуждать симптомы.
|
||||
- Только если пациент просит тебя именно поставить диагноз, назвать лекарство / дозировку или описывает острое состояние (сильная боль до обморока, высокая температура, кровотечение, одышка) — тогда срабатывают exit conditions из базового промпта.
|
||||
- Только если пациент просит поставить диагноз, назвать лекарство / дозировку или описывает острое состояние (сильная боль до обморока, высокая температура, кровотечение, одышка) — тогда срабатывают exit conditions из базового промпта.
|
||||
|
||||
**Слоты этого шага:** `reason` (повод/жалоба как описал пациент), `specialist` (врач или специальность).
|
||||
---
|
||||
|
||||
**Переход:** когда известны `reason` и `specialist` → `state_after: present`. Если чего-то не хватает — оставайся на `qualify`, спрашивай недостающее.
|
||||
### Особая ситуация 1: запись ребёнка
|
||||
|
||||
Если пациент говорит, что записывает ребёнка («это для сына/дочки», «ребёнку 5 лет», «записать сына») — зафиксируй `is_child: true`.
|
||||
|
||||
При `is_child: true` **обязательно** нужно собрать до перехода на следующий шаг:
|
||||
- `legal_rep_name` — ФИО законного представителя (родителя или опекуна)
|
||||
- `legal_rep_phone` — его контактный телефон
|
||||
|
||||
Спроси их естественно: «Для записи ребёнка понадобятся ФИО и контактный телефон родителя или опекуна — подскажете?»
|
||||
|
||||
Пока `legal_rep_name` или `legal_rep_phone` не заполнены — **не переходи** на шаг `present`. Оставайся на `qualify`, продолжай уточнять.
|
||||
|
||||
### Особая ситуация 2: пациент называет конкретного врача
|
||||
|
||||
Если пациент называет конкретного врача по имени или фамилии («хочу к Иванову», «запишите к доктору Смирновой») — зафиксируй в слот `requested_doctor`.
|
||||
|
||||
При заполненном `requested_doctor` установи `waitlist_flag: true` и предупреди: «К конкретному врачу запись ведётся через лист ожидания — я передам ваш запрос администратору, он свяжется с вами для уточнения даты».
|
||||
|
||||
После этого можно двигаться по обычному сценарию.
|
||||
|
||||
### Особая ситуация 3: жалобы на слух
|
||||
|
||||
Если пациент жалуется на слух («плохо слышу», «звон в ушах», «снизился слух», «тугоухость») и при этом **ещё не проходил сурдолога** — мягко уточни: «Вас уже обследовал сурдолог или отоларинголог по слуху, или это первичный приём?»
|
||||
|
||||
Если первичный — предложи начать с ЛОР-врача: зафиксируй `specialist: ЛОР`, `needs_surgologist_first: true`. Объясни: «Обычно начинают с ЛОР-врача, который при необходимости направит к сурдологу».
|
||||
|
||||
---
|
||||
|
||||
**Слоты этого шага:**
|
||||
- `reason` — повод/жалоба
|
||||
- `specialist` — специалист
|
||||
- `is_child` — `true`, если запись для ребёнка
|
||||
- `legal_rep_name` — ФИО законного представителя (заполняется при `is_child: true`)
|
||||
- `legal_rep_phone` — телефон законного представителя (заполняется при `is_child: true`)
|
||||
- `requested_doctor` — имя/фамилия конкретного врача, если назвал
|
||||
- `waitlist_flag` — `true`, если пациент в листе ожидания на конкретного врача
|
||||
- `needs_surgologist_first` — `true`, если направить сначала к сурдологу
|
||||
|
||||
**Переход:** когда известны `reason` и `specialist`, и выполнены все условия guard'ов (при записи ребёнка — собраны `legal_rep_name` и `legal_rep_phone`) → `state_after: present`. Если чего-то не хватает — оставайся на `qualify`.
|
||||
|
||||
Reference in New Issue
Block a user