Описание базовой интеграции
Описание интеграции
Сервис medlinx.online позволяет создавать, редактировать и искать практически любые медицинские данные. Реализация опирается на стандарт Fhir STU3 (используется подмножество стандарта). Данный документ описывает как можно создавать заявки на лабораторные исследования и получать результаты.
Задачи получения номенклатуры и расчета преаналитики не отражены в Fhir, мы используем дополнительное API для этих задач.
Подготовка подключения партнера к лаборатории через внешнюю информационную систему
- Партнер заключает контракт с лабораторной службой (может быть заключено несколько контрактов с разной номенклатурой).
- Партнер заводится как организация в Medlinx API.
- Партнер получает логин/пароль для работы с Medlinx API.
- Партнер подключает модуль интеграции с Medlinx API в информационную систему.
Повседневное использование
- Информационная система запрашивает номенклатуру для конкретного партнера (с указанием интересующего контракта), кеширует данную информацию, и отображает доступные для заказа позиции.
- Оператор информационной системы (сотрудник компании партнера) формирует корзину исследований.
- Информационная система запрашивает по корзине опросник обязательных и рекомендуемых полей, необходимых лаборатории для выполнения исследования и выставления референсных значений.
- Оператор информационной системы заполняет опросник.
- Информационная система отправляет запрос в Medlinx API на расчет преаналитики (протокол забора, протокол обработки биоматериала, число и тип пробирок, коды пробирок для печати на штрих-кодах, информация о способе транспортировки) и получение списка дополнительных полей, требуемых лабораторией.
- Компания партнер производит действия по забору биоматериала
- В информационной системе формируется заявка на лабораторные исследования и отправляется в Medlinx API
- При изменении статуса заявки Medlinx API оповещает информационную систему о изменении
- Информационная система забирает значимую информацию
Запрос опросников и преаналитики должен выполняться по всей корзине. Для большого числа исследований биоматериал может браться в одну пробирку.
Заполнение опросника может выполнять врач.
API не получает нотификаций от лаборатории о изменении номенклатуры.
В то же время обычно лаборатория не требует забора номенклатуры в реальном времени, номенклатура может кэшироваться на сутки, если при заключении договора лаборатория не указала обратное.
Контракты взаимодействия
По умолчанию все запросы должны выполняться через HTTPS. Ниже приведены адреса url в зависимости от окруждения:
Окружение | Endpoint | Тип |
---|---|---|
Stage | https://api-stage.medlinx.online/ | api |
Stage | https://auth-stage.medlinx.online/ | auth |
Prod | https://api.medlinx.online/ | api |
Prod | https://auth.medlinx.online/ | auth |
Все взаимодействие происходит в формате JSON.
Сервер поддерживает методы сonditional create, conditional update с использованием Etag. Подробнее смотри Fhir
Авторизация
Авторизация реализована с использованием OAuth2. Смотри так же Способы авторизации.
До начала взаимодействия Medlinx выдает контрагенту client secret,
а контрагент предоставляет адрес для вызова callback.
Сайт для авторизации клиента доступен по адресу (см. Контракты взаимодействия, тип auth):
GET /connect/authorize
На stage авторизацию можно тестировать с помощью Postman, для этого нужно обратиться в medlinx.online для включения callback url https://www.getpostman.com/oauth2/callback на сервере для учетной записи.
После авторизации пользователя система произведет callback на callback url. Пример получения кода из ответа:
string[] codes = Request.Query["code"];
var authorizationCode = "";
if (codes.Length > 0)
authorizationCode = codes[0];
Получение токена доступно по адресу (см. Контракты взаимодействия, тип auth):
POST /connect/token
Пример запроса токена:
Dictionary<string, string> post = new Dictionary<string, string>
{
{"client_id", "real_mis_id"},
{"client_secret", "0SJ5GH34"},
{"grant_type", "authorization_code"},
{"code", authorizationCode},
{"redirect_uri", _options.MisCallback}
};
var client = new HttpClient();
var response = await client.PostAsync($"{_options.IdentityServer}/connect/token", new FormUrlEncodedContent(post));
var content = await response.Content.ReadAsStringAsync();
Ответ на запрос токена приходит в формате JSON
Все дальнейшие запросы должны проходить с использованием токена в заголовке
curl -H "Authorization: Bearer OAUTH-TOKEN" https://api.medlinx.online
Обратите внимание, что сервер поддерживает offline режим обновления токена
Получение номенклатуры
Доступен по адресу (см. Контракты взаимодействия, тип api):
GET nomenclature
Имя | Location | Описание |
---|---|---|
Authorization | Header | см. Авторизация |
contract | Query | Код контракта |
Ответ запроса номенклатуры
Ответ содержит массив доступных исследований. Каждый элемент содержит код, название, группу исследований, развернутое описание, требования к сдаче и возможные типы биоматериала.
Требования к сдаче описываются массивом строк, где каждая строка описывает независимый элемент подготовки.
У исследования могут быть обязательные типы биоматериала и типы биоматериала на выбор. Например, в исследовании "Проба Реберга (клиренс эндогенного креатинина)" в некоторых контрактах обязательным типом биоматериала будет "Суточная моча", а типами биоматериала на выбор будут "Венозная кровь" или "Капиллярная кровь".
Поле allow_multiple_items
определяет, может ли данная позиция номенклатуры быть добавлена в заказ более одного раза.
Тип биоматериала на выбор описывается в разделе specimen. Для исследования можно выбрать только один тип биоматериала на выбор, в редких случаях, если поле multiple_specimen
равно true
допустимо выбирать несколько типов биоматериала. Обязательные типы биоматериала отображаются в разделе required_specimen
. Все дальнейшие методы требуют на вход только тип биоматериала на выбор. Обязательные виды биоматериала выдаются только в виде справочной информации, например, для отображения на UI.
Порядок и способ взятия биоматериала можно получить при запросе преаналитики.
[{
"id": "001.003",
"caption": "Микроскопическое исследование отделяемого мочеполовых органов женщин (микрофлора) ",
"allow_multiple_items": true,
"lab_id": "02-003",
"lab_caption": "Микроскопическое исследование отделяемого мочеполовых органов женщин (микрофлора) ",
"group": "Общеклинические исследования",
"description": "Микроскопическое исследование отделяемого мочеполовых органов женщин производят для оценки характера микрофлоры и выявления воспалительного процесса. С помощью данного исследования можно диагностировать неспецифические вагиниты, бактериальный вагиноз, трихомониаз, гонорею, кандидоз гениталий, предположить наличие опухолевых образований женских половых органов.",
"patient_preparation": [
"Женщинам исследование рекомендуется производить до менструации или через 2 дня после её окончания."
],
"multiple_specimen": false,
"specimen": [],
"required_specimen": [
{
"description": "Мазок на предметном стекле",
"specimen_code": 258433009,
"specimen_name": "Smear sample (specimen)",
"bodysite_code": null,
"bodysite_name": "",
"container_type": null,
"container_name": ""
}
],
"price": 0
}, {
"id": "001.028",
"caption": "Клинический анализ крови с микроскопией лейкоцитарной формулы",
"allow_multiple_items": true,
"lab_id": "02-041",
"lab_caption": "Клинический анализ крови с микроскопией лейкоцитарной формулы",
"group": "Общеклинические исследования",
"description": "Развернутое исследование качественного и количественного состава крови, в ходе которого дается характеристика эритроцитов и их специфических показателей (MCV, MCH, MCHC, RDW), лейкоцитов и их разновидностей в процентном соотношении (лейкоцитарная формула) и тромбоцитов.\nВ данном исследовании всегда проводится микроскопия лейкоцитарной формулы.",
"patient_preparation": [
"Исключить из рациона алкоголь в течение 24 часов до исследования.",
"Детям в возрасте до 1 года не принимать пищу в течение 30-40 минут до исследования.",
"Детям в возрасте от 1 до 5 лет не принимать пищу в течение 2-3 часов до исследования.",
"Не принимать пищу в течение 8 часов до исследования, можно пить чистую негазированную воду.",
"Исключить физическое и эмоциональное перенапряжение в течение 30 минут до исследования.",
"Не курить в течение 30 минут до исследования."
],
"multiple_specimen": false,
"specimen": [
{
"description": "Венозная кровь",
"specimen_code": 122555007,
"specimen_name": "Venous blood specimen (specimen)",
"bodysite_code": null,
"bodysite_name": "",
"container_type": null,
"container_name": ""
},
{
"description": "Капиллярная кровь",
"specimen_code": 122554006,
"specimen_name": "Capillary blood specimen (specimen)",
"bodysite_code": null,
"bodysite_name": "",
"container_type": null,
"container_name": ""
}
],
"required_specimen": [],
"price": 0
}, {
"id": "001.011",
"caption": "Проба Реберга (клиренс эндогенного креатинина)",
"allow_multiple_items": true,
"lab_id": "02-011",
"lab_caption": "Проба Реберга (клиренс эндогенного креатинина)",
"group": "Общеклинические исследования",
"description": "Исследование, назначаемое для определения скорости клубочковой фильтрации в почках. Скорость фильтрации определяют по клиренсу эндогенного креатинина т. е. разнице его концентрации в крови и в моче. Тест имеет большое практическое значение при различных заболеваниях почек. Часто используется для выявления начинающейся хронической почечной недостаточности.",
"patient_preparation": [
"Детям в возрасте до 1 года не принимать пищу в течение 30-40 минут до исследования.",
"Детям в возрасте от 1 до 5 лет не принимать пищу в течение 2-3 часов до исследования.",
"Не принимать пищу в течение 12 часов до исследования.",
"Исключить физическое и эмоциональное перенапряжение в течение 30 минут до исследования.",
"Исключить физическое и эмоциональное перенапряжение в течение 24 часов до исследования.",
"Не курить в течение 30 минут до исследования.",
"Исключить из рациона алкоголь в течение 24 часов до исследования.",
"Исключить из рациона острую, соленую пищу, продукты питания, изменяющие цвет мочи (например, свекла, морковь) в течение 12 часов до исследования.",
"Исключить прием мочегонных препаратов в течение 48 часов до сбора мочи (по согласованию с врачом)."
],
"multiple_specimen": false,
"specimen": [],
"required_specimen": [
{
"description": "Венозная кровь",
"specimen_code": 122555007,
"specimen_name": "Venous blood specimen (specimen)",
"bodysite_code": null,
"bodysite_name": "",
"container_type": null,
"container_name": ""
},
{
"description": "Суточная моча",
"specimen_code": 276833005,
"specimen_name": "24 hour urine sample (specimen)",
"bodysite_code": null,
"bodysite_name": "",
"container_type": null,
"container_name": ""
}
],
"price": 0
}, {
"id": "042.030",
"caption": "Генетическая гистосовместимость партнеров",
"allow_multiple_items": true,
"lab_id": "42-035",
"lab_caption": "Генетическая гистосовместимость партнеров",
"group": "Комплексные генетические исследования",
"description": "Комплексное исследование, определяющее генетическую гистосовместимость партнеров. Различие супругов по вариантам генов HLA считается одним из важных условий успешного наступления и вынашивания беременности. Сходство супругов между собой по вариантам генов HLA ведет к повышению вероятности появления плода с двойным набором одинаковых вариантов генов, то есть HLA-гомозигот, или полному совпадению плода и матери по HLA генотипу, что является неблагоприятным фактором, следствием чего могут стать репродуктивные потери. В связи с этим, HLA-типирование используют для диагностики причин невынашивания беременности и бесплодия. При репродуктивных нарушениях важно количество совпадений вариантов генов HLA II класса у супругов: чем их меньше, тем выше вероятность наступления беременности.\nГенотипирование HLA класса II включает в себя определение конкретных вариантов генов из всех возможных. В исследование включено 3 локуса гена HLA: HLA-DRB1, HLA-DQA1 и HLA-DQB1.\n",
"patient_preparation": [],
"multiple_specimen": true,
"specimen": [
{
"description": "Буккальный (щечный) эпителий (женщина)",
"specimen_code": 10000047777777109,
"specimen_name": "Buccal smear sample (specimen)",
"bodysite_code": null,
"bodysite_name": "",
"container_type": null,
"container_name": ""
},
{
"description": "Венозная кровь (женщина)",
"specimen_code": 10000067777777105,
"specimen_name": "Venous blood specimen (specimen)",
"bodysite_code": null,
"bodysite_name": "",
"container_type": null,
"container_name": ""
},
{
"description": "Буккальный (щечный) эпителий (мужчина)",
"specimen_code": 10000057777777107,
"specimen_name": "Buccal smear sample (specimen)",
"bodysite_code": null,
"bodysite_name": "",
"container_type": null,
"container_name": ""
},
{
"description": "Венозная кровь (мужчина)",
"specimen_code": 10000077777777100,
"specimen_name": "Venous blood specimen (specimen)",
"bodysite_code": null,
"bodysite_name": "",
"container_type": null,
"container_name": ""
}
],
"required_specimen": [],
"price": 15615
}
]
Поля lab_id
и lab_caption
используются только в качестве справочной информации, они кодируют товарные позиции в кодах конкретной лаборатории. При вызовах методов, требующих идентификатор, указывается id
.
Получение времени выполнения исследований
Доступен по адресу (см. Контракты взаимодействия, тип api):
GET eta
ETA - estimated time of accomplishment, используется для указания расчетного времени выполнения
Имя | Location | Описание |
---|---|---|
Authorization | Header | см. Авторизация |
contract | Query | Код контракта |
Ответ времени выполнения исследований
Ответ содержит массив с перечеслением времени выполнения для каждого исследования в контракте. Каждый элемент содержит код, время выполнения в часах и текстовое описание.
[
{
"id": "001.001",
"status": "available", //"available/delayed/stopped"
"time": 48,
"caption": "1 сутки. Указанный срок не включает день взятия биоматериала",
"effectivePeriod":null,
"delayDuration":null,
},
{
"id": "001.002",
"status": "delayed",
"time": 48,
"caption": "1 сутки. Указанный срок не включает день взятия биоматериала",
"delayDuration": {
"value": "48",
"unit": "h"
},
"effectivePeriod": {
"start": "2013-03-26 12:36:45.000",
"end": "2013-03-29 00:00:00.000"
}
}
]
Поле status
указывает на доступность исследования:
- available - доступно для заказа
- delayed - выполняется с задержками
- stopped - не выполняется
Для статуса delayed
дополнительно заполняются поля effectivePeriod
и delayDuration
. Для статуса stopped
заполняется только поле effectivePeriod
.
Поле delayDuration
содержит информацию о времени задержки выполнения. В данный момент поле unit
всегда содержит значение h
- часы.
Поле effectivePeriod
содержит информацию о периоде действия статуса.
Получение опросника обязательных рекомендуемых полей
Поля опросника могут зависеть от типа биоматериала, выбранного в номенклатуре, поэтому, если исследование предоставляет выбор, то пользователь должен указать выбор. Обязательные типы биоматериала будут учтены автоматически.
Для получения опросника необходимо передать всю корзину, т.к. для каких-то исследований поле может быть обязательным, а для других рекомендуемым, а также вопросы могут повторяться. При передаче всех заказываемых исследований в систему, она сама сделает свертку и выдаст единственный опросник, который нужно заполнить.
Доступен по адресу (см. Контракты взаимодействия, тип api):
POST questionnaire
Имя | Location | Описание |
---|---|---|
Authorization | Header | см. Авторизация |
Content-Type | Header | application/json |
Request | Body | Идентификаторы номенклатуры |
Request: Object
Поле | Тип | Описание |
---|---|---|
contract | String | Код контракта |
analyticsrequests | array[Items] | Выбранные исследования |
Поле | Тип | Описание |
---|---|---|
id | String | id из номенклатуры |
specimen_code | String | Тип биоматериала (из ответа Номенклатуры) |
bodysite_code | String | Место взятия (из ответа Номенклатуры) |
container_type | String | Код контейнера (из ответа Номенклатуры) |
Пример запроса
Пример запроса для позиции "001.001" (нет вариантов на выбор), "001.005" и "001.006" (требует варианта выбора). В позиции "001.006" показано, что не значимые поля можно оставлять с значением null
.
{
"contract": "C000003409",
"analyticsrequests": [{
"id": "001.001"
}, {
"id": "001.005",
"specimen_code": "122555007"
}, {
"id": "001.006",
"specimen_code": "698276005",
"bodycite_code": "null",
"container_type": "null"
}
]
}
Пример ответа
{
"resourceType" : "Questionnaire",
"status" : "active",
"item" : {
"linkId" : "Вопросы к лабораторному исследованию",
"text" : "Вопросы к лабораторному исследованию",
"required" : true,
"repeats" : false,
"type" : "group",
"item" : [{
"linkId" : "Персональные данные",
"text" : "Персональные данные",
"required" : true,
"repeats" : false,
"type" : "group",
"item" : [{
"linkId" : "Адрес проживания",
"text" : "Адрес проживания",
"type" : "string",
"required" : true,
"repeats" : false
}, {
"linkId" : "Тип удостоверения личности",
"text" : "Тип удостоверения личности",
"type" : "choice",
"required" : true,
"repeats" : false,
"option" : [{
"system" : "https://api.medlinx.online/terminology/id-type",
"code" : "Не указан"
}, {
"system" : "https://api.medlinx.online/terminology/id-type",
"code" : "Паспорт гр. РФ"
}, {
"system" : "https://api.medlinx.online/terminology/id-type",
"code" : "Временное удостоверение"
}, {
"system" : "https://api.medlinx.online/terminology/id-type",
"code" : "Военный билет"
}, {
"system" : "https://api.medlinx.online/terminology/id-type",
"code" : "Загранпаспорт"
}, {
"system" : "https://api.medlinx.online/terminology/id-type",
"code" : "Дипломатический паспорт"
}, {
"system" : "https://api.medlinx.online/terminology/id-type",
"code" : "Паспорт моряка"
}, {
"system" : "https://api.medlinx.online/terminology/id-type",
"code" : "Справка об освобождении"
}, {
"system" : "https://api.medlinx.online/terminology/id-type",
"code" : "Свидетельство о рождении"
}
]
}, {
"linkId" : "Код контингента?",
"text" : "Код контингента?",
"type" : "string",
"required" : true,
"repeats" : false
}
]
}
]
}
}
В ответ будет выслан опросник вида Обязательные/рекомендуемые поля для исследований
Получение данных ПРИС
Для получения опросника необходимо передать всю корзину. Это важно потому что несколько исследований могут браться в одну пробирку, если для них действуют единые правила преаналитики и они не требуют разных рабочих потоков.
Если запрашивать преаналитику на каждую отдельную позицию заказа можно получить неверный расчет!
Если исследование предоставляет выбор, то пользователь должен указать выбор. Обязательные типы биоматериала будут учтены автоматически.
Доступен по адресу (см. Контракты взаимодействия, тип api):
POST preanalytics
Имя | Location | Описание |
---|---|---|
Authorization | Header | см. Авторизация |
Content-Type | Header | application/json |
Request | Body | Идентификаторы номенклатуры |
Request: Object
Поле | Тип | Описание |
---|---|---|
contract | String | Код контракта |
includetransportcontainer | Bool | Добавлять ли в выдачу транспортный контейнер, опциональный параметр, по умолчанию false |
analyticsrequests | array[Items] | Выбранные исследования |
Поле | Тип | Описание |
---|---|---|
id | String | id из номенклатуры |
guid | String | Генерируемый на клиенте guid для связывания образцов и позиций в корзине |
specimen_code | String | Тип биоматериала (из ответа Номенклатуры) |
bodysite_code | String | Место взятия (из ответа Номенклатуры) |
container_type | String | Код контейнера (из ответа Номенклатуры) |
Штрих код указывается в поле "label": "5000000000". Подробную информацию о способе печати штрих-кодов необходимо узнать у лаборатории.
Пример запроса преаналитики
Пример запроса для позиции "001.001" (нет вариантов на выбор), "001.005" и "001.006" (требует варианта выбора). В позиции "001.006" показано, что не значимые поля можно оставлять с значением null
.
{
"contract": "C000003409",
"includetransportcontainer": "false",
"analyticsrequests": [{
"id": "001.001",
"guid":"e1dc2bb8-671a-4ef7-b4d1-8fdbd95d1913"
}, {
"id": "001.005",
"specimen_code": "122555007",
"guid":"e109b656-0262-49c7-a271-f74954f1c8f1"
}, {
"id": "001.006",
"specimen_code": "698276005",
"bodycite_code": "null",
"container_type": "null",
"guid":"49a2a457-8be2-4aec-bab7-4943272c6098"
}
]
}
Ответ запроса преаналитики
Код успешного ответа: 200
{
"specimens": [
{
"label": null,
"code": 119339001,
"collection": {
"quantity": 4000,
"method": "Протокол по сбору кала"
},
"processing": [
{
"description": "Хранить при +2 - +8 С"
},
{
"description": "Транспортировка с хладагентом +2+8"
}
],
"container": [
{
"description": "Контейнер пластиковый стерильный для кала с ложечкой, с завинчивающейся крышкой, 60 мл",
"type": "КОНТКАЛ"
}
],
"guids": [
"e1dc2bb8-671a-4ef7-b4d1-8fdbd95d1913"
],
"supportingInfo": "1"
},
{
"label": null,
"code": 122555007,
"collection": {
"quantity": 420,
"method": "Протокол взятия крови из вены"
},
"processing": [
{
"description": "Хранить при +2 - +8 С"
},
{
"description": "Транспортировка с хладагентом +2+8"
}
],
"container": [
{
"description": "Пробирка вакуумная с наполнителем К2-ЭДТА (фиолетовая крышка), 2 мл",
"type": "ВПФИОЛ2"
}
],
"guids": [
"e109b656-0262-49c7-a271-f74954f1c8f1"
],
"supportingInfo": "67558"
},
{
"label": null,
"code": 698276005,
"collection": {
"quantity": 8000,
"method": "Протокол по сбору разовой порции мочи "
},
"processing": [
{
"description": "Хранить при +2 - +8 С"
},
{
"description": "Транспортировка с хладагентом +2+8"
}
],
"container": [
{
"description": "Пробирка вакуумная для мочи с консервантом (пропионат натрия, этилпарабен, хлоргексидин) (желто-красная резиновая пробка), 8 мл",
"type": "ВПМОЧАКОНСЖК"
}
],
"guids": [
"49a2a457-8be2-4aec-bab7-4943272c6098"
],
"supportingInfo": "4179"
}
]
}
Поле supportingInfo
должно попасть в блок extension
ресурса Specimen. Блок extension
- массив из одного объекта с двумя полями: url
и valueString
. Поле url
фиксировано - https://api.medlinx.online/extra/supportingInfo
. В поле valueString
пишется поле supportingInfo
из запроса преаналитики. см. Ресурс Specimen
Создание пациента
Законодательство по обработке ПД требует, чтобы работа с идентификационными данными и медицинскими данными была реализована в разных запросах. Если информационная система не будет передавать персональную информацию (только глобальный идентификатор) или будет использовать уже созданного пациента, то данный шаг можно пропустить.
Доступен по адресу (см. Контракты взаимодействия, тип api):
POST fhir/Patient
Имя | Location | Описание |
---|---|---|
Authorization | Header | см. Авторизация |
Patient | object | Объект Patient в спецификации FHIR |
Ресурс пациента обязан иметь заполенные поля name
(name.family
, name.given[0]
, name.given[1]
), gander
и birthDate
. В случае анонимного заказа поле name.family
должно состоять из 10 цифр, name.given[0]
и name.given[1]
должны быть равны "-".
Пример
{
"resourceType": "Patient",
"name": [{
"family": "Иванов",
"given": ["Иван", "Иванович"]
}
],
"telecom": [{
"system": "phone",
"value": "79876543210",
"use": "mobile"
}, {
"system": "email",
"value": "test@medlinx.online"
}
],
"gender": "male",
"birthDate": "1900-01-01",
"meta": {
"security": [{
"system": "read",
"code": "service"
}
]
}
}
По умолчанию у контрагента нет доступа к созданным ресурсам. Права нужно явно выдать либо при создании ресурса, либо через механизм $meta-add
. Подробнее смотри Права доступа. Для получения пациента контрагенту нужны права read
.
Получить список guid контрагентов для выставления прав можно при подключении к платформе medlinx.online
Ответ
Код успешного ответа: 200
{
"name": [{
"given": [
"Иван",
"Иванович"
],
"family": "Иванов"
}
],
"gender": "male",
"telecom": [{
"use": "mobile",
"value": "79876543210",
"system": "phone"
}, {
"value": "test@medlinx.online",
"system": "email"
}
],
"birthDate": "1900-01-01",
"id": "1e6df3b8-c63f-40ff-8967-1ecf0d30b6d0",
"resourceType": "patient",
"meta": {
"versionId": 0,
"security": [{
"system": "https://api.medlinx.online/security/read",
"code": "d1790f81-8422-49b5-bdef-f1a280a6e1c5"
}, {
"system": "https://api.medlinx.online/security/read",
"code": "medzoom"
}, {
"system": "https://api.medlinx.online/security/readhistory",
"code": "d1790f81-8422-49b5-bdef-f1a280a6e1c5"
}, {
"system": "https://api.medlinx.online/security/updatebody",
"code": "d1790f81-8422-49b5-bdef-f1a280a6e1c5"
}, {
"system": "https://api.medlinx.online/security/owner",
"code": "d1790f81-8422-49b5-bdef-f1a280a6e1c5"
}
]
}
}
Код не успешного ответа: >=400, так же в теле ответа будет представлена расширенная информация
{
"resourceType": "OperationOutcome",
"issue": [{
"severity": "<code>", // fatal | error | warning | information
"code": "<code>", // Error or warning code
"diagnostics": "<string>", // Additional diagnostic information about the issue
}
]
}
Формирование заказа
Доступен по адресу (см. Контракты взаимодействия, тип api):
POST fhir/$CreateDiagnosticRequest
Имя | Location | Описание |
---|---|---|
Authorization | Header | см. Авторизация |
Bundle | object | Объект Bundle в спецификации FHIR. Тип Bundle должен быть "collection". Bundle содержит набор сущностей необходимых для создания заказа (описано ниже) |
Bundle должен включать набор ресурсов необходимых для создания заказа в лаборатории, ресурсы задаются как массив Entity в Bundle
Обязательные поля для создания заказа включают в себя:
- ProcedureRequest (описывает каждое отдельное исследование в заказе)
- Task (для управления жизненным циклом)
- Specimen - образец биоматериала, используемый для проведения исследования
Необязательные поля QuestionnaireResponse. См. также Обязательные/рекомендуемые поля для исследований.
Ресурс ProcedureRequest
ProcedureRequest описывает одну товарную позицию в заказе. См. так же описание в стандарте.
Секция | Описание |
---|---|
meta | Права доступа |
identifier | Идентификатор в Вашей системе, может быть любым на ваш выбор. Может использоваться для поиска или ConditionalCreate |
requisition | Идентификатор, который объединяет все ProcedureRequest'ы в один заказ (в рамках одного заказа это поле у всех ProcedureRequest'ов одинаковое) |
supportingInfo | Ссылка на контракт. См. ниже |
status | Обязательно по стандарту поле, ожидается - active |
code | Кодирует заказанные исследования. Требует использовать коды medlinx.online |
subject | Ссылка на пациента |
occurrenceDateTime | Время создания заказа |
specimen | Массив образцов из которых должно быть сделано исследование |
note | Дополнительная информация (можно не заполнять, если не требуется) |
У всех ProcedureRequest в поле SupportingInfo должна быть ссылка на контракт по которому создается заявка. Все ProcedureRequest в рамках одного заказа должны ссылаться на один и тот же Contract и иметь один тип. Поддерживаются ссылки двух типов: reference и identifier.
Ссылка типа reference указывает абсолютный url контракта на сервере. Найти нужный контракт можно через поиск, например:
GET fhir/Contract?identifier=http://helix.ru/codes/contract|CXXXXXXXXX
Пример ссылки типа reference в поле supportingInfo.
"supportingInfo": [{
"reference": "contract/6fd4e899-6a7c-4fb9-bb31-0e2122e85001"
}]
Ссылка типа identifier имеет кодовую систему http://helix.ru/codes/contract
, в поле value пишется код контракта. Пример ссылки типа identifier в поле supportingInfo.
"supportingInfo": [{
"identifier": {
"value": "C000000000",
"system": "http://helix.ru/codes/contract"
}
}]
Пример полного ProcedureRequest:
{
"resourceType": "ProcedureRequest",
"meta": {
"security": [{
"system": "read",
"code": "9bce8a66-4d0d-4f85-b527-e8cd3e1f3739"
}
]
},
"identifier": [{
"system": "http://example.org",
"value": "ProcedureRequest/12345"
}
],
"requisition": {
"system": "http://example.org/codes/order-guid",
"value": "a5f09ef8-7049-4da9-9f15-ba3a7993920c"
},
"supportingInfo": [{
"reference": "contract/6fd4e899-6a7c-4fb9-bb31-0e2122e85001"
}
],
"status": "active",
"code": {
"coding": [{
"system": "http://api.medlinx.online/terminology/nomenclature",
"code": "001.014"
}
],
"text": "Общий анализ крови (без лейкоцитарной формулы и СОЭ)"
},
"subject": {
"reference": "patient/77998442-34b2-4207-8616-3c685344bdd9"
},
"occurrenceDateTime": "2017-06-20T14:33:24.9626687+03:00",
"specimen": [{
"reference": "urn:uuid:6ff6bb51-3706-4a0f-9bb8-d6669ff6c981"
}
],
"note": [{
"text": "Additional information"
}
]
}
Ресурс Task
Ресурс Task нужен для управления жизненным циклом заказа. Ресурс ProcedureRequest не должен редактироваться принимающей стороной, но принимающая сторона должна иметь возможность отражать статус заявки и информировать заказчика. При постановке заявки на исследование заказчик выставляет права на чтение на ресурсы ProcedureRequest для принимающей стороны и права на чтение и изменение для соответствующих ресурсов Task. Все Task объединяются еще одним Task уровня заказа, для управления жизненным цикла заказа в целом.
Task уровня заказа должен иметь поле code с указанием типа события вида:
{
"system": "https://api.medlinx.online/terminology/task_type",
"code": "OrderProcessingTask"
}
Task уровня заказа
Секция | Описание |
---|---|
meta | Права доступа |
status | requested , см Жизненный цикл заказа |
code | Для заказа - OrderProcessingTask. См пример. |
Пример
{
"resourceType": "Task",
"meta": {
"security": [{
"system": "read",
"code": "9bce8a66-4d0d-4f85-b527-e8cd3e1f3739"
}, {
"system": "updatebody",
"code": "9bce8a66-4d0d-4f85-b527-e8cd3e1f3739"
}
]
},
"status": "requested",
"code": {
"coding": [{
"system": "https://api.medlinx.online/terminology/task_type",
"code": "OrderProcessingTask"
}
]
},
}
Task уровня ProcedureRequest
Секция | Описание |
---|---|
meta | Права доступа |
basedOn | Ссылка на ProcedureRequest |
partOf | Ссылка на Task уровня заказа |
status | requested , см Жизненный цикл заказа |
Пример
{
"resourceType": "Task",
"meta": {
"security": [{
"system": "read",
"code": "9bce8a66-4d0d-4f85-b527-e8cd3e1f3739"
}, {
"system": "updatebody",
"code": "9bce8a66-4d0d-4f85-b527-e8cd3e1f3739"
}
]
},
"basedOn": [{
"reference": "urn:uuid:2f4c75fb-d5ce-4ae1-b7fb-06fb2aa82ae3"
}
],
"partOf": [{
"reference": "urn:uuid:5c9b9dac-0065-4583-b504-24d55bc8faf2"
}
],
"status": "requested"
}
Изменение или отмена заказа оговаривается договором с лабораторией.
Часть лабораторий поддерживают дополнительные опции, например, информирование клиента о статусе выполнения. Такие опции записываются в поле Input ресурса Task уровня заказа. Ниже приведен пример для информирования по смс и email:
{
"code": {
"coding": [{
"code": "OrderProcessingTask",
"system": "https://api.medlinx.online/terminology/task_type"
}
]
},
"input": [{
"type": {
"coding": [{
"code": "sms",
"system": "http://helix.ru/codes/notification"
}
]
},
"valueBoolean": true
}, {
"type": {
"coding": [{
"code": "email",
"system": "http://helix.ru/codes/notification"
}
]
},
"valueBoolean": false
}
],
"status": "requested"
}
Ресурс Specimen
Specimen - образец биоматериала, используемый для проведения исследования.
Секция | Описание |
---|---|
meta | Права доступа |
type | Тип биоматериала из запроса преаналитики, поля code |
subject | Ссылка на пациента |
collection | Время и способ взятия биоматериала. Для всех видов глюкозотолерантных тестов у объекта Specimen должно быть заполнено поле collection датой взятия биоматериала (даты должны быть выровнены по времени). Эта информация необходима для правильной загрузки последовательности образцов. |
container | identifier - штрих-код, type - тип биоматериала (как в ответе преаналитики в поле container ), specimenQuantity - количество биоматериала |
extension | Блок extension - служебная информация, необходимая лаборатории для выполнения исследования. Массив из одного объекта с двумя полями: url и valueString . Поле url фиксировано - https://api.medlinx.online/extra/supportingInfo . В поле "valueString" пишется поле supportingInfo из запроса преаналитики. |
Пример
{
"resourceType": "Specimen",
"meta": {
"security": [{
"system": "read",
"code": "9bce8a66-4d0d-4f85-b527-e8cd3e1f3739"
}
]
},
"type": {
"coding": [{
"system": "https://api.medlinx.online/terminology/specimen-type",
"code": "122555007"
}
]
},
"subject": {
"reference": "patient/77998442-34b2-4207-8616-3c685344bdd9"
},
"collection": {
"collectedDateTime": "2017-01-19T14:03:12.729028+03:00",
"method": {
"coding": [{
"system": "https://api.medlinx.online/terminology/treatment_protocol",
"code": "Протокол взятия крови из вены"
}
]
}
},
"container": [{
"identifier": [{
"system": "http://helix.ru/codes/labels",
"value": "5000000000"
}
],
"type": {
"coding": [{
"system": "https://api.medlinx.online/terminology/specimen_type",
"code": "ВПЖЕЛТГЕЛЬ"
}
]
},
"specimenQuantity": {
"value": 86
}
}
],
"extension": [{
"url": "https://api.medlinx.online/extra/supportingInfo",
"valueString": "46696, 46710"
}
]
}
Ресурс QuestionnaireResponse
Ресурс QuestionnaireResponse - представляет собой ответы на вопросы опросника.
Секция | Описание |
---|---|
meta | Права доступа |
source | Ссылка на пациента |
status | "completed" |
subject | Ссылка на любой ProcedureRequest в рамках заказа |
item | Ответы на вопросы |
Пример
{
"item": [{
"item": [{
"text": "Фаза цикла",
"answer": [{
"valueCoding": {
"code": "Беременность",
"system": "http://operator.medindex.ru/terminology/menstr-cycle"
}
}
],
"linkId": "Фаза цикла"
}, {
"text": "Неделя беременности",
"answer": [{
"valueInteger": 1
}
],
"linkId": "Неделя беременности"
}, {
"text": "Наличие диабета в анамнезе",
"answer": [{
"valueCoding": {
"code": "Да",
"system": "http://operator.medindex.ru/terminology/yes-no-und"
}
}
],
"linkId": "Наличие диабета в анамнезе"
}
],
"text": "Клинические данные",
"linkId": "Клинические данные"
}
],
"meta": {
"security": [{
"code": "service",
"system": "read"
}
]
},
"source": {
"reference": "patient/7add91b1-02cc-45bf-8992-c6567a4372a5"
},
"status": "completed",
"subject": {
"reference": "urn:uuid:b59928f4-5e00-4b3e-bc8d-9da7df56eb4c"
},
"resourceType": "QuestionnaireResponse"
}
Исследования Атлас
Заказы с исследованиями Атлас отличаются тем, что должны передаваться несколько штрих-кодов, а в некоторых случаях номер старого заказа.
Если заказывается исследования 042.036, 042.075, 042.076, то необходимо передавать 2 штрих-кода: лаборатории и Атлас с кодовой системой http://atlas.ru/codes/labels в формате 0000-0000
для 042.036, 042.075 и в формате 000-000-000
для 042.076.
Пример
{
"resourceType": "Specimen",
"container": [{
"identifier": [{
"system": "http://helix.ru/codes/labels",
"value": "5000000000"
}, {
"system": "http://atlas.ru/codes/labels",
"value": "1111-1111"
}]
}
...
]
...
}
]
}
Если заказывается только
дополнительное исследование 190.1558, то необходимо передавать старый номер заказа, в котором выполнялось основное исследование. Старый номер заказа записывается в ресурсе ProcedureRequest
в basedOn.reference.Identifier
c кодовой системой http://helix.ru/codes/mis в формате 00000-XXXXX-00000000
.
Пример
{
"resourceType": "ProcedureRequest",
"basedOn": [
{
"identifier": {
"system": "http://helix.ru/codes/mis",
"value": "00000-XXXXX-00000000"
}
}
],
"code": {
"coding": [
{
"system": "http://api.medlinx.online/terminology/nomenclature",
"code": "190.1558"
}
],
"text": "Печатный отчет к Генетическому тесту Атлас"
},
...
}
Права на ресурсы в Bundle
По умолчанию у контрагента нет доступа к созданным ресурсам. Права нужно явно выдать либо при создании ресурса, либо через механизм $meta-add
. Подробнее смотри Права доступа. Для получения всех данных, кроме Task
, контрагенту нужны права read
. В ресурс Task
записывается статус выполнения и ошибки, если они есть, поэтому ресурсу Task
нужно выставить права уровня и read
и updatebody
.
Получить список guid контрагентов для выставления прав можно при подключении к платформе medlinx.online
Пример Bundle
Создание заказа выполняется с помощью ресурса Bundle
с типом collection
. Все ресурсы Fhir, необходимые для создания заказа упаковываются в отдельный объект и объединяются в массив entry. Каждый объект в entry состоит из двух полей:
- fullUrl - идентификатор ресурса
- resource - содержит Fhir ресурс
fullUrl при создании заказа задается в виде urn:uuid:6ff6bb51-3706-4a0f-9bb8-d6669ff6c981
. Префикс urn:uuid:
указывает, что это локальный код в рамках bundle. Сам идентификатор является guid (uuid) и генерируется на стороне клиента. После сохранения ресурсов на сервере эти идентификаторы пропадут, они нужны только для локальных ссылок в рамках Bundle.
Зачем нужны локальные ссылки urn:uuid
? После создания ресурса на сервере возвращается уникальный идентификатор, если Вы хотите создавать все ресурсы вместе, то ресурсы, которые ссылаются друг на друга не будут иметь глобальных идентификаторов (url
), так как еще не созданы на сервере. Пример: procedureRequest имеет ссылку на specimen, который создается в том же бандле. Specimen еще не создан, поэтому сервер не может знать на какой ресурс ссылается ProcedureRequest. В таком случае мы используем относительные ссылки, т.е. не прямо ссылаемся на не созданный ресурс, а через уникальный идентификатор, который Вы генерируете на свой стороне. После того, как запрос пойдет в работу, сервер вместо Ваших идентификаторов подставит свои, созданные им. Для этого необходимо использовать urn:uuid.
{
"resourceType": "Bundle",
"type": "collection",
"entry": [{
"fullUrl": "urn:uuid:2f4c75fb-d5ce-4ae1-b7fb-06fb2aa82ae3",
"resource": {
"resourceType": "ProcedureRequest",
"meta": {
"security": [{
"system": "read",
"code": "9bce8a66-4d0d-4f85-b527-e8cd3e1f3739"
}
]
},
"identifier": [{
"system": "http://example.org",
"value": "ProcedureRequest/12345"
}
],
"requisition": {
"system": "http://example.org/codes/order-guid",
"value": "a5f09ef8-7049-4da9-9f15-ba3a7993920c"
},
"supportingInfo": [{
"reference": "contract/6fd4e899-6a7c-4fb9-bb31-0e2122e85001"
}
],
"status": "active",
"code": {
"coding": [{
"system": "http://api.medlinx.online/terminology/nomenclature",
"code": "001.014"
}
],
"text": "Общий анализ крови (без лейкоцитарной формулы и СОЭ)"
},
"subject": {
"reference": "patient/77998442-34b2-4207-8616-3c685344bdd9"
},
"occurrenceDateTime": "2017-06-20T14:33:24.9626687+03:00",
"specimen": [{
"reference": "urn:uuid:6ff6bb51-3706-4a0f-9bb8-d6669ff6c981"
}
],
"note": [{
"text": "Additional information"
}
]
}
}, {
"fullUrl": "urn:uuid:1453a2c0-0d7c-4804-9157-4a7dca8661a7",
"resource": {
"resourceType": "Task",
"meta": {
"security": [{
"system": "read",
"code": "9bce8a66-4d0d-4f85-b527-e8cd3e1f3739"
}, {
"system": "updatebody",
"code": "9bce8a66-4d0d-4f85-b527-e8cd3e1f3739"
}
]
},
"basedOn": [{
"reference": "urn:uuid:2f4c75fb-d5ce-4ae1-b7fb-06fb2aa82ae3"
}
],
"partOf": [{
"reference": "urn:uuid:5c9b9dac-0065-4583-b504-24d55bc8faf2"
}
],
"status": "requested"
}
}, {
"fullUrl": "urn:uuid:b8dc1ab7-13ca-4ed2-bf37-3e0cd82e0ab2",
"resource": {
"resourceType": "ProcedureRequest",
"meta": {
"security": [{
"system": "read",
"code": "9bce8a66-4d0d-4f85-b527-e8cd3e1f3739"
}
]
},
"identifier": [{
"system": "http://example.org",
"value": "ProcedureRequest/54321"
}
],
"requisition": {
"system": "http://example.org/codes/order-guid",
"value": "a5f09ef8-7049-4da9-9f15-ba3a7993920c"
},
"supportingInfo": [{
"reference": "contract/6fd4e899-6a7c-4fb9-bb31-0e2122e85001"
}
],
"status": "active",
"code": {
"coding": [{
"system": "http://api.medlinx.online/terminology/nomenclature",
"code": "001.014"
}
],
"text": "Общий анализ крови (без лейкоцитарной формулы и СОЭ)"
},
"subject": {
"reference": "patient/77998442-34b2-4207-8616-3c685344bdd9"
},
"occurrenceDateTime": "2017-06-20T14:33:24.9666683+03:00",
"specimen": [{
"reference": "urn:uuid:6ff6bb51-3706-4a0f-9bb8-d6669ff6c981"
}
],
"note": [{
"text": "Additional information"
}
]
}
}, {
"fullUrl": "urn:uuid:04f29cce-3951-47f5-a286-0cfbedcb2011",
"resource": {
"resourceType": "Task",
"meta": {
"security": [{
"system": "read",
"code": "9bce8a66-4d0d-4f85-b527-e8cd3e1f3739"
}, {
"system": "updatebody",
"code": "9bce8a66-4d0d-4f85-b527-e8cd3e1f3739"
}
]
},
"basedOn": [{
"reference": "urn:uuid:b8dc1ab7-13ca-4ed2-bf37-3e0cd82e0ab2"
}
],
"partOf": [{
"reference": "urn:uuid:5c9b9dac-0065-4583-b504-24d55bc8faf2"
}
],
"status": "requested"
}
}, {
"fullUrl": "urn:uuid:6ff6bb51-3706-4a0f-9bb8-d6669ff6c981",
"resource": {
"resourceType": "Specimen",
"meta": {
"security": [{
"system": "read",
"code": "9bce8a66-4d0d-4f85-b527-e8cd3e1f3739"
}
]
},
"type": {
"coding": [{
"system": "https://api.medlinx.online/terminology/specimen-type",
"code": "122555007"
}
]
},
"subject": {
"reference": "patient/77998442-34b2-4207-8616-3c685344bdd9"
},
"collection": {
"collectedDateTime": "2017-01-19T14:03:12.729028+03:00",
"method": {
"coding": [{
"system": "https://api.medlinx.online/terminology/treatment_protocol",
"code": "Протокол взятия крови из вены"
}
]
}
},
"container": [{
"identifier": [{
"system": "http://helix.ru/codes/labels",
"value": "5000000000"
}
],
"type": {
"coding": [{
"system": "https://api.medlinx.online/terminology/specimen_type",
"code": "ВПЖЕЛТГЕЛЬ"
}
]
},
"specimenQuantity": {
"value": 86
}
}
]
}
}, {
"fullUrl": "urn:uuid:5c9b9dac-0065-4583-b504-24d55bc8faf2",
"resource": {
"resourceType": "Task",
"meta": {
"security": [{
"system": "read",
"code": "9bce8a66-4d0d-4f85-b527-e8cd3e1f3739"
}, {
"system": "updatebody",
"code": "9bce8a66-4d0d-4f85-b527-e8cd3e1f3739"
}
]
},
"status": "requested",
"code": {
"coding": [{
"system": "https://api.medlinx.online/terminology/task_type",
"code": "OrderProcessingTask"
}
]
},
}
}
]
}
Ответ на создание закза
Код успешного ответа: 200
Код не успешного ответа: >=400, так же в теле ответа будет представлена расширенная информация
{
"resourceType": "OperationOutcome",
"issue": [{
"severity": "<code>", // fatal | error | warning | information
"code": "<code>", // Error or warning code
"diagnostics": "<string>", // Additional diagnostic information about the issue
}
]
}
Обработка заявок лабораторией
Лаборатория самостоятельно забирает заявки на лабораторные исследования и проверяет их валидность по своим правилам.
Если на заказ не создавался ресурс Task с кодом "OrderProcessingTask", то лаборатория не будет забирать такие заказы.
Если при обработке любого ресурса ProcedureRequest в заказе случилась ошибка, то лаборатория должна перевести Task, указывающий на этот в статус cancelled
. Информация по ошибке пишется в поле output ресурса Task.
Пример:
{
"output": [{
"valueString": "Can't find patient at reference patient/6e50742e-1202-478a-8e3a-70a1be98bee9"
}
],
"partOf": [{
"reference": "task/7cbcc738-a54e-4d20-891d-cf6aaef96286"
}
],
"status": "cancelled",
"basedOn": [{
"reference": "procedurerequest/d2b589cc-c800-4c1d-86cd-27c2f04c59be"
}
]
}
Забор результатов
После выполнения исследований Лаборатория, выполнившая исследование, выгружает в Medlinx API набор ресурсов:
- DiagnosticReport
- Observation
DiagnosticReport содержит общую информацию по результатам исследования.
Поле | Размерность | Тип | Описание |
---|---|---|---|
identifier | 0..* | Identifier | Идентификатор DiagnosticReport |
status | 1 | string | Код (registered, partial, preliminary, final) |
code | 1 | CodeableConcept | Код номенклатуры |
subject | 1 | Reference | Ссылка на пациента |
effectiveDateTime | 1 | dateTime | Clinically Relevant time/time-period for report |
issued | 1 | dateTime | Время создания отчета |
basedOn | 0..* | Reference | Ссылка на ProcedureRequest |
result | 0..* | Reference | Ссылка на результаты в виде ресурса Observation |
presentedForm | 0..* | Attachement | Отчет об исследовании |
Observation описывает конкретное измерение в рамках DiagnosticReport
Поле | Размерность | Тип | Описание |
---|---|---|---|
identifier | 0..* | Identifier | Идентификатор Observation |
status | 1 | string | Код (registered, preliminary, final, amended) |
code | 1 | CodeableConcept | Тип наблюдения по LOINC |
subject | 0..1 | Reference | Ссылка на пациента |
issued | 0..1 | dateTime | Время создания наблюдения |
value | 1 | Логическое объединение сущностей (не выделяется в отдельный объект) | Результат исследования |
value.valueQuantity | 0..1 | Quantity | Quantity |
value.valueCodeableConcept | 0..1 | CodeableConcept | CodeableConcept |
value.valueString | 0..1 | string | string |
value.valueRange | 0..1 | Range | Range |
value.valueRatio | 0..1 | Ratio | Ratio |
value.valueSampledData | 0..1 | SampledData | SampledData |
value.valueAttachment | 0..1 | Attachment | Attachment |
value.valueTime | 0..1 | time | time |
value.valueDateTime | 0..1 | dateTime | dateTime |
value.valuePeriod | 0..1 | Period | Period |
method | 0..1 | CodeableConcept | Код метода исследования |
specimen | 0..1 | Reference | Ссылка на образец |
referenceRange | 0..* | Логическое объединение сущностей (не выделяется в отдельный объект) | Референсные значения |
referenceRange.low | 0..1 | SimpleQuantity | Нижняя граница |
referenceRange.high | 0..1 | SimpleQuantity | Верхняя граница |
referenceRange.meaning | 0..1 | SimpleQuantity | Код семантики референса |
referenceRange.age | 0..1 | SimpleQuantity | Applicable age range, if relevant |
referenceRange.text | 0..1 | SimpleQuantity | Текстовое описание диапазона |
Отношение DiagnosticReport и ProcedureRequest
Лаборатория может выгружать более одного DiagnosticReport на каждый ProcedureRequest. Это имеет смысл, если заказ был комплексным (например, "4 обязательных анализа") или если лаборатория делала дополнительные тесты (LIH, подтверждающий тест на ВИЧ).
В случае, если лаборатория хочет выгрузить несколько DiagnosticReport на ProcedureRequest в каждом DiagnosticReport будет указан один и тот же ProcedureRequest в поле basedOn. Лаборатория указывает какое именно исследование описывается в DiagnosticReport через поле code.
ВАЖНО! Некоторые лаборатории могут выполнять один тест для двух разных товарных позиций (например, LIH при выполнении нескольких анализов из одной пробирки), в этом случае у DiagnosticReport в поле basedOn будут указаны все ProcedureRequest к которым он относится.
Формат FHIR не содержит сущности для заказа в целом, ProcedureRequest описывает одну товарную позицию из заказа, но лаборатория может хотеть выгружать документы на весь заказ сразу (PDF, заключение врача), в этом случае лаборатория может выгрузить DiagnosticReport, который ссылается на все ProcedureRequest и указать в нем только ссылку на отчет (см. ниже).
Получение отчетов в формате лаборатории
Лаборатория может выгружать резульататы в специальных форматах (PDF, DOCX) в дополнение к DiagnosticReport и Observation. Лаборатория заносит ссылку на документ в поле presentedForm[*].url
ресурса DiagnosticReport. Лаборатория может выгрузить несколько документов, каждый записывается отдельной записью в массив presentedForm
. Ссылка может быть в относительной или абсолютной форме. В случае относительной формы url должен быть добавлен к базовому url сервера.
Если нет прав на чтение на этот ресурс или такой ресурс не существует, будет возврат со статус кодом 404
.
По умолчанию лаборатории выдают результаты в формате PDF, формат в котором требуется получить результаты задается через Header Accept запроса, например 'Accept: image/jpeg' тип содержимого ответа содержится в Header Content-Type, например 'Content-Type: application/zip'
По запросу должен отдается статус код, длина контента и mime-type, например ("application/pdf").
{
"resourceType": "DiagnosticReport",
//,... //other fields
"presentedForm": [{
"url": "result/32b70322-20b5-4582-ba42-de0ebc5fb5c3"
}
]
}
Получение результатов в stage зоне
В зоне stage лаборатория может не обеспечивать выгрузку всех видов результатов. Необходимо заранее обговорить со службой интеграции конкретной лаборатории какие товарные позиции участвуют в тестировании и будут ли выгружаться печатные формы (PDF, DOCX).
В данный момент выдача печатных форм в stage зоне не поддерживается ни одной лабораторией.