Интеграция МИС-ЛИС для заказа лабораторных исследований
Целевая аудитория
Сервис интеграции предоставляет интерфейс для формирования и заказа лабораторных результатов, а также получения результатов. Реализация опирается на стандарт Fhir R4.
Данный документ описывает интеграцию для разработчиков. Конечные пользователи для подключения должны выполнить следующие шаги:
- Заключить контракт с лабораторной службой (может быть заключено несколько контрактов с разной номенклатурой).
- Получить логин/пароль для работы с API.
- Получить контракты для работы.
- Подключить модуль интеграции с API в информационную систему.
Предварительные условия
Разработчики интеграционного модуля должны выполнить следующие шаги:
- Получить тестовый контракт у представителей лаборатории.
- Утвердить тип авторизации с представителями лаборатории.
- Получить логин/пароль для работы с API.
- Получить client_id, client_secret для работы с API.
- Получить контракты для работы.
- Реализовать взаимодействие с API.
- Провести тестирование на stage зоне лаборатории.
Описание интеграции
Заказ лабораторных исследований предполагает несколько действий. Часть этих действий выполняется раз в сутки, часть должна выполняться на каждый запрос. Все запросы требуют авторизации. Описание авторизации см. в разделе авторизация.
Действия, выполняемые раз в сутки:
- Запрос каталога доступных исследований.
- (Опционально) Запрос цен.
Действия, выполняемые на каждый запрос:
- Запрос преаналитики на корзину исследований.
- Формирование опросников на корзину заказа.
- Формирование ответа на опросник.
- Объединение результатов запроса преаналитики и ответа на опросник в заказ.
- Отправка заказа в лабораторию.
Получение результатов можно реализовать двумя способами:
- Периодическим опросом 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 |
Запрос каталога исследований
GET /r4/fhir/catalog/<Contract_Code>
Запрос предоставляет информацию о всех предоставляемых в рамках контракта исследованиях, времени выполнения, обязательных и рекомендуемых полях.
В случае успеха Status code: 200 OK. Тело - Bundle, который содержит ресурсы:
Ресурс | Размерность | Назначение |
---|---|---|
Composition | 1..1 | Задает структуру каталога, содержит ссылки на CatalogEntry, которые описываю исследования |
CatalogEntry | 0..* | Товарная позиция каталога, необходим для указания, что старые исследования заменены, или что данное исследование может автоматом привести к другому (пример, микробиология) |
ActivityDefinition | 0..* | Техническое описание товарной позиции |
SpecimenDefinition | 0..* | Описание типов БМ, которые необходимы для выполнения исследования, поддерживает выбор БМ |
ObservationDefinition | 0..* | Описывает, какие компоненты исследований будут заполнены на выходе. |
Questionnaire | 0..* | Описание какие вопросы нужно задать при заявке. |
В случае ошибки Status code: >400. Тело: OperationOutcome
Ссылки внутри Bundle
Все ресурсы в Bundle обернуты в объекты BackboneElement и лежат в массиве entry. Каждый такой объект имеет уникальный ключ в рамках одного бандла - поле fullUrl и тело - поле resource, которое содержит FHIR ресурс. fullUrl имеет вид urn:uuid:<guid>
.
Все ссылки внутри Bundle опираются на fullUrl. Рассмотрим пример:
{
"resourceType": "Bundle",
"type": "collection",
"entry": [
{
"fullUrl": "urn:uuid:8dce8727-3d4f-40f5-85c8-eb509499cfae",
"resource": {
"resourceType": "Composition",
"status": "final",
"type": {
"text":"Catalog"
},
"date" : "2019-01-01",
"title": "Контракт об оказании услуг",
"id": "8dce8727-3d4f-40f5-85c8-eb509499cfae",
"section": [
{
"title": "02. Общеклинические исследования",
"entry": [
{
"reference": "urn:uuid:b2ffa03c-943e-4f03-b21e-4bad0b2c9af3"
}
]
}
]
}
},
{
"fullUrl": "urn:uuid:b2ffa03c-943e-4f03-b21e-4bad0b2c9af3",
"resource": {
"resourceType": "CatalogEntry",
...
Ресурс Composition ссылается на ресурс CatalogEntry используя reference с его fullUrl (urn:uuid:b2ffa03c-943e-4f03-b21e-4bad0b2c9af3
).
Запрос контракта
GET /r4/fhir/contract/<Contract_Code>
В случае успеха Status code: 200 OK. Тело - Contract
В случае ошибки Status code: >400. Тело: OperationOutcome
Цены содержатся в массиве term.0.asset.valuedItem
. Каждый объект массива содержит:
Поле | Назначение |
---|---|
entityCodeableConcept.text | Название исследования |
identifier.value | Код исследования |
unitPrice.value | Цена исследования |
Выбор корзины исследований
В ходе работы оператор формирует корзину исследований, которую собирается заказать в лаборатории. Выбор осуществляется из доступных товарных позиций (ActivityDefinition), которые вернул запрос каталога. Для каждой товарной позиции могут существовать временные или постоянные ограничения на выбор.
Временные ограничения указываются в ресурсе CatalogEntry, которая ссылается на конкретный ActivityDefinition. CatalogEntry содержит extension с url - https://api.medlinx.online/extension/eta-status
, значением в поле - valueCode
. Значение может быть трех типов: available
, delayed
, stopped
.
Поле | Назначение |
---|---|
available | Исследование доступно для заказа |
delayed | Исследование выполняется с задержками. В CatalogEntry появляется extension с url - https://api.medlinx.online/extension/eta-delay-duration и значением в поле - valueDuration , которое указывает ожидаемое время задержки. |
stopped | Исследование не выполняется |
Товарные позиции со статусом stopped
не будут приниматься лабораторией.
Постоянные ограничения задаются в ресурсе CatalogEntry в additionalCharacteristic. Если товарная позиция не может быть добавлена в заказ более одного раза, то у нее будет additionalCharacteristic с url - https://helix.ru/codes/nomenclature-restrictions
и значением в поле - valueCodeableConcept
, в данный момент поле может принимать только одно значение - at-most-one
, отсутствие additionalCharacteristic с данной url означает, что ограничений по числу позиций - нет. Так же в additionalCharacteristic указывается возможность множественного выбора БМ с url - https://helix.ru/codes/specimen-restrictions
и значением в поле - valueCodeableConcept
. Значение может быть двух типов: exactly-one
и one-or-more
.
После выбора товарных позиций, для каждой позиции необходимо выбрать биоматериал. Список биоматериалов задается в ресурсе ActivityDefinition в поле - specimenRequirement. Часть из них обязательные, часть - могут быть выбраны. Обязательность биоматериала задается в ресурсе SpecimenDefinition в extension с url - https://helix.ru/extension/required
. Для некоторых цитологических и гистологических исследований количество взятого биоматериала неизвестно заранее, для таких исследований весь собранный биоматериал поступает в лабораторию под одним ШК, и для лаборатории указывается количество образцов под одним ШК в поле Specimen.Collection.Quantity.Value
, такие биоматериалы отмечены в ресурсе SpecimenDefinition в extension с url - https://helix.ru/extension/sample-count-required
значением true
.
Запрос преаналитики на корзину исследований
После формирования корзины, МИС должна запросить какой объем биоматериала необходим для выполнения. Расчет должен выполняться на всю корзину. Если запрашивать преаналитику на каждую отдельную позицию заказа можно получить неверный расчет!
POST /r4/fhir/$x-preanalytics
Требуемые заголовки:
Имя | Описание |
---|---|
Authorization | Bearer <jwt_token> |
Content-Type | application/fhir+json |
Необязательные параметры запроса:
Имя | Тип | Описание |
---|---|---|
includeTransportContainer | bool | Добавлять ли в ответ преаналитики информацию о транспортном контейнере (при его необходимости), по умолчанию false |
Тело запроса должно содержать все выбранные товарные позиции и биоматериал для своего выполнения. Тело запроса представляет собой Bundle с ресурсами:
- Contract
- ActivityDefinition каждой товарной позиции в которой заполнены а. Identifier (как в каталоге) б. specimenRequirement (должен содержать ссылки на выбранные типы БМ)
- SpecimenDefinition на которые ссылаются specimenRequirement. Обязательное поле - Identifier.
Пример тела запроса:
{
"resourceType": "Bundle",
"type": "collection",
"entry": [
{
"fullUrl": "urn:uuid:000c8786-c96a-4967-be5e-11e202055460",
"resource": {
"resourceType": "Contract",
"identifier": [
{
"system": "https://helix.ru/codes/contract",
"value": "C000000001"
}
]
}
},
{
"fullUrl": "urn:uuid:85ded736-1860-4683-8e7b-0bfcd3da1857",
"resource": {
"resourceType": "ActivityDefinition",
"status": "active",
"identifier": [
{
"value": "06-230",
"system": "https://helix.ru/codes/nomenclature"
}
],
"specimenRequirement": [
{
"reference": "urn:uuid:d232f756-22db-49c2-ab6c-566287474f6c"
},
{
"reference": "urn:uuid:73f40f3e-636b-43f0-af68-a3ef8ef2dc97"
},
{
"reference": "urn:uuid:85990a64-e556-4882-beb7-12d069454f21"
}
]
}
},
{
"fullUrl": "urn:uuid:d232f756-22db-49c2-ab6c-566287474f6c",
"resource": {
"resourceType": "SpecimenDefinition",
"identifier": {
"system": "https://api.medlinx.online/extra/supportingInfo",
"value": "81425"
}
}
},
{
"fullUrl": "urn:uuid:73f40f3e-636b-43f0-af68-a3ef8ef2dc97",
"resource": {
"resourceType": "SpecimenDefinition",
"identifier": {
"system": "https://api.medlinx.online/extra/supportingInfo",
"value": "81431"
}
}
},
{
"fullUrl": "urn:uuid:85990a64-e556-4882-beb7-12d069454f21",
"resource": {
"resourceType": "SpecimenDefinition",
"identifier": {
"system": "https://api.medlinx.online/extra/supportingInfo",
"value": "79703"
}
}
},
{
"fullUrl": "urn:uuid:7996d121-8616-4223-804a-01e5a157cab5",
"resource": {
"resourceType": "ActivityDefinition",
"status": "active",
"identifier": [
{
"value": "06-093",
"system": "https://helix.ru/codes/nomenclature"
}
],
"specimenRequirement": [
{
"reference": "urn:uuid:52e191d7-e293-48c2-8fce-f5ad130bfc52"
}
]
}
},
{
"fullUrl": "urn:uuid:52e191d7-e293-48c2-8fce-f5ad130bfc52",
"resource": {
"resourceType": "SpecimenDefinition",
"identifier": {
"system": "https://api.medlinx.online/extra/supportingInfo",
"value": "107"
}
}
},
{
"fullUrl": "urn:uuid:663903cb-0fbb-4dc1-a277-80d42be2361c",
"resource": {
"resourceType": "ActivityDefinition",
"status": "active",
"identifier": [
{
"value": "06-094",
"system": "https://helix.ru/codes/nomenclature"
}
],
"specimenRequirement": [
{
"reference": "urn:uuid:97b5539d-d6cf-46a3-b2f8-4201fe4fc2c1"
}
]
}
},
{
"fullUrl": "urn:uuid:97b5539d-d6cf-46a3-b2f8-4201fe4fc2c1",
"resource": {
"resourceType": "SpecimenDefinition",
"identifier": {
"system": "https://api.medlinx.online/extra/supportingInfo",
"value": "108"
}
}
}
]
}
В случае успеха Status code: 200 OK. Тело - Bundle
Bundle содержит шаблон заказного Bundle, после объединения образцов. В Bundle входит:
- ServiceRequest
- Specimen
Specimen описывают реальные образцы, которые должны быть взяты и отправлены в лабораторию.
Пример ответа:
{
"resourceType": "Bundle",
"type": "collection",
"entry": [{
"fullUrl": "urn:uuid:85ded736-1860-4683-8e7b-0bfcd3da1857",
"resource": {
"resourceType": "ServiceRequest",
"status": "active",
"intent": "order",
"code": {
"coding": [{
"system": "https://helix.ru/codes/nomenclature",
"code": "06-230"
}
],
"text": "Комплексный анализ на витамины (A, D, E, K, C, B1, B5, B6)"
},
"specimen": [{
"reference": "urn:uuid:0ff5cfb2-e7fe-4274-bb4d-07e82c2a1b99"
}, {
"reference": "urn:uuid:bde88dbe-fa5d-4b53-92f2-2fee9affce63"
}
]
}
}, {
"fullUrl": "urn:uuid:7996d121-8616-4223-804a-01e5a157cab5",
"resource": {
"resourceType": "ServiceRequest",
"status": "active",
"intent": "order",
"code": {
"coding": [{
"system": "https://helix.ru/codes/nomenclature",
"code": "06-093"
}
],
"text": "Мышьяк в сыворотке"
},
"specimen": [{
"reference": "urn:uuid:d5f8124b-7e63-42fc-a27e-5a8cc16f6971"
}
]
}
}, {
"fullUrl": "urn:uuid:663903cb-0fbb-4dc1-a277-80d42be2361c",
"resource": {
"resourceType": "ServiceRequest",
"status": "active",
"intent": "order",
"code": {
"coding": [{
"system": "https://helix.ru/codes/nomenclature",
"code": "06-094"
}
],
"text": "Селен в сыворотке"
},
"specimen": [{
"reference": "urn:uuid:d5f8124b-7e63-42fc-a27e-5a8cc16f6971"
}
]
}
}, {
"fullUrl": "urn:uuid:0ff5cfb2-e7fe-4274-bb4d-07e82c2a1b99",
"resource": {
"resourceType": "Specimen",
"extension": [{
"url": "https://api.medlinx.online/extra/supportingInfo",
"valueString": "79702, 81425, 81431"
}
],
"type": {
"coding": [{
"system": "https://helix.ru/codes/sample-type",
"code": "ВЕНКРОВЬ"
}
],
"text": "Венозная кровь"
},
"collection": {
"quantity": {
"value": 600.0
},
"method": {
"text": "Протокол взятия крови из вены"
},
"collectedDateTime": "2022-01-12T08:25:14.3861061+00:00"
},
"processing": [{
"description": "Сразу ЦФ (при 2000-2200 g, 10 мин.), перенести плазму в транспортную пробирку, обернуть фольгой, хранить при -20 С"
}, {
"description": "Транспортировка в замороженном состоянии в светонепроницаемом контейнере (обернутом фольгой)"
}
],
"container": [{
"description": "Пробирка вакуумная с наполнителем К2-ЭДТА (фиолетовая крышка), 6 мл",
"type": {
"coding": [{
"system": "https://api.medlinx.online/terminology/specimen-container-type",
"code": "ВПФИОЛ"
}
]
}
},
,
{
"description": "Транспортная пробирка, 5 мл",
"type": {
"coding": [
{
"system": "https://api.medlinx.online/terminology/specimen-container-type",
"code": "ТРАНСПРОБ"
}
]
}
}
]
}
}, {
"fullUrl": "urn:uuid:bde88dbe-fa5d-4b53-92f2-2fee9affce63",
"resource": {
"resourceType": "Specimen",
"extension": [{
"url": "https://api.medlinx.online/extra/supportingInfo",
"valueString": "79703"
}
],
"type": {
"coding": [{
"system": "https://helix.ru/codes/sample-type",
"code": "ВЕНКРОВЬ"
}
],
"text": "Венозная кровь"
},
"collection": {
"quantity": {
"value": 3500.0
},
"method": {
"text": "Протокол взятия крови из вены"
},
"collectedDateTime": "2022-01-12T08:25:14.3861061+00:00"
},
"processing": [{
"description": "Формирование сгустка при КТ (30–45 минут), ЦФ (при 2000-2200 g, 10 мин.), сыворотку перенести в транспортную пробирку, обернуть фольгой, хранить при -20 С"
}, {
"description": "Транспортировка в замороженном состоянии в светонепроницаемом контейнере (обернутом фольгой)"
}
],
"container": [{
"description": "Пробирка вакуумная с активатором свертывания и гелем (желтая крышка), 5 мл, охлажденная",
"type": {
"coding": [{
"system": "https://api.medlinx.online/terminology/specimen-container-type",
"code": "ВПЖЕЛТГЕЛЬОХЛ"
}
]
}
}
]
}
}, {
"fullUrl": "urn:uuid:d5f8124b-7e63-42fc-a27e-5a8cc16f6971",
"resource": {
"resourceType": "Specimen",
"extension": [{
"url": "https://api.medlinx.online/extra/supportingInfo",
"valueString": "107, 108"
}
],
"type": {
"coding": [{
"system": "https://helix.ru/codes/sample-type",
"code": "ВЕНКРОВЬ"
}
],
"text": "Венозная кровь"
},
"collection": {
"quantity": {
"value": 2000.0
},
"method": {
"text": "Протокол взятия крови из вены"
},
"collectedDateTime": "2022-01-12T08:25:14.3861061+00:00"
},
"processing": [{
"description": "Формирование сгустка при КТ (30–45 минут), ЦФ (при 2000-2200 g, 10 мин.), сыворотку перенести в транспортную пробирку, хранить при +2 - +8 С"
}, {
"description": "Транспортировка с хладагентом"
}
],
"container": [{
"description": "Пробирка вакуумная с активатором свертывания и гелем (желтая крышка), 5 мл",
"type": {
"coding": [{
"system": "https://api.medlinx.online/terminology/specimen-container-type",
"code": "ВПЖЕЛТГЕЛЬ"
}
]
}
}
]
}
}
]
}
В случае ошибки Status code: >400. Тело: OperationOutcome
Формирование опросников на корзину заказа
Лаборатория может запрашивать дополнительную информацию для выполнения исследований. Эти вопросы могут требоваться для выставления референсных значений или для выполнения требований регуляторов. Каждый ресурс ActivityDefinition может ссылаться на необходимый опросник через extension с url - http://hl7.org/fhir/StructureDefinition/servicerequest-questionnaireRequest
. Все опросники будут содержаться в Bundle.
Для всех ActivityDefinition необходимо выбрать соответствующий им Questionnaire, если они представлены. Далее необходимо объединить опросники в один. Это делается так:
- Выбираются все вопросы (гарантируется, что все вопросы будут на первом уровне вложенности) из всех опросников.
- По всем вопросам отсеиваются дубли по linkId (если встречаются вопросы с разным значением флага required, то при группировке поле required = true должно быть в приоритете).
- Оставшиеся вопросы формируют новый единый опросник корзины.
Пример опросника:
{
"resourceType": "Bundle",
"entry": [
{
"fullUrl": "urn:uuid:4f8b425a-9d6e-42ba-a1de-fb8e33e25709",
"resource": {
"resourceType": "Questionnaire",
"id": "4f8b425a-9d6e-42ba-a1de-fb8e33e25709",
"status": "active",
"item": [
{
"linkId": "X_ANAM_DIABET",
"text": "Наличие диабета в анамнезе?",
"type": "choice",
"required": false,
"answerValueSet": "urn:uuid:5a41374d-dcbd-4436-920e-21baf85c4fe8"
},
{
"linkId": "X_PREV_DRUGS",
"text": "Укажите принимаемые препараты?",
"type": "string",
"required": false,
"maxLength" : 200
}
]
}
},
{
"fullUrl": "urn:uuid:5a41374d-dcbd-4436-920e-21baf85c4fe8",
"resource": {
"resourceType": "ValueSet",
"id": "5a41374d-dcbd-4436-920e-21baf85c4fe8",
"url": "https://api.medlinx.online/terminology/yes_no_und",
"status": "active",
"expansion": {
"contains": [
{
"code": "U",
"display": "Не указано"
},
{
"code": "Y",
"display": "Да"
},
{
"code": "N",
"display": "Нет"
}
]
}
}
}
]
}
Формирование ответа на опросник
Ответ на опросник должен быть представлен ресурсом QuestionnaireResponse. Структура QuestionnaireResponse должна повторять структуру Questionnaire и иметь те же linkId. Все поля, отмеченные флагом required == true, остальные поля могут быть не заполнены.
Обращаем внимание, что для опросника с вариантами выбора и кодовой системой https://api.medlinx.online/terminology/yes-spc-no
допускается произвольная форма ответа
Пример
{
"answer": [
{
"valueCoding": {
"code": "Да, антикоагулянты каждый день",
"system": "https://api.medlinx.online/terminology/yes-spc-no"
}
}
],
"linkId": "X_TOOK_MEDICATION_DURING_LAST_FOUR_WEEKS"
}
Исследования Атлас
Заказы с исследованиями Атлас отличаются тем, что должны передаваться несколько штрих-кодов, а в некоторых случаях номер старого заказа.
Если заказывается исследования 42-042, 42-085, 42-086, то необходимо передавать 2 штрих-кода: лаборатории и Атлас с кодовой системой http://atlas.ru/codes/labels в формате 0000-0000
для 42-042, 42-085 и в формате 000-000-000
для 42-086.
Пример
{
"resourceType": "Specimen",
"container": [{
"identifier": [{
"system": "http://helix.ru/codes/labels",
"value": "5000000000"
}, {
"system": "http://atlas.ru/codes/labels",
"value": "1111-1111"
}]
}
...
]
...
}
]
}
Если заказывается только
дополнительное исследование 90-1558, то необходимо передавать старый номер заказа, в котором выполнялось основное исследование. Старый номер заказа записывается в ресурсе ServiceRequest
в basedOn.reference.Identifier
c кодовой системой http://helix.ru/codes/mis в формате 00000-XXXXX-00000000
.
Пример
{
"resource": {
"resourceType": "ServiceRequest",
"code": {
"coding": [
{
"system": "https://helix.ru/codes/nomenclature",
"code": "90-1558"
}
],
"text": "Генетический тест Атлас"
},
"basedOn":[
{
"identifier": {
"system": "https://helix.ru/codes/mis",
"value": "00000-XXXXX-00000000"
}
}
],
...
}
Формирование объекта заказа
Объект заказа формируется из нескольких частей:
- Ответа преаналитики
- QuestionnaireResponse
- Ресурса Patient
Ответ преаналитики является ресурсом Bundle. В entry необходимо добавить запись resourceEntry - с ресурсом QuestionnaireResponse (ответ на вопросы опросника) и fullUrl. FullUrl формируется из префикса "urn:uuid:" и нового uuid(guid). Во все ресурсы с типом ServiceRequest в поле supportingInfo заносятся ссылки на FullUrl QuestionnaireResponse в Bundle.
Также в Bundle необходимо добавить ресурс Patient. Ресурс Patient обязан иметь заполенные поля name (name.family, name.given[0], name.given[1]), gander и birthDate (текущий возраст должен быть меньше 120 лет). В случае анонимного заказа поле name.family должно состоять из 10 цифр, name.given[0] и name.given[1] должны быть равны "-".
Пример ресурса Patient:
{
"resourceType": "Patient",
"name": [{
"family": "Иванов",
"given": ["Иван", "Иванович"]
}
],
"telecom": [{
"system": "phone",
"value": "79876543210",
"use": "mobile"
}, {
"system": "email",
"value": "test@medlinx.online"
}
],
"gender": "male",
"birthDate": "1950-01-25"
}
Часть ресурсов в заказе должны быть дополнены:
- Клиент должен проставить всем ресурсам ServiceRequest в поле subject.reference ссылку на FullUrl ресурса Patient.
- Клиент должен проставить всем ресурсам ServiceRequest в поле supportingInfo.reference.Identifier ссылку на контракт. Кодовая система может быть получена у принимающей стороны.
- Клиент должен заполнить номера штрихкодов образцов в соответствующие поля -
specimen.Container.Identifier(system = <кодовая сисема штрихкодов лаборатории>).Value
для каждого ресурса Specimen. Некоторые лаборатории могут сами назначать коды и проставлять их в ответе преаналитики, заполняющая сторона должна обрабатывать такие ситуации.
Передача дополнительных данных
Данные об идентификаторе врача и номере карты пациента передаются в ресурсе QuestionnaireResponse вместе с остальными ответами на вопросы.
Поле | LinkId | Тип данных |
---|---|---|
Номер карты клиента | X_CLINICAL_RECORD | string |
Идентификатор врача | X_PRACTITIONER_ID | string |
Пример:
{
"answer": [{
"valueString": "номер карты"
}
],
"linkId": "X_CLINICAL_RECORD"
}
Взаимодействие по контракту ОМС
Данные по ОМС передаются в ресурсе QuestionnaireResponse вместе с остальными ответами на вопросы. Все поля обязательны для заполнения.
Поле | LinkId | Тип данных | Кодовая система |
---|---|---|---|
Фамилия | OmsInfo.PatientLastName | string | |
Имя | OmsInfo.PatientFirstName | string | |
Отчество | OmsInfo.PatientMiddleName | string | |
Дата рождения | OmsInfo.PatientBirthDate | dateTime | |
Пол | OmsInfo.PatientGender | Coding | "http://hl7.org/fhir/administrative-gender" |
Адрес регистрации | OmsInfo.PatientRegUnStructAddress | string | |
Адрес проживания | OmsInfo.PatientLiveUnStructAddress | string | |
Тип удостоверения личности | OmsInfo.PatientDocType | Coding | "https://api.medlinx.online/terminology/tfoms-id-type" |
Серия удостоверения личности | OmsInfo.PatientSerialDoc | string | |
Номер удостоверения личности | OmsInfo.PatientDocNumber | string | |
Серия полиса | OmsInfo.PatientPolicySeries | string | |
Номер полиса | OmsInfo.PatientPolicyNumber | string | |
Дата начала действия полиса | OmsInfo.PatientPolicyStartDate | dateTime | |
Плательщик | OmsInfo.PatientAccountPlace | Coding | "https://api.medlinx.online/terminology/tfoms-payor-id" |
Тип полиса | OmsInfo.PatientPolicyType | Coding | "https://api.medlinx.online/terminology/tfoms-coverage-type" |
Номер СНИЛС | OmsInfo.PatientSnils | string | |
Статус пациента | OmsInfo.PatientStatus | Coding | "https://api.medlinx.online/terminology/tfoms-patient-status" |
Справочники ОМС
Тип удостоверения личности
Код | Значение |
---|---|
1 | ПАСПОРТ РОССИИ |
2 | ПАСПОРТ |
3 | СВИД О РОЖД |
4 | ВРЕМ УДОСТ |
5 | ПРОЧЕЕ |
6 | ИНПАСПОРТ |
7 | СПРАВКА |
8 | ПАСПОРТ МОРЯКА |
10 | ЗГПАСПОРТ |
11 | УДОСТ ОФИЦЕРА |
12 | СПРАВКА ОБ ОСВ |
13 | ВОЕННЫЙ БИЛЕТ |
14 | ДИППАСПОРТ РФ |
15 | СВИД БЕЖЕНЦА |
16 | ВИД НА ЖИТЕЛЬ |
17 | УДОСТ БЕЖЕНЦА |
18 | ЗГПАСПОРТ РФ |
19 | ВОЕН БИЛЕТ ОЗ |
20 | ПАСПОРТ МОРФЛТ |
24 | СВИД О РОЖД НЕ РФ |
Плательщик
Код | Значение |
---|---|
48 | ГСМК |
55 | КапитПолис |
34 | МАКС-М |
33 | РГС-Мед |
64 | РЕСО |
66 | Росно |
19 | СОГАЗ-Мед |
269 | кТФ3 |
Тип полиса
Код | Значение |
---|---|
1 | Полис ОМС старого образца |
2 | Временное свидетельство |
3 | Полис ОМС единого образца |
Статус пациента
Код | Значение |
---|---|
4 | Работающий |
5 | Работающий пенсионер |
6 | Неработающий |
2 | Неопределён |
7 | Неработающий пенсионер |
9 | Новорожденный |
10 | Дошкольник |
11 | Ребенок до 14 лет |
12 | Студент / учащийся |
Отправка заказа в лабораторию
Запрос в лабораторию состоит из двух частей: Bundle (collection) со всеми ресурсами, которые нужны для создания заказа в лаборатории, и Task для управления заявкой. Task должен иметь ссылку на Bundle в поле input, type должен иметь систему "https://api.medlinx.online/terminology/order-bundle"
, значение иметь тип valueReference. Пример Task:
{
"resourceType": "Task",
"intent": "order",
"status": "requested",
"meta": {
"security": [{
"system": "read",
"code": "service"
}, {
"system": "updatebody",
"code": "service"
}
]
},
"code": {
"coding": [{
"system": "https://api.medlinx.online/terminology/task_type",
"code": "OrderProcessingTask"
}
]
},
"input": [{
"type": {
"coding": [{
"system": "https://api.medlinx.online/terminology/order-bundle"
}
]
},
"valueReference": {
"reference": "urn:uuid:e6559085-9150-45e4-9cdf-2e46d575e61b"
}
}
]
}
Система поддерживает создание ресурсов отдельными запросами или единым запросом со всеми ресурсами.
Создание ресурсов одним запросом
Отправка заказа
POST /r4/fhir
Требуемые заголовки:
Имя | Описание |
---|---|
Authorization | Bearer <jwt_token> |
Content-Type | application/fhir+json |
Тело запроса - Bundle с типом transaction
. Bundle должен содержать два entry - Task и Bundle (тип - collection
) со всеми ресурсами для создания заказа. У каждого entry должен быть заполнен fullUrl строкой вида urn:uuid:<uuid>
. У каждого entry должен быть заполнен request.method
значением POST
. Ссылка Task.input(https://api.medlinx.online/terminology/order-bundle).valueReference
должна указывать на fullUrl Bundle (тип - collection
).
Пример запроса:
{
"resourceType": "Bundle",
"type": "transaction",
"entry": [
{
"request": {
"method": "POST",
"url":"Bundle"
},
"fullUrl": "urn:uuid:e6559085-9150-45e4-9cdf-2e46d575e61b",
"resource": {
"resourceType": "Bundle",
"type": "collection",
"meta": {
"security": [
{
"system": "read",
"code": "service"
},
{
"system": "updatebody",
"code": "service"
}
]
},
"entry": [
{
"fullUrl": "urn:uuid:d47a6987-0bbd-4fd7-8b7b-e2d90a744a24",
"resource": {
"resourceType": "Patient",
"name": [
{
"given": [
"Максим",
"Александрович"
],
"family": "Иванов"
}
],
"gender": "female",
"birthDate": "1982-12-02"
}
},
{
"fullUrl": "urn:uuid:3698bb9d-6617-4602-9bd9-0cc79ddc2ba8",
"resource": {
"resourceType": "Specimen",
"type": {
"coding": [
{
"system": "https://helix.ru/codes/sample-type",
"code": "ВЕНКРОВЬ"
}
]
},
"subject": {
"reference": "urn:uuid:d47a6987-0bbd-4fd7-8b7b-e2d90a744a24"
},
"collection": {
"collectedDateTime": "2017-08-01T17:13:27.8519846+03:00"
},
"container": [
{
"identifier": [
{
"system": "https://helix.ru/codes/labels",
"value": "8410845153"
}
],
"type": {
"coding": [
{
"system": "https://api.medlinx.online/terminology/specimen-container-type",
"code": "ВПФИОЛ"
}
]
},
"specimenQuantity": {
"value": 600
}
}
],
"extension": [
{
"url": "https://api.medlinx.online/extra/supportingInfo",
"valueString": "81425, 81431, 79702"
}
]
}
},
{
"fullUrl": "urn:uuid:9a719b54-eef2-49a7-868c-95cd53288b9d",
"resource": {
"resourceType": "Specimen",
"type": {
"coding": [
{
"system": "https://helix.ru/codes/sample-type",
"code": "ВЕНКРОВЬ"
}
]
},
"subject": {
"reference": "urn:uuid:d47a6987-0bbd-4fd7-8b7b-e2d90a744a24"
},
"collection": {
"collectedDateTime": "2017-08-01T17:13:27.8594857+03:00"
},
"container": [
{
"identifier": [
{
"system": "https://helix.ru/codes/labels",
"value": "8410845154"
}
],
"type": {
"coding": [
{
"system": "https://api.medlinx.online/terminology/specimen-container-type",
"code": "ВПЖЕЛТГЕЛЬОХЛ"
}
]
},
"specimenQuantity": {
"value": 3500
}
}
],
"extension": [
{
"url": "https://api.medlinx.online/extra/supportingInfo",
"valueString": "79703"
}
]
}
},
{
"fullUrl": "urn:uuid:de29eae0-08d8-4b94-82ed-c70753281bf9",
"resource": {
"resourceType": "ServiceRequest",
"requisition": {
"system": "http://example.com/codes/guid",
"value": "c6e81ecd-ff8d-4439-90e8-98fb8b84572b"
},
"supportingInfo": [
{
"identifier": {
"system": "https://helix.ru/codes/contract",
"value": "C000003409"
}
}
],
"status": "active",
"intent":"order",
"code": {
"coding": [
{
"system": "https://helix.ru/codes/nomenclature",
"code": "06-230"
}
],
"text": "Комплексный анализ на витамины (A, D, E, K, C, B1, B5, B6)"
},
"subject": {
"reference": "urn:uuid:d47a6987-0bbd-4fd7-8b7b-e2d90a744a24"
},
"occurrenceDateTime": "2017-08-01T17:13:27.8624861+03:00",
"specimen": [
{
"reference": "urn:uuid:3698bb9d-6617-4602-9bd9-0cc79ddc2ba8"
},
{
"reference": "urn:uuid:9a719b54-eef2-49a7-868c-95cd53288b9d"
}
]
}
}
]
}
},
{
"request": {
"method": "POST",
"url":"Task"
},
"resource": {
"resourceType": "Task",
"intent": "order",
"status": "requested",
"meta": {
"security": [
{
"system": "read",
"code": "service"
},
{
"system": "updatebody",
"code": "service"
}
]
},
"code": {
"coding": [
{
"system": "https://api.medlinx.online/terminology/task_type",
"code": "OrderProcessingTask"
}
]
},
"input": [
{
"type": {
"coding": [
{
"system": "https://api.medlinx.online/terminology/order-bundle"
}
]
},
"valueReference": {
"reference": "urn:uuid:e6559085-9150-45e4-9cdf-2e46d575e61b"
}
}
]
}
}
]
}
В случае успеха Status code: 200 OK. Тело - Bundle, в котором будет содержатся все созданные ресурсы: Task и Bundle со всей информацией. Task и Bundle будут содержать заполненное поле id, по которому можно опрашивать созданные ресурсы.
В случае ошибки Status code: >400. Тело: OperationOutcome
Создание ресурсов независимыми запросами
При создании отдельных ресурсов важен порядок. Первым создается Bundle (тип - collection
), затем Task.
Создание Bundle
Отправка заказа
POST /r4/fhir/Bundle
Требуемые заголовки:
Имя | Описание |
---|---|
Authorization | Bearer <jwt_token> |
Content-Type | application/fhir+json |
Тело запроса - Bundle с типом collection
со всеми ресурсами для создания заказа.
В случае успеха Status code: 200 OK. Тело - Bundle c заполненным поле id.
В случае ошибки Status code: >400. Тело: OperationOutcome
Создание Task
Отправка заказа
POST /r4/fhir/Task
Требуемые заголовки:
Имя | Описание |
---|---|
Authorization | Bearer <jwt_token> |
Content-Type | application/fhir+json |
Тело запроса - Task, см. выше. Ссылка Task.input(https://api.medlinx.online/terminology/order-bundle).valueReference
должна содержать относительную ссылку вида Bundle/<bundle.id>
.
В случае успеха Status code: 200 OK. Тело - Bundle c заполненным поле id.
В случае ошибки Status code: >400. Тело: OperationOutcome
Дополнительно в ресурсе Task можно передать информацию об необходимости информирования пациента о результатах по Email и/или sms. Такие опции записываются в поле Input ресурса Task. Ниже приведен пример для информирования по смс и email:
"input": [
{
"type": {
"coding": [{
"code": "sms",
"system": "https://helix.ru/codes/notification"
}
]
},
"valueBoolean": true
}, {
"type": {
"coding": [{
"code": "email",
"system": "https://helix.ru/codes/notification"
}
]
},
"valueBoolean": false
}
{
"type": {
"coding": [
{
"system": "https://api.medlinx.online/terminology/order-bundle"
}
]
},
"valueReference": {
"reference": "urn:uuid:e6559085-9150-45e4-9cdf-2e46d575e61b"
}
}
]
Обработка заказа лабораторией
Лаборатория опрашивает сервер и получает новые Task для обработки. В ходе обработки для каждого ServiceRequest лаборатория создает в Task вложенный (contained) ресурс типа таск. Эти вложенные ресурсы отражают статус выполнения конкретных ServiceRequest в заказе.
Связывание выполняется по FullUrl ServiceRequest в оригинальном Bundle, это значение заносится в поле identifier вложенной Task. Кодовая система identifier - https://api.medlinx.online/terminology/servicerequest-urn-uuid
.
Пример:
"identifier": [{
"system": "https://api.medlinx.online/terminology/servicerequest-urn-uuid",
"value": "urn:uuid:72f7c58d-a7c1-4e69-8869-c8fca17f0ab1"
}]
Формирование объекта предзаказа
Создание предзаказа имеет много общего с созданием [заказа](## Формирование объекта заказа). Для создания предзаказа на лабораторное исследование необходимы:
- Ответ преаналитики
- Ресурс Patient
Task уровня предзаказа должен иметь поле code с указанием типа события вида:
{
"system": "https://api.medlinx.online/terminology/task_type",
"code": "DraftOrderProcessingTask"
}
Пример предзаказа
{
"resourceType": "Bundle",
"type": "transaction",
"entry": [
{
"request": {
"method": "POST",
"url":"Bundle"
},
"fullUrl": "urn:uuid:e6559085-9150-45e4-9cdf-2e46d575e61b",
"resource": {
"resourceType": "Bundle",
"type": "collection",
"meta": {
"security": [
{
"system": "read",
"code": "service"
},
{
"system": "updatebody",
"code": "service"
}
]
},
"entry": [
{
"fullUrl": "urn:uuid:d47a6987-0bbd-4fd7-8b7b-e2d90a744a24",
"resource": {
"resourceType": "Patient",
"name": [
{
"given": [
"Максим",
"Александрович"
],
"family": "Иванов"
}
],
"gender": "female",
"birthDate": "1982-12-02"
}
},
{
"fullUrl": "urn:uuid:3698bb9d-6617-4602-9bd9-0cc79ddc2ba8",
"resource": {
"resourceType": "Specimen",
"type": {
"coding": [
{
"system": "https://helix.ru/codes/sample-type",
"code": "ВЕНКРОВЬ"
}
]
},
"subject": {
"reference": "urn:uuid:d47a6987-0bbd-4fd7-8b7b-e2d90a744a24"
},
"collection": {
"collectedDateTime": "2017-08-01T17:13:27.8519846+03:00"
},
"container": [
{
"type": {
"coding": [
{
"system": "https://api.medlinx.online/terminology/specimen-container-type",
"code": "ВПФИОЛ"
}
]
},
"specimenQuantity": {
"value": 600
}
}
],
"extension": [
{
"url": "https://api.medlinx.online/extra/supportingInfo",
"valueString": "81425, 81431, 79702"
}
]
}
},
{
"fullUrl": "urn:uuid:9a719b54-eef2-49a7-868c-95cd53288b9d",
"resource": {
"resourceType": "Specimen",
"type": {
"coding": [
{
"system": "https://helix.ru/codes/sample-type",
"code": "ВЕНКРОВЬ"
}
]
},
"subject": {
"reference": "urn:uuid:d47a6987-0bbd-4fd7-8b7b-e2d90a744a24"
},
"collection": {
"collectedDateTime": "2017-08-01T17:13:27.8594857+03:00"
},
"container": [
{
"type": {
"coding": [
{
"system": "https://api.medlinx.online/terminology/specimen-container-type",
"code": "ВПЖЕЛТГЕЛЬОХЛ"
}
]
},
"specimenQuantity": {
"value": 3500
}
}
],
"extension": [
{
"url": "https://api.medlinx.online/extra/supportingInfo",
"valueString": "79703"
}
]
}
},
{
"fullUrl": "urn:uuid:de29eae0-08d8-4b94-82ed-c70753281bf9",
"resource": {
"resourceType": "ServiceRequest",
"requisition": {
"system": "http://example.com/codes/guid",
"value": "c6e81ecd-ff8d-4439-90e8-98fb8b84572b"
},
"supportingInfo": [
{
"identifier": {
"system": "https://helix.ru/codes/contract",
"value": "C000003409"
}
}
],
"status": "active",
"code": {
"coding": [
{
"system": "https://helix.ru/codes/nomenclature",
"code": "06-230"
}
],
"text": "Комплексный анализ на витамины (A, D, E, K, C, B1, B5, B6)"
},
"subject": {
"reference": "urn:uuid:d47a6987-0bbd-4fd7-8b7b-e2d90a744a24"
},
"occurrenceDateTime": "2021-02-01T17:13:27.8624861+03:00",
"specimen": [
{
"reference": "urn:uuid:3698bb9d-6617-4602-9bd9-0cc79ddc2ba8"
},
{
"reference": "urn:uuid:9a719b54-eef2-49a7-868c-95cd53288b9d"
}
]
}
}
]
}
},
{
"request": {
"method": "POST",
"url":"Task"
},
"resource": {
"resourceType": "Task",
"intent": "order",
"status": "requested",
"meta": {
"security": [
{
"system": "read",
"code": "service"
},
{
"system": "updatebody",
"code": "service"
}
]
},
"code": {
"coding": [
{
"system": "https://api.medlinx.online/terminology/task_type",
"code": "DraftOrderProcessingTask"
}
]
},
"input": [
{
"type": {
"coding": [
{
"system": "https://api.medlinx.online/terminology/order-bundle"
}
]
},
"valueReference": {
"reference": "urn:uuid:e6559085-9150-45e4-9cdf-2e46d575e61b"
}
}
]
}
}
]
}
Передача информации о полисе ДМС
Передать информацию о полисе ДМС пациента можно с помощью ресурса Coverage вложенного в Bundle предзаказа
Поле | Назначение | |
---|---|---|
identifier.value | Номер полиса | Coverage |
identifier.system | Всегда https://helix.ru/codes/coverage | |
status | Всегда active | |
beneficiary.reference | Ссылка на пациента внутри bundle формата urn:uuid: | |
payor.display | Наименование страховой компании | |
period.end | Дата окончания срока действия полиса ДМС | |
extension.url | Всегда https://helix.ru/extra/coverageOperatorName | |
extension.valueString | ФИО оператора или врача |
Пример:
{
"resourceType": "Coverage",
"id": "urn:uuid:3698bb9d-6617-4602-9bd9-0cc79ddc2ba8",
"identifier": [
{
"system": "https://helix.ru/codes/coverage",
"value": "<номер полиса>"
}
],
"status": "active",
"beneficiary": {
"reference": "urn:uuid:d47a6987-0bbd-4fd7-8b7b-e2d90a744a24"
},
"payor": [
{
"display": "Согаз"
}
],
"period": {
"end": "2022-05-23"
},
"extension": [
{
"url": "https://helix.ru/extra/coverageOperatorName",
"valueString": "ФИО"
}
]
}
Предзаказ с мобильным выездом
Task уровня предзаказа с выездом мобильной бригады должен иметь поле code с указанием типа события вида:
{
"system": "https://api.medlinx.online/terminology/task_type",
"code": "MobileDraftOrderProcessingTask"
}
Так же предзаказ дожен содержать ServiceRequest c услугой выезда мобильной бригады, указанием желаемой даты и времени и ссылкой на ресурс Location с информацией об адресе
Описание полей ресурса ServiceRequest с услугой выезда мобильной бригады
Поле | Назначение |
---|---|
code.coding.code | код услуги |
code.coding.system | всегда https://helix.ru/codes/nomenclature |
status | Всегда active |
intent | всегда order |
subject.reference | Ссылка на пациента внутри bundle формата urn:uuid: |
supportingInfo.identifier.value | Номер контракта |
supportingInfo.identifier.system | всегда https://helix.ru/codes/contract |
occurrencePeriod.start | Желаемая дата и время начала периода приезда мобильной бригады |
occurrencePeriod.end | Желаемая дата и время конца периода приезда мобильной бригады (не обязательно) |
locationReference.reference | Ссылка на Location с данными адреса выезда внутри bundle формата urn:uuid: |
Пример:
{
"resourceType": "ServiceRequest",
"code": {
"text": "Выезд мобильной бригады",
"coding": [
{
"code": "90-519",
"system": "https://helix.ru/codes/nomenclature"
}
]
},
"intent": "order",
"status": "active",
"subject": {
"reference": "urn:uuid:9581f238-1453-4943-a439-7dc40124ad00"
},
"occurrencePeriod": {
"start": "2021-09-23T09:00:00",
"end": "2021-09-23T11:00:00"
},
"locationReference": [
{
"reference": "urn:uuid:3698bb9d-6617-4602-9bd9-0cc79ddc2ba3",
}
],
"supportingInfo": [
{
"identifier": {
"value": "C000003409",
"system": "https://helix.ru/codes/contract"
}
}
]
}
Описание полей ресурса Location с адресом выезда мобильной бригады
Поле | Назначение |
---|---|
address.use | всегда home |
address.text | комментарий к адресу выезда (не обязателен) |
address.line[0] | улица |
address.line[1] | дом |
address.line[2] | квартира (не обязательна) |
address.city | код ФИАС населенного пункта |
Пример:
{
"resourceType": "Location",
"address": {
"use": "home",
"text": "Вход через звонок консьержу. Кв. 92 на 12 этаже.",
"line": [
"улица Ленина",
"18 корп. 2",
"92"
],
"city": "c2deb16a-0330-4f05-821f-1d09c93331e6"
}
}
Так же у пациента в ресурсе Patient обязательно должен быть указан номер телефона для связи
{
"telecom": [
{
"system": "phone",
"value": "+79001234567",
"use": "mobile"
}
]
}
B2C взаимодействие
Получение каталога с услугами по взятию БМ
GET /r4/fhir/catalog/b2c/<Contract_Code>
Требуемые заголовки:
Имя | Описание |
---|---|
Authorization | Bearer <jwt_token> |
Content-Type | application/fhir+json |
Запрос получению [каталога] (## Запрос каталога исследований) без услуг по взятию БМ , однако в ответ будет содержать также ресурсы HealthcareService c услугами по взятию необходимыми для проведения исследований
Пример ActivityDefinition со ссылкой на SpecimenDefinition содержащий ссылку на услугу по взятию
{
"fullUrl": "urn:uuid:1d40d0ed-c945-48e3-88c4-919c9b639306",
"resource": {
"resourceType": "ActivityDefinition",
"id": "1d40d0ed-c945-48e3-88c4-919c9b639306",
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/servicerequest-questionnaireRequest",
"valueReference": {
"reference": "urn:uuid:75e9d9a6-1cae-4c45-966a-1621e29826a7"
}
},
{
"url": "http://hl7.org/fhir/StructureDefinition/event-basedOn",
"valueReference": {
"reference": "urn:uuid:9708644e-c50e-48ab-913f-6bc352da2ee3"
}
},
{
"url": "http://hl7.org/fhir/StructureDefinition/event-basedOn",
"valueReference": {
"reference": "urn:uuid:493ec4d3-3e3c-4d1d-a4ad-321065496c1d"
}
}
],
"identifier": [
{
"system": "https://helix.ru/codes/nomenclature",
"value": "02-005"
}
],
"title": "Клинический анализ крови (c лейкоцитарной формулой)",
"subtitle": "CBC; Complete Blood Count; Differential White Blood Cell Count; Клинический анализ крови",
"description": "Характеристика соотношения и физиологических свойств различных видов клеточных элементов крови: эритроцитов, лейкоцитов, тромбоцитов. В клиническом анализе крови определяются такие показатели как гематокрит (отношение объма эритроцитов к общему объему крови), концентрация гемоглобина, количество тромбоцитов. Исследуются также физиологические свойства эритроцитов: их форма, цвет, наличие включений, концентрация гемоглобина в одном эритроците, показатели анизоцитоза (различия эритроцитов по объему).",
"specimenRequirement": [
{
"reference": "urn:uuid:271a6242-df7e-4656-b64c-01539365ce77"
},
{
"reference": "urn:uuid:b758c09a-fe20-4280-91b4-a121b85b8a40"
}
]
}
},
{
"fullUrl": "urn:uuid:271a6242-df7e-4656-b64c-01539365ce77",
"resource": {
"resourceType": "SpecimenDefinition",
"id": "271a6242-df7e-4656-b64c-01539365ce77",
"extension": [
{
"url": "https://helix.ru/extension/sample-group",
"valueString": "ГЕМАТОЛОГ"
},
{
"url": "https://helix.ru/extension/required",
"valueBoolean": false
},
{
"url": "https://helix.ru/extension/destructive",
"valueBoolean": false
},
{
"url": "https://helix.ru/codes/sample-service",
"valueReference": {
"reference": "urn:uuid:4a4ca99f-14c1-44d4-82ac-0deb80599253"
}
}
],
"identifier": {
"system": "https://helix.ru/codes/rule-id",
"value": "67558"
},
"typeCollected": {
"coding": [
{
"system": "https://helix.ru/codes/sample-type",
"code": "ВЕНКРОВЬ"
}
],
"text": "Венозная кровь"
},
"patientPreparation": [
{
"coding": [
{
"system": "https://helix.ru/codes/patient-prep",
"code": "A6.4"
}
],
"text": "Не принимать пищу в течение 8 часов до исследования, можно пить чистую негазированную воду."
},
{
"coding": [
{
"system": "https://helix.ru/codes/patient-prep",
"code": "F1.1"
}
],
"text": "Не курить в течение 30 минут до исследования."
},
{
"coding": [
{
"system": "https://helix.ru/codes/patient-prep",
"code": "D1.1"
}
],
"text": "Исключить физическое и эмоциональное перенапряжение в течение 30 минут до исследования."
},
{
"coding": [
{
"system": "https://helix.ru/codes/patient-prep",
"code": "A14.1"
}
],
"text": "Исключить из рациона алкоголь в течение 24 часов до исследования."
},
{
"coding": [
{
"system": "https://helix.ru/codes/patient-prep",
"code": "A16.1"
}
],
"text": "Детям в возрасте до 1 года не принимать пищу в течение 30-40 минут до исследования."
},
{
"coding": [
{
"system": "https://helix.ru/codes/patient-prep",
"code": "A17.1"
}
],
"text": "Детям в возрасте от 1 до 5 лет не принимать пищу в течение 2-3 часов до исследования."
}
],
"collection": [
{
"coding": [
{
"system": "https://helix.ru/codes/sample-protocol",
"code": "ВЕНПУНКЦИЯ"
}
],
"text": "Протокол взятия крови из вены"
}
],
"typeTested": [
{
"container": {
"type": {
"coding": [
{
"system": "https://helix.ru/codes/container-type",
"code": "ВПФИОЛ2"
}
],
"text": "Пробирка вакуумная с наполнителем К2-ЭДТА (фиолетовая крышка), 2 мл"
},
"minimumVolumeQuantity": {
"value": 420,
"unit": "uL",
"system": "http://unitsofmeasure.org",
"code": "uL"
},
"preparation": "ПРОТОКОЛ2"
},
"handling": [
{
"temperatureQualifier": {
"coding": [
{
"system": "https://helix.ru/codes/storage-conditions",
"code": "ХОЛ"
},
{
"system": "https://helix.ru/codes/sample-transport",
"code": "+2+8"
}
]
}
}
]
}
]
}
},
{
"fullUrl": "urn:uuid:4a4ca99f-14c1-44d4-82ac-0deb80599253",
"resource": {
"resourceType": "CatalogEntry",
"id": "4a4ca99f-14c1-44d4-82ac-0deb80599253",
"extension": [
{
"url": "https://api.medlinx.online/extension/eta-status",
"valueCode": "available"
}
],
"orderable": true,
"referencedItem": {
"reference": "urn:uuid:81db77c6-3e34-414a-b902-fefe56541a50"
}
}
},
{
"fullUrl": "urn:uuid:81db77c6-3e34-414a-b902-fefe56541a50",
"resource": {
"resourceType": "HealthcareService",
"id": "81db77c6-3e34-414a-b902-fefe56541a50",
"identifier": [
{
"system": "https://helix.ru/codes/nomenclature",
"value": "90-001"
}
],
"active": true,
"category": [
{
"coding": [
{
"system": "https://helix.ru/codes/service-category",
"code": "000000003"
}
],
"text": "Преаналитическая"
}
],
"type": [
{
"coding": [
{
"system": "https://helix.ru/codes/service-type",
"code": "000000023"
}
],
"text": "Взятие биоматериала мс"
}
],
"name": "Взятие крови из периферической вены",
"characteristic": [
{
"coding": [
{
"system": "https://helix.ru/codes/rule-id",
"code": "2217"
}
]
}
]
}
}
Получение преаналитики с услугами по взятию БМ
POST /r4/fhir/$x-b2c-preanalytics
Требуемые заголовки:
Имя | Описание |
---|---|
Authorization | Bearer <jwt_token> |
Content-Type | application/fhir+json |
Необязательные параметры запроса:
Имя | Тип | Описание |
---|---|---|
includeTransportContainer | bool | Добавлять ли в ответ преаналитики информацию о транспортном контейнере (при его необходимости), по умолчанию false |
Запрос и ответ аналогичен получению [преаналитики] (## Запрос преаналитики на корзину исследований) без услуг по взятию БМ , однако в ответ будет содержать также ресурсы ServiceRequest c услугами по взятию необходимыми для проведения всех исследований
Пример ответа:
{
"resourceType": "Bundle",
"type": "collection",
"entry": [
{
"fullUrl": "urn:uuid:85ded736-1860-4683-8e7b-0bfcd3da1857",
"resource": {
"resourceType": "ServiceRequest",
"status": "active",
"intent": "order",
"code": {
"coding": [
{
"system": "https://helix.ru/codes/nomenclature",
"code": "02-005"
}
],
"text": "Клинический анализ крови (c лейкоцитарной формулой)"
},
"specimen": [
{
"reference": "urn:uuid:141bacd9-0f38-4c62-86af-47640e5bdb2b"
}
]
}
},
{
"fullUrl": "urn:uuid:141bacd9-0f38-4c62-86af-47640e5bdb2b",
"resource": {
"resourceType": "Specimen",
"extension": [
{
"url": "https://api.medlinx.online/extra/supportingInfo",
"valueString": "67577"
}
],
"type": {
"coding": [
{
"system": "https://helix.ru/codes/sample-type",
"code": "КАПИЛКРОВЬ"
}
],
"text": "Капиллярная кровь"
},
"collection": {
"quantity": {
"value": 420.0
},
"method": {
"text": "Протокол взятия капиллярной крови"
}
},
"processing": [
{
"description": "Хранить при +2 - +8 С"
},
{
"description": "Транспортировка с хладагентом"
}
],
"container": [
{
"description": "Микропробирка для капиллярной крови с К2-ЭДТА (фиолетовая крышка)",
"type": {
"coding": [
{
"system": "https://api.medlinx.online/terminology/specimen-container-type",
"code": "КАПФИОЛ"
}
]
}
}
]
}
},
{
"fullUrl": "urn:uuid:b9cd898f-3877-4133-823c-0468e2f73242",
"resource": {
"resourceType": "ServiceRequest",
"status": "active",
"intent": "order",
"code": {
"coding": [
{
"system": "https://helix.ru/codes/nomenclature",
"code": "90-002"
}
],
"text": "Взятие крови из пальца"
}
}
}
]
}
Получение списка ДЦ
GET /r4/fhir/$x-b2c-location/<Contragent_Code>
Требуемые заголовки:
Имя | Описание |
---|---|
Authorization | Bearer <jwt_token> |
Content-Type | application/fhir+json |
Запрос предоставляет информацию о всех предоставленных в рамках взаимодействия ДЦ, по умолчанию только для страховых контрактов.
Необязательные параметры запроса:
Имя | Тип | Описание |
---|---|---|
allContracts | bool | Выдавать ДЦ по всем контрактам, по умолчанию false |
nonInsuranceContracts | bool | Выдавать ДЦ по не страховым контрактам, по умолчанию false |
В случае успеха Status code: 200 OK. Тело - Bundle, который содержит ресурсы:
Ресурс | Размерность | Назначение |
---|---|---|
Location | 1..* | Информация о ДЦ |
Поле | Назначение | Кодовая система |
---|---|---|
identifier.value | Код ДЦ | https://helix.ru/codes/point-code |
extension.valueString | Контракт ДЦ | https://helix.ru/codes/contract |
name | Название ДЦ | |
address.state | Регион | |
address.city | Город | |
address.line | Улица и номер дома | |
address.extension.valueString | Код ФИАС региона | https://helix.ru/extension/fias |
address.extension.valueString | Ближайшее метро при наличии | https://helix.ru/extension/metro |
position | Координаты | |
telecom | дополнительные сведения | |
type | тип точки: ДЦ, Мобильная служба и тп |
В случае ошибки Status code: >400. Тело: OperationOutcome
Пример ответа:
{
"resourceType": "Bundle",
"type": "collection",
"entry": [
{
"fullUrl": "urn:uuid:2844fdff-d059-4a9d-a848-2ada6ecfc5f7",
"resource": {
"resourceType": "Location",
"extension": [
{
"url": "https://helix.ru/codes/contract",
"valueString": "C000000000"
}
],
"identifier": [
{
"system": "https://helix.ru/codes/point-code",
"value": "00000"
}
],
"name": "ДЦ 1",
"address": {
"extension": [
{
"url": "https://helix.ru/extension/fias",
"valueString": "2a1c7bdb-05ea-492f-9e1c-b3999f79dcbc"
}
],
"line": [
"ул. Ленина, д. 1"
],
"city": "Ставрополь",
"state": "Ставропольский край"
},
"type": [
{
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v3-RoleCode",
"code": "DX",
"display": "Diagnostics or therapeutics unit"
}
]
}
],
"position": {
"longitude": 41.999999,
"latitude": 44.999999
}
}
},
{
"fullUrl": "urn:uuid:988484a6-2da4-4bc7-8e84-1cf86dfc2787",
"resource": {
"resourceType": "Location",
"extension": [
{
"url": "https://helix.ru/codes/contract",
"valueString": "C000000000"
}
],
"identifier": [
{
"system": "https://helix.ru/codes/point-code",
"value": "00000"
}
],
"name": "ДЦ 2",
"address": {
"extension": [
{
"url": "https://helix.ru/extension/fias",
"valueString": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5"
},
{
"url": "https://helix.ru/extension/metro",
"valueString": "ВДНХ"
}
],
"line": [
"ул. Иванова, д. 1"
],
"city": "Москва",
"state": "Москва г"
},
"type": [
{
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v3-RoleCode",
"code": "DX",
"display": "Diagnostics or therapeutics unit"
}
]
}
],
"position": {
"longitude": 37.123456,
"latitude": 55.123456
}
}
}
]
}
Получение расписания работы ДЦ
GET /r4/fhir/$x-b2c-schedule/<Код ДЦ>
Требуемые заголовки:
Имя | Описание |
---|---|
Authorization | Bearer <jwt_token> |
Content-Type | application/fhir+json |
Запрос предоставляет информацию о расписании работы ДЦ на месяц.
В случае успеха Status code: 200 OK. Тело - Bundle, который содержит ресурсы:
Ресурс | Размерность | Назначение |
---|---|---|
Schedule | 1..* | Информация о ДЦ |
Slot | 1..* | Информация о ДЦ |
Поле Schedule | Назначение | Кодовая система |
---|---|---|
serviceType.coding.code | Название услуги | https://helix.ru/codes/service-type |
serviceType.coding.text | Название услуги | |
active | Всегда true | |
contained | Массив вложенных ресурсов Slot |
Поле Slot | Назначение |
---|---|
start | Дата и время начала оказания услуги |
end | Дата и время окончания оказания услуги |
status | Всегда free |
В случае ошибки Status code: >400. Тело: OperationOutcome
Пример ответа:
{
"resourceType": "Bundle",
"type": "collection",
"entry": [
{
"fullUrl": "urn:uuid:362056d2-9dd1-4bde-91b3-8e417d8f5f1e",
"resource": {
"resourceType": "Schedule",
"contained": [
{
"resourceType": "Slot",
"schedule": {
"reference": "#"
},
"status": "free",
"start": "2021-08-09T08:30:00+00:00",
"end": "2021-08-09T15:30:00+00:00"
},
{
"resourceType": "Slot",
"schedule": {
"reference": "#"
},
"status": "free",
"start": "2021-08-10T08:30:00+00:00",
"end": "2021-08-10T15:30:00+00:00"
}
],
"active": true,
"serviceType": [
{
"coding": [
{
"system": "https://helix.ru/codes/service-type",
"code": "Взятие биоматериала - кровь, моча, кал"
}
],
"text": "Взятие биоматериала - кровь, моча, кал"
}
]
}
}
]
}
Получение результатов лабораторных исследований
При выполдении исследования лаборатория меняет статус ресурса Task на cancelled
или completed
. В соответствующие вложенные Task лаборатория проставляет ссылки для забора результатов.
Опрос API
Клиент периодически производит опрос ресурса Task, если статус ресурса изменился на cancelled
или completed
, то задание выполнено. Статус cancelled
указывает, что заказ был отменен, причина отмены можно узнать в поле output. Если заказ был выполнен частично, и не может быть выполнен до конца (сломался анализатор, разлилась пробирка, и т.п.), то лаборатория должна выгрузить результаты на готовые ServiceRequest (во вложенных Task статус будет completed и ссылка на результат), а на проблемные - выгрузить отмены (во вложенных Task статус будет cancelled и в поле output причина отмены). Заказ должен быть переведен в статус completed.
Если Task находится в статусе completed
, то заказ был успешно выполнен, в output пишется ссылка на DocumentReference. Ссылка - запись с типом CodeableConcept(system: http://loinc.org, value: "11502-2")
и значением ResourceReference(reference: "<base_url>/DocumentReference/<guid>")
. DocumentReference содержит ссылки на pdf, jpeg и структурированную версию документа в поле Content. Нужная ссылка может быть найдена по ключу Attachment.ContentType. Поддерживаемые значения:
application/fhir+json
application/pdf
image/jpeg
Сама ссылка находится по пути Attachment.Url
.
При запросе ссылки клиент должен указывать ряд параметров:
Требуемые заголовки:
Имя | Описание |
---|---|
Authorization | Bearer <jwt_token> |
Accept | application/fhir+json (или иной из поддерживаемых) |
Если результаты в формате jpeg содержат несколько файлов, то возвращается zip архив с соответствующим заголовком Content-Type: application/zip
Частичная выгрузка результатов по образцам
Если лаборатория поддерживает частичную выгрузку по образцам, то в output contained Task будут записываться ссылки на результаты по конкретному образцу. Ссылки записываются в том же формате, что и для родительской Task. При этом, если заказ выполнен полностью (статус Task меняется на completed
) или отменен (статус Task меняется на cancelled
), статусы contained Task не меняются и остаются в том состоянии, что было до готовности или отмены всего заказа.
Пример, результата в contained task:
{
"code": {
"coding": [{
"code": "OrderProcessingTask",
"system": "https://api.medlinx.online/terminology/task_type"
}
]
},
"input": [{
"type": {
"coding": [{
"system": "https://api.medlinx.online/terminology/order-bundle"
}
]
},
"valueReference": {
"reference": "Bundle/6f40940f-845c-44d4-a0e4-eaafde53855b"
}
}
],
"intent": "order",
"output": [{
"type": {
"text": "Laboratory report",
"coding": [{
"code": "11502-2",
"system": "http://loinc.org"
}
]
},
"valueReference": {
"reference": "DocumentReference/4fd489dc-a792-47df-aec2-91adfda681c4"
}
}
],
"status": "completed",
"contained": [{
"id": "a5d29da6-1558-41ba-a694-3797089131a1",
"status": "received",
"identifier": [{
"value": "urn:uuid:ebebb87a-1a72-44c4-ba56-2c84db1d7549",
"system": "https://api.medlinx.online/terminology/servicerequest-urn-uuid"
}, {
"value": "04e499ac-cabf-469f-971a-caf07bbc583c",
"system": "https://helix.ru/codes/orderItem-guid"
}
],
"resourceType": "Task",
"output": [{
"type": {
"text": "Laboratory report",
"coding": [{
"code": "11502-2",
"system": "http://loinc.org"
}
]
},
"valueReference": {
"reference": "DocumentReference/02a49034-3b88-4515-adc8-8b55397c592e"
}
}
],
}
],
"identifier": [{
"value": "11111-AA555-10000009",
"system": "https://helix.ru/codes/mis"
}, {
"value": "19863f59-8ba6-43bf-b070-91018509cd45",
"system": "https://helix.ru/codes/order-guid"
}
]
}
Частичная выгрузка результатов по тестам
Если лаборатория поддерживает частичную выгрузку по тестам, то в output Task будет записываться ссылка на DocumentReference
со ссылками результаты по готовым на данный момент тестам. При каждом новом готовом результате теста, обновляется ресурс Task
(меняется его версия) А также обновляется DocumentReference
- меняется версия, добавляются коды и имена готовых тестов, при этом не меняется ссылка на сам ресурс DocumentReference
в статусе preliminary
, а так же не меняются сами ссылки на получения результатов (fhir, pdf, jpg)
Пример сслыки на частично готовый результат нескольких тестов
В Ресурсе Task
Output со значением "Partial laboratory report" и ссылкой на DocumentReference
:
{
"code": {
"coding": [
{
"code": "OrderProcessingTask",
"system": "https://api.medlinx.online/terminology/task_type"
}
]
},
"input": [
{
"type": {
"coding": [
{
"system": "https://api.medlinx.online/terminology/order-bundle"
}
]
},
"valueReference": {
"reference": "Bundle/614737dd-a6c8-473b-9b71-a17683227028"
}
},
{
"type": {
"text": "https://helix.ru/codes/input-labels"
},
"valueCodeableConcept": {
"coding": [
{
"code": "0000000000",
"system": "https://helix.ru/codes/labels"
}
]
}
}
],
"intent": "order",
"output": [
{
"type": {
"text": "Partial laboratory report",
"coding": [
{
"code": "11502-2",
"system": "http://loinc.org"
}
]
},
"valueReference": {
"reference": "DocumentReference/073cb6e6-14f4-43d8-9068-bda8ed1df04b"
}
}
],
"status": "in-progress",
"contained": [
{
"id": "25ab2b91-bfc7-4c8d-bd84-f0c8be47be97",
"intent": "order",
"status": "received",
"identifier": [
{
"value": "urn:uuid:ac2c86ee-d367-4c6f-b4f9-71076a46e653",
"system": "https://api.medlinx.online/terminology/servicerequest-urn-uuid"
},
{
"value": "b77707f4-27f8-43b7-a6b0-fbf5832f22cf",
"system": "https://helix.ru/codes/orderItem-guid"
},
{
"value": "06-235",
"system": "https://helix.ru/codes/nomenclature"
}
],
"resourceType": "Task",
"reasonReference": {
"reference": "#"
}
}
],
"identifier": [
{
"value": "00000-AAAAA-10000000",
"system": "https://helix.ru/codes/mis"
},
{
"value": "018090f1-8bc0-4698-aa57-efa64f3a70a9",
"system": "https://helix.ru/codes/order-guid"
}
]
}
В Ресурсе DocumentReference
в event записываются названия и коды выполненных на данный момент тестов тестов:
"date": "2023-03-10T09:53:21.7772146+00:00",
"type": {
"text": "Partial laboratory report",
"coding": [
{
"code": "11502-2",
"system": "http://loinc.org"
}
]
},
"author": [
{
"reference": "https://helix.ru"
}
],
"status": "current",
"content": [
{
"attachment": {
"url": "https://api-stage.medlinx.online/r4/result/c68c4787-df95-4f7e-9e0f-b66704800ad0",
"title": "Pdf report",
"contentType": "application/pdf"
}
},
{
"attachment": {
"url": "https://api-stage.medlinx.online/r4/result/c68c4787-df95-4f7e-9e0f-b66704800ad0",
"title": "Jpeg report",
"contentType": "image/jpeg"
}
},
{
"attachment": {
"url": "https://api-stage.medlinx.online/r4/result/c68c4787-df95-4f7e-9e0f-b66704800ad0",
"title": "fhir document",
"contentType": "application/fhir+json"
}
}
],
"context": {
"event": [
{
"coding": [
{
"code": "МЫШЬЯК_КРОВЬ_ЕВРОТЕСТ",
"system": "https://api.medlinx.online/terminology/test-codes",
"display": "Мышьяк в сыворотке"
},
{
"code": "4ee3e364-7166-4322-a216-ab4be85d2c1e",
"system": "https://helix.ru/codes/test-guid"
}
]
},
{
"coding": [
{
"code": "МОЛИБДЕН_КРОВЬ_ЕВРОТЕСТ",
"system": "https://api.medlinx.online/terminology/test-codes",
"display": "Молибден в сыворотке"
},
{
"code": "16666004-8ae9-4cf1-8206-bbd7c0a254a7",
"system": "https://helix.ru/codes/test-guid"
}
]
},
{
"coding": [
{
"code": "МАРГАНЕЦ_КРОВЬ_ЕВРОТЕСТ",
"system": "https://api.medlinx.online/terminology/test-codes",
"display": "Марганец в сыворотке"
},
{
"code": "3f4d3751-bfdd-4b28-9b54-63ae03710dc5",
"system": "https://helix.ru/codes/test-guid"
}
]
},
{
"coding": [
{
"code": "МЕДЬ_КРОВЬ_ЕВРОТЕСТ",
"system": "https://api.medlinx.online/terminology/test-codes",
"display": "Медь в сыворотке"
},
{
"code": "86ee0768-3416-4fd4-af06-3bd237d1bc03",
"system": "https://helix.ru/codes/test-guid"
}
]
},
{
"coding": [
{
"code": "МАГНИЙ_КРОВЬ_ЕВРОТЕСТ",
"system": "https://api.medlinx.online/terminology/test-codes",
"display": "Магний в сыворотке"
},
{
"code": "434b4c7f-cdb8-4ba6-8ace-1e7156cc5ec4",
"system": "https://helix.ru/codes/test-guid"
}
]
},
{
"coding": [
{
"code": "ПРАЗЕОДИМ_КРОВЬ_ЕВРОТЕСТ",
"system": "https://api.medlinx.online/terminology/test-codes",
"display": "Празеодим в сыворотке"
},
{
"code": "e21e62ba-21bf-48f3-91ed-874f31095c9b",
"system": "https://helix.ru/codes/test-guid"
}
]
}
],
"period": {
"start": "2023-03-09T17:30:17.287+00:00"
}
},
"docStatus": "preliminary",
"id": "073cb6e6-14f4-43d8-9068-bda8ed1df04b",
"resourceType": "DocumentReference"
}
После того как заказ будет весь выполнен, В Ресурсе Task
Output меняется на значение "Laboratory report", а статус DocumentReference
на final
см. начало раздела.
Подписка на изменения
Клиент может подписаться на изменение ресурса Task, такой подход позволяет получить нотификацию на свой Endpoint при изменении ресурса.
Для подписки клиент должен создать на сервере ресурс Subscription. Ресурс должен иметь поля Criteria, Channel.Endpoint, Channel.Type должен быть выставлен в rest-hook, статус должен быть requested.
Как только ресурс Subscription создан, при обновлении или добавлении любых ресурсов, которые соответствуют критериям поиска в ресурсе Subscription, будет послан запрос POST с заголовком Location, где будет указана относительная ссылка на созданный или обновленный ресурс. В настоящий момент поиск осуществляется только по имени ресурса или его Id. Если заполнено поле payload значением "application/fhir+json" в тело запроса будет помещен измененный ресурс. Так же поддерживаются заголовки, например, Authorization.
Пример
{
"resourceType": "Subscription",
"criteria": "Observation",
"status": "requested",
"reason": "A description of why this subscription is defined.",
"channel": {
"type": "rest-hook",
"endpoint": "https://yourdomain.com/customers/on-result",
"header": [
"Authorization: Bearer secret-token-abc-123"
]
}
}
При первом успешном срабатывании подписки (на сервер приходит запрос на создание или обновление ресурса, удовлетворяющий условиям, указанным в поле criteria), сервер, после успешной обработки запроса, пытается послать запрос POST на url, указанный в поле channel.endpoint, проставляя в заголовке Location относительный путь к созданному или измененному ресурсу (если указано поле channel.payload, тогда тело запроса дополнительно будет содержать и сам ресурс). Если в ответ на этот запрос приходит ответ в диапазоне 200-299, тогда статус подписки меняется на "active". Если другой, статус подписки становится "error", а в поле error подписки, записывается сообщение об ошибке. Согласно стандарту, ответственность за активность подписки несет клиент. Т.е. клиент должен на своей стороне обеспечить активность подписки. Например, на стороне клиента, в виду регламентных работ, не был доступен сервер, указанный в поле channel.endpoint, а в этом момент FHIR сервер попытался оповестить, что интересующий ресурс был создан или изменен. Но сервер недоступен и подписка получает статус "error", и в дальнейших оповещениях эта подписка уже не будет использоваться. Задача клиента самому отслеживать и поддерживать необходимый статус ресурса Subscription. Изменения ресурсов за период неактивности Subscription клиент должен забрать самостоятельно через опрос ресурсов.
Частичная выгрузка результатов
Некоторые лаборатории поддерживают выгрузку результатов по готовности тестов, а не всего заказа целиком. При выполнении теста лаборатория переводит ресурс Task в статус in-progress
, а в output записывается информация с ссылками для получения результатов.
Выгрузка результатов на предзаказы
Если на предзаказ был создан и экспортирован заказ, то
Task
предзаказа переходит в статусcompleted
- Создается
Task
заказа в статусеaccepted
со ссылкой наTask
предзаказа в полеTask.basedOn.reference
Далее получение заказов работает так же как с обычными заказами.
Найти Task
заказа, зная Task uuid
предзаказа, можно следующим запросом
GET /r4/fhir/Task?based-on=Task/<Task uuid>
Валидация ресурсов FHIR
Для валидации FHIR-ресурсов на соответствие базовой спецификации FHIR можно воспользоваться методами $Validate
POST /r4/fhir/<ResourceName>/$Validate
И
POST /r4/fhir/$Validate
Первый метод предназначен для проверки ресурсов поддерживаемых сервером, второй метод валидируюет любые ресурсы определенные в стандарте. Обращаем внимание, что методы проверют ресурсы на соответствие спецификации FHIR, но не проверяют на требования бизнес-логики.
Требуемые заголовки:
Имя | Описание |
---|---|
Content-Type | application/fhir+json |
Метод POST /r4/fhir/<ResourceName>/$Validate
принимает в качестве параметра ресурс и возвращает
В случае успеха
Status code: 200 OK. Тело - OperationOutcome без ошибок.
В случае ошибки Status code: 200. Тело: OperationOutcome с описанием ошибки
Пример проверки валидного ресурса POST /r4/fhir/Task/$Validate
{
"resourceType": "Task",
"status": "requested",
"intent": "order",
"code": {
"coding": [
{
"system": "https://api.medlinx.online/terminology/task_type",
"code": "DraftOrderProcessingTask"
}
]
}
}
Ответ
{
"resourceType": "OperationOutcome",
"issue": [
{
"severity": "information",
"code": "informational",
"details": {
"text": "All OK"
}
}
]
}
Пример проверки невалидного ресурса POST /r4/fhir/Task/$Validate
{
"resourceType": "Task",
"code": {
"coding": [
{
"system": "https://api.medlinx.online/terminology/task_type",
"code": "DraftOrderProcessingTask"
}
]
}
}
Ответ с описанием ошибок
{
"resourceType": "OperationOutcome",
"issue": [
{
"severity": "error",
"code": "structure",
"details": {
"text": "StatusElement: Element with min. cardinality 1 cannot be null"
}
},
{
"severity": "error",
"code": "structure",
"details": {
"text": "IntentElement: Element with min. cardinality 1 cannot be null"
}
}
]
}
Метод POST /r4/fhir/$Validate
работает аналогично, за исключением того, что проверяемый ресурс должен передоваться внутри ресурса Parameters