Система мониторинга очистки эндоскопического оборудования
Краткое описание
Разработал систему для поэтапного учёта обработки и дезинфекции медицинского инструмента в эндоскопии. Проект состоял из двух связанных частей: аппаратного контура на датчиках и RFID-метках, а также внутреннего личного кабинета на Yii2, который принимал события от оборудования, фиксировал прохождение этапов обработки и показывал журнал в виде рабочего дашборда для сотрудников.
Это была прикладная система, которая связывала реальный процесс обработки инструмента с цифровым журналом и контролем последовательности этапов.
Для чего был нужен проект
Проект решал задачу отслеживания очистки и дезинфекции эндоскопического оборудования по этапам. Вместо ручного бумажного или частично ручного учёта система позволяла:
- привязывать RFID-метки к сотрудникам, эндоскопам, статусам, моечным машинам и средствам очистки;
- принимать события от датчиков и модулей;
- автоматически продвигать запись по этапам обработки;
- фиксировать время начала и окончания операций;
- видеть текущие и завершённые циклы обработки в журнале;
- контролировать, что следующий этап не может быть выполнен с неверным типом метки.
Что было реализовано
- Внутренний веб-кабинет на Yii2 для сотрудников и администраторов.
- Отдельный модуль
endoscopyсо справочниками и журналами предметной области. - Отдельный
api-модуль и публичный endpoint для приёма событий от внешних устройств. - Разделение ролей в системе, включая администратора, сотрудника и отдельную роль авторизованного устройства.
- Учёт и настройка RFID-меток с привязкой к конкретной сущности.
- Справочники по эндоскопам, моечным машинам, средствам очистки, статусам инструмента и сотрудникам.
- Отдельные профили сотрудников, учёт пользовательских аккаунтов и контактных данных внутри системы.
- Справочник средств очистки с параметрами растворов, включая концентрацию и, при необходимости, температуру.
- Справочник моечных машин с режимами работы.
- Справочник статусов инструмента для фиксации результатов этапов, включая сценарии вида
Да/НетиПоложительный/Отрицательный. - Основной журнал обработки
CleaningLog, где фиксировались фактические данные по циклу очистки и дезинфекции. - Отдельный журнал уровней
CleaningLevelLog, который хранил состояние прохождения этапов как последовательность статусов и историю выполнения. - Дашборды и журналы с фильтрацией, поиском, датами, статусами и отображением этапов обработки в таблицах.
- Интерфейсы на базе моих Yii2-плагинов, включая
GridView,DynaGrid, AdminLTE и связанные UI-компоненты.
Как работала логика обработки
Систему построил как конечный автомат по этапам обработки. Для каждой записи отслеживал, на каком шаге находится инструмент и какой тип RFID-события может быть принят следующим.
В системе были зафиксированы этапы:
- начало цикла сотрудником;
- привязка обрабатываемого инструмента;
- тест на герметичность;
- основная очистка с выбором средства и фиксацией начала/окончания;
- тест качества очистки;
- дезинфекция в ручном или автоматическом режиме;
- отдельный резервный этап очистки инструмента в структуре журнала;
- фиксация завершения цикла.
Для каждого шага система:
- определяла следующий допустимый этап;
- проверяла тип пришедшей RFID-метки;
- запрещала пропускать шаги и принимать события не того типа;
- записывала соответствующие данные в журнал;
- фиксировала время начала и завершения операций;
- переводила цикл в статус
ActualилиCompleted.
За счёт этого проект контролировал не только факт события, но и корректность последовательности обработки медицинского инструмента.
Интеграция с устройствами и датчиками
Аппаратная часть проекта использовала Arduino-датчики и модули, которые передавали данные в систему. Моя работа была не только на веб-уровне: датчики и контроллеры я также программировал на C, после чего они отправляли запросы в личный кабинет.
Со стороны backend/web было реализовано:
- приём внешних запросов от устройств;
- обработка идентификаторов RFID-меток сотрудника и инструмента/объекта;
- поиск соответствующих записей в системе;
- валидация сценария перед записью события;
- транзакционное обновление основной записи и журнала уровней;
- возврат ошибок, если устройство передало недопустимый следующий шаг.
Таким образом, веб-проект выступал серверной частью аппаратного контура, а не только внутренним интерфейсом.
Что отображал личный кабинет
- Журнал циклов очистки и дезинфекции с датами, сотрудниками, инструментами и типом обработки.
- Время начала и окончания отдельных операций.
- Результаты тестов, включая герметичность и контроль качества очистки.
- Привязанные средства очистки и моечные машины.
- Отдельный уровень представления по стадиям выполнения, где было видно, на каком шаге находится цикл.
- Административные справочники по RFID-меткам и связанным сущностям.
Это позволяло использовать систему как внутренний дашборд и журнал аудита по процессу обработки инструмента.
Технически со стороны backend и web
- Спроектировал приложение на Yii2 с отдельными модулями
security,staff,apiиendoscopy. - Реализовал RBAC и раздельные роли для сотрудников, администраторов и устройств.
- Настроил публичный сценарий приёма событий без обычной пользовательской сессии для аппаратной части.
- Построил бизнес-логику на ActiveRecord-моделях
CleaningLog,CleaningLevelLog,RfidTags,Tools,ToolsCleaningMachines,ToolsCleaningAgents,ToolsStatuses. - Разделил фактический журнал операций и журнал прохождения уровней, чтобы отдельно хранить реальные данные цикла и состояние маршрута.
- Спроектировал схему так, чтобы устройство было полноценным субъектом доступа с отдельной ролью в системе, а не просто внешним источником событий.
- Использовал транзакции при обновлении циклов обработки, чтобы запись этапов не расходилась между связанными таблицами.
- Реализовал фильтрацию, поиск и пользовательские таблицы журналов через собственные Yii2-компоненты для административных интерфейсов.
- Построил справочники для управления метками и их привязками к сотрудникам, инструментам, статусам, машинам и реагентам.
- Добавил в модель данных пользовательские настройки и контактные данные, что позволяло развивать систему как полноценный внутренний кабинет, а не только как журнал событий.
Технологии
- Yii2
- PHP
- MySQL
- JavaScript
- jQuery
- AdminLTE
- Собственные Yii2-плагины для grid/dynagrid/admin UI
- RFID-метки
- Arduino sensors/modules
- C для программирования датчиков и контроллеров
Моя роль
Моя роль была сквозной: от идеи и формализации логики этапов обработки до реализации личного кабинета, backend-логики, журналов, дашборда и интеграции с аппаратной частью. Отдельно я программировал датчики и контроллеры на C, чтобы они могли передавать события в систему.
Практическая ценность проекта
Этот кейс показывает сразу несколько уровней инженерной работы:
- разработку прикладной системы для медицинского процесса;
- перевод реального офлайн-процесса обработки инструмента в цифровую модель;
- интеграцию веб-приложения с внешними датчиками и RFID-событиями;
- проектирование конечного автомата и контроля последовательности этапов;
- построение журналов и внутреннего дашборда для аудита процесса;
- сочетание backend-разработки, интерфейсов и аппаратной интеграции в одном проекте.