Требования к ЛИС
Данный раздел можно использовать как ТЗ к реализации на стороне Лабораторной Информационной Системы.
Вариант 1: HL7
- Создавать и передавать задания на анализ
- При поступлении в лабораторию образца на анализ, лаборантом должна производиться регистрация образца в ЛИСе. Должны заполняться следующие данные:
- Штрихкод образца (любая строка до 20 символов)
- Внешние характеристики образца: цвет, консистенция, наличие видимой крови, наличие видимой слизи (используются для автоматического выставления параметров пробоподготовки)
- Возраст пациента в годах
- Перечень необходимых исследований: нужно ли делать микроскопию (микро-фотографии), нужно ли делать тест-полоски (на каждый тип полосок свой признак)
- После указания всех параметров в ЛИС (не ранее!), ЛИС должен отправлять отдельный DSR^Q03 по каждому образцу (стандарт содержимого сообщений указан в разделе "HL7"), сервер СеленаВижн по приходящим заданиям будет наполнять таблицу ожидаемых образцов в приборе, и отвечать ACK^Q03 (сообщением об успехе записи задания)
- В случае, если прибор на момент отправки заданий выключен, задания на прибор переданы не будут, сервер СеленаВижн не отправит в ответ ACK^Q03, и такие задания потребуется отправить из ЛИС заново, когда прибор будет включен
- В случае отправки заданий, в которых штрихкод образца будет совпадать с одним из уже имеющихся образцов в заданиях, задание принято не будет. Чтобы перезаписать задание, старое задание лаборант должен удалить из анализатора вручную
- При поступлении в лабораторию образца на анализ, лаборантом должна производиться регистрация образца в ЛИСе. Должны заполняться следующие данные:
- Получать и записывать результат
- После выполнения исследования в ПО СеленаВижн и нажатия кнопки "Отправить в ЛИС", сервер СеленаВижн отправляет ORU^R01 в ЛИС (содержимое описано в разделе "HL7"). ЛИС должен принять и смаппить (транслировать в свои) все передаваемые поля с результатами по всем диагностически значимым объектам.
- Правила маппинга полей ЛИС должен согласовать с руководством лаборатории и с апликейшн-специалистом СеленаВижн в письменном виде (формат согласования любой) для избежания создания некорректных результатов исследования в ЛИС. Правила маппинга могут содержать следующие уточнения:
- По некоторым классам ЛИС может забирать текстовый результат, а по другим - числовой
- Некоторые классы с точки зрения ЛИС представляют собой один класс и должны получать сумму элементов двух и более классов в качестве результата
- Требования по подключению: сервер СеленаВижн передает HL7 сообщения на сервер ЛИС через создание TCP-сокета, ЛИС должен поддерживать как минимум один из вариантов создания сокета:
- Вариант "СеленаВижн = клиент": Сервер СеленаВижн подключается на указанный IP и порт в локальной сети и бесконечно держит сокет, в котором принимает задания и передает результаты. В случае разрыва связи, сервер СеленаВижн пытается переподключиться каждые ~5 секунд.
- Вариант "СеленаВижн = сервер": Сервер СеленаВижн предоставляет порт, а сервер ЛИС подключается к нему и устанавливаеет сокет для заданий и результатов
Вариант 2: REST/JSON API
- Создавать и передавать задания на анализ
- При поступлении в лабораторию образца на анализ, лаборантом должна производиться регистрация образца в ЛИСе. Должны заполняться следующие данные:
- Штрихкод образца (любая строка до 20 символов)
- Внешние характеристики образца: цвет, консистенция, наличие видимой крови, наличие видимой слизи (используются для автоматического выставления параметров пробоподготовки)
- Возраст пациента в годах
- Перечень необходимых исследований: нужно ли делать микроскопию (микро-фотографии), нужно ли делать тест-полоски (на каждый тип полосок свой признак)
- После указания всех параметров в ЛИС (не ранее!), ЛИС должен отправлять отдельный POST-запрос /samples по каждому образцу (стандарт содержимого сообщений указан в разделе "REST"), сервер СеленаВижн по приходящим заданиям будет наполнять таблицу ожидаемых образцов в приборе, и отвечать 200 OK (сообщением об успехе записи задания)
- В случае, если прибор на момент отправки заданий выключен, задания на прибор переданы не будут, сервер СеленаВижн не отправит в ответ 200 OK, и такие задания потребуется отправить из ЛИС заново, когда прибор будет включен
- В случае отправки заданий, в которых штрихкод образца будет совпадать с одним из уже имеющихся образцов в заданиях, задание принято не будет. Чтобы перезаписать задание, старое задание лаборант должен удалить из анализатора вручную
- При поступлении в лабораторию образца на анализ, лаборантом должна производиться регистрация образца в ЛИСе. Должны заполняться следующие данные:
- Получать и записывать результат
- После выполнения исследования в ПО СеленаВижн и нажатия кнопки "Отправить в ЛИС", сервер СеленаВижн помечает задание выполненным (содержимое описано в разделе "REST"). Чтобы собрать выполненные задания, ЛИС должен периодически отправлять GET запрос /patient-cases (пример запроса см в разделе "REST API") и при получении непустого результата смаппить (транслировать в свои) все передаваемые поля с результатами по всем диагностически значимым объектам.
- Правила маппинга полей ЛИС должен согласовать с руководством лаборатории и с апликейшн-специалистом СеленаВижн в письменном виде (формат согласования любой) для избежания создания некорректных результатов исследования в ЛИС. Правила маппинга могут содержать следующие уточнения:
- По некоторым классам ЛИС может забирать текстовый результат, а по другим - числовой
- Некоторые классы с точки зрения ЛИС представляют собой один класс и должны получать сумму элементов двух и более классов в качестве результата
- Требования по подключению: сервер СеленаВижн в варианте REST/JSON API всегда выступает сервером, т.е. предоставляет открытый порт для POST и GET запросов со стороны ЛИС, в ЛИС должна быть возможность подключаться на порт и передавать GET и POST
Вариант 3: ЛИС "Эфир" - MongoDB, RabbitMQ
- Возможно получение заданий из MongoDB согласно спецификации ЛИС.ЕМИАС / ЛИС "Эфир"
- Задание считается подтвержденным, если установлен
approvedфлаг, до этого момента образец предположительно находится в пути до лаборатории, но уже зарегистрирован в ЛИС и виден в MongoDB - До момента подтверждения задания лаборантом должны быть заполнены в ЛИС поля внешнего осмотра образца (
hard,color,blood,mucus) и необходимые типы исследований (selena_microscopy,selena_fob,selena_hp) - СеленаВижн раз в несколько минут опрашивает БД MongoDB на предмет подтвержденных, но еще не загруженных в анализатор заданий
- Возможна отправка результатов исследований в очередь сообщений RabbitMQ согласно спецификации ЛИС.ЕМИАС / ЛИС "Эфир"
- После выполнения исследования в ПО СеленаВижн и нажатия кнопки "Отправить в ЛИС", сервер СеленаВижн помечает задание выполненным и отправляет в брокер сообщений
- Правила маппинга полей ЛИС должен согласовать с руководством лаборатории и с апликейшн-специалистом СеленаВижн в письменном виде (формат согласования любой) для избежания создания некорректных результатов исследования в ЛИС. Правила маппинга могут содержать следующие уточнения:
- По некоторым классам ЛИС может забирать текстовый результат, а по другим - числовой
- Некоторые классы с точки зрения ЛИС представляют собой один класс и должны получать сумму элементов двух и более классов в качестве результата
- Требования по подключению: сервер СеленаВижн в варианте ЛИС "Эфир" выступает клиентом, т.е. подключается к имеющимся эндпонтам MongoDB и RabbitMQ для работы со стеками задач и результатов
Пример данных образца в MongoDB, согласно спецификации ЛИС.ЕМИАС:
{
"_id": {
"$numberLong": "312157009056" // штрихкод образца
},
"biomaterialId": null, // код биоматериала, возможно заполнять значениями для целей фильтрации среди объектов MongoDB
"created": {
"$date": "2025-07-03T15:04:51.328Z"
},
"approved": "2025-07-04T15:04:51.328Z", // дата подтверждения задания. если заполнено - задание прогружается на анализатор
"arrived": null,
"vn": 6,
"tResults": null,
"tests": [
{
"code": "selena_microscopy", // код необходимости выполнения микроскопии, может быть изменен на удобный для учреждения
"approved": true // если false - то микроскопия не нужна
},
{
"code": "selena_fob", // код необходимости выполнения тест-полоски FOB, может быть изменен на удобный для учреждения
"approved": true // если false - то тест-полоска не нужна
},
{
"code": "selena_hp", // код необходимости выполнения тест-полоски HP, может быть изменен на удобный для учреждения
"approved": true // если false - то тест-полоска не нужна
}
],
"order": {
"pNss": "020213ЖГЩФР",
"pLname": "Тестовая",
"pFname": "Ольга",
"pMname": "Андреевна",
"bthDt": {
"$date": "2013-02-01T20:00:00.000Z"
},
"hard": "плотный", // макроописание образца - консистенция, зависит от используемого справочника в учреждении
"color": "коричневый", // макроописание образца - цвет, зависит от используемого справочника в учреждении
"blood": "++", // макроописание образца - начиличе крови при внешнем осмотре, зависит от используемого справочника в учреждении
"mucus": "не обнаружено", // макроописание образца - начиличе слизи при внешнем осмотре, зависит от используемого справочника в учреждении
"gender": 2,
"cito": false,
"clCode": "TESTARMPS2",
"captDt": [
{
"$numberLong": "637976988000000000"
},
180
],
"infoComment": "Комментарий из АрмРег, информативный",
"localComment": "Комментарий из АрмРег, локальный"
}
}
Пример результата исследований, отправляемый в RabbitMQ (по умолчанию точка обмена LisResults, очередь результатов results_queue, может быть изменено при необходимости), согласно спецификации ЛИС.ЕМИАС:
{
"Results": [
{
"TestCode": "selena_microscopy",
"Value": {
"macro_blood": "отсутствует", // Макро - кровь
"macro_hard": "плотная", // Макро - консистенция
"macro_mucus": "отсутствует", // Макро - слизь
"macro_color": "темно-коричневый", // Макро - цвет
"diag_mvb": "0.8", // Мышечные волокна без исчерченности
"diag_mvi": "0.24", // Мышечные волокна с исчерченностью
"diag_leico": null, // Лейкоциты
"diag_eritro": null, // Эритроциты
"diag_zhir_k": null, // Капли жира
"diag_zhir_g": "0.04", // Глыбки жира
"diag_zhir_i": "0", // Иглы жира
"diag_epitel": null, // Клетки цилиндрического эпителия
"diag_tripel": null, // Трипельфосфаты
"diag_oksalat": null, // Оксалаты кальция
"diag_sharko": null, // Кристаллы Шарко-Лейдена
"diag_drozzhi_s": "0.04", // Дрожжевые клетки - споры
"diag_drozzhi_m": "0.04",
... (см. справочник объектов)
},
"RackNum": null,
"PosNum": null,
"Date": null,
"Comment": null,
"LocalComment": null,
"EmergencyFlags": null
},
{
"TestCode": "selena_fob",
"Value": {
"macro_test_fob": null, // Результат тест-полоски FOB
},
"RackNum": null,
"PosNum": null,
"Date": null,
"Comment": null,
"LocalComment": null,
"EmergencyFlags": null
}
],
"SetSampleArrived": false,
"SampleArrived": null,
"SampleNumber": 312157009056,
"SourceId": 440
}
Группы полей:
- admin_XXX - административные поля
- macro_XXX - макроскопические свойства
- diag_XXX - микроскопия, общая копрограмма
- parasite_XXX - паразиты
Таблица со справочником объектов
Этапы Интеграции
Инсталляция
- Развернута VM (виртуальная машина) с Linux, 32GB RAM, 4+ core CPU, 1TB SSD/HDD
- На VM установлены сервисы - веб-приложение, бекенд, интеграционный бекенд
- У VM есть доступ к support.avroralab.ru (доступ в остальной интернет необязателен)
- Порт веб-сервера VM (обычно 8080) доступен из ПК врачей, которые будут работать с СеленаВижн
- Анализатор и VM находятся в одной подсети
- Порт для HL7 сообщений VM доступен из ЛИС, либо порт ЛИС доступен из VM, либо порт REST API VM доступен из ЛИС
Интеграция с ЛИС
- Тестовое сообщение с заданием приходит в сервис интеграции, задание содержит правильные поля:
- заказ микроскопии и тест-полосок
- макро-параметры (цвет, консистенция, пр.)
- баркод образца
- Тестовое сообщение с результатом приходит с ЛИС, отображаются в интерфейсе, доступном лаборантам и врачам, результаты содержат, а ЛИС может интерпретировать:
- макро-параметры (цвет, консистенция, пр.)
- микро-параметры (кол-во диагностически значимых объектов в микроскопии):
- абсолютные значения
- нормализованные значения (на одно поле зрения)
- текстовые интерпретации значений
- баркод образца
- В случае с HL7 при запросе заданий, ЛИС не отсылает уже отосланные задания, по которым получен ACK
Пусконаладка
- Лаборант создал в ЛИС задание на конкретный образец, оно появилось на анализаторе
- Лаборант запустил образец в анализаторе согласно пришедшему заданию, анализатор успешно выполнил обработку
- Цифровой препарат и результаты распознавания через 5-10 мин появились в СеленаВижн на ПК врача, цифровой препарат содержит:
- 52 H-полей зрения и 13 L-полей зрения разрешением 5MP каждое
- распознанные объекты в достаточном количестве
- Врач успешно залогинился в СеленаВижн (у врача на ПК есть браузер Google Chrome или Mozilla Firefox и ярлык на веб-адрес, где доступна СеленаВижн)
- Врач скорректировал результаты тестового исследования, отправил результаты в ЛИС, в ЛИС результаты успешно отобразились
- Врач совместно со специалистом по внедрению успешно провели 2-3 полных постановки препаратов (всего 30+ шт), получая задания на них из ЛИС, и отправляя результаты в ЛИС, и использовали данные для:
- создания базовой схемы пороговых значений срабатывания алгоритма распознавания
- создания базовой схемы интерпретации числовых результатов в текстовую интерпретацию
- Результат одной полной постановки доступен в СеленаВижн не более, чем через (4 мин * кол-во образцов) + 10 мин
Обучение
- Специалист по внедрению организовал и провел обучение персонала лаборатории по работе с СеленаВижн
- Персонал лаборатории оценил и скорректировал базовые схемы пороговых значений и интерпретации результатов
- Персонал лаборатории оценил и скорректировал совместно с специалистами ЛИС маппинги результатов исследований из СеленаВижн в ЛИС