Uso de funciones personalizadas con la asignación de dispositivos del servicio MedTech

Nota

Fast Healthcare Interoperability Resources (FHIR®) es una especificación de asistencia sanitaria abierta.

Hay muchas funciones disponibles cuando se usa JMESPath como lenguaje de expresión. Además de las funciones integradas disponibles como parte de la especificación JMESPath, también se pueden usar muchas más funciones personalizadas. En este artículo se describe cómo usar las funciones personalizadas específicas del servicio MedTech con la asignación de dispositivos del servicio MedTech.

Sugerencia

Puede usar el depurador de asignación de servicios medtech para obtener ayuda para crear, actualizar y solucionar problemas de las asignaciones de destino del dispositivo del servicio MedTech y FHIR. El depurador de asignaciones permite ver y realizar fácilmente ajustes insertados en tiempo real, sin tener que salir de la Azure Portal. El depurador de asignaciones también se puede usar para cargar mensajes de dispositivo de prueba para ver cómo se examinarán después de procesarse en mensajes normalizados y transformarse en observaciones de FHIR.

Signatura de función

Cada función tiene una firma que sigue la especificación JMESPath. Esta firma se puede representar como:

return_type function_name(type $argname)

La firma indica los tipos válidos para los argumentos. Si se pasa un tipo no válido para un argumento, se produce un error.

Importante

Cuando se realizan funciones relacionadas con matemáticas, el resultado final debe ser capaz de caber dentro de un valor largo de C# . Si el resultado final no puede caber en un valor largo de C#, se producirá un error matemático.

Como se indicó anteriormente, estas funciones solo se pueden usar al especificar JmesPath como lenguaje de expresión. De forma predeterminada, el lenguaje de expresión es JsonPath. El lenguaje de expresión se puede cambiar al definir la expresión.

Por ejemplo:

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

En este ejemplo se usa la expresión insertString para generar el identificador patient123de paciente .

Valores literales

Los valores constantes se pueden proporcionar a las funciones.

  • Los valores numéricos deben incluirse dentro de los acentos versos: '
    • Ejemplo: add('10', '10')
  • Los valores de cadena deben incluirse entre comillas simples: '
    • Ejemplo: insertString('mple', 'sa', '0')

Para obtener más información, consulte la especificación JMESPath.

Control de excepciones

Las excepciones pueden producirse en varios puntos dentro del ciclo de vida de procesamiento de datos del dispositivo. Estos son los distintos puntos en los que se pueden producir excepciones:

Acción Cuando Excepciones que pueden producirse durante el análisis de la asignación de dispositivos Resultado
Análisis de asignación de dispositivos Cada vez que se recibe un nuevo lote de mensajes de dispositivo, la asignación de dispositivos se carga y analiza. Error al analizar la asignación de dispositivos. El sistema intenta volver a cargar y analizar la asignación de dispositivos más reciente hasta que el análisis se realiza correctamente. No se procesan mensajes de dispositivo nuevos hasta que el análisis se realiza correctamente.
Análisis de asignación de dispositivos Cada vez que se recibe un nuevo lote de mensajes de dispositivo, la asignación de dispositivos se carga y analiza. Error al analizar las expresiones. El sistema intenta volver a cargar y analizar la asignación de dispositivos más reciente hasta que el análisis se realiza correctamente. No se procesan mensajes de dispositivo nuevos hasta que el análisis se realiza correctamente.
Ejecución de funciones Cada vez que se ejecuta una función en los datos del dispositivo dentro de un mensaje de dispositivo. Los datos de dispositivo de entrada no coinciden con los de la firma de función. El sistema deja de procesar ese mensaje de dispositivo. El mensaje del dispositivo no se reintenta.
Ejecución de funciones Cada vez que se ejecuta una función en los datos del dispositivo dentro de un mensaje de dispositivo. Cualquier otra excepción que aparezca en la descripción de la función. El sistema deja de procesar ese mensaje de dispositivo. El mensaje del dispositivo no se reintenta.

Funciones matemáticas

add

number add(number $left, number $right)

Devuelve el resultado de agregar el argumento izquierdo al argumento de la derecha.

