Interoperabilidad sanitaria simplificada mediante IA

GPT convierte HL7 v2.4 a FHIR R4 en el motor de integración Mirth y en muchas otras herramientas de interoperabilidad.

Hace poco realizamos un estudio interno sobre el uso de la IA en la interoperabilidad sanitaria y nos encontramos con un experimento apasionante. Proporcionó la primera prueba de que ChatGPT puede asumir algunas de las tareas de las que normalmente se encarga un ingeniero de integración.

A principios de 2023, nuestro «colega del sector» Zhong Li, de la comunidad Intersystems, exploró las capacidades de GPT pidiéndole un ejemplo de código para convertir un mensaje HL7 a FHIR. Merece la pena compartir la respuesta que recibió.

Pregunta: ¿Puedes crear un ejemplo de transformación que convierta HL7 v2.4 a FHIR R4 en el motor de integración Mirth?

Respuesta de ChatGPT en 2023

Esta es la respuesta que dio ChatGPT en 2023:

¡Por supuesto! He aquí un ejemplo de cómo transformar un mensaje HL7 V2.4 en un recurso de Observación FHIR R4 en Mirth:

  1. En primer lugar, crea un nuevo canal Mirth y añade un conector fuente HL7v2 Listener para recibir el mensaje HL7 V2 de entrada.
  2. Añade un nuevo conector de destino JavaScript Writer al canal y configúralo para que utilice un script personalizado.
  3. En el conector JavaScript Writer, añade el siguiente script para transformar el mensaje HL7 V2 en un recurso Observation de FHIR R4:
  1. Guarda el script y prueba la transformación enviando un mensaje HL7 V2 al canal. El recurso de Observación FHIR R4 transformado debe ser emitido por el conector JavaScript Writer en formato JSON.
var hl7msg = msg['HL7v2 Message'].toString(); // get the HL7 V2 message
var hl7data = Packages.ca.uhn.hl7v2.parser.Parser.parse(hl7msg); // parse the message with the HAPI HL7 parser
// extract values from the HL7 message and create the FHIR resource
var obs = new Packages.org.hl7.fhir.r4.model.Observation();
obs.setStatus(Packages.org.hl7.fhir.r4.model.Observation.ObservationStatus.FINAL);

var code = new Packages.org.hl7.fhir.r4.model.CodeableConcept();
code.addCoding()
  .setSystem("http://loinc.org")
  .setCode(hl7data.get("OBR-4-1").getValue())
  .setDisplay(hl7data.get("OBR-4-2").getValue());
obs.setCode(code);

var value = new Packages.org.hl7.fhir.r4.model.Quantity();
value.setValue(hl7data.get("OBX-5-1").getValue());
value.setUnit(hl7data.get("OBX-6").getValue());
obs.setValue(value);

var subject = new Packages.org.hl7.fhir.r4.model.Reference();
subject.setReference("Patient/" + hl7data.get("PID-3-1").getValue());
obs.setSubject(subject);

// output the FHIR resource as JSON
var json = org.hl7.fhir.r4.formats.JsonParser().setPrettyPrint(true).encodeResourceToString(obs);
return json;

Este script utiliza las bibliotecas HAPI FHIR y HAPI HL7 v2, que se incluyen con Mirth. Comienza extrayendo el mensaje HL7 V2 del objeto de mensaje Mirth y analizándolo con el analizador HAPI HL7.

A continuación, el script crea un nuevo recurso de Observación FHIR R4 y establece sus elementos de estado, código, valor y asunto basándose en los valores correspondientes del mensaje HL7.

Por último, el script serializa el recurso FHIR como JSON y lo devuelve.

Ten en cuenta que éste es sólo un ejemplo sencillo y puede que no funcione para todos los tipos de mensajes HL7 V2 o recursos FHIR. Puede que necesites modificar el script para manejar distintos tipos de mensajes o asignar campos adicionales al recurso FHIR.

Fuente original de la respuesta.

Intrigante, ¿verdad?

¿Cuántos años has dedicado a dominar los lenguajes de programación y los estándares de los protocolos sanitarios para ofrecer respuestas tan precisas? Aceptamos el reto y decidimos ver cuánto ha evolucionado nuestro amigo de la IA (GPT) en los últimos 1,5 años.

Respuesta de ChatGPT en 2024

Volvimos a plantear la misma pregunta a GPT, y aquí está la respuesta:

Crear una transformación para convertir HL7 v2.4 a FHIR R4 en el motor de integración Mirth requiere mapear cada segmento HL7 relevante a su correspondiente formato de recurso FHIR. A continuación se muestra un script de transformación JavaScript de ejemplo para Mirth Connect, centrado en los datos demográficos del paciente desde un mensaje HL7 ADT (Admisión, Alta, Traslado) a un recurso FHIR Paciente.

