Medlinx

Medlinx

  • Интеграция
  • Авторизация и права доступа
  • История версий документа

›Интеграция

Интеграция

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

Интеграция МИС-ЛИС для заказа лабораторных исследований

Целевая аудитория

Сервис интеграции предоставляет интерфейс для формирования и заказа лабораторных результатов, а также получения результатов. Реализация опирается на стандарт Fhir R4.

Данный документ описывает интеграцию для разработчиков. Конечные пользователи для подключения должны выполнить следующие шаги:

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

Предварительные условия

Разработчики интеграционного модуля должны выполнить следующие шаги:

  1. Получить тестовый контракт у представителей лаборатории.
  2. Утвердить тип авторизации с представителями лаборатории.
  3. Получить логин/пароль для работы с API.
  4. Получить client_id, client_secret для работы с API.
  5. Получить контракты для работы.
  6. Реализовать взаимодействие с API.
  7. Провести тестирование на stage зоне лаборатории.

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

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

Действия, выполняемые раз в сутки:

  1. Запрос каталога доступных исследований.
  2. (Опционально) Запрос цен.

Действия, выполняемые на каждый запрос:

  1. Запрос преаналитики на корзину исследований.
  2. Формирование опросников на корзину заказа.
  3. Формирование ответа на опросник.
  4. Объединение результатов запроса преаналитики и ответа на опросник в заказ.
  5. Отправка заказа в лабораторию.

Получение результатов можно реализовать двумя способами:

  1. Периодическим опросом API.
  2. Подписавшись на изменения.

Схема взаимодействия:

Sequence Chart

Базовые адреса 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

Запрос каталога исследований

GET /r4/fhir/catalog/<Contract_Code>

Запрос предоставляет информацию о всех предоставляемых в рамках контракта исследованиях, времени выполнения, обязательных и рекомендуемых полях.

В случае успеха Status code: 200 OK. Тело - Bundle, который содержит ресурсы:

РесурсРазмерностьНазначение
Composition1..1Задает структуру каталога, содержит ссылки на CatalogEntry, которые описываю исследования
CatalogEntry0..*Товарная позиция каталога, необходим для указания, что старые исследования заменены, или что данное исследование может автоматом привести к другому (пример, микробиология)
ActivityDefinition0..*Техническое описание товарной позиции
SpecimenDefinition0..*Описание типов БМ, которые необходимы для выполнения исследования, поддерживает выбор БМ
ObservationDefinition0..*Описывает, какие компоненты исследований будут заполнены на выходе.
Questionnaire0..*Описание какие вопросы нужно задать при заявке.

В случае ошибки 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

Требуемые заголовки:

ИмяОписание
AuthorizationBearer <jwt_token>
Content-Typeapplication/fhir+json

Необязательные параметры запроса:

ИмяТипОписание
includeTransportContainerboolДобавлять ли в ответ преаналитики информацию о транспортном контейнере (при его необходимости), по умолчанию false

Тело запроса должно содержать все выбранные товарные позиции и биоматериал для своего выполнения. Тело запроса представляет собой Bundle с ресурсами:

  1. Contract
  2. ActivityDefinition каждой товарной позиции в которой заполнены а. Identifier (как в каталоге) б. specimenRequirement (должен содержать ссылки на выбранные типы БМ)
  3. 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 входит:

  1. ServiceRequest
  2. 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, если они представлены. Далее необходимо объединить опросники в один. Это делается так:

  1. Выбираются все вопросы (гарантируется, что все вопросы будут на первом уровне вложенности) из всех опросников.
  2. По всем вопросам отсеиваются дубли по linkId (если встречаются вопросы с разным значением флага required, то при группировке поле required = true должно быть в приоритете).
  3. Оставшиеся вопросы формируют новый единый опросник корзины.

Пример опросника:

{
  "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"
                  }
                }
              ],
    ...
}

Формирование объекта заказа

Объект заказа формируется из нескольких частей:

  1. Ответа преаналитики
  2. QuestionnaireResponse
  3. Ресурса 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"
}

Часть ресурсов в заказе должны быть дополнены:

  1. Клиент должен проставить всем ресурсам ServiceRequest в поле subject.reference ссылку на FullUrl ресурса Patient.
  2. Клиент должен проставить всем ресурсам ServiceRequest в поле supportingInfo.reference.Identifier ссылку на контракт. Кодовая система может быть получена у принимающей стороны.
  3. Клиент должен заполнить номера штрихкодов образцов в соответствующие поля - specimen.Container.Identifier(system = <кодовая сисема штрихкодов лаборатории>).Value для каждого ресурса Specimen. Некоторые лаборатории могут сами назначать коды и проставлять их в ответе преаналитики, заполняющая сторона должна обрабатывать такие ситуации.

Передача дополнительных данных

Данные об идентификаторе врача и номере карты пациента передаются в ресурсе QuestionnaireResponse вместе с остальными ответами на вопросы.

ПолеLinkIdТип данных
Номер карты клиентаX_CLINICAL_RECORDstring
Идентификатор врачаX_PRACTITIONER_IDstring

Пример:

{
     "answer": [{
              "valueString": "номер карты"
                }
              ],
    "linkId": "X_CLINICAL_RECORD"
}

Взаимодействие по контракту ОМС

Данные по ОМС передаются в ресурсе QuestionnaireResponse вместе с остальными ответами на вопросы. Все поля обязательны для заполнения.

