Задача
Больница принимала около 1 200 пациентов в день, и почти все записи шли через телефон. Телефонная линия не справлялась в утренние часы, а старый сайт показывал расписание в PDF, который обновляли раз в неделю.
Нужно было сделать современный сайт с онлайн-записью, не заменяя медицинскую информационную систему: на ней работает вся больница, и трогать её было нельзя.
Как устроено
Страницы сайта собраны на Astro, а форма записи — интерактивный блок на React. Между сайтом и МИС стоит наш сервис-шлюз на Node.js: он кэширует справочники врачей и расписание, временно закрепляет выбранное время и складывает все операции в журнал, чтобы регистратура могла разобрать любой спорный случай.
Персональные данные пациентов не хранятся на стороне сайта дольше, чем нужно для передачи записи в МИС, — это сильно упростило согласование с отделом информационной безопасности.
Сложности и как мы их решили
01МИС отдаёт расписание с задержкой до 3 минут
Проблема
Медицинская информационная система больницы обновляет расписание пачками. Два пациента могли увидеть одно и то же «свободное» время и одновременно на него записаться — второй узнавал об отказе только по звонку из регистратуры.
Решение
Сделали промежуточный слой с кэшем в Redis и временным закреплением выбранного времени на 5 минут, пока пациент заполняет форму. Подтверждение уходит в МИС одной операцией, а при конфликте пациент сразу видит ближайшие альтернативы у того же врача.
02Протокол SOAP 2012 года и никакой тестовой среды
Проблема
У МИС не было тестовой копии — любой тестовый запрос попадал в боевое расписание. Документация описывала половину методов, а коды ошибок приходили строкой на русском внутри XML.
Решение
Записали реальные ответы и подняли сервер-имитацию МИС, на котором прогоняли все сценарии. Поверх SOAP написали типизированный шлюз с понятными ошибками — сайт о старом протоколе вообще не знает.
03Половина пациентов — старше 60 лет
Проблема
Аналитика старого сайта показывала, что люди бросают запись на шаге выбора специальности — они не знают, чем терапевт отличается от врача общей практики.
Решение
Добавили запись «по симптомам» и крупный режим интерфейса. Проверили удобство прямо в холле поликлиники с пятнадцатью пациентами и упростили форму с семи шагов до трёх.
Результат
Через три месяца после запуска 62% записей стали приходить онлайн. Регистратура освободила две ставки операторов под очную работу с пациентами, а время ожидания на линии упало с 9 до 2 минут.
Технологии
- Astro
- React
- Node.js
- PostgreSQL
- Redis
- REST/SOAP-шлюз МИС
- Docker