Использование пользовательских функций с сопоставлением устройств службы MedTech

Примечание

Ресурсы быстрого взаимодействия в сфере здравоохранения (FHIR®) — это открытая спецификация для здравоохранения.

Многие функции доступны при использовании JMESPath в качестве языка выражений. Помимо встроенных функций, доступных в спецификации JMESPath, можно также использовать множество других пользовательских функций. В этой статье описывается, как использовать пользовательские функции, относящиеся к службе MedTech, с сопоставлением устройств службы MedTech.

Совет

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

Сигнатура функции

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

return_type function_name(type $argname)

Сигнатура указывает допустимые типы аргументов. Если для аргумента передается недопустимый тип, возникает ошибка.

Важно!

При выполнении математических функций конечный результат должен соответствовать значению C#long . Если конечный результат не может поместиться в длинное значение C#, возникнет математическая ошибка.

Как упоминалось ранее, эти функции можно использовать только при указании JmesPath в качестве языка выражений. По умолчанию языком выражений является JsonPath. Язык выражений можно изменить при определении выражения.

Пример:

"templateType": "CalculatedContent",
    "template": {
        "typeName": "heartrate",
        "patientIdExpression": {
            "value": "insertString('123', 'patient', `0`) ",
            "language": "JmesPath"
        },
        ...
    }

В этом примере используется выражение insertString для создания идентификатора patient123пациента .

Литеральные значения

Константы могут быть предоставлены функциям.

  • Числовые значения должны быть заключены в обратные выражения: '
    • Пример: add('10', '10')
  • Строковые значения должны быть заключены в одинарные кавычки: '
    • Пример: insertString('mple', 'sa', '0')

Дополнительные сведения см. в спецификации JMESPath.

Обработка исключений

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

Действие When Исключения, которые могут возникнуть при анализе сопоставления устройств Результат
Синтаксический анализ сопоставления устройств При каждом получении нового пакета сообщений устройства сопоставление устройств загружается и анализируется. Сбой при анализе сопоставления устройств. Система пытается перезагрузить и проанализировать последнее сопоставление устройств, пока синтаксический анализ не завершится успешно. До успешного анализа новые сообщения устройства не обрабатываются.
Синтаксический анализ сопоставления устройств При каждом получении нового пакета сообщений устройства сопоставление устройств загружается и анализируется. Отсутствие синтаксического анализа выражений. Система пытается перезагрузить и проанализировать последнее сопоставление устройств, пока синтаксический анализ не завершится успешно. До успешного анализа новые сообщения устройства не обрабатываются.
Выполнение функции Каждый раз, когда функция выполняется для данных устройства в сообщении устройства. Входные данные устройства не соответствуют данным сигнатуры функции. Система прекращает обработку этого сообщения устройства. Сообщение устройства не выполняется повторно.
Выполнение функции Каждый раз, когда функция выполняется для данных устройства в сообщении устройства. Любые другие исключения, перечисленные в описании функции. Система прекращает обработку этого сообщения устройства. Сообщение устройства не выполняется повторно.

Математические функции

add

number add(number $left, number $right)

Возвращает результат добавления левого аргумента в правый аргумент.

Примеры:

Задано Выражение Результат
Недоступно add('10', '10') 20
{"left": 40, "right": 50} add(left, right) 90
{"left": 0, "right": 50} add(left, right) 50

divide

number divide(number $left, number $right)

Возвращает результат деления левого аргумента на правый.

Примеры:

Задано Выражение Результат
Недоступно divide('10', '10') 1
{"left": 40, "right": 50} divide(left, right) 0,8
{"left": 0, "right": 50} divide(left, right) 0
{"left": 50, "right": 0} divide(left, right) математическая ошибка: деление на ноль

Умножить

number multiply(number $left, number $right)

Возвращает результат умножения левого аргумента на правый аргумент.

Примеры:

Задано Выражение Результат
Недоступно multiply('10', '10') 100
{"left": 40, "right": 50} multiply(left, right) 2000
{"left": 0, "right": 50} multiply(left, right) 0

pow

number pow(number $left, number $right)

Возвращает результат при поднятии левого аргумента в степень правого аргумента.

Примеры:

Задано Выражение Результат
Недоступно pow('10', '10') 10000000000
{"left": 40, "right": 50} pow(слева, справа) математическая ошибка: переполнение
{"left": 0, "right": 50} pow(слева, справа) 0
{"left": 100, "right": 0,5} pow(слева, справа) 10

вычитание

number subtract(number $left, number $right)

Возвращает результат вычитания правого аргумента из левого аргумента.

Примеры:

Задано Выражение Результат
Недоступно subtract('10', '10') 0
{"left": 40, "right": 50} subtract(left, right) –10
{"left": 0, "right": 50} subtract(left, right) -50

Строковые функции

insertString

string insertString(string $original, string $toInsert, number pos)

Создает новую строку путем вставки значения toInsert в строку original. Строка вставляется в позиции pos в строке original.

Если позиционный аргумент основан на нуле, позиция нуля ссылается на первый символ в строке.

Если указанный позиционный аргумент находится вне диапазона длины original, возникает ошибка.

Примеры:

Задано Выражение Результат
Недоступно insertString('mple', 'sa', 0) "sample"
{"original": "mple", "toInsert": "sa", "pos": 0} insertString(original, toInsert, pos) "sample"
{"original": "suess", "toInsert": "cc", "pos": 2} insertString(original, toInsert, pos) "успех"
{"original": "myString", "toInsert": "!!", "pos": 8} insertString(original, toInsert, pos) "myString!!"

Функции данных

fromUnixTimestamp

string fromUnixTimestamp(number $unixTimestampInSeconds)

Создает метку времени, совместимую с ISO 8061 , на основе заданной метки времени Unix. Метка времени представлена в виде количества секунд с момента эпохи (1 января 1970 года).

Примеры:

Задано Выражение Результат
{"unix": 1625677200} fromUnixTimestamp(unix) "2021-07-07T17:00:00+0"
{"unix": 0} fromUnixTimestamp(unix) "1970-01-01T00:00:00+0"

fromUnixTimestampMs

string fromUnixTimestampMs(number $unixTimestampInMs)

Создает метку времени, совместимую с ISO 8061 , на основе заданной метки времени Unix. Метка времени представлена в виде количества миллисекунда с момента эпохи (1 января 1970 г.).

Примеры:

Задано Выражение Результат
{"unix": 1626799080000} fromUnixTimestampMs(unix) "2021-07-20T16:38:00+0"
{"unix": 0} fromUnixTimestampMs(unix) "1970-01-01T00:00:00+0"

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

Из этой статьи вы узнали, как использовать пользовательские функции службы MedTech в сопоставлении устройств.

Общие сведения о сопоставлении устройств службы MedTech см. в разделе

Общие сведения о сопоставлении назначения FHIR службы MedTech см. в разделе

Общие сведения о примерах сопоставлений на основе сценариев службы MedTech см. в разделе

FHIR® является зарегистрированным товарным знаком Health Level Seven International, зарегистрированным в Управлении товарных знаков США и используется с их разрешения.