Требования к ЛИС

Данный раздел можно использовать как ТЗ к реализации на стороне Лабораторной Информационной Системы.

Вариант 1: HL7

  1. Создавать и передавать задания на анализ
    1. При поступлении в лабораторию образца на анализ, лаборантом должна производиться регистрация образца в ЛИСе. Должны заполняться следующие данные:
      1. Штрихкод образца (любая строка до 20 символов)
      2. Внешние характеристики образца: цвет, консистенция, наличие видимой крови, наличие видимой слизи (используются для автоматического выставления параметров пробоподготовки)
      3. Возраст пациента в годах
      4. Перечень необходимых исследований: нужно ли делать микроскопию (микро-фотографии), нужно ли делать тест-полоски (на каждый тип полосок свой признак)
    2. После указания всех параметров в ЛИС (не ранее!), ЛИС должен отправлять отдельный DSR^Q03 по каждому образцу (стандарт содержимого сообщений указан в разделе "HL7"), сервер СеленаВижн по приходящим заданиям будет наполнять таблицу ожидаемых образцов в приборе, и отвечать ACK^Q03 (сообщением об успехе записи задания)
    3. В случае, если прибор на момент отправки заданий выключен, задания на прибор переданы не будут, сервер СеленаВижн не отправит в ответ ACK^Q03, и такие задания потребуется отправить из ЛИС заново, когда прибор будет включен
    4. В случае отправки заданий, в которых штрихкод образца будет совпадать с одним из уже имеющихся образцов в заданиях, задание принято не будет. Чтобы перезаписать задание, старое задание лаборант должен удалить из анализатора вручную
  2. Получать и записывать результат
    1. После выполнения исследования в ПО СеленаВижн и нажатия кнопки "Отправить в ЛИС", сервер СеленаВижн отправляет ORU^R01 в ЛИС (содержимое описано в разделе "HL7"). ЛИС должен принять и смаппить (транслировать в свои) все передаваемые поля с результатами по всем диагностически значимым объектам.
    2. Правила маппинга полей ЛИС должен согласовать с руководством лаборатории и с апликейшн-специалистом СеленаВижн в письменном виде (формат согласования любой) для избежания создания некорректных результатов исследования в ЛИС. Правила маппинга могут содержать следующие уточнения:
    3. По некоторым классам ЛИС может забирать текстовый результат, а по другим - числовой
    4. Некоторые классы с точки зрения ЛИС представляют собой один класс и должны получать сумму элементов двух и более классов в качестве результата
  3. Требования по подключению: сервер СеленаВижн передает HL7 сообщения на сервер ЛИС через создание TCP-сокета, ЛИС должен поддерживать как минимум один из вариантов создания сокета:
    1. Вариант "СеленаВижн = клиент": Сервер СеленаВижн подключается на указанный IP и порт в локальной сети и бесконечно держит сокет, в котором принимает задания и передает результаты. В случае разрыва связи, сервер СеленаВижн пытается переподключиться каждые ~5 секунд.
    2. Вариант "СеленаВижн = сервер": Сервер СеленаВижн предоставляет порт, а сервер ЛИС подключается к нему и устанавливаеет сокет для заданий и результатов

Вариант 2: REST/JSON API

  1. Создавать и передавать задания на анализ
    1. При поступлении в лабораторию образца на анализ, лаборантом должна производиться регистрация образца в ЛИСе. Должны заполняться следующие данные:
      1. Штрихкод образца (любая строка до 20 символов)
      2. Внешние характеристики образца: цвет, консистенция, наличие видимой крови, наличие видимой слизи (используются для автоматического выставления параметров пробоподготовки)
      3. Возраст пациента в годах
      4. Перечень необходимых исследований: нужно ли делать микроскопию (микро-фотографии), нужно ли делать тест-полоски (на каждый тип полосок свой признак)
    2. После указания всех параметров в ЛИС (не ранее!), ЛИС должен отправлять отдельный POST-запрос /samples по каждому образцу (стандарт содержимого сообщений указан в разделе "REST"), сервер СеленаВижн по приходящим заданиям будет наполнять таблицу ожидаемых образцов в приборе, и отвечать 200 OK (сообщением об успехе записи задания)
    3. В случае, если прибор на момент отправки заданий выключен, задания на прибор переданы не будут, сервер СеленаВижн не отправит в ответ 200 OK, и такие задания потребуется отправить из ЛИС заново, когда прибор будет включен
    4. В случае отправки заданий, в которых штрихкод образца будет совпадать с одним из уже имеющихся образцов в заданиях, задание принято не будет. Чтобы перезаписать задание, старое задание лаборант должен удалить из анализатора вручную
  2. Получать и записывать результат
    1. После выполнения исследования в ПО СеленаВижн и нажатия кнопки "Отправить в ЛИС", сервер СеленаВижн помечает задание выполненным (содержимое описано в разделе "REST"). Чтобы собрать выполненные задания, ЛИС должен периодически отправлять GET запрос /patient-cases (пример запроса см в разделе "REST API") и при получении непустого результата смаппить (транслировать в свои) все передаваемые поля с результатами по всем диагностически значимым объектам.
    2. Правила маппинга полей ЛИС должен согласовать с руководством лаборатории и с апликейшн-специалистом СеленаВижн в письменном виде (формат согласования любой) для избежания создания некорректных результатов исследования в ЛИС. Правила маппинга могут содержать следующие уточнения:
      1. По некоторым классам ЛИС может забирать текстовый результат, а по другим - числовой
      2. Некоторые классы с точки зрения ЛИС представляют собой один класс и должны получать сумму элементов двух и более классов в качестве результата
  3. Требования по подключению: сервер СеленаВижн в варианте REST/JSON API всегда выступает сервером, т.е. предоставляет открытый порт для POST и GET запросов со стороны ЛИС, в ЛИС должна быть возможность подключаться на порт и передавать GET и POST

Вариант 3: ЛИС "Эфир" - MongoDB, RabbitMQ

  1. Возможно получение заданий из MongoDB согласно спецификации ЛИС.ЕМИАС / ЛИС "Эфир"
  2. Задание считается подтвержденным, если установлен approved флаг, до этого момента образец предположительно находится в пути до лаборатории, но уже зарегистрирован в ЛИС и виден в MongoDB
  3. До момента подтверждения задания лаборантом должны быть заполнены в ЛИС поля внешнего осмотра образца (hard, color, blood, mucus) и необходимые типы исследований (selena_microscopy, selena_fob, selena_hp)
  4. СеленаВижн раз в несколько минут опрашивает БД MongoDB на предмет подтвержденных, но еще не загруженных в анализатор заданий
  5. Возможна отправка результатов исследований в очередь сообщений RabbitMQ согласно спецификации ЛИС.ЕМИАС / ЛИС "Эфир"
  6. После выполнения исследования в ПО СеленаВижн и нажатия кнопки "Отправить в ЛИС", сервер СеленаВижн помечает задание выполненным и отправляет в брокер сообщений
  7. Правила маппинга полей ЛИС должен согласовать с руководством лаборатории и с апликейшн-специалистом СеленаВижн в письменном виде (формат согласования любой) для избежания создания некорректных результатов исследования в ЛИС. Правила маппинга могут содержать следующие уточнения:
    1. По некоторым классам ЛИС может забирать текстовый результат, а по другим - числовой
    2. Некоторые классы с точки зрения ЛИС представляют собой один класс и должны получать сумму элементов двух и более классов в качестве результата
  8. Требования по подключению: сервер СеленаВижн в варианте ЛИС "Эфир" выступает клиентом, т.е. подключается к имеющимся эндпонтам 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 мин

Обучение

  • Специалист по внедрению организовал и провел обучение персонала лаборатории по работе с СеленаВижн
  • Персонал лаборатории оценил и скорректировал базовые схемы пороговых значений и интерпретации результатов
  • Персонал лаборатории оценил и скорректировал совместно с специалистами ЛИС маппинги результатов исследований из СеленаВижн в ЛИС