Informática Sana: el blog de Caduceus

Solución caso práctico 1.1: el nuevo HIS y las viejas aplicaciones

Sin comentarios

En este artículo vamos a solucionar el problema planteado en el artículo anterior: nuestro nuevo HIS debe comunicarse con una aplicación que no usa estándares como HL7.
¿Cómo podemos solucionarlo?


Este artículo es parte de la serie del Caso Práctico 1.


Para solucionar este problema vamos a implementar un canal en Mirth Connect que reciba los mensajes HL7 del nuevo HIS, NewModernHIS, mediante el protocolo LLP y los transforme en el formato XML que la vieja aplicación, PharmaCoolX 1.0, necesita.

Para la edición de los mensajes de ejemplo y la simulación del envío y recepción de los mensajes HL7 por parte de NewModernHIS utilizaremos la herramienta 7Edit.

Material y tecnologías utilizados

Para poder seguir mejor el artículo, compartimos todo el material necesario para probar los ejemplos:

Material correspondiente al caso práctico “El nuevo HIS y las viejas aplicaciones”

El material contiene las siguientes carpetas y ficheros:

  • 1.messages-hl7:
    • 1-alta-adt-a28.hl7: mensaje ADT^A28 para probar el alta.
    • 2-modificación-adt-a08.hl7: mensaje ADT^A08 para probar la modificación.
    • 3-exitus-adt-a03.hl7: mensaje ADT^A03 para probar el éxitus.
  • 2.mirth-connect-channel:
    • INFORMATICA_SANA_1_1.xml: exportación del canal desarrollado (para su importación en Mirth Connect).
    • code-templates.xml: exportación de la función propia desarrollada (para su importación en Mirth Connect).
  • 3.out-xml:
    • 1-alta-adt-a28.xml: fichero XML de salida tras probar el alta.
    • 2-modificación-adt-a08.xml: fichero XML de salida tras probar la modificación.
    • 3-exitus-adt-a03.xml: fichero XML de salida tras probar el éxitus.

Descargar “Material caso práctico 1.1 - El nuevo HIS y las viejas aplicaciones” material-caso-practico-1.1.zip – Descargado 281 veces – 6 KB

Los estándares, tecnologías y herramientas que vamos a usar son:

Construcción de mensajería de ejemplo con 7Edit

Para crear un mensaje con 7Edit, hay que seleccionar la opción de menú File→New… y seleccionar el tipo de mensaje y versión HL7 utilizada.

Por ejemplo, para la creación del mensaje de alta:

Nuevo mensaje HL7 en 7Edit

Nuevo mensaje HL7 en 7Edit

 

Como validador del mensaje usaremos el que nos proporciona por defecto. Aunque vimos en un artículo anterior que es posible crear perfiles para esta característica.

Comprobamos que nada más crear el mensaje HL7 ADT^A28, únicamente tenemos el segmento MSH, por tanto el validador nos pide los segmentos obligatorios EVN, PID y PV1:

Validación de mensaje HL7 en 7Edit

Validación de mensaje HL7 en 7Edit

 

Para editar el mensaje, basta con desplegar el árbol del panel de la izquierda Message y hacer doble clic sobre los campos que queremos editar. Veremos cómo se edita el mensaje en tiempo real sobre el área de texto principal de la aplicación.

Ejemplo de edición de un campo de tipo fecha_hora (tipo HL7 DTM, como podemos comprobar en el árbol):

Edición de campos de un mensaje HL7 utilizando 7Edit

Edición de campos de un mensaje HL7 utilizando 7Edit

 

También es posible editar el mensaje pulsando la tecla CTRL y haciendo clic en un campo del área de texto para seleccionarlo en el árbol, y doble clic para editarlo.

Todo lo relativo a la edición se puede encontrar en este breve vídeo en la página web de 7Edit.

De esta sencilla forma, construimos los 3 mensajes que necesitamos para la implementación del canal en Mirth Connect:

ADT^A28

