Жизненный цикл пациента¶
Два независимых конечных автомата: транспортный эпизод (только СМП) и обращение (оба потока). Разделение следует из ADR-5.
Транспортный эпизод¶
Живёт от запроса или направления до доставки либо отмены. Управляется сообщениями от вендора — система не меняет это состояние самостоятельно, кроме таймаутов.
stateDiagram-v2
[*] --> requested: transport_request
requested --> rejected: отказ в госпитализации
requested --> notified: transport_notification
[*] --> notified: transport_notification<br/>(без запроса)
notified --> en_route: первый transport_health_status
en_route --> en_route: transport_health_status
notified --> delivered: transport_complete
en_route --> delivered: transport_complete
notified --> cancelled: transport_cancel
en_route --> cancelled: transport_cancel
delivered --> [*]
cancelled --> [*]
rejected --> [*]
note right of en_route
Детектор тишины:
нет обновлений > N мин →
пометка на пульте
(состояние НЕ меняется)
end note
| Состояние | Смысл | Что видит оператор |
|---|---|---|
requested |
Спросили о возможности принять, решение ещё не привело к направлению | Строка в журнале запросов |
rejected |
Отказано в госпитализации | В журнале, с причиной |
notified |
Пациента везут сюда | Карточка на борде, машина на карте |
en_route |
Идут обновления состояния | Карточка с динамикой показателей |
delivered |
Машина прибыла, эпизод завершён | Карточка перемещается в «прибывшие» |
cancelled |
Не будет доставлен | Карточка снята, причина в журнале |
Тишина не меняет состояние
Отсутствие обновлений — не событие вендора, а его отсутствие. Переводить эпизод в «потерян» автоматически нельзя: машина может ехать в зоне без связи. Система помечает карточку («нет обновлений 12 мин»), но состояние сохраняет — решение принимает оператор, позвонив в бригаду.
Обращение в приёмный покой¶
Центральный автомат. Общий для доставленных СМП и обратившихся самостоятельно.
stateDiagram-v2
[*] --> open: доставка СМП / кнопка на терминале
open --> triaged: сортировка выполнена
triaged --> queued: поставлен в очередь с талоном
queued --> in_registration: вызван на оформление
in_registration --> registered: паспортная часть + ЭЦП
registered --> closed: выбытие из приёмного отделения
queued --> triaged: ПЕРЕСОРТИРОВКА<br/>(ухудшение состояния)
open --> cancelled: ушёл, не дождавшись
queued --> cancelled: ушёл, не дождавшись
triaged --> closed: КРАСНЫЙ — минуя приёмник<br/>сразу в отделение
closed --> [*]
cancelled --> [*]
| Состояние | Таблица/поле | Примечание |
|---|---|---|
open |
appeals.opened_at |
ПДн ещё нет: patient_id IS NULL для самообращений |
triaged |
triage_assessments |
Присвоен цвет и талон |
queued |
triage_queue |
Ждёт вызова на оформление; работает норматив sla_deadline |
in_registration |
appeal_events |
Вызван, идёт заполнение |
registered |
appeals.registered_at |
Обращение создано, ушло в МИС |
closed |
appeals.closed_at |
Выписка из приёмного отделения (FR-T-24) |
cancelled |
closed_reason |
Ушёл самостоятельно, не дождавшись |
Красный может закрыться, не проходя оформление
[ОП] Красный пациент «сразу проходит мимо приёмника в отделение». Оформление при этом не исчезает — оно происходит позже и в отделении, а не задерживает пациента в приёмнике. Автомат это допускает переходом triaged → closed; документы оформляются задним числом с сохранением фактических отсечек времени.
Реализация, требующая обязательного прохождения in_registration перед closed, физически задержит критического пациента ради формы. Это ровно тот случай, когда правильная модель данных спасает жизнь, а неправильная — стоит времени.
Пересортировка¶
Переход queued → triaged — не ошибка, а обязательное поведение: состояние пациента в очереди может ухудшиться.
flowchart LR
A["queued<br/>жёлтый В34"] -->|"повторная оценка<br/>или сигнал монитора"| B["triaged<br/>красный К43"]
B --> C["queued<br/>новый priority_rank"]
C --> D["вызван раньше"]
Каждая пересортировка создаёт новую запись в triage_assessments — история сохраняется целиком (см. ERD). Талон при этом перевыпускается, а старый код помечается недействительным.
Слияние потоков¶
flowchart TB
subgraph SMP["Поток СМП"]
S1["transport_notification"] --> S2["en_route"] --> S3["transport_complete"]
S3 --> S4["deliveries.delivered_at"]
S4 --> S5["accepted_at<br/>подтверждение медработником"]
end
subgraph SELF["Поток самообращения"]
F1["кнопка на терминале"] --> F2["анонимная запись"]
end
S5 --> A["appeals<br/>ОБЩАЯ СУЩНОСТЬ"]
F2 --> A
A --> T["сортировка"]
T --> Q["очередь по цветам"]
Q --> R["оформление"]
R --> C["выбытие"]
style A fill:#e8f0fe,stroke:#4285f4,stroke-width:3px
Различия после слияния:
| Аспект | СМП-пациент | Самообращение |
|---|---|---|
| ПДн на входе | Есть — из данных СМП | Нет — анонимная очередь |
| Возможные цвета | Красный или жёлтый (не зелёный, FR-T-18) | Любой |
| Данные для сортировки | Витальные показатели из ЭКВ | Пол, температура, состояние, вес, дыхание |
| Форма оформления | Предзаполнена (FR-T-19) | Пустая |
| Связь с направлением | notification_id заполнен |
NULL |
Сквозные отсечки времени¶
Моменты, из которых считаются КПЭ паспорта:
flowchart LR
T1["transport_started_at<br/>начало транспортировки"] --> T2["delivered_at<br/>прибытие по данным СМП"]
T2 --> T3["accepted_at<br/>приём медработником"]
T3 --> T4["opened_at<br/>обращение открыто"]
T4 --> T5["assessed_at<br/>сортировка выполнена"]
T5 --> T6["called_at<br/>вызов на оформление"]
T6 --> T7["registered_at<br/>обращение оформлено"]
T7 --> T8["closed_at<br/>выбытие"]
| Интервал | Метрика | Кому важна |
|---|---|---|
delivered_at → accepted_at |
Ожидание машины у приёмника | Управление СМП: простой бригад |
opened_at → assessed_at |
Скорость сортировки | Приёмное отделение |
assessed_at → called_at |
Ожидание в очереди по цветам | КПЭ паспорта: время ожидания |
called_at → registered_at |
Скорость оформления | Эффект от автозаполнения (FR-T-19) |
opened_at → closed_at |
Полное время в приёмнике | Норматив выбытия (FR-T-21) |
Число closed за час |
КПЭ паспорта: пациентов в час | Приёмка результата |
Определение КПЭ должно быть зафиксировано до внедрения
Какой именно из интервалов считается «средним временем ожидания оказания медицинской помощи», паспортом не определено. Разные трактовки дают разные числа при одинаковой работе. См. R-7 и «Соответствие таблиц».