Хранение профилей в Azure API для FHIR

HL7 Fast Healthcare Interoperability Resources (FHIR®) определяет стандартный и совместимый способ хранения медицинских данных и обмена ими. Даже в базовой спецификации FHIR может быть полезно определить другие правила или расширения на основе контекста, используемого FHIR. Для таких контекстных применений FHIR профили FHIR используются для дополнительного уровня спецификаций. Профиль FHIR позволяет сузить и настроить определения ресурсов с помощью ограничений и расширений.

Azure API для FHIR позволяет выполнять проверку ресурсов по профилям, чтобы узнать, соответствуют ли ресурсы профилям. В этой статье описаны основы профилей FHIR и способы их хранения. Дополнительные сведения о профилях FHIR за пределами этой статьи см. на HL7.org.

Профиль FHIR: основные сведения

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

Ниже приведены некоторые примеры того, как профили могут изменять базовый ресурс.

  • Ограничение кратности. Например, можно задать максимальное количество элементов равным 0, что означает, что элемент исключается в определенном контексте.
  • Ограничьте содержимое элемента одним фиксированным значением.
  • Определите необходимые расширения для ресурса.

Идентифицируется StructureDefinition по каноническому URL-адресу: http://hl7.org/fhir/StructureDefinition/{profile}

Пример:

  • http://hl7.org/fhir/StructureDefinition/patient-birthPlace — это базовый профиль, требующий сведений о зарегистрированном адресе рождения пациента.
  • http://hl7.org/fhir/StructureDefinition/bmi — это еще один базовый профиль, определяющий способ представления наблюдений индекса массы тела (ИМТ).
  • http://hl7.org/fhir/us/core/StructureDefinition/us-core-allergyintolerance — это профиль US Core, который задает минимальные ожидания для AllergyIntolerance ресурса, связанного с пациентом, и определяет обязательные поля, такие как расширения и наборы значений.

Если ресурс соответствует профилю, профиль указывается внутри profile элемента ресурса. Ниже приведен пример начала ресурса Patient с профилем http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Patient .