MSH|^~\&|NewModernHIS||PharmaCoolX 1.0||20140701123154||ADT^A28|1-alta-adt-a28|T|2.5|||AL|NE
EVN|A28|20140701123153
PID|1||NHC||APELLIDO1^NOMBRE^APELLIDO2||19840123000000|M||||||||||||||||||||||N
PV1|1|N

ADT^A08

MSH|^~\&|NewModernHIS||PharmaCoolX 1.0||20140702123254||ADT^A08|2-modificacion-adt-a08|T|2.5|||AL|NE
EVN|A08|20140702123253
PID|1||NHC||APELLIDO1^nuevo_NOMBRE^APELLIDO2||19840123000000|M||||||||||||||||||||||N
PV1|1|N

ADT^A03

MSH|^~\&|NewModernHIS||PharmaCoolX 1.0||20140703123354||ADT^A03|3-exitus-adt-a03|T|2.5|||AL|NE
EVN|A03|20140703123353
PID|1||NHC||APELLIDO1^nuevo_NOMBRE^APELLIDO2||19840123000000|M|||||||||||||||||||||20140703123300|Y
PV1|1|N

Implementación del canal en Mirth Connect

Vamos a especificar cada una de las partes que necesitamos para la construcción del canal:

Configuración global

Lo primero es establecer la configuración global para el canal (algunos consejos los podemos encontrar en un artículo anterior).

Así, habilitamos el canal, establecemos que el estado inicial sea Started y almacenamos la traza completa durante 30 días para realizar pruebas:

Resumen de la edición de un canal en Mirth Connect

Resumen de la edición de un canal en Mirth Connect

 

Mención especial merece la configuración Set Data Types, donde podemos indicar que la transformación que requerimos (de HL7 a XML) la vamos a realizar en el conector fuente:

Mirth Connect: configuración "Set Data Types"

Mirth Connect: configuración “Set Data Types”

 

Esta configuración se puede establecer más tarde desde aquí o desde los propios conectores a medida que los vamos desarrollando (aún no hemos definido los conectores destino).

Scripts JS

Por simplicidad, en este canal no hacemos uso de estos scripts.

Estructuras de datos

En este canal vamos a hacer uso de la estructura de datos con ámbito del propio canal channelMap para almacenar la información que nos interese en el conector fuente y poder utilizarla en los conectores destino. Veremos su uso en los propios conectores.

Conector Fuente

Queremos recibir mensajes HL7, así que como Connector Type debemos indicar el valor LLP Listener. Establecemos un puerto que nos venga bien para escuchar, por ejemplo el 21110, y dejamos el resto de configuraciones por defecto:

Mirth Connect conector fuente (source connector)

Mirth Connect conector fuente (source connector)

 

Inbound Message Template

En general, esta plantilla es utilizada en los conectores de Mirth Connect como ayuda a la edición de sus transformadores asociados.

En este caso, como recibimos 3 mensajes ADT con tipos de eventos diferentes, omitimos el valor MSH.9.2 (donde se especifica el evento) para que la herramienta nos proporcione una estructura de ayuda general para el tipo ADT en la versión 2.5 de HL7:

MSH|^~\&|NewModernHIS||PharmaCoolX 1.0||fh_mensaje||ADT|mid|T|2.5|||AL|NE
EVN||fh_evento
PID|1||NHC||APELLIDO1^NOMBRE^APELLIDO2||19840101000000|M||||||||||||||||||||||N
PV1|1|N
Filtros

Por simplicidad, en este conector no hacemos uso de filtros.

Se podrían haber utilizado para filtrar mensajes cuyo par tipo/evento no está entre los esperados, pero, para este ejemplo, supondremos que NewModernHIS tan sólo enviará mensajes HL7 de acuerdo a los pares tipo/evento establecidos.

Outbound Message Template

En general, esta plantilla es utilizada en los conectores de Mirth Connect como base y ayuda para la construcción de la salida.

En este caso, establecemos la plantilla XML de la salida que necesitamos:

<paciente>
    <nhc></nhc>
    <nombre></nombre>
    <apellidos></apellidos>
    <fec_nacimiento></fec_nacimiento>
    <sexo></sexo>
    <exitus></exitus>
    <fec_exitus></fec_exitus>
</paciente>
Transformadores

Antes de entrar en el detalle de los 9 transformadores que necesitamos para este conector, vamos a hablar de los 3 paneles diferentes que nos ofrece la herramienta (según la pestaña seleccionada en el panel de la derecha) para ayudarnos en su edición.

Mirth Connect: paneles de edición de transformadores

Mirth Connect: paneles de edición de transformadores

 

De izquierda a derecha en la imagen, vemos el detalle para las 3 posibles pestañas:

  • Messages Templates: donde especificamos las plantillas Inbound Message Template y Outbound Message Template.
  • Messages Trees: donde la herramienta nos ofrece árboles de ayuda, generados a partir de las plantillas especificadas (llamados Inbound Message Template Tree y Outbound Message Template Tree), y con la posibilidad de arrastrar valores a los transformadores.
  • Reference: donde tenemos acceso a las funciones y estructuras de datos de Mirth Connect, también con la posibilidad de arrastrarlas a los transformadores.
Transformador 0

Transformador de tipo Mapper, que almacena el identificador del mensaje HL7 en el ChannelMap para usarlo más tarde en los conectores destino como nombre del fichero XML final.

Establecemos su valor arrastrando el campo MSH.10.1 desde el árbol Inbound Message Template Tree:

Mirth Connect: ejemplo transformador 0 de tipo Mapper

Mirth Connect: ejemplo transformador 0 de tipo Mapper

 

Transformador 1

Transformador de tipo Mapper, que almacena el identificador del mensaje HL7 en el ChannelMap para usarlo más tarde en los conectores destino como filtros del tipo de evento.

Como el campo MSH.9.2 no pertenece al árbol Inbound Message Template Tree, podemos editar manualmente su valor tras arrastrar el campo MSH.9.1:

Mirth Connect: ejemplo transformador 1 de tipo Mapper

Mirth Connect: ejemplo transformador 1 de tipo Mapper

 

Transformador 2

Transformador de tipo Message Builder, que establece el valor de nhc para la salida XML del conector.

Establecemos la conversión arrastrando los valores nhc.empty desde el árbol Outbound Message Template Tree y PID.3.1 desde el árbol Inbound Message Template Tree:

Mirth Connect: ejemplo transformador 2 de tipo Message Builder

Mirth Connect: ejemplo transformador 2 de tipo Message Builder

 

Transformador 3

Transformador de tipo Message Builder, que establece el valor de nombre para la salida XML del conector.

Establecemos la conversión arrastrando los valores nombre.empty desde el árbol Outbound Message Template Tree y PID.5.2 desde el árbol Inbound Message Template Tree:

Mirth Connect: ejemplo transformador 3 de tipo Message Builder

Mirth Connect: ejemplo transformador 3 de tipo Message Builder

 

Transformador 4

Transformador de tipo Message Builder, que establece el valor de apellidos para la salida XML del conector.

Establecemos la conversión arrastrando los valores apellidos.empty desde el árbol Outbound Message Template Tree y PID.5.1 / PID.5.3 (notar que concatenamos estos valores) desde el árbol Inbound Message Template Tree:

Mirth Connect: ejemplo transformador 4 de tipo Message Builder

Mirth Connect: ejemplo transformador 4 de tipo Message Builder

 

Transformador 5

Transformador de tipo Message Builder, que establece el valor de fec_nacimiento para la salida XML del conector.

Establecemos la conversión arrastrando los valores fec_nacimiento.empty desde el árbol Outbound Message Template Tree y PID.7.1 desde el árbol Inbound Message Template Tree:

Mirth Connect ejemplo transformador 5 de tipo Message Builder

Mirth Connect ejemplo transformador 5 de tipo Message Builder

 

Para la conversión de fechas, como necesitamos esta funcionalidad también para establecer la fecha de éxitus, hemos desarrollado una sencilla función en los code_templates, tal y como ya aconsejamos en un artículo anterior:

Mirth Connect: conversión de fecha en code templates

Mirth Connect: conversión de fecha en code templates

 

Esta función está accesible en la pestaña Reference del panel de la derecha, en la categoría User Defined Functions, y se puede arrastrar hacia el transformador:

Mirth Connect References en code templates

Mirth Connect References en code templates

 

Transformador 6

Transformador de tipo Javascript (puesto que en este caso necesitamos hacer una conversión un poco más compleja), que establece el valor de sexo para la salida XML del conector.

Establecemos la conversión arrastrando los valores sexo.empty desde el árbol Outbound Message Template Tree y PID.8.1 desde el árbol Inbound Message Template Tree:

Mirth Connect: ejemplo transformador 6 de tipo Javascript

Mirth Connect: ejemplo transformador 6 de tipo Javascript

 

Transformador 7

Transformador de tipo Message Builder, que establece el valor de exitus para la salida XML del conector.

Establecemos la conversión arrastrando los valores exitus.empty desde el árbol Outbound Message Template Tree y PID.30.1 (notar que convertimos sólo el valor que necesitamos) desde el árbol Inbound Message Template Tree:

Mirth Connect: ejemplo transformador 7 de tipo Message builder

Mirth Connect: ejemplo transformador 7 de tipo Message builder

 

Transformador 8

Transformador de tipo Message Builder, que establece el valor de fec_exitus para la salida XML del conector.

Establecemos la conversión arrastrando los valores fec_exitus.empty desde el árbol Outbound Message Template Tree y PID.29.1 (notar que aplicamos la misma función que en fec_nacimiento) desde el árbol Inbound Message Template Tree:

Mirth Connect: ejemplo transformador 8 de tipo Message Builder

Mirth Connect: ejemplo transformador 8 de tipo Message Builder

 

Conector Destino 1

En general, vamos a definir un conector destino por cada tipo de mensaje. Se podría haber utilizado un único conector destino, pero usaremos más de uno para ilustrar el uso de los filtros en los destinos, y para mostrar que para cada tipo de mensaje se podrían realizar acciones completamente diferentes.

Los conectores tan sólo se limitarán a escribir el mensaje XML de salida en un directorio (para realizar pruebas hemos elegido el C:/tmp/informaticasana/1/1.1), por lo que el Connector Type debe ser File Writer, usando el Method file.

Como nombre de los ficheros de salida, elegimos el identificador del mensaje HL7, que recordemos que está almacenado en el ChannelMap y está accesible para ser arrastrado desde el panel derecho Destination Mappings.

Como Template, de nuevo desde el panel Destination Mappings, podemos arrastrar el valor Encoded Data para que el mensaje se escriba en el fichero de salida:

Mirth Connect: ejemplo 1 conector destino File Writer

Mirth Connect: ejemplo 1 conector destino File Writer

 

Filtros

En este caso, utilizaremos un tipo de filtro Rule Builder, que aceptará el mensaje si el valor evento almacenado en el ChannelMap (podemos arrastrarlo desde Reference -> Available Variables) se corresponde al esperado para el alta ‘A28’:

Mirth Connect: ejemplo 1 conector destino File Writer, filtro Rule Builder

Mirth Connect: ejemplo 1 conector destino File Writer, filtro Rule Builder

 

Transformadores

Según hemos configurado el conector fuente, en la entrada de los conectores destino ya tenemos el XML que nos interesa, por lo que no es necesario realizar ninguna transformación adicional.

Conector Destino 2

Lo creamos clonando el destino anterior:

Mirth Connect: ejemplo 2 conector destino File Writer clonado

Mirth Connect: ejemplo 2 conector destino File Writer clonado

 

Tras lo anterior, tenemos que editar su nombre y su filtro.

Conector Destino 3

Lo creamos clonando uno de los destinos anteriores, editando su nombre y su filtro.

Finalmente tenemos los 3 destinos preparados:

Mirth Connect: conectores destino

Mirth Connect: conectores destino

 

Despliegue del canal

Una vez acabada la edición, desplegamos el canal para que pueda comenzar a recibir mensajes HL7:

Mirth Connect: despliegue de canal

Mirth Connect: despliegue de canal

 

En el Dashboard ya se podría ver que el canal está preparado.

Simulación de envío / recepción de la mensajería con 7Edit

Creación del perfil “Sender” en 7Edit

Para simular el envío de la mensajería, lo primero que debemos hacer es crear un perfil Sender en 7Edit, donde establecemos principalmente la dirección IP y el puerto:

7Edit: creación de perfil Sender

7Edit: creación de perfil Sender

 

Simulación del envío de la mensajería

Mediante el botón Send, vamos enviando cada uno de los mensajes:

7Edit: simulación de envío de mensajes HL7

7Edit: simulación de envío de mensajes HL7

 

En la traza podemos ver cómo recibimos los mensajes ACK.

Pruebas de funcionamiento del canal en Mirth Connect

Dashboard

En el lado del Mirth Connect, en el panel de administración podemos comprobar cómo han llegado los 3 mensajes, se han filtrado 6 (para los eventos no correspondientes en los destinos), y se han enviado 3 (correspondientes a la generación de los ficheros de salida):

Mirth Connect: dashboard

Mirth Connect: dashboard

 

Haciendo doble clic sobre el canal, podemos acceder en detalle a la traza generada en cada uno de los conectores, para cada uno de los 3 mensajes recibidos:

Mirth Connect dashboard: traza de mensajes HL7 recibidos

Mirth Connect dashboard: traza de mensajes HL7 recibidos

 

Comprobación de la salida

Finalmente comprobamos que los ficheros de salida se han generado en el directorio establecido en los destinos:

Ficheros generados por Mirth Connect a partir de mensajes HL7

Ficheros generados por Mirth Connect a partir de mensajes HL7

 

Si los abrimos, podemos comprobar que se han generado los ficheros XML que PharmaCoolX 1.0 necesita para cada caso (se han formateado para que se puedan leer mejor):

Alta

<paciente>
    <nhc>NHC</nhc>
    <nombre>NOMBRE</nombre>
    <apellidos>APELLIDO1 APELLIDO2</apellidos>
    <fec_nacimiento>23/01/1984</fec_nacimiento>
    <sexo>H</sexo>
    <exitus>N</exitus>
    <fec_exitus/>
</paciente>

Modificación

<paciente>
    <nhc>NHC</nhc>
    <nombre>nuevo_NOMBRE</nombre>
    <apellidos>APELLIDO1 APELLIDO2</apellidos>
    <fec_nacimiento>23/01/1984</fec_nacimiento>
    <sexo>H</sexo>
    <exitus>N</exitus>
    <fec_exitus/>
</paciente>

Éxitus

<paciente>
    <nhc>NHC</nhc>
    <nombre>nuevo_NOMBRE</nombre>
    <apellidos>APELLIDO1 APELLIDO2</apellidos>
    <fec_nacimiento>23/01/1984</fec_nacimiento>
    <sexo>H</sexo>
    <exitus>S</exitus>
    <fec_exitus>03/07/2014</fec_exitus>
</paciente>

Con esto resolvemos el primer problema planteado para este caso práctico.

Partiendo de aquí, en los próximos artículos plantearemos y propondremos posibles soluciones en Mirth Connect a otros problemas típicos en los sistemas sanitarios, tales como la validación de mensajes HL7 y la notificación asíncrona de errores.

Recuerda que todo el material necesario para recrear este caso práctico puedes descargarlo desde aquí: Material caso práctico 1.1 - El nuevo HIS y las viejas aplicaciones (281 descargas)

 

Francisco J. CarrascoSolución caso práctico 1.1: el nuevo HIS y las viejas aplicaciones

Entradas Relacionadas

Deja un comentario

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