Blog de divulgación de Ciencia y Tecnología
How to

Convertir XML a ER7 en Mirth Connect

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.

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.

Arquitectura para Wrapper XML a ER7
Arquitectura para Wrapper XML a 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:

WrapperXMLaER7  SetDataTypes
WrapperXMLaER7 SetDataTypes Source

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».

WrapperXMLaER7_SetDataTypesDestino
WrapperXMLaER7 SetDataTypes Destino

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.

WrapperXMLaER7 Source
WrapperXMLaER7 Source

3. Configuramos el conector destino a Sistemas ER7

Sin entrar en detalle, configuramos el envío del mensaje

WrapperXMLaER7 Destination
WrapperXMLaER7 Destination

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.

WrapperXMLaER7 Destination2
WrapperXMLaER7 Destination2

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.

Arquitectura para Wrapper XML a ER7
Arquitectura para Wrapper XML a ER7

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>^~\&amp;</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:

WrapperXMLaER7 MensajeOrigen
WrapperXMLaER7 Mensaje Origen XML

Y realizamos la conversión:

WrapperXMLaER7 MensajeDestino
WrapperXMLaER7 Mensaje Destino en ER7

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.

Deja un comentario

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

2 ideas sobre “Convertir XML a ER7 en Mirth Connect”

Follow by Email
LinkedIn
Share
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de sus datos para estos propósitos. Ver
Privacidad