Medlinx

Medlinx

  • Интеграция
  • Интеграция ЛИС
  • Авторизация и права доступа
  • FAQ

›Интеграция

Интеграция

  • Описание базовой интеграции
  • Обязательные/рекомендуемые поля для исследований
  • Жизненный цикл статуса заказа
  • Создание предзаказа
  • Подписка на изменение ресурса

Альтернативные способы получения результатов

  • Поиск результатов по ФИО и дате рождения

Описание базовой интеграции

Описание интеграции

Сервис medlinx.online позволяет создавать, редактировать и искать практически любые медицинские данные. Реализация опирается на стандарт Fhir STU3 (используется подмножество стандарта). Данный документ описывает как можно создавать заявки на лабораторные исследования и получать результаты.

Задачи получения номенклатуры и расчета преаналитики не отражены в Fhir, мы используем дополнительное API для этих задач.

Подготовка подключения партнера к лаборатории через внешнюю информационную систему

  1. Партнер заключает контракт с лабораторной службой (может быть заключено несколько контрактов с разной номенклатурой).
  2. Партнер заводится как организация в Medlinx API.
  3. Партнер получает логин/пароль для работы с Medlinx API.
  4. Партнер подключает модуль интеграции с Medlinx API в информационную систему.

Повседневное использование

  1. Информационная система запрашивает номенклатуру для конкретного партнера (с указанием интересующего контракта), кеширует данную информацию, и отображает доступные для заказа позиции.
  2. Оператор информационной системы (сотрудник компании партнера) формирует корзину исследований.
  3. Информационная система запрашивает по корзине опросник обязательных и рекомендуемых полей, необходимых лаборатории для выполнения исследования и выставления референсных значений.
  4. Оператор информационной системы заполняет опросник.
  5. Информационная система отправляет запрос в Medlinx API на расчет преаналитики (протокол забора, протокол обработки биоматериала, число и тип пробирок, коды пробирок для печати на штрих-кодах, информация о способе транспортировки) и получение списка дополнительных полей, требуемых лабораторией.
  6. Компания партнер производит действия по забору биоматериала
  7. В информационной системе формируется заявка на лабораторные исследования и отправляется в Medlinx API
  8. При изменении статуса заявки Medlinx API оповещает информационную систему о изменении
  9. Информационная система забирает значимую информацию
Запрос опросников и преаналитики должен выполняться по всей корзине. Для большого числа исследований биоматериал может браться в одну пробирку.
Заполнение опросника может выполнять врач.

Interaction

API не получает нотификаций от лаборатории о изменении номенклатуры.
В то же время обычно лаборатория не требует забора номенклатуры в реальном времени, номенклатура может кэшироваться на сутки, если при заключении договора лаборатория не указала обратное.

Контракты взаимодействия

По умолчанию все запросы должны выполняться через HTTPS. Ниже приведены адреса url в зависимости от окруждения:

ОкружениеEndpointТип
Stagehttps://api-stage.medlinx.online/api
Stagehttps://auth-stage.medlinx.online/auth
Prodhttps://api.medlinx.online/api
Prodhttps://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Описание
AuthorizationHeaderсм. Авторизация
contractQueryКод контракта

Ответ запроса номенклатуры

Ответ содержит массив доступных исследований. Каждый элемент содержит код, название, группу исследований, развернутое описание, требования к сдаче и возможные типы биоматериала.

Требования к сдаче описываются массивом строк, где каждая строка описывает независимый элемент подготовки.

У исследования могут быть обязательные типы биоматериала и типы биоматериала на выбор. Например, в исследовании "Проба Реберга (клиренс эндогенного креатинина)" в некоторых контрактах обязательным типом биоматериала будет "Суточная моча", а типами биоматериала на выбор будут "Венозная кровь" или "Капиллярная кровь".

Поле 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Описание
AuthorizationHeaderсм. Авторизация
contractQueryКод контракта

Ответ времени выполнения исследований

Ответ содержит массив с перечеслением времени выполнения для каждого исследования в контракте. Каждый элемент содержит код, время выполнения в часах и текстовое описание.


