Jak používat vlastní funkce s mapováním zařízení služby MedTech

Poznámka

Fast Healthcare Interoperability Resources (FHIR®) je otevřená specifikace zdravotní péče.

Při použití jazyka výrazů JMESPath je k dispozici celá řada funkcí. Kromě předdefinovaných funkcí, které jsou k dispozici jako součást specifikace JMESPath, je možné použít i mnoho dalších vlastních funkcí. Tento článek popisuje, jak používat vlastní funkce specifické pro službu MedTech s mapováním zařízení služby MedTech.

Tip

Ladicí program Mapování služby MedTech vám pomůže s vytvářením, aktualizací a řešením potíží se zařízením služby MedTech a mapováním cílů FHIR. Ladicí program mapování umožňuje snadno zobrazit a provádět vložené úpravy v reálném čase, aniž byste museli opustit Azure Portal. Ladicí program mapování se dá použít také k nahrávání zpráv testovacího zařízení, abyste viděli, jak budou vypadat po jejich zpracování na normalizované zprávy a transformaci na pozorování FHIR.

Podpis funkce

Každá funkce má podpis, který odpovídá specifikaci JMESPath. Tento podpis může být reprezentován takto:

return_type function_name(type $argname)

Podpis označuje platné typy argumentů. Pokud je argument předán neplatný typ, dojde k chybě.

Důležité

Po dokončení matematických funkcí se konečný výsledek musí vejít do dlouhé hodnoty jazyka C# . Pokud se konečný výsledek nevejde do dlouhé hodnoty jazyka C#, dojde k matematické chybě.

Jak bylo uvedeno výše, tyto funkce lze použít pouze při zadání JmesPath jako jazyk výrazu. Ve výchozím nastavení je jazyk výrazů JsonPath. Jazyk výrazu lze změnit při definování výrazu.

Příklad:

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

Tento příklad používá výraz insertString k vygenerování ID patient123pacienta .

Hodnoty literálů

Konstantní hodnoty mohou být předány funkcím.

  • Číselné hodnoty by měly být uzavřeny v zpětných položkách: '
    • Příklad: add('10'; '10')
  • Řetězcové hodnoty by měly být uzavřeny v jednoduchých uvozovkách: '
    • Příklad: insertString('mple', 'sa', '0')

Další informace najdete ve specifikaci JMESPath.

Ošetření výjimek

V různých bodech životního cyklu zpracování dat zařízení může dojít k výjimkám. Tady jsou různé body, ve kterých může dojít k výjimkám:

Akce Když Výjimky, ke kterým může dojít během analýzy mapování zařízení Výsledek
Analýza mapování zařízení Při každém přijetí nové dávky zpráv zařízení se mapování zařízení načte a parsuje. Nepovedlo se analyzovat mapování zařízení. Systém se pokusí znovu načíst a parsovat nejnovější mapování zařízení, dokud analýza nebude úspěšná. Dokud nebude analýza úspěšná, nezpracují se žádné nové zprávy zařízení.
Analýza mapování zařízení Při každém přijetí nové dávky zpráv zařízení se mapování zařízení načte a parsuje. Nepovedlo se analyzovat žádné výrazy. Systém se pokusí znovu načíst a parsovat nejnovější mapování zařízení, dokud analýza nebude úspěšná. Dokud nebude analýza úspěšná, nezpracují se žádné nové zprávy zařízení.
Spuštění funkce Pokaždé, když se funkce spustí s daty zařízení ve zprávě zařízení. Vstupní data zařízení neodpovídají datům podpisu funkce. Systém přestane zpracovávat zprávu zařízení. Zpráva zařízení se neopakuje.
Spuštění funkce Pokaždé, když se funkce spustí s daty zařízení ve zprávě zařízení. Všechny ostatní výjimky uvedené v popisu funkce. Systém přestane zpracovávat zprávu zařízení. Zpráva zařízení se neopakuje.

Matematické funkce

add

number add(number $left, number $right)

Vrátí výsledek přidání argumentu vlevo k argumentu vpravo.

Příklady:

Dané Výraz Výsledek
Není k dispozici add('10'; '10') 20
{"left": 40, "right": 50} add(vlevo, vpravo) 90
{"left": 0, "right": 50} add(vlevo, vpravo) 50

Rozdělit

number divide(number $left, number $right)

Vrátí výsledek dělení argumentu vlevo argumentem vpravo.

Příklady:

Dané Výraz Výsledek
Není k dispozici divide('10'; '10') 1
{"left": 40, "right": 50} divide(vlevo, vpravo) 0.8
{"left": 0, "right": 50} divide(vlevo, vpravo) 0
{"left": 50, "right": 0} divide(vlevo, vpravo) matematická chyba: dělit nulou

Násobit

number multiply(number $left, number $right)

Vrátí výsledek vynásobení levého argumentu argumentem vpravo.

Příklady:

Dané Výraz Výsledek
Není k dispozici multiply('10'; '10') 100
{"left": 40, "right": 50} multiply (vlevo, vpravo) 2000
{"left": 0, "right": 50} multiply (vlevo, vpravo) 0

Pow

number pow(number $left, number $right)

Vrátí výsledek zvýšení levého argumentu na mocninu pravého argumentu.

Příklady:

Dané Výraz Výsledek
Není k dispozici pow('10', '10') 10000000000
{"left": 40, "right": 50} pow(vlevo, vpravo) matematická chyba: přetečení
{"left": 0, "right": 50} pow(vlevo, vpravo) 0
{"left": 100, "right": 0.5} pow(vlevo, vpravo) 10

Odečíst

number subtract(number $left, number $right)

Vrátí výsledek odečtení pravého argumentu od argumentu vlevo.

Příklady:

Dané Výraz Výsledek
Není k dispozici subtract('10'; '10') 0
{"left": 40, "right": 50} subtract (vlevo, vpravo) -10
{"left": 0, "right": 50} subtract (vlevo, vpravo) −50

Funkce řetězců

insertString

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

Vytvoří nový řetězec vložením hodnoty toInsert do řetězce original. Řetězec se vloží na pozici pos v řetězci original.

Pokud je poziční argument od nuly, pozice nuly odkazuje na první znak v řetězci.

Pokud je zadaný poziční argument mimo rozsah délky original, dojde k chybě.

Příklady:

Dané Výraz Výsledek
Není k dispozici insertString('mple'; 'sa'; 0) "ukázka"
{"original": "mple", "toInsert": "sa", "pos": 0} insertString(original, toInsert, pos) "ukázka"
{"original": "suess", "toInsert": "cc", "pos": 2} insertString(original, toInsert, pos) "úspěch"
{"original": "myString", "toInsert": "!!", "pos": 8} insertString(original, toInsert, pos) "myString!!"

Datové funkce

fromUnixTimestamp

string fromUnixTimestamp(number $unixTimestampInSeconds)

Vytvoří časové razítko odpovídající standardu ISO 8061 z daného časového razítka Unixu. Časové razítko je vyjádřeno jako počet sekund od epochy (1. ledna 1970).

Příklady:

Dané Výraz Výsledek
{"unix": 1625677200} fromUnixTimestamp(unix) "2021-07-07T17:00:00+0"
{"unix": 0} fromUnixTimestamp(unix) "1970-01-01T0:00:00+0"

fromUnixTimestampMs

string fromUnixTimestampMs(number $unixTimestampInMs)

Vytvoří časové razítko odpovídající standardu ISO 8061 z daného časového razítka Unixu. Časové razítko je vyjádřeno jako počet milisekund od epochy (1. ledna 1970).

Příklady:

Dané Výraz Výsledek
{"unix": 1626799080000} fromUnixTimestampMs(unix) "2021-07-20T16:38:00+0"
{"unix": 0} fromUnixTimestampMs(unix) "1970-01-01T0:00:00+0"

Další kroky

V tomto článku jste zjistili, jak používat vlastní funkce služby MedTech v rámci mapování zařízení.

Přehled mapování zařízení služby MedTech najdete v tématu

Přehled mapování cílů FHIR služby MedTech najdete v tématu

Přehled ukázek mapování na základě scénářů služby MedTech najdete v tématu

FHIR® je registrovaná ochranná známka společnosti Health Level Seven International, registrovaná v U.S. Trademark Office a je používána s jejich svolením.