Jak używać funkcji niestandardowych z mapowaniem urządzeń usługi MedTech

Uwaga

Fast Healthcare Interoperability Resources (FHIR®) to otwarta specyfikacja opieki zdrowotnej.

Wiele funkcji jest dostępnych w przypadku używania języka wyrażeń JMESPath . Oprócz wbudowanych funkcji dostępnych w ramach specyfikacji JMESPath można również używać wielu innych funkcji niestandardowych. W tym artykule opisano sposób używania funkcji niestandardowych specyficznych dla usługi MedTech z mapowaniem urządzeń usługi MedTech.

Porada

Debuger mapowania usługi MedTech umożliwia tworzenie, aktualizowanie i rozwiązywanie problemów z mapowaniami docelowymi urządzenia usługi MedTech i FHIR. Debuger mapowania umożliwia łatwe wyświetlanie i wprowadzanie wbudowanych korekt w czasie rzeczywistym bez konieczności opuszczania Azure Portal. Debuger mapowania może również służyć do przekazywania komunikatów testowych urządzeń, aby zobaczyć, jak będą one wyglądać po przetworzeniu w znormalizowane komunikaty i przekształcone w obserwacje FHIR.

Podpis funkcji

Każda funkcja ma podpis zgodny ze specyfikacją JMESPath. Ten podpis może być reprezentowany jako:

return_type function_name(type $argname)

Podpis wskazuje prawidłowe typy argumentów. Jeśli dla argumentu zostanie przekazany nieprawidłowy typ, wystąpi błąd.

Ważne

Po zakończeniu wykonywania funkcji związanych z obliczeniami wynik końcowy musi być w stanie zmieścić się w długiej wartości języka C# . Jeśli wynik końcowy nie może zmieścić się w długiej wartości języka C#, wystąpi błąd matematyczny.

Jak wspomniano wcześniej, te funkcje mogą być używane tylko podczas określania języka wyrażeń JmesPath . Domyślnie język wyrażeń to JsonPath. Język wyrażeń można zmienić podczas definiowania wyrażenia.

Przykład:

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

W tym przykładzie użyto wyrażenia insertString do wygenerowania identyfikatora patient123pacjenta .

Wartości literału

Wartości stałe mogą być dostarczane do funkcji.

  • Wartości liczbowe powinny być ujęte w backticks: "
    • Przykład: add('10', '10')
  • Wartości ciągów powinny być ujęte w apostrofy: "
    • Przykład: insertString('mple', 'sa', '0')

Aby uzyskać więcej informacji, zobacz specyfikację JMESPath.

Obsługa wyjątków

Wyjątki mogą wystąpić w różnych punktach w cyklu życia przetwarzania danych urządzenia. Oto różne punkty, w których mogą wystąpić wyjątki:

Akcja Kiedy Wyjątki, które mogą wystąpić podczas analizowania mapowania urządzenia Wynik
Analizowanie mapowania urządzeń Za każdym razem, gdy odbierana jest nowa partia komunikatów urządzenia, mapowanie urządzenia jest ładowane i analizowane. Nie można przeanalizować mapowania urządzenia. System próbuje ponownie załadować i przeanalizować najnowsze mapowanie urządzenia, dopóki analizowanie nie powiedzie się. Żadne nowe komunikaty urządzenia nie są przetwarzane, dopóki analizowanie nie powiedzie się.
Analizowanie mapowania urządzeń Za każdym razem, gdy odbierana jest nowa partia komunikatów urządzenia, mapowanie urządzenia jest ładowane i analizowane. Nie można przeanalizować żadnych wyrażeń. System próbuje ponownie załadować i przeanalizować najnowsze mapowanie urządzenia, dopóki analizowanie nie powiedzie się. Żadne nowe komunikaty urządzenia nie są przetwarzane, dopóki analizowanie nie powiedzie się.
Wykonywanie funkcji Za każdym razem, gdy funkcja jest wykonywana względem danych urządzenia w komunikacie urządzenia. Dane wejściowe urządzenia nie są zgodne z podpisem funkcji. System zatrzymuje przetwarzanie tego komunikatu urządzenia. Komunikat urządzenia nie jest ponawiany.
Wykonywanie funkcji Za każdym razem, gdy funkcja jest wykonywana względem danych urządzenia w komunikacie urządzenia. Wszelkie inne wyjątki wymienione w opisie funkcji. System zatrzymuje przetwarzanie tego komunikatu urządzenia. Komunikat urządzenia nie jest ponawiany.

Funkcje matematyczne

add

number add(number $left, number $right)