[
    {
        "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Описание
AuthorizationHeaderсм. Авторизация
Content-TypeHeaderapplication/json
RequestBodyИдентификаторы номенклатуры

Request: Object

ПолеТипОписание
contractStringКод контракта
analyticsrequestsarray[Items]Выбранные исследования
ПолеТипОписание
idStringid из номенклатуры
specimen_codeStringТип биоматериала (из ответа Номенклатуры)
bodysite_codeStringМесто взятия (из ответа Номенклатуры)
container_typeStringКод контейнера (из ответа Номенклатуры)

Пример запроса

Пример запроса для позиции "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Описание
AuthorizationHeaderсм. Авторизация
Content-TypeHeaderapplication/json
RequestBodyИдентификаторы номенклатуры

Request: Object

ПолеТипОписание
contractStringКод контракта
includetransportcontainerBoolДобавлять ли в выдачу транспортный контейнер, опциональный параметр, по умолчанию false
analyticsrequestsarray[Items]Выбранные исследования
ПолеТипОписание
idStringid из номенклатуры
guidStringГенерируемый на клиенте guid для связывания образцов и позиций в корзине
specimen_codeStringТип биоматериала (из ответа Номенклатуры)
bodysite_codeStringМесто взятия (из ответа Номенклатуры)
container_typeStringКод контейнера (из ответа Номенклатуры)

Штрих код указывается в поле "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Описание
AuthorizationHeaderсм. Авторизация
PatientobjectОбъект 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Описание
AuthorizationHeaderсм. Авторизация
BundleobjectОбъект 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Права доступа
statusrequested, см Жизненный цикл заказа
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 уровня заказа
statusrequested, см Жизненный цикл заказа

Пример


{
    "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 датой взятия биоматериала (даты должны быть выровнены по времени). Эта информация необходима для правильной загрузки последовательности образцов.
containeridentifier - штрих-код, 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 содержит общую информацию по результатам исследования.

ПолеРазмерностьТипОписание
identifier0..*IdentifierИдентификатор DiagnosticReport
status1stringКод (registered, partial, preliminary, final)
code1CodeableConceptКод номенклатуры
subject1ReferenceСсылка на пациента
effectiveDateTime1dateTimeClinically Relevant time/time-period for report
issued1dateTimeВремя создания отчета
basedOn0..*ReferenceСсылка на ProcedureRequest
result0..*ReferenceСсылка на результаты в виде ресурса Observation
presentedForm0..*AttachementОтчет об исследовании

Observation описывает конкретное измерение в рамках DiagnosticReport

ПолеРазмерностьТипОписание
identifier0..*IdentifierИдентификатор Observation
status1stringКод (registered, preliminary, final, amended)
code1CodeableConceptТип наблюдения по LOINC
subject0..1ReferenceСсылка на пациента
issued0..1dateTimeВремя создания наблюдения
value1Логическое объединение сущностей (не выделяется в отдельный объект)Результат исследования
value.valueQuantity0..1QuantityQuantity
value.valueCodeableConcept0..1CodeableConceptCodeableConcept
value.valueString0..1stringstring
value.valueRange0..1RangeRange
value.valueRatio0..1RatioRatio
value.valueSampledData0..1SampledDataSampledData
value.valueAttachment0..1AttachmentAttachment
value.valueTime0..1timetime
value.valueDateTime0..1dateTimedateTime
value.valuePeriod0..1PeriodPeriod
method0..1CodeableConceptКод метода исследования
specimen0..1ReferenceСсылка на образец
referenceRange0..*Логическое объединение сущностей (не выделяется в отдельный объект)Референсные значения
referenceRange.low0..1SimpleQuantityНижняя граница
referenceRange.high0..1SimpleQuantityВерхняя граница
referenceRange.meaning0..1SimpleQuantityКод семантики референса
referenceRange.age0..1SimpleQuantityApplicable age range, if relevant
referenceRange.text0..1SimpleQuantityТекстовое описание диапазона

Отношение 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 зоне не поддерживается ни одной лабораторией.

Обязательные/рекомендуемые поля для исследований →
  • Описание интеграции
  • Подготовка подключения партнера к лаборатории через внешнюю информационную систему
  • Повседневное использование
  • Контракты взаимодействия
  • Авторизация
    • Получение номенклатуры
    • Ответ запроса номенклатуры
    • Получение времени выполнения исследований
    • Ответ времени выполнения исследований
  • Получение опросника обязательных рекомендуемых полей
    • Пример запроса
    • Пример ответа
  • Получение данных ПРИС
    • Пример запроса преаналитики
    • Ответ запроса преаналитики
  • Создание пациента
    • Пример
    • Ответ
  • Формирование заказа
    • Ресурс ProcedureRequest
    • Ресурс Task
    • Ресурс Specimen
    • Ресурс QuestionnaireResponse
    • Исследования Атлас
    • Права на ресурсы в Bundle
    • Пример Bundle
    • Ответ на создание закза
  • Обработка заявок лабораторией
  • Забор результатов
    • Отношение DiagnosticReport и ProcedureRequest
    • Получение отчетов в формате лаборатории
    • Получение результатов в stage зоне
Medlinx
Docs
ИнтеграцияАвторизацияFAQ
Copyright © 2025 Medlinx