{
  "resourceType" : "Patient",
  "id" : "ExamplePatient1",
  "meta" : {
    "lastUpdated" : "2020-10-30T09:48:01.8512764-04:00",
    "source" : "Organization/PayerOrganizationExample1",
    "profile" : [
      "http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Patient"
    ]
  },

Примечание

Профили должны основываться на базовом ресурсе и не могут конфликтовать с базовым ресурсом. Например, если элемент имеет кратность 1..1, профиль не может сделать его необязательным.

Профили также указываются различными руководствами по реализации (IG). Ниже перечислены некоторые распространенные IG. Дополнительные сведения см. на конкретном сайте IG, чтобы узнать больше о IG и профилях, определенных в нем:

Примечание

Api Azure для FHIR по умолчанию не хранит профили из руководств по реализации. Вам потребуется загрузить их в Azure API для FHIR.

Доступ к профилям и их хранение

Хранение профилей

Для хранения профилей в Azure API для FHIR можно PUT использовать StructureDefinition с содержимым профиля в тексте запроса. Обновление или условное обновление — это хороший способ хранения профилей в службе FHIR. Используйте условное обновление, если вы не уверены, что использовать.

Стандартный PUT: PUT http://<your Azure API for FHIR base URL>/StructureDefinition/profile-id

или диспетчер конфигурации служб

Условное обновление: PUT http://<your Azure API for FHIR base URL>/StructureDefinition?url=http://sample-profile-url

{ 
"resourceType" : "StructureDefinition",
"id" : "profile-id",
"url": "http://sample-profile-url"
	…
}

Например, если вы хотите сохранить us-core-allergyintolerance профиль, используйте следующую команду rest с профилем непереносимости аллергии US Core в теле. Мы добавили фрагмент этого профиля в качестве примера.

PUT https://myAzureAPIforFHIR.azurehealthcareapis.com/StructureDefinition?url=http://hl7.org/fhir/us/core/StructureDefinition/us-core-allergyintolerance
{
    "resourceType" : "StructureDefinition",
    "id" : "us-core-allergyintolerance",
    "text" : {
        "status" : "extensions"
    },
    "url" : "http://hl7.org/fhir/us/core/StructureDefinition/us-core-allergyintolerance",
    "version" : "3.1.1",
    "name" : "USCoreAllergyIntolerance",
    "title" : "US  Core AllergyIntolerance Profile",
    "status" : "active",
    "experimental" : false,
    "date" : "2020-06-29",
        "publisher" : "HL7 US Realm Steering Committee",
    "contact" : [
    {
      "telecom" : [
        {
          "system" : "url",
          "value" : "http://www.healthit.gov"
        }
      ]
    }
  ],
    "description" : "Defines constraints and extensions on the AllergyIntolerance resource for the minimal set of data to query and retrieve allergy information.",

Дополнительные примеры см. в примере REST-файла US Core на сайте с открытым исходным кодом, где описано хранение профилей US Core. Чтобы получить наиболее актуальные профили, необходимо получить профили непосредственно из HL7 и руководство по реализации, которое их определяет.

Просмотр профилей

Доступ к существующим настраиваемым профилям GET можно получить с помощью запроса , GET http://<your Azure API for FHIR base URL>/StructureDefinition?url={canonicalUrl}где {canonicalUrl} — канонический URL-адрес профиля.

Например, если вы хотите просмотреть профиль ресурса US Core Goal:

GET https://myworkspace-myfhirserver.fhir.azurehealthcareapis.com/StructureDefinition?url=http://hl7.org/fhir/us/core/StructureDefinition/us-core-goal

При этом будет возвращен StructureDefinition ресурс для профиля основной цели США, который будет начинаться следующим образом:

{
  "resourceType" : "StructureDefinition",
  "id" : "us-core-goal",
  "url" : "http://hl7.org/fhir/us/core/StructureDefinition/us-core-goal",
  "version" : "3.1.1",
  "name" : "USCoreGoalProfile",
  "title" : "US Core Goal Profile",
  "status" : "active",
  "experimental" : false,
  "date" : "2020-07-21",
  "publisher" : "HL7 US Realm Steering Committee",
  "contact" : [
    {
      "telecom" : [
        {
          "system" : "url",
          "value" : "http://www.healthit.gov"
        }
      ]
    }
  ],
  "description" : "Defines constraints and extensions on the Goal resource for the minimal set of data to query and retrieve a patient's goal(s).",

}

Примечание

Вы увидите только профили, загруженные в Azure API для FHIR.

Azure API для FHIR не возвращает StructureDefinition экземпляры для базовых профилей, но их можно найти на веб-сайте HL7, например:

  • http://hl7.org/fhir/Observation.profile.json.html
  • http://hl7.org/fhir/Patient.profile.json.html

Профили в операторе возможности

Здесь Capability Statement перечислены все возможные варианты поведения API Azure для FHIR. Azure API для FHIR обновляет инструкцию возможности с подробными сведениями о сохраненных профилях в следующих формах:

  • CapabilityStatement.rest.resource.profile
  • CapabilityStatement.rest.resource.supportedProfile

Например, если сохранить профиль основного пациента США, который начинается следующим образом:

{
  "resourceType": "StructureDefinition",
  "id": "us-core-patient",
  "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient",
  "version": "3.1.1",
  "name": "USCorePatientProfile",
  "title": "US Core Patient Profile",
  "status": "active",
  "experimental": false,
  "date": "2020-06-27",
  "publisher": "HL7 US Realm Steering Committee",

И отправьте GET запрос для :metadata

GET http://<your Azure API for FHIR base URL>/metadata

Вы вернетесь со следующими сведениями CapabilityStatement в профиле основного пациента США, который вы отправили в Azure API для FHIR:

...
{
    "type": "Patient",
    "profile": "http://hl7.org/fhir/StructureDefinition/Patient",
    "supportedProfile":[
        "http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient"
    ],

Привязки в профилях

Служба терминологии — это набор функций, которые могут выполнять операции с медицинской "терминологией", такие как проверка кодов, перевод кодов, расширение наборов значений и т. д. Служба Azure API для FHIR не поддерживает службу терминологии. Сведения о поддерживаемых операциях ($), типах ресурсов и взаимодействиях можно найти в параметре CapabilityStatement службы. Типы ресурсов ValueSet, StructureDefinition и CodeSystem поддерживаются базовыми операциями CRUD и поиском (как определено в CapabilityStatement), а также используются системой для использования в $validate.

ValueSets может содержать сложный набор правил и внешних ссылок. Сегодня служба будет учитывать только предварительно развернутые встроенные коды. Клиентам необходимо отправить поддерживаемые наборы значений на сервер FHIR, прежде чем использовать операцию $validate. Ресурсы ValueSet должны быть отправлены на сервер FHIR с помощью PUT или условного обновления, как упоминалось в разделе Сохранение профилей выше.

Дальнейшие действия

Из этой статьи вы узнали о профилях FHIR. Далее вы узнаете, как использовать $validate для обеспечения соответствия ресурсов этим профилям.

FHIR® является зарегистрированным товарным знаком HL7 и используется с разрешения HL7.