Zwraca wynik dodania argumentu po lewej stronie do prawego argumentu.

Przykłady:

Podane Wyrażenie Wynik
n/d add('10', '10') 20
{"left": 40, "right": 50} add(left, right) 90
{"left": 0, "right": 50} add(left, right) 50

Podzielić

number divide(number $left, number $right)

Zwraca wynik dzielenia argumentu po lewej stronie przez prawy argument.

Przykłady:

Podane Wyrażenie Wynik
n/d 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) błąd matematyczny: podziel przez zero

Pomnożyć

number multiply(number $left, number $right)

Zwraca wynik mnożenia argumentu po lewej stronie z argumentem po prawej stronie.

Przykłady:

Podane Wyrażenie Wynik
n/d multiply('10', '10') 100
{"left": 40, "right": 50} mnożenie (po lewej, w prawo) 2000
{"left": 0, "right": 50} mnożenie (po lewej, w prawo) 0

Pow

number pow(number $left, number $right)

Zwraca wynik podniesienia argumentu po lewej stronie do potęgi prawego argumentu.

Przykłady:

Podane Wyrażenie Wynik
n/d pow('10', '10') 10000000000
{"left": 40, "right": 50} pow(po lewej, w prawo) błąd matematyczny: przepełnienie
{"left": 0, "right": 50} pow(po lewej, w prawo) 0
{"left": 100, "right": 0,5} pow(po lewej, w prawo) 10

Odejmij

number subtract(number $left, number $right)

Zwraca wynik odejmowania prawego argumentu z argumentu po lewej stronie.

Przykłady:

Podane Wyrażenie Wynik
n/d odejmowanie('10', '10') 0
{"left": 40, "right": 50} odejmowanie (po lewej, w prawo) -10
{"left": 0, "right": 50} odejmowanie (po lewej, w prawo) -50

Funkcje ciągów

insertString

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

Tworzy nowy ciąg, wstawiając wartość toInsert do ciągu original. Ciąg jest wstawiany w pozycji pos w ciągu original.

Jeśli argument pozycyjny ma wartość zero, pozycja zero odwołuje się do pierwszego znaku w ciągu.

Jeśli podany argument pozycyjny jest poza zakresem długości original, wystąpi błąd.

Przykłady:

Podane Wyrażenie Wynik
n/d insertString('mple', 'sa', 0) "przykład"
{"original": "mple", "toInsert": "sa", "pos": 0} insertString(oryginalny, toInsert, pos) "przykład"
{"original": "suess", "toInsert": "cc", "pos": 2} insertString(oryginalny, toInsert, pos) "sukces"
{"original": "myString", "toInsert": "!!", "pos": 8} insertString(oryginalny, toInsert, pos) "myString!!"

Funkcje daty

fromUnixTimestamp

string fromUnixTimestamp(number $unixTimestampInSeconds)

Tworzy sygnaturę czasową zgodną z normą ISO 8061 z danego znacznika czasu systemu Unix. Sygnatura czasowa jest reprezentowana jako liczba sekund od epoki (1 stycznia 1970).

Przykłady:

Podane Wyrażenie Wynik
{"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)

Tworzy sygnaturę czasową zgodną z normą ISO 8061 z danego znacznika czasu systemu Unix. Sygnatura czasowa jest reprezentowana jako liczba milisekund od epoki (1 stycznia 1970).

Przykłady:

Podane Wyrażenie Wynik
{"unix": 1626799080000} fromUnixTimestampMs(unix) "2021-07-20T16:38:00+0"
{"unix": 0} fromUnixTimestampMs(unix) "1970-01-01T00:00:00+0"

Porada

Zobacz artykuł MedTech Service Troubleshoot errors using the MedTech service logs (Rozwiązywanie problemów z błędami przy użyciu dzienników usługi MedTech ), aby uzyskać pomoc w naprawianiu błędów przy użyciu dzienników usługi MedTech.

Następne kroki

W tym artykule przedstawiono sposób używania funkcji niestandardowych usługi MedTech w ramach mapowania urządzeń.

Aby zapoznać się z omówieniem mapowania urządzeń usługi MedTech, zobacz

Aby zapoznać się z omówieniem mapowania lokalizacji docelowej FHIR usługi MedTech, zobacz

Aby zapoznać się z omówieniem przykładów mapowań opartych na scenariuszach usługi MedTech, zobacz

FHIR® jest zastrzeżonym znakiem towarowym Health Level Seven International, zarejestrowanym w U.S. Trademark Office i jest używany z ich pozwoleniem.