Протокол обмена с SelenaVision по REST API
- SelenaVision имеет REST-сервер, доступный по HTTP из локальной сети с ЛИС/МИС учреждения. IP и порт можно выбрать. ЛИС/МИС выступает в роли клиента, анализатор запросов в ЛИС/МИС не делает.
- ЛИС/МИС посылает POST-запрос с вложенным заданием для анализатора. В запросе - идентификатор и административные данные по пациенту, и идентификатор образца (баркод пробирки). Анализатор получает задание и начинает ожидать образец.
- Анализатор выполняет задание, и когда сервис SelenaVision видит, что анализатор создал необходимое количество снимков по образцу, сервис забирает из базы Sciendox сырые данные по образцу. На этом моменте действия пользователей или интеграции не требуются.
- Пользователи работают в SelenaVision с загруженными данными, подготавливают отчет для отправки в ЛИС, нажимают "отправить в ЛИС"
- ЛИС/МИС через GET-запрос запрашивает у SelenaVision отчеты, помеченные как готовые к отправке, получают отчеты и ссылки на снимки.
(опционально)ЛИС/МИС посылает GET-запрос по идентификатору фото из п.5, SelenaVision отдает jpg.
sequenceDiagram
ЛИС->>SelenaVision: POST http://10.0.0.5:7090/samples/
SelenaVision->>Sciendox: SQL queries
ЛИС->>SelenaVision: GET http://10.0.0.5:7090/api/patient-cases?populate[case_images]&filters
ЛИС-->>SelenaVision: GET http://10.0.0.5:7090/uploads/H_20250120124939_82b4a4e81c_a8e59e2c0b.jpg
Пример тела запроса POST http://10.0.0.5:7090/samples/
{
"name": "Иванов Иван",
"sex": "Мужской",
"age": 33,
"dept": 2,
"bed_no": "палата5",
"outpatient_no": "номпациента123", // идентификатор пациента в ЛИС/МИС
"sample": "кал",
"sample_no": "242423", // штрихкод образца
"diagnosis": "входящий диагноз",
"remark": "примечание",
"apply_date": "2024-04-25T13:45:30",
"color": 8, // код цвета образца
"hard": 200, // код консистенции образца
"mucus": 24, // код слизи в образце
"blood": 30, // код крови в образце
"jj_sign": 1, // нужно ли делать микроскопию (0 - нет, 1 - да)
"JtJTest1": 15, // нужно ли делать FOB-тест (0 - нет, 15 -да)
"JtJTest4": 79 // нужно ли делать HP-тест (0 - нет, 79 - да)
}
Справочники для color, hard, mucus, blood
{
"color": {
"8": "коричневый",
"9": "желтовато-коричневый",
"10": "темно-коричневый",
"11": "светло-желтый",
"12": "ахоличный (беловато-серый)",
"13": "серовато-желтый",
"14": "серый",
"15": "красный",
"16": "зеленый",
"206": "черный"
},
"hard": {
"200": "твердая",
"201": "мягкая",
"202": "плотная",
"203": "мазевидная",
"204": "пенистая",
"205": "водянистая"
},
"mucus": {
"23": "Отрицательный",
"24": "+",
"25": "++",
"26": "+++",
"27": "++++"
},
"blood": {
"28": "Отрицательный",
"29": "+",
"30": "++",
"31": "+++",
"32": "++++"
},
}
Пример запроса GET http://10.0.0.5:7090/api/patient-cases
Полный запрос:
GET: http://10.0.0.5:7090/api/patient-cases?populate[case_images][populate][0]=imageFile&filters[sent_to_lis_datetime][$gt]=0&filters[createdAt][$gte]=2024-03-01T00:00:00&filters[createdAt][$lte]=2024-03-01T23:59:59
Подробнее про части запроса:
populate[case_images][populate][0]=imageFile- запросить сразу со ссылками на изображения и разметкойfilters[sent_to_lis_datetime][$gt]=0- вернуть только те случаи, которые были помечены, как готовые к отправке в ЛИСfilters[createdAt][$gte]=2024-03-01T00:00:00&filters[createdAt][$lte]=2024-03-01T23:59:59- вернуть только те случаи, которые были созданы между 00:00 и 23:59 1 марта 2024 года
Auth: "Bearer 6ff007a783e6b638127..." (запросы получения данных закрыты доступом по токену. Токен выдается специалиставми "Авроры" и действует бессрочно.)
Пример результата
{
"data": [
{
"id": 4,
"documentId": "ukthxcpq06m64kw4gn9ijyuy",
"title": "22556", // номер случая
"createdAt": "2025-02-27T02:37:29.761Z", // дата создания в SelenaVision
"updatedAt": "2025-04-09T09:18:19.837Z",
"publishedAt": "2025-04-09T09:18:19.824Z",
"description": "",
"diag_pk": null, // Переваримая клетчатка
"diag_npk": "0.96", // Непереваримая клетчатка
"foreign_id": null,
"sent_to_lis_datetime": "2025-02-26T21:30:00.000Z", // Дата готовности отправки в ЛИС
"diag_mvb": "0.8", // Мышечные волокна без исчерченности
"diag_mvi": "0.24", // Мышечные волокна с исчерченностью
"diag_leico": null, // Лейкоциты
"diag_eritro": null, // Эритроциты
"macro_blood": "отсутствует", // Макро - кровь
"macro_hard": "плотная", // Макро - консистенция
"macro_mucus": "отсутствует", // Макро - слизь
"macro_color": "темно-коричневый", // Макро - цвет
"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",
"macro_test_hp": null, // Результат HP
"macro_test_fob": null, // Результат FOB
"admin_barcode": "22556",
"diag_pilca": null, // Пыльца
"case_images": [ // Массив с изображениями по случаю
{
"id": 67,
"documentId": "rrf553mrnpuruatwydrpdfff",
"createdAt": "2025-02-27T02:37:48.012Z",
"updatedAt": "2025-02-28T12:32:22.666Z",
"publishedAt": "2025-02-28T12:32:22.663Z",
"imageMLAnnotation": "{\"predictions\":[{\"class_name\":\"НК\",\"class_id\":2,\"proba\":0.8349862694740295,\"x\":[372.5,370,365,360,357.5,355,352.5,...", // Разметка в векторном виде
"imageDescription": null,
"macroType": null,
"viewed": true,
"imageFile": {
"id": 67,
"documentId": "d97lxtegodthtfv9g0tv3e43",
"name": "H_20250120124939_82b4a4e81c.jpg",
"alternativeText": null,
"caption": null,
"width": 1600,
"height": 1200,
"formats": { // форматы с разной степенью сжатия
"large": {
"ext": ".jpg",
"url": "/uploads/large_H_20250120124939_82b4a4e81c_a8e59e2c0b.jpg",
"hash": "large_H_20250120124939_82b4a4e81c_a8e59e2c0b",
"mime": "image/jpeg",
"name": "large_H_20250120124939_82b4a4e81c.jpg",
"path": null,
"size": 108.5,
"width": 1000,
"height": 750,
"sizeInBytes": 108496
},
"small": {
"ext": ".jpg",
...
},
"medium": {
"ext": ".jpg",
...
},
"thumbnail": {
"ext": ".jpg",
...
}
},
"hash": "H_20250120124939_82b4a4e81c_a8e59e2c0b",
"ext": ".jpg",
"mime": "image/jpeg",
"size": 182.63,
"url": "/uploads/H_20250120124939_82b4a4e81c_a8e59e2c0b.jpg", // ссылка на оригинал
"previewUrl": null,
"provider": "local",
"provider_metadata": null,
"createdAt": "2025-02-27T02:37:40.247Z",
"updatedAt": "2025-02-27T02:37:40.247Z",
"publishedAt": "2025-02-27T02:37:40.247Z"
}
},
{
"id": 68, // следующий снимок в случае
...
}
] // конец массива снимков
},
{
"id": 5, // следующий случай
... // поля следующего случая
},
...
] // конец массива "data"
}
Группы полей:
- admin_XXX - административные поля
- macro_XXX - макроскопические свойства
- diag_XXX - микроскопия, общая копрограмма
- parasite_XXX - паразиты