ПолеLinkIdТип данныхКодовая система
ФамилияOmsInfo.PatientLastNamestring
ИмяOmsInfo.PatientFirstNamestring
ОтчествоOmsInfo.PatientMiddleNamestring
Дата рожденияOmsInfo.PatientBirthDatedateTime
ПолOmsInfo.PatientGenderCoding"http://hl7.org/fhir/administrative-gender"
Адрес регистрацииOmsInfo.PatientRegUnStructAddressstring
Адрес проживанияOmsInfo.PatientLiveUnStructAddressstring
Тип удостоверения личностиOmsInfo.PatientDocTypeCoding"https://api.medlinx.online/terminology/tfoms-id-type"
Серия удостоверения личностиOmsInfo.PatientSerialDocstring
Номер удостоверения личностиOmsInfo.PatientDocNumberstring
Серия полисаOmsInfo.PatientPolicySeriesstring
Номер полисаOmsInfo.PatientPolicyNumberstring
Дата начала действия полисаOmsInfo.PatientPolicyStartDatedateTime
ПлательщикOmsInfo.PatientAccountPlaceCoding"https://api.medlinx.online/terminology/tfoms-payor-id"
Тип полисаOmsInfo.PatientPolicyTypeCoding"https://api.medlinx.online/terminology/tfoms-coverage-type"
Номер СНИЛСOmsInfo.PatientSnilsstring
Статус пациентаOmsInfo.PatientStatusCoding"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"
            }
        }
    ]
}

Order

Система поддерживает создание ресурсов отдельными запросами или единым запросом со всеми ресурсами.

Создание ресурсов одним запросом

Отправка заказа

POST /r4/fhir

Требуемые заголовки:

ИмяОписание
AuthorizationBearer <jwt_token>
Content-Typeapplication/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

Требуемые заголовки:

ИмяОписание
AuthorizationBearer <jwt_token>
Content-Typeapplication/fhir+json

Тело запроса - Bundle с типом collection со всеми ресурсами для создания заказа.

В случае успеха Status code: 200 OK. Тело - Bundle c заполненным поле id.

В случае ошибки Status code: >400. Тело: OperationOutcome

Создание Task

Отправка заказа

POST /r4/fhir/Task

Требуемые заголовки:

ИмяОписание
AuthorizationBearer <jwt_token>
Content-Typeapplication/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"
}]

Формирование объекта предзаказа

Создание предзаказа имеет много общего с созданием [заказа](## Формирование объекта заказа). Для создания предзаказа на лабораторное исследование необходимы:

  1. Ответ преаналитики
  2. Ресурс 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>

Требуемые заголовки:

ИмяОписание
AuthorizationBearer <jwt_token>
Content-Typeapplication/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

Требуемые заголовки:

ИмяОписание
AuthorizationBearer <jwt_token>
Content-Typeapplication/fhir+json

Необязательные параметры запроса:

ИмяТипОписание
includeTransportContainerboolДобавлять ли в ответ преаналитики информацию о транспортном контейнере (при его необходимости), по умолчанию 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>

Требуемые заголовки:

ИмяОписание
AuthorizationBearer <jwt_token>
Content-Typeapplication/fhir+json

Запрос предоставляет информацию о всех предоставленных в рамках взаимодействия ДЦ, по умолчанию только для страховых контрактов.

Необязательные параметры запроса:

ИмяТипОписание
allContractsboolВыдавать ДЦ по всем контрактам, по умолчанию false
nonInsuranceContractsboolВыдавать ДЦ по не страховым контрактам, по умолчанию false

В случае успеха Status code: 200 OK. Тело - Bundle, который содержит ресурсы:

РесурсРазмерностьНазначение
Location1..*Информация о ДЦ
ПолеНазначениеКодовая система
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/<Код ДЦ>

Требуемые заголовки:

ИмяОписание
AuthorizationBearer <jwt_token>
Content-Typeapplication/fhir+json

Запрос предоставляет информацию о расписании работы ДЦ на месяц.

В случае успеха Status code: 200 OK. Тело - Bundle, который содержит ресурсы:

РесурсРазмерностьНазначение
Schedule1..*Информация о ДЦ
Slot1..*Информация о ДЦ
Поле 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. Поддерживаемые значения:

  1. application/fhir+json
  2. application/pdf
  3. image/jpeg

Сама ссылка находится по пути Attachment.Url.

При запросе ссылки клиент должен указывать ряд параметров:

Требуемые заголовки:

ИмяОписание
AuthorizationBearer <jwt_token>
Acceptapplication/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-Typeapplication/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

  • Целевая аудитория
  • Предварительные условия
  • Описание интеграции
    • Базовые адреса API
  • Запрос каталога исследований
    • Ссылки внутри Bundle
  • Запрос контракта
  • Выбор корзины исследований
  • Запрос преаналитики на корзину исследований
  • Формирование опросников на корзину заказа
  • Формирование ответа на опросник
  • Исследования Атлас
  • Формирование объекта заказа
    • Передача дополнительных данных
    • Взаимодействие по контракту ОМС
  • Отправка заказа в лабораторию
    • Создание ресурсов одним запросом
    • Создание ресурсов независимыми запросами
  • Обработка заказа лабораторией
  • Формирование объекта предзаказа
    • Передача информации о полисе ДМС
    • Предзаказ с мобильным выездом
  • B2C взаимодействие
    • Получение каталога с услугами по взятию БМ
    • Получение преаналитики с услугами по взятию БМ
    • Получение списка ДЦ
  • Получение результатов лабораторных исследований
    • Опрос API
    • Подписка на изменения
    • Частичная выгрузка результатов
    • Выгрузка результатов на предзаказы
  • Валидация ресурсов FHIR
Medlinx
Docs
ИнтеграцияАвторизация
Copyright © 2024 Medlinx