Как работает врачебная маршрутизация — рассказываем на примере приложения DOC+
В каждом смартфоне есть датчики GPS, сенсоры и связь с интернетом — они резко снизили технологический порог для решения логистических задач. Сейчас мы сталкиваемся со сложными системами маршрутизации почти каждый день, даже если сами того не замечаем. С их помощью мы объезжаем пробки, заказываем такси, получаем доставку еды. У каждого из этих юзкейсов есть свои особенности — маршруты должны перестраиваться по мере обновления данных, водители — находить пассажиров, еда должна оставаться горячей.
Перед нами в DOC+ также стояла задача маршрутизации — мы должны были гарантировать эффективность работы наших выездных врачей. Вот как мы её решили.
«Если заболеете, в клинику можно не идти — врач DOC+ приедет к вам домой»
На старт: вызываем врача
Мы не просто «сводим» людей с врачами по принципу Uber. Мы — полноценная медицинская компания, с штатом медиков и ограниченными кадровыми ресурсами. Когда к нам поступает вызов, мы, в первую очередь, определяем, как помочь клиенту: в некоторых случаях наши специалисты могут оказать консультацию дистанционно, в других ситуациях (если речь идет о слишком серьезном происшествии) мы объясняем, что наш сервис не является полноценной заменой скорой или неотложной помощи. Если вам кажется, что вашей жизни что-то угрожает, мы подскажем, к кому стоит обратиться.
Во всех остальных случаях заявка считается валидной и подтверждается диспетчером. Пользователи приложения могут вызвать как любого доступного врача необходимой специализации, так и полюбившегося доктора, если он в тот день работает и имеет возможность доехать к пациенту в удобное для него время. При срочном вызове врач приезжает в ближайшие два часа. При обычном вызове доктор приедет либо в ближайшие четыре часа с момента вызова, либо — если пациент выбирает время осмотра заранее — в выбранный клиентом временной интервал (в данном случае интервал может быть сокращен до двух часов — система поможет выбрать конкретный временной промежуток с учетом загрузки врачей).
Дорога к пациенту
Время, как врача, так и пациентов — ценный ресурс, который важно разумно использовать. Поэтому, чтобы минимизировать расходы на проезд и промежутки между приёмами, на каждую смену доктора строится полный маршрут его перемещений и работы. Маршрут начинается и заканчивается у специалиста дома и автоматически меняется по мере поступления заказов. При этом мы стараемся рассчитывать маршрут так, чтобы передвижения были максимально удобными, без резких перемещений между отдаленными точками на карте. Грубо говоря, на другой конец Москвы врача посылают, только если кто-то заказал конкретно его или ее услуги (что объясняет премиальность этой опции), или пришел срочный вызов, который больше никто не может принять.
Врачи перемещаются по городу удобным им способом, который они определяют в начале смены. Обладатели водительских прав могут для этого использовать личный автомобиль, каршеринг или корпоративную машину, остальные — общественный транспорт или такси.
Расчетом времени ожидания врача занимается наша система автодиспетчеризации MIRA. Все заявки в системе отображаются на карте города и отмечены разными маркерами. Статусы могут быть следующими:
- врач назначен;
- принял заявку;
- в пути;
- ведет прием;
- закончил прием.
Эти статусы доктор меняет самостоятельно в своем приложении, а MIRA отслеживает и учитывает их при перестроении маршрутов других специалистов.
В технологическом плане система MIRA (Mildly Intellectual Routing Algorithm) решает «задачу коммивояжера», в которой нужно выбрать оптимальную последовательность посещения городов с последующим возвратом в исходный город, но с некоторыми отличиями.
В частности, у нас не один коммивояжер, а множество врачей (у каждого своя смена, точки старта и финиша), при этом неизвестны все вызовы в начале дня — ситуация меняется динамически (выходят новые врачи, приходят или изменяются заявки).
Также в нашем случае вводятся дополнительные ограничения, например, врач должен доехать на заявку в определенное временное окно, плюс приходится учитывать пожелания пациентов и самих докторов.
Наиболее близкая к нашей задача, встречающаяся в научной литературе, носит название «Проблема динамической маршрутизации парка транспортных средств с учетом временных интервалов» (PDF). Её суть состоит в минимизации общих транспортных издержек при расчете автомобильных маршрутов с постоянно изменяющимися параметрами: временными окнами, протяженностью пути, количеством автомобилей и числом парковочных мест в точках назначения.
Перед нашей системой MIRA также стоит задача минимизации затрат на выполнение всех вызовов в постоянно меняющихся условиях. При её решении система учитывает стоимость всех трансферов врачей (включая доезды домой), зарплаты врачей, стоимость опозданий на вызовы и простоя врача без вызова, время ожидания клиентов. При этом MIRA приходится обрабатывать непредвиденные ситуации (например, у пациента появилось неотложное дело на время вызова) — в этом случае оператор вводит новые данные, и система все сама пересчитывает.
При расчете маршрута врача стартовой и конечной точкой выбирается домашний адрес доктора. Остальные точки — адреса пациентов. В течение дня система регулярно просчитывает и обновляет каждый маршрут. Для оценки времени, за которое врач сможет добраться до пациента, учитываются следующие факторы:
- Некоторым пациентам требуется больше внимания, чем другим. А порой и у самих врачей возникают форс-мажорные ситуации. Это может вызывать задержки, которые учитываются первым делом.
- Добавляется время, которое врач тратит на подготовку к выезду. Так как внешние факторы не влияют на выполнение этой задачи, это время одинаково для всех сотрудников.
- Время ожидания такси или общественного транспорта — такой же выявленный опытным путём усреднённый показатель, растущий по мере отдаления от МКАД.
- C помощью данных OpenStreetMap и OSM Routing Machine рассчитывается время, которое нужный маршрут занял бы без пробок.
- Обученная на исторических данных Machine Learning-модель корректирует это число в зависимости от местоположения врача, прогнозируемой ситуации на дорогах, времени года и времени дня. Модель использует историю поездок наших врачей в такси.
- Наконец, к этому добавляется фиксированное время, которое врач может потратить на поиск квартиры пациента.
Оценка времени «доезда» оптимизируется метаэвристическим алгоритмом раз в минуту с учетом новых данных, новых вызовов и отмен.
Мы пользуемся метаэвристиками, поскольку наша задача NP-полная, и поиск точного решения в разумное время — проблема до сих пор не решенная. Метаэвристические алгоритмы, позволяют делать перебор (но не полный перебор) и находить, возможно, не лучшие, но «хорошие» решения.
В качестве алгоритма мы выбрали TabuSearch из-за его неплохой скорости работы. При поиске оптимального пути TabuSearch учитывает предысторию поиска и не рассматривает те маршруты, которые он уже когда-то просматривал и посчитал неоптимальными.
Чтобы не огорчать клиентов, время прибытия врача мы прогнозируем с запасом. Если по непредвиденной причине мы не укладываемся в эти сроки, то заранее уведомляем об этом клиента (а если вызов числился как срочный, то мы не берем доплату за срочность в ситуации, когда не успеваем приехать в течение двух часов с момента вызова).
Иллюстрация из нашего блога «Только спросить»
Пока едет врач…
Ответственность за общение с клиентом до приезда врача несут диспетчеры. Они — связующие звенья между врачом и пациентом. Половина сотрудников контактного центра имеет медицинское образование, а остальные изучали социальные дисциплины. Их работа регулируется строгими внутренними стандартами, и их не заменят никакие алгоритмы. Вот, чем они занимаются, пока к вам едет врач:
- Работая с врачом-консультантом, диспетчеры выполняют изначальную оценку тяжести состояния клиента. При этом они не просто опрашивают клиента, но и стараются оказать ему психологическую поддержку — если это необходимо.
- Пока врач в пути, они принимают вопросы медицинского характера и направляют их сотрудникам медицинского отделения. Они могут спросить заместителя главного врача или врача, который сейчас свободен от вызова.
- Если клиенту необходимо связаться с врачом, который к нему едет, диспетчеры, мониторя загруженность врача, организовывают обратный звонок.
- Если система сильно загружена, и специалистов не хватает на всех, как, например, во время эпидемий, диспетчеры приглашают не заявленных в графике врачей на внеурочные смены.
Но, пожалуй, наиболее важно, они ответственны за «разруливание» самых проблемных ситуаций, которые могут возникнуть в процессе планирования врачебных расписаний.
Внештатные ситуации
Если все проходит гладко, то врач вовремя приезжает, заполняет медицинскую карту, осматривает пациента и переключается на нового клиента. Но для того, чтобы смело гарантировать людям такой отлаженный сервис, нужно иметь системы, его обеспечивающие.
В ранние дни работы сервиса диспетчеры просто следили за врачами на карте. На ней можно было увидеть, кто где находится и чем занимается — у клиента он, в дороге или просто без дела. Нынешняя нагрузка этого не позволяет, поэтому разрешение большей части проблемных ситуаций автоматизировано.
Благодаря усилиям команды диспетчеров и команды анализа данных более 90% назначений происходит с помощью автоматизированной системы. В оставшихся случаях (клиент срочно попросил изменить время брони, форс-мажоры у врачей, сильные незапланированные пробки) назначения производит сам оператор.
Примером внештатной ситуации может служить следующий сценарий:
У врача смена с 8 до 20. На него запланирован утренний вызов с бронью с 8 до 10. В 8 утра врач не открыл смену. Система это понимает и в 8:05 создает соответствующий тикет. Операторы должны связаться с врачом и принять решение — передвинуть немного смену или снять её с врача. Если до 8:15 ничего не предпринято, а врач так и не вышел на смену, то при построении маршрутов MIRA перестает на него рассчитывать (пока врач не выйдет на смену или оператор не внесет корректировки вручную).
Ситуации, влияющие на сроки выполнения заявки, тоже выявляются автоматически, и превращаются в стандартные тикеты. Эти тикеты операторы разрешают вручную. Например, если врач задерживается на приёме, другие его пациенты узнают об этом ещё до того, как он освободится. Если же врач что-то делает не так — опаздывает на смену, «халявит», или не следит за содержимым аптечки и наличием бланков, диспетчер тут же получает соответствующий проступку бланк рапорта.
В частности, у нас есть приказ, который стандартизирует состав укладки — оборудование в аптечке доктора и количество бланков осмотра — на начало каждой смены, и врач обязан ему следовать. Для пополнения укладки врач должен раз в неделю заезжать в офис. Все это контролируется ERP-системой на базе 1С.
Если по какой-то причине сотрудник выйдет на смену без необходимого оборудования, оператор снимет его с линии и отправит в офис. Хотя у нас пока не было ни одного случая, когда врач сообщил об окончании «расходников» прямо перед дверью клиента.
Такие нюансы, как содержимое аптечки, на первый взгляд не влияют на «построение пути из точки А в точку Б». Однако они напрямую связаны с перемещениями врачей, а значит, с их маршрутизацией. Поэтому для нас маршрутизация — достаточно сложный комплекс логистических задач.
Работа нашего сервиса обеспечивается как технологиями (приложениями, системами искусственного интеллекта и машинного обучения), так и специалистами, которые умеют говорить и слушать: только когда все эти элементы работают в связке, сервис оказывается на высоте.
У нас есть тематический журнал «Только спросить» — там мы обсуждаем самые популярные вопросы про современную медицину: