Cuando se trabaja en integraciones en salud es muy frecuente encontrar distintas versiones de HL7 v2 en cada instalación. Es muy típica la necesidad de hacer una conversión de algún desarrollo de integración a una versión diferente. Dentro de las versiones que podemos manejar, también es frecuente que tengamos que convertir entre formatos XML a ER7.
Mirth Connect, como herramienta de interoperabilidad, nos proporciona facilidades en el manejo de mensajería HL7 en todas sus versiones. Como no podía ser de otra manera, hacer una conversión entre formatos, puede ser muy sencillo. Lo veremos con un caso práctico.
Contenidos
Caso práctico: Conversión de XML a ER7
En un hospital aún está utilizando mensajería HL7 en formato ER7 (texto plano con pipes) nos pide desplegar un nuevo mensaje que refleje la pre-admisión. Este mensaje de evento A05 ya está desarrollado en otros centros, y queremos reutilizarlo. Sin embargo se desarrolló generando un mensaje en HL7 v2.xml, y en este centro se trabaja con HL7 v2 en ER7.
Como no se quiere tocar el desarrollo existente y certificado en XML, se desea incluir un wrapper que transforme el mensaje en ER7.

Ambos sistemas se comunican a través de sockets TCP, con protocolo MLLP por lo que no será necesario un cambio de interfaz.
La versión de HL7 es 2.5, tanto en el desarrollo en XML como en el HIS antiguo. Por tanto, tampoco habrá que convertir versión, únicamente el formato a ER7.
Strict Parser en Mirth Connect
En la forma de trabajo de Mirth Connect se realiza serialización y des-serialización de los mensajes para facilitar el trabajo con los datos, como XML. Pero, el analizador por defecto que utiliza Mirth no realiza un parseo a través (ni validando) los esquemas oficiales de HL7, sino al manejo interno de datos.
Sin embargo, incorpora la posibilidad de activar un «análisis estricto» que utilizará internamente el analizador de HAPI. Esta opción nos permite generar (o validar) el mensaje ajustado a la especificación oficial de HL7.
Canal Mirth Wrapper XML a ER7
Sabiendo lo anterior, el canal que vamos a crear para hacer el envoltorio utilizará la opción «Use Strict Parser» especificando en el destino que el tipo de datos será ER7.
1. Creamos el canal WrapperXMLaER7 con los tipos de datos
En la opción Set Data Types de la pestaña Summary, especificamos XML para el Inbound y Outbound del Source Connector:

HL7 v.2.x para el Outbound del conector destino, que hemos llamado Sistemas ER7. En este caso, tal y como comentábamos antes, hay que marcar la opción «Use Strict Parser».

Al marcar esta opción estamos pidiendo a Mirth Connect que realice el análisis de la conversión utilizando el parser de la librería HAPI. Esto generará un mensaje que se ajusta a la especificación oficial de HL7. No necesitaremos mapear nada, lo hace todo Mirth por nosotros.
2. Configuramos el Source Connector
Sin profundizar mas en las opciones de esta pestaña, para los propósitos de esta entrada, configuramos la escucha del puerto TCP, donde recibirá el mensaje en formato XML.

3. Configuramos el conector destino a Sistemas ER7
Sin entrar en detalle, configuramos el envío del mensaje

Y especificamos en la plantilla de salida el mapa encodedData, que tendrá el mensaje ya parseado en el formato de datos especificado (ER7) y ajustado a la especificación oficial de HL7 v.2.5 en ER7.

4. Desplegar y probar conversión de XML a ER7
Recordando la arquitectura desplegada, suponemos que en admisión se realiza la pre-admisión del paciente con tarjeta sanitaria 123123123.

Nuestro motor de integraciones del HIS genera la mensajería HL7 ADT_A05 en formato XML atendiendo al desarrollo reciclado, y en lugar de enviarla a los sistemas destinatarios, situamos nuestro wrapper en medio.
<ADT_A05 xmlns="urn:hl7-org:v2xml"> <MSH> <MSH.1>|</MSH.1> <MSH.2>^~\&</MSH.2> <MSH.3> <HD.1>HIS</HD.1> </MSH.3> <MSH.4> <HD.1>SER7</HD.1> </MSH.4> <MSH.5> <HD.1/> </MSH.5> <MSH.6> <HD.1/> </MSH.6> <MSH.7> <TS.1>20190901132015</TS.1> </MSH.7> <MSH.9> <MSG.1>ADT</MSG.1> <MSG.2>A31</MSG.2> <MSG.3>ADT_A05</MSG.3> </MSH.9> <MSH.10>123456789ABC123123</MSH.10> <MSH.11> <PT.1>P</PT.1> </MSH.11> <MSH.12> <VID.1>2.5</VID.1> </MSH.12> <MSH.15>NE</MSH.15> <MSH.16>AL</MSH.16> </MSH> <EVN> <EVN.2> <TS.1>20190901132015</TS.1> </EVN.2> <EVN.4>GE</EVN.4> </EVN> <PID> <PID.3> <CX.1>11111111B</CX.1> <CX.2>01</CX.2> <CX.3>MPI</CX.3> <CX.4> <HD.1>MI</HD.1> </CX.4> <CX.5>NNESP</CX.5> </PID.3> <PID.3> <CX.1>123123123</CX.1> <CX.4> <HD.1>MPI</HD.1> </CX.4> <CX.5>JHN</CX.5> </PID.3> <PID.3> <CX.1>ABCD111222333444</CX.1> <CX.4> <HD.1>MS</HD.1> </CX.4> <CX.5>HC</CX.5> </PID.3> <PID.3> <CX.1>CCCCCCCCCCH123123</CX.1> <CX.4> <HD.1>MS</HD.1> </CX.4> <CX.5>NI</CX.5> </PID.3> <PID.3> <CX.1>280000000000</CX.1> <CX.4> <HD.1>SS</HD.1> </CX.4> <CX.5>SS</CX.5> </PID.3> <PID.5> <XPN.1> <FN.1>APELLIDO</FN.1> </XPN.1> <XPN.2>NOMBRE</XPN.2> </PID.5> <PID.6> <XPN.1> <FN.1>APELLIDO2</FN.1> </XPN.1> </PID.6> <PID.7> <TS.1>19770101</TS.1> </PID.7> <PID.8>M</PID.8> <PID.11> <XAD.1> <SAD.1>CALLE</SAD.1> <SAD.2>01111_STREET</SAD.2> <SAD.3>5</SAD.3> </XAD.1> <XAD.2>4</XAD.2> <XAD.3>29730</XAD.3> <XAD.4>29</XAD.4> <XAD.5>29730</XAD.5> <XAD.6>123</XAD.6> <XAD.7>H</XAD.7> <XAD.8>1_</XAD.8> <XAD.11>123123</XAD.11> </PID.11> <PID.13> <XTN.1>666000666</XTN.1> <XTN.2>ORN</XTN.2> <XTN.3>PH</XTN.3> </PID.13> <PID.14> <XTN.1>666000666</XTN.1> </PID.14> <PID.33> <TS.1>20191019183118</TS.1> </PID.33> </PID> <PD1> <PD1.3> <XON.10>RF0001</XON.10> </PD1.3> <PD1.3> <XON.10>RF0006</XON.10> </PD1.3> <PD1.3> <XON.10>RF0002</XON.10> </PD1.3> </PD1> <PV1> <PV1.2>E</PV1.2> <PV1.8> <XCN.1>0001_123123123E</XCN.1> </PV1.8> <PV1.18>P</PV1.18> <PV1.39>123</PV1.39> <PV1.41>S</PV1.41> </PV1> </ADT_A05>
Recibimos en nuestro wrapper el mensaje desde el motor de integraciones en XML:

Y realizamos la conversión:

Para enviarlo a los sistemas destino, que sólo aceptan formato ER7.
Conclusión
Con unos pocos clics de ratón tenemos un wrapper de XML a ER7 muy sencillo y de carácter general. Si te fijas, en el canal no hemos especificado en ningún momento qué mensaje es el que vamos a recibir o enviar. Esto quiere decir que servirá de wrapper para convertir cualquier mensaje HL7 v2.xml a formato ER7 (Pipes).
Como ejemplo básico para comenzar a realizar un envoltorio mas fino he querido escribir esta entrada. En próximas complicaremos un poco, no demasiado, el wrapper para adaptar también a otros interfaces. Por ejemplo, convertir de HL7 ER7 sobre MLLP y TCP a HL7 v2.xml sobre HTTP REST.
2 ideas sobre “Convertir XML a ER7 en Mirth Connect”
Muy útil e interesante, me ha servido para con tu permiso hacerlo igual para una aplicación antigua que sólo recibía en formato HL7 y yo sólo envio ya en XML. Una duda que tengo es cómo conseguir que la respuesta me la devuelva convirtiendo desde HL7 a XML, al igual que el envío lo hace convirtiendo de XML a HL7.
Muchas gracias por tu aportación, me ha servido mucho.
Buenas, yo estoy con lo mismo, he seguido estos pasos y me ha funcionado perfectamente (muy agradecido) pero ahora estoy intentando que la respuesta también me la haga en el sentido inverso, y no doy con la tecla.
Gran aportación, muchas gracias!