Определение параметров пользовательского поиска для API Azure для FHIR

Спецификация ресурсов быстрого взаимодействия в сфере здравоохранения (FHIR®) определяет набор параметров поиска для всех ресурсов и параметров поиска, относящихся к ресурсам. Однако существуют сценарии, в которых может потребоваться выполнить поиск по элементу в ресурсе, который не определен спецификацией FHIR в качестве стандартного параметра поиска. В этой статье описывается, как определить собственные параметры поиска , которые будут использоваться в Azure API для FHIR.

Примечание

Каждый раз при создании, обновлении или удалении параметра поиска необходимо запускать задание повторной индексации , чтобы разрешить использование параметра поиска в рабочей среде. Ниже мы рассмотрим, как проверить параметры поиска перед переиндексированием всего сервера FHIR.

Создание нового параметра поиска

Чтобы создать новый параметр поиска, необходимо POST указать SearchParameter ресурс для базы данных. В приведенном ниже примере кода показано, как добавить us Core Race SearchParameter к ресурсу Patient .

POST {{FHIR_URL}}/SearchParameter

{
  "resourceType" : "SearchParameter",
  "id" : "us-core-race",
  "url" : "http://hl7.org/fhir/us/core/SearchParameter/us-core-race",
  "version" : "3.1.1",
  "name" : "USCoreRace",
  "status" : "active",
  "date" : "2019-05-21",
  "publisher" : "US Realm Steering Committee",
  "contact" : [
    {
      "telecom" : [
        {
          "system" : "other",
          "value" : "http://www.healthit.gov/"
        }
      ]
    }
  ],
  "description" : "Returns patients with a race extension matching the specified code.",
  "jurisdiction" : [
    {
      "coding" : [
        {
          "system" : "urn:iso:std:iso:3166",
          "code" : "US",
          "display" : "United States of America"
        }
      ]
    }
  ],
  "code" : "race",
  "base" : [
    "Patient"
  ],
  "type" : "token",
  "expression" : "Patient.extension.where(url = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-race').extension.value.code"
}

Примечание

Новый параметр поиска появится в операторе возможностей сервера FHIR после того, как вы добавите параметр поиска в базу данных и переиндексируете базу данных. SearchParameter Просмотр в операторе capability — единственный способ определить, поддерживается ли параметр поиска на сервере FHIR. Если вы можете найти параметр поиска, выполнив поиск по параметру поиска, но не видите его в инструкции capability, вам все равно потребуется индексировать параметр поиска. Перед запуском операции повторной индексации можно выполнить post несколько параметров поиска.

Важные элементы :SearchParameter

  • url: уникальный ключ для описания параметра поиска. Многие организации, такие как HL7, используют стандартный формат URL-адреса для параметров поиска, которые они определяют, как показано выше в параметре поиска гонки US Core.

  • code. Значение, хранящееся в коде , используется при поиске. В приведенном выше примере вы выполните поиск с GET {FHIR_URL}/Patient?race=<code> , чтобы получить всех пациентов определенной расы. Код должен быть уникальным для ресурсов, к которому применяется параметр поиска.

  • base: описывает, к каким ресурсам применяется параметр поиска. Если параметр поиска применяется ко всем ресурсам, можно использовать Resource; в противном случае можно вывести список всех соответствующих ресурсов.

  • type: описывает тип данных для параметра поиска. Тип ограничен поддержкой API Azure для FHIR. Это означает, что вы не можете определить параметр поиска типа Special или составной параметр поиска , если это не поддерживаемое сочетание.

  • expression: описывает, как вычислить значение для поиска. При описании параметра поиска необходимо включить выражение, даже если оно не требуется спецификацией. Это связано с тем, что требуется либо выражение, либо синтаксис xpath, а API Azure для FHIR игнорирует синтаксис xpath.

Тестирование параметров поиска

Хотя вы не можете использовать параметры поиска в рабочей среде до запуска задания повторной индексации, существует несколько способов проверить параметры поиска перед переиндексированием всей базы данных.

Сначала можно протестировать новый параметр поиска, чтобы узнать, какие значения будут возвращены. Выполнив приведенную ниже команду для конкретного экземпляра ресурса (введя его идентификатор), вы получите список пар значений с именем параметра поиска и значением, сохраненным для конкретного пациента. Это будет включать все параметры поиска для ресурса, и вы можете прокрутить его, чтобы найти созданный параметр поиска. Выполнение этой команды не изменит поведение сервера FHIR.