Ejemplos:

Dado... Expresión Resultado
N/D 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)

Devuelve el resultado de dividir el argumento izquierdo por el argumento derecho.

Ejemplos:

Dado... Expresión Resultado
N/D divide('10', '10') 1
{"left": 40, "right": 50} divide(izquierda, derecha) 0.8
{"left": 0, "right": 50} divide(izquierda, derecha) 0
{"left": 50, "right": 0} divide(izquierda, derecha) error matemático: dividir por cero

multiply

number multiply(number $left, number $right)

Devuelve el resultado de multiplicar el argumento izquierdo con el argumento derecho.

Ejemplos:

Dado... Expresión Resultado
N/D multiply('10', '10') 100
{"left": 40, "right": 50} multiplique(izquierda, derecha) 2000
{"left": 0, "right": 50} multiplique(izquierda, derecha) 0

pow

number pow(number $left, number $right)

Devuelve el resultado de elevar el argumento izquierdo a la potencia del argumento derecho.

Ejemplos:

Dado... Expresión Resultado
N/D pow('10', '10') 10000000000
{"left": 40, "right": 50} pow(left, right) error matemático: desbordamiento
{"left": 0, "right": 50} pow(left, right) 0
{"left": 100, "right": 0,5} pow(left, right) 10

restar

number subtract(number $left, number $right)

Devuelve el resultado de restar el argumento derecho del argumento izquierdo.

Ejemplos:

Dado... Expresión Resultado
N/D rest('10', '10') 0
{"left": 40, "right": 50} rest(izquierda, derecha) -10
{"left": 0, "right": 50} rest(izquierda, derecha) -50

Funciones de cadena

insertString

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

Genera una nueva cadena insertando el valor de toInsert en la cadena original. La cadena se inserta en la posición pos dentro de la cadena original.

Si el argumento posicional está basado en cero, la posición de cero hace referencia al primer carácter dentro de la cadena.

Si el argumento posicional proporcionado está fuera del intervalo de la longitud de original, se produce un error.

Ejemplos:

Dado... Expresión Resultado
N/D insertString('mple', 'sa', 0) "ejemplo"
{"original": "mple", "toInsert": "sa", "pos": 0} insertString(original, toInsert, pos) "ejemplo"
{"original": "suess", "toInsert": "cc", "pos": 2} insertString(original, toInsert, pos) "correcto"
{"original": "myString", "toInsert": "!!", "pos": 8} insertString(original, toInsert, pos) "myString!!"

Funciones de fecha

fromUnixTimestamp

string fromUnixTimestamp(number $unixTimestampInSeconds)

Genera una marca de tiempo compatible con ISO 8061 a partir de la marca de tiempo de Unix especificada. La marca de tiempo se representa como el número de segundos desde la época (1 de enero de 1970).

Ejemplos:

Dado... Expresión Resultado
{"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)

Genera una marca de tiempo compatible con ISO 8061 a partir de la marca de tiempo de Unix especificada. La marca de tiempo se representa como el número de milisegundos desde la época (1 de enero de 1970).

Ejemplos:

Dado... Expresión Resultado
{"unix": 1626799080000} fromUnixTimestampMs(unix) "2021-07-20T16:38:00+0"
{"unix": 0} fromUnixTimestampMs(unix) "1970-01-01T00:00:00+0"

Sugerencia

Consulte el artículo Servicio MedTech Solución de errores mediante los registros del servicio MedTech para obtener ayuda para corregir errores mediante los registros del servicio MedTech.

Pasos siguientes

En este artículo, ha aprendido a usar las funciones personalizadas del servicio MedTech dentro de la asignación de dispositivos.

Para obtener información general sobre la asignación de dispositivos del servicio MedTech, consulte

Para obtener información general sobre la asignación de destino de FHIR del servicio MedTech, consulte

Para obtener información general sobre las asignaciones basadas en escenarios del servicio MedTech, consulte

FHIR® es una marca registrada de Health Level Seven International, registrada en la Oficina de Patentes y Marcas Registradas de Estados Unidos, y se usa con su permiso.