Ejemplo de script de transformación

  1. Abre Mirth Connect y crea un nuevo canal.
  2. Configura el Conector de origen para que acepte mensajes HL7 v2.4.
  3. Utiliza el Transformador en el origen para aplicar el siguiente script para convertir segmentos HL7 en una estructura FHIR JSON.

Transformación JavaScript (HL7 v2.4 a FHIR R4 – Recurso Paciente)

// Initialize FHIR Patient Resource
var patientResource = {
  resourceType: "Patient",
  identifier: [],
  name: [],
  telecom: [],
  gender: "",
  birthDate: ""
};

// Map HL7 PID Segment to FHIR Patient Resource
var pid = msg['PID'];

// Patient Identifier (from PID-3)
if (pid['PID.3']['PID.3.1'].toString()) {
  patientResource.identifier.push({
    use: "usual",
    system: "urn:oid:1.2.36.146.595.7.3.1.1",
    value: pid['PID.3']['PID.3.1'].toString()
  });
}

// Patient Name (from PID-5)
if (pid['PID.5']['PID.5.1'].toString()) {
  patientResource.name.push({
    use: "official",
    family: pid['PID.5']['PID.5.1'].toString(),
    given: [pid['PID.5']['PID.5.2'].toString()]
  });
}

// Telecom - Phone Number (from PID-13)
if (pid['PID.13']['PID.13.1'].toString()) {
  patientResource.telecom.push({
    system: "phone",
    value: pid['PID.13']['PID.13.1'].toString(),
    use: "home"
  });
}

// Gender (from PID-8)
switch (pid['PID.8'].toString()) {
  case 'M':
    patientResource.gender = "male";
    break;
  case 'F':
    patientResource.gender = "female";
    break;
  default:
    patientResource.gender = "unknown";
}

// Birth Date (from PID-7)
if (pid['PID.7']['PID.7.1'].toString()) {
  var birthDate = pid['PID.7']['PID.7.1'].toString();
  patientResource.birthDate = birthDate.substring(0, 4) + '-' +
    birthDate.substring(4, 6) + '-' +
    birthDate.substring(6, 8);
}

// Output FHIR Patient Resource as JSON
return JSON.stringify(patientResource, null, 2);

Explicación de las transformaciones clave

  1. Identificador (PID-3): Mapea el identificador de paciente de HL7 a la matriz de identificadores del recurso Paciente de FHIR.
  2. Nombre (PID-5): Construye la matriz de nombres con los nombres de familia y de pila.
  3. Telecom (PID-13): Añade el número de teléfono del paciente a la matriz de telecomunicaciones.
  4. Género (PID-8): Traduce los valores de género (M/F) de HL7 a términos compatibles con FHIR.
  5. Fecha de nacimiento (PID-7): Reformatea la fecha de nacimiento de HL7 al formato FHIR AAAA-MM-DD.

Notas adicionales

  • Asegúrate de que el Conector de Destino está configurado para enviar o almacenar la salida JSON.
  • Puede que necesites modificar o ampliar el script para cubrir otros segmentos (por ejemplo, información sobre visitas) en función de tus requisitos de integración.

¿Quieres un ejemplo que cubra segmentos HL7 adicionales o un recurso FHIR diferente?

ChatGPT 4o respuesta 2024

Entonces hicimos una pregunta más difícil a ChatGPT:

Pregunta: ¿Se puede crear un paso de transformación para convertir un mensaje HL7 v2.4 ADT_A01 a FHIR R4 en el motor de integración Mirth Connect?

Y aquí está la respuesta proporcionada:

Por supuesto. Transformar un mensaje HL7 v2.4 ADT_A01 en un recurso FHIR R4 Paciente en Mirth Connect requiere familiarizarse tanto con las estructuras de los mensajes HL7v2 como con las de FHIR. A continuación, te guiaré por los pasos necesarios para configurar un canal de transformación en Mirth Connect para asignar un mensaje ADT_A01 a un recurso FHIR R4 Paciente.

Requisitos previos

  1. Mirth Connect instalado y configurado.
  2. Conocimiento de la estructura de los mensajes HL7 v2.4 ADT_A01.
  3. Comprensión de la estructura JSON del recurso Paciente de FHIR R4.

Paso 1: Configura el canal Mirth Connect

  1. Crea un Nuevo Canal en Mirth Connect y llámalo algo así como Transformación de ADT a FHIR.
  2. Configura el Conector de origen para que acepte mensajes HL7v2. Esto podría configurarse como Receptor TCP, Lector de Archivos u otro conector de origen adecuado, dependiendo de tu fuente de entrada.
  3. Configura el Conector de destino para que emita JSON (formato FHIR). Puede que quieras utilizar una API REST, un Escritor de Archivos o un Escritor de Bases de Datos, dependiendo de los requisitos del destino.

Paso 2: Configurar el transformador de origen

  1. Ve al Transformador de Fuente de tu canal Mirth y añade un nuevo paso.
  2. Elige JavaScript como tipo para tu paso de transformación.