GET https://{{FHIR_URL}}/{{RESOURCE}}/{{RESOUCE_ID}}/$reindex

Например, чтобы найти все параметры поиска для пациента, выполните приведенные ниже действия.

GET https://{{FHIR_URL}}/Patient/{{PATIENT_ID}}/$reindex

Результат должен выглядеть так:

{
  "resourceType": "Parameters",
  "id": "8be24e78-b333-49da-a861-523491c3437a",
  "meta": {
    "versionId": "1"
  },
  "parameter": [
    {
      "name": "deceased",
      "valueString": "http://hl7.org/fhir/special-values|false"
    },
    {
      "name": "language",
      "valueString": "urn:ietf:bcp:47|en-US"
    },
    {
      "name": "race",
      "valueString": "2028-9"
    },
...

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

POST https://{{FHIR_URL}/{{RESOURCE}}/{{RESOURCE_ID}}/$reindex

При выполнении этого задания задаются индексы для всех параметров поиска для конкретного ресурса, определенного для этого типа ресурса. Это делает обновление сервера FHIR. Теперь можно выполнить поиск и задать для заголовка use partial indexs значение true, что означает, что он будет возвращать результаты, если любой из ресурсов имеет индексированные параметры поиска, даже если не все ресурсы этого типа индексируют его.

Продолжая работу с приведенным выше примером, можно проиндексировать одного пациента, чтобы включить US Core Race SearchParameter:

POST https://{{FHIR_URL}/Patient/{{PATIENT_ID}}/$reindex

А затем найдите пациентов с определенной расой:

GET https://{{FHIR_URL}}/Patient?race=2028-9
x-ms-use-partial-indices: true

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

Обновление параметра поиска

Чтобы обновить параметр поиска, используйте PUT для создания новой версии параметра поиска. Необходимо включить в SearchParameter IDid элемент текста PUT запроса и в вызове PUT .

Примечание

Если вы не знаете идентификатор параметра поиска, его можно найти. При использовании GET {{FHIR_URL}}/SearchParameter будут возвращены все параметры пользовательского поиска, и вы можете прокрутить параметр поиска, чтобы найти нужный параметр поиска. Вы также можете ограничить поиск по имени. В приведенном ниже примере можно выполнить поиск по имени с помощью USCoreRace: GET {{FHIR_URL}}/SearchParameter?name=USCoreRace.

PUT {{FHIR_URL}}/SearchParameter/{SearchParameter ID}

{
  "resourceType" : "SearchParameter",
  "id" : "SearchParameter ID",
  "url" : "http://hl7.org/fhir/us/core/SearchParameter/us-core-race",
  "version" : "3.1.1",
  "name" : "USCoreRace",
  "status" : "active",
  "date" : "2019-05-21",
  "publisher" : "US Realm Steering Committee",
  "contact" : [
    {
      "telecom" : [
        {
          "system" : "other",
          "value" : "http://www.healthit.gov/"
        }
      ]
    }
  ],
  "description" : "New Description!",
  "jurisdiction" : [
    {
      "coding" : [
        {
          "system" : "urn:iso:std:iso:3166",
          "code" : "US",
          "display" : "United States of America"
        }
      ]
    }
  ],
  "code" : "race",
  "base" : [
    "Patient"
  ],
  "type" : "token",
  "expression" : "Patient.extension.where(url = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-race').extension.value.code"
}

Результатом будет обновление SearchParameter , а версия будет увеличиваться.

Предупреждение

Будьте внимательны при обновлении SearchParameters, которые уже были проиндексированы в базе данных. Изменение существующего поведения SearchParameter может повлиять на ожидаемое поведение. Рекомендуется немедленно запустить задание повторной индексации.

Удаление параметра поиска

Если необходимо удалить параметр поиска, используйте следующее:

Delete {{FHIR_URL}}/SearchParameter/{SearchParameter ID}

Предупреждение

Будьте внимательны при удалении SearchParameters, которые уже проиндексированы в базе данных. Изменение существующего поведения SearchParameter может повлиять на ожидаемое поведение. Рекомендуется немедленно запустить задание повторной индексации.

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

Из этой статьи вы узнали, как создать параметр поиска. Далее вы можете узнать, как переиндексировать сервер FHIR.

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