Использование пользовательских функций с сопоставлением устройств службы 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 .
Дальнейшие действия
Из этой статьи вы узнали, как использовать пользовательские функции службы MedTech в сопоставлении устройств.
Общие сведения о сопоставлении устройств службы MedTech см. в разделе
Общие сведения о сопоставлении назначения FHIR службы MedTech см. в разделе
Общие сведения о примерах сопоставлений на основе сценариев службы MedTech см. в разделе
FHIR® является зарегистрированным товарным знаком Health Level Seven International, зарегистрированным в Управлении товарных знаков США и используется с их разрешения.