Paso 3: Escribir JavaScript para la transformación

Añade el siguiente código JavaScript para transformar el mensaje HL7 ADT_A01 a FHIR R4 Patient JSON:

// Initialize the FHIR Patient resource
var patientResource = {
  resourceType: "Patient",
  id: $('MSH-10'),  // Unique identifier from MSH segment
  identifier: [
    {
      system: "urn:oid:2.16.840.1.113883.4.1",  // Example for MRN system OID
      value: $('PID-3.1')  // MRN from PID segment
    }
  ],
  active: true,
  name: [
    {
      use: "official",
      family: $('PID-5.1'),  // Last Name
      given: [$('PID-5.2')]  // First Name
    }
  ],
  telecom: [
    {
      system: "phone",
      value: $('PID-13.1'),  // Phone Number
      use: "home"
    },
    {
      system: "email",
      value: $('PID-13.4'),  // Email if available
      use: "home"
    }
  ],
  gender: $('PID-8') === 'M' ? 'male' : 'female',  // Gender mapping
  birthDate: DateUtil.formatDate($('PID-7'), 'yyyyMMdd', 'yyyy-MM-dd'),  // DOB with format change
  address: [
    {
      use: "home",
      line: [$('PID-11.1')],  // Address line
      city: $('PID-11.3'),  // City
      state: $('PID-11.4'),  // State
      postalCode: $('PID-11.5')  // ZIP/Postal Code
    }
  ]
};

// Add managing organization if available
if ($('PV1-3.1')) {
  patientResource.managingOrganization = {
    reference: "Organization/" + $('PV1-3.1')  // Organization reference
  };
}

// Convert the JavaScript object to JSON
var fhirPatientJson = JSON.stringify(patientResource, null, 2);

// Map the JSON output to the destination
msg = fhirPatientJson;

Explicación del Código de Transformación

  • Inicialización del recurso: El objeto patientResource se inicializa con los campos necesarios del recurso FHIR R4 Paciente.
  • Identificador: El identificador se mapea a partir del PID-3.1 (MRN), con un OID de muestra para el sistema.
  • Nombre: Los campos de nombre utilizan PID-5 para los apellidos y nombres.
  • Telecomunicaciones: Los datos de teléfono y correo electrónico se asignan desde el PID-13.
  • Sexo: El campo de género asigna «M» y «F» a «hombre» y «mujer», según los requisitos de FHIR.
  • Fecha de nacimiento: Formatea la fecha de nacimiento de aaaaMMdd (HL7) a aaaa-MM-dd (FHIR).
  • Dirección: Mapea los componentes de dirección del PID-11.
  • Gestionar organización: Mapea la información de la organización si está presente en PV1-3.

Paso 4: Configurar el Conector de Destino

  1. Ve al Conector de Destino y establece el tipo de datos en JSON si estás emitiendo JSON directamente.
  2. Utiliza msg como variable de salida, ya que contiene la representación JSON del recurso FHIR Paciente.
  3. Configura el punto final de destino (como la URL de la API REST o la ubicación del archivo) para enviar el mensaje JSON transformado a tu sistema compatible con FHIR.

Paso 5: Prueba el canal

  1. Despliega el canal y envía un mensaje HL7 ADT_A01 de prueba para verificar la transformación.
  2. Comprueba la salida en tu destino configurado para asegurarte de que el formato JSON se ajusta a los estándares de FHIR R4.

Notas adicionales

  • Pruebas y validación: Utiliza validadores FHIR o herramientas en línea para asegurarte de que el JSON de salida cumple los estándares de FHIR R4.
  • Mejoras: Puede que quieras añadir gestión de errores y mapeos adicionales en función de los campos específicos de tu mensaje ADT o de los requisitos de implementación de FHIR.

Esta configuración transformará un mensaje entrante HL7 v2.4 ADT_A01 en un recurso FHIR R4 Paciente, listo para ser consumido por un sistema compatible con FHIR.

¿Estás satisfecho con la respuesta del ChatGPT?

Como puedes ver, actualmente la respuesta no está completa y requiere la intervención manual adicional de un ingeniero experto.

Sin embargo, ChatGPT nunca deja de evolucionar, como nosotros.

Durante este tiempo, hemos desarrollado nuestra propia plataforma de interoperabilidad innovadora – Meditecs Smart Connect impulsada por la inteligencia humana, por cierto .

Esta plataforma ya está ayudando a nuestros clientes, como Abbott, NHC y Boston Scientific, a integrar sin esfuerzo nuevos dispositivos médicos y soluciones sanitarias innovadoras, al tiempo que reduce los costes de integración y asistencia hasta en un 40%.

¿Y tú qué herramientas utilizas para acelerar la integración? ¿Utilizas GenAI para acelerar las tareas de ingeniería de interoperabilidad? Compártelo en los comentarios.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Scroll al inicio