Всё началось с голосовых роботов. Во время борьбы с Ковидом наш коллцентр, носящий теперь гордое имя Центр телефонного обслуживания граждан 122, все чаще и чаще выстраивал очереди со временем ожидания ответа оператора свыше 30 минут. Нанять больше людей и начать стабильно укладываться в норматив ответа оператора менее 3-х минут не позволяли размеры помещения и фонда оплаты труда.

Стали пробовать решения для автоматизации контакт центров, которые можно было бы интегрировать с медицинской информационной системой (МИС). За 3 месяца пилотирования NLP продукта и его интеграции действующие в бизнес-процессы удалось добиться вменяемых результатов по распознаванию номеров медицинских полисов, адресов проживания и имени пациентов. Даже удалось удержать среднее время обслуживания одного звонка на уровне 100 секунд… Однако процент автоматических обслуженных обращений болтался в диапазоне от 11 до 30 процентов, и пациенты продолжали томится в ожидании ответа оператора.                      

Виной низкой эффективности проекта роботизации коллцентра послужило состояние адресной базы МИС и серьезные различия в бизнес правилах бюджетных медицинских учреждений. Мы с вами часто меняем место жительства и ни перед кем за это не отчитываемся. Строительные компании увлечены реновацией и на месте ветхих бараков, гаражных кооперативов или промышленных пустошей появляются многоэтажки, о заселении которых медицинские организации узнают по телефону, когда нам требуется врач. Про оперативное информационное взаимодействие органов внутренних дел, управлений архитектуры и органов охраны здоровья остается только мечтать.

Пришлось срочно вспомнить, что вверенный мне Медицинский информационного аналитический центр (МИАЦ) – это не только коллцентр, управление статистикой и электронный архив, но и гнездо специалистов по Data Science, пусть и очень юных – начинающих.

Первоначальный план был прост: нанести на электронную карту границы зон обслуживания населения, получить координаты всех домов из базы пациентов и по вхождению точки в полученных полигон определить уполномоченную поддерживать здоровье жителя медицинскую организацию. Скоро стало ясно, что делать придется создавать полноценную мастер-базу для управления территорией обслуживания медицинских организаций с визуализацией геопривязки и инструментами управления данными.

Стек технологий на старте выглядел так: Python, QGIS, PostgreSQL с расширением postgis, геооснова OpenStreetMap.

Итак, информацией, связывающей дома и первичную медицинскую помощь по участковому принципу, владеют поликлиники и хранят в МИС и некой программе Фонда обязательного медицинского страхования (ФОМС), который поделился во мной этой выгрузкой.

Дальше мы взяли маркеры, несколько бумажных карт и нанесли на них границы зон обслуживания медицинских организаций. В муниципальных районах, как правило, гран��цы зоны обслуживания медицинской организации совпадают с границами района. Для крупных городов с множеством медицинских организаций определение границ зон обслуживания превращается в небольшой проект. Полученные границы оцифровываем при помощи инструментов QGIS и сохраняем в БД PostgreSQL.

Данные ФОМС об участках поначалу обнадеживали: есть код КЛАДР до улицы, номера домов (если стоял 0 вместо номера, то к участку относились все дома), есть номер участка и его больничное название. При беглой проверке выяснялось, справочник КЛАДР использован очень старый, названия населенных пунктов содержат ошибки, сокращения или «местные» топонимы, часть населенных пунктов поглощена другими. С улицами еще интереснее, в городе Челябинске 3 улицы 8 марта, 3 улицы Чапаева, 3 улицы Железнодорожная, 7 улиц Первомайская. Кстати, улица 8 марта в Челябинске пишется Восьмого марта, а в остальных населенных пунктах Челябинской области – 8 марта. И вишенкой на торте анализа данных стало наличие на участках снесенных домов (рекорд - более 20 лет назад). Оказалось, паспорт участка в поликлинике основан на данных поквартирного обхода, проведенного более 10 лет назад. Нормативные данные по численности и полово-возрастному составу населения в паспорте участка вообще не учитывают миграцию и смертность.

В МИС ситуация с участками оказалась еще более запутаннее: номера и наименования участков вообще не совпадают с аналогичными данными ФОМС, присутствует большое количество тестовых участков, есть недействующие участки с прикрепленными к ним пациентами. Кроме того, в МИС так же использован неактуальный на сегодня справочник с кодами ФИАС для улиц и домов, часть адресов введено не корректно (отсутствует улица в населенном пункте, нет единого подхода к вводу корпуса дома, в поле адреса есть посторонние пометки или дополнительно внесен адрес фактического места жительства пациента). По результатам анализа было решено создавать мастер справочник на основе данных фонда ОМС и сделать кросс-таблицу для МИС.

Сначала я нормализовал адрес по схеме: муниципальный район, город, населенный пункт, улица, и присвоил каждому участку UUID код. Для машинной обработки адресной строки присвоил так же КЛАДР для каждой улицы, его проще визуально использовать для ручной проверки адреса. Посл�� обработки табличка стала чуть краше:

Актуальный код КДАДР или ФИАС улицы и номер дома позволит нам однозначно идентифицировать дом по последней версии справочника ГАР.  Я развернул в своей БД по 2 таблицы (addrobj, house) последних версий справочников ФИАС и ГАР для поиска действующего кода дома. Конверторы для справочников взяты с GitHub. Можно конечно сразу воспользоваться API платного сервиса для поиска по адресной строке, но я предпочёл помучится использовать все доступные способы для снижения стоимости данных.

Полученные в результате данные собраны в 2-х таблицах: medcare - правила отнесения дома к участку медицинской организации и datahouse - дома в которых зарегистрированы пациенты.

Описание таблиц

Имя таблицы

Содержание

1

medcare

Данные по принадлежности населенного пункта, улицы и дома (группы домов) к медицинской организации, ТВСП, участку.

2

datahouse

Семантические данные накапливаемые по дому из разных источников (ФОМС, ДаДата, МИС Барс)

Структура данных medcare

Поле

Описание

Примечание

1

moname

Сокращенное наименование медицинской организации

Взято по данным ФОМС. Рекомендуется привести в соотвествие с ФРМО https://nsi.rosminzdrav.ru/#!/refbook/1.2.643.5.1.13.13.11.1461/version/6.925

2

area

Наименование города муниципального района

Соответствует ГАР

3

city

Наименование города

Соответствует ГАР

4

settlement

Наименование поселения

Может быть в составе города, соответствует ГАР

5

street

Наименование улицы

Соответствует ГАР

6

house

Диапазон домов

Данные представлены в формате jsonb для поиска по списку в запросе SQL

7

typezone

Тип участков

Всего 5 типов: терапевтический, педиатрический, врач общей практики, семейный врач, врач общей практики

8

numberzone

Номер участка

По данным ФОМС

9

adult

Возрастная категория пациентов

По данным ФОМС, 3 типа: Взр, Дет, Взр и дет

10

namezone

Название участка

По данным ФОМС, не совпадает с названием участка в МИС БАРС

11

snils

СНИЛС участкового врача

По данным ФОМС

12

divizion

Код ТВСП обслуживающего участок

OID ТВСП ФРМО https://nsi.rosminzdrav.ru/#!/refbook/1.2.643.5.1.13.13.11.1461/version/6.925

13

active

Поле статуса

По данным ФОМС, в скриптах не используется

14

kladr

Код КЛАДР

Код улицы или территории для записи в зависимости о правила отнесения домов к участку: все дома населенного пункта или все дома/диапазон домов на улице

15

careuuid

Код участка в формате UUID

Индивидуальный код участка, использовался для отнесения домов к участку

Структура данных datahouse

Поле

Описание

Примечание

1

fulladdress

Полная адресная строка

Сформирована по ключам ответа адресного сервиса: область, муниципальный район, город, населенный пункт, улица, дом, корпус.

2

dadata

Ответ адресного сервиса

Сохранен ответ сервиса в формате jsonb, структура ответа приведена к стандарту ответа для кода ФИАС.

3

data_addons

Дополнительные данные по адресу

Столбец для накапливания семантической информации об адресе на учетную дату. Формат jsonb

В таблицу datahouse, поле data_addons возможно сохранить данные о численности зарегистрированного в каждом доме населения по возрастным группам по данным МИС (например, на квартальной основе). Удобно хранить данные в одном месте и формировать статистический отчет по требованию в нужной разбивке.

Дальше разберемся с границами территорий обслуживания населения медицинскими организациями и границами участков.

Всего по базе МИС для Челябинской области определилось 410 тысяч адресов пациентов, из них для 384 тысяч найден код ФИАС дома. Для 140 тысяч определены координаты с точностью до дома и для 130 тысяч определены координаты c точностью до улицы. Попробуем автоматически построить цифровую карту с полигонами участка на основе домов с точными координатами. Полигоны формируются по крайним домам входящим в участок.

Полученный результат сохраняем в сводную таблицу medcare_postgis. От базовой таблицы medcare сюда вошли поля careuuid, moname, typezone, numberzone, adult, typezone. Методами geopandas рассчитываются поля polygone, center_point - координаты участка и его центральной точки. Можно эти данные дополнительно перевести в бинарный формат тип данных geometry в системе координат WGS84 для просмотра средствами pgAdmin4. Для QGIS нам достаточно текстовых данных координат, сохраненных как Polygone или Point.

Просмотр полигонов участков  в pgAdmin4
Просмотр полигонов участков в pgAdmin4

Теперь можно визуально наблюдать границы участка, пересечения с соседними и ошибки определения прикрепления дома к участку. Файл проекта для QGIS с деревом медицинских организаций, подразделений и участков можно формировать средствами Python.

Разберемся с ошибками автоматического формирования границ участка. Для удобства редактирования ошибок прикрепления домов к участку я создал еще одну сводную таблицу datahouse_postgis. От базовой таблицы datahouse сюда вошли поля careuuid, fulladdress, housekladrid, house, block, qc_geo. Координаты дома сохранены в столбце geo_point при помощи функции postgis - ST_Point(geo_lon, geo_lat). Управления таблицами medcare_postgis, datahouse_postgis можно осуществлять через простейшие формы с прямым доступом в базу данных. Например, средствами Libra Office.

Первая группа ошибок: границы участка 59 в ГКБ №1 Челябинска пересекают несколько участков, лежат вне зоны обслуживания медицинской организации.

Одноименные топонимы улиц на участке
Одноименные топонимы улиц на участке

Проверим содержимое таблицы medcare. Для удобства я выгрузил ее в CSV формат.

На этом участке не были удалены пересекающие названия улиц при присваивании корректных кодов КЛАДР.

Вторая группа ошибок связана с точностью определения координат домов. В данных полученных от геосервиса для улиц с одноименными названиями координаты перепутаны:

  • Челябинск Загородная 12 и Загородная (Шагол) 12 для участка 41;

  • Челябинск Центральная 32 и Центральная (Шершни) 32 для участка 46.

Ошибки координат дома полученных от геосервиса
Ошибки координат дома полученных от геосервиса

Третья группа ошибок связана уже с первоначальным подходом к формированию участка. Скорее всего участ��и подбирались под нормативное значение численности, без учета географической расположенности. Как закономерный итог подхода – участковый врач ежедневно делает пешие переходы от пациента к пациенту до 40 минут.

Недостатки в планировании участка
Недостатки в планировании участка

        Инструментами QGIS поверх автоматически созданных слоев можно нанести  новую границу участка по улицам и переулкам, включая туда скверы и коммерческую недвижимость предвосхищая изменения застройки.

Сформированные границы участков медицинской организации
Сформированные границы участков медицинской организации

Весь проект сохраняем в базу данных PostgreSQL средствами QGIS. Принадлежность дома к участку легко установить по координатам дома средствами SQL запроса.

Координаты центра участка можно использовать в BI системе, для привязки семантической информации на местности.

Вывод данных об участке на карте
Вывод данных об участке на карте

        

Дополнительные открывшиеся возможности:

  • возможно разместить все действующие объекты здравоохранения с привязкой на местности, сохранить в БД и использовать их в любой системе BI напрямую;

  • автоматически генерировать карты для презентаций с помощью SQL запроса;

  • строить карты маршрутов используя API Open Street Map или Яндекса;

  • создать виджет для динамического поиска видов медицинской помощи, справочной информации по координатам дома

  • создать универсальный интерактивный инструмент групповой работы для управления медицинской маршрутизацией на схеме медицинская организация  - территориальный орган по охране здоровья – национальные медицинские исследовательские центры с использованием справочников (ГАР, ФРМО, НСИ и т.д.).