Agenda Interoperabilidad con HL7 : la navaja suiza ¿Qué hace falta? Pero yo...¿cómo hago?: algunas herramientas open-source relacionadas con estándares de HL7 Conclusiones HERRAMIENTAS OPEN SOURCE PARA HL7 Diego Kaminker KERN INFORMATION TECHNOLOGY S.R.L. - Director ASOCIACION HL7 ARGENTINA PRESIDENTE 2006-2010 HL7 INTERNATIONAL VOLUNTEER OF THE YEAR 2008 CO CHAIR, Education / International Mentoring Commitee HL7 V3/CDA AMBASSADOR [email protected] 2 Interoperabilidad con HL7 HL7 V2.x - Estándar para Mensajería Intrahospitalaria o 'Local' Estándares de HL7 para interoperabilidad entre sistemas de salud MENSAJERIA V3 MENSAJERIA V2.X Herramientas de HL7: HL7 v2.x Ultima versión : v2.7 -2008. Mas utilizadas: 2.3.1, 2.4, 2.5,2.5.1 Disponible: en ^ | y como XML Fortaleza: mensajeria intrahospitalaria interdepartamental Debilidad: para implementaciones regionales, ambiguedad (requiere de negociación sitio por sitio), modelo de datos implícito Alto nivel de uso en el mercado : proveedores de software y usuarios (hospitales, prestadores) Ejemplos: LIS to HIS, LIS to BILLING, HIS to RIS, ADT broadcast Dominios: Admisión de pacientes, Laboratorio, Radiologia, Ordenes, Interconsulta, Turnos, etc. CDA R2 OTROS ESTANDARES DE HL7 3 4 Herramientas de HL7: HL7 v3 Herramientas de HL7: HL7 CDA R2 HL7 CDA R2 - Documentos Clínicos HL7 V3 - Mensajería a nivel regional Ultima versión : Normativa 2010 Disponible : como XML, ITS 1.0 (ITS2.0,DT2 para versiones a partir de 2011) Fortaleza: mensajeria REGIONAL (usado para implementaciones de este tipo en Canadá, Alemania, Mexico, UK). Modelo formal basado en UML, estricto y explicito de informacion. Reduce la ambiguedad. Basado en XML. Identificadores unicos globales. Debilidad: todavia no cubre algunos requerimientos de aplicaciones departamentales. Mayor complejidad inicial. Todavía algo inestable. Menor nivel de uso en el mercado : proveedores de software y usuarios (hospitales, prestadores) Dominios: Ver ballot en http://www.hl7.org/v3ballot/html/welcome/environment/index.html 5 Estandar para intercambio de DOCUMENTOS clinicos (en lugar de mensajes) Ultima versión : Normativa 2005 (CDA R2) (CDA R3 en discusión, no ballot) Fortaleza: Ampliamente difundido. Facil de implementar. Interoperabilidad evolutiva. Basado en XML y en modelos de V3. Identificadores unicos globales. Debilidad: Se lo quiere utilizar como si fuera toda la navaja suiza. Alto nivel de uso en el mercado : proveedores de software y usuarios (hospitales, prestadores) Dominios: Cualquiera que permita generar documentos 6 Otros estándares de HL7 ARDEN Resumen SYNTAX / GELLO Intercambio de Reglas y Expresiones Clínicas (Ver presentación del Dr. Jenders) Para obtener un resumen de los estándares de HL7, ver este documento creado en forma conjunta por HL7 Argentina y HL7 España: http://www.vico.org/hl7/AboutHL7/HL7_RepEstandares.pdf CCOW Integración de Aplicaciones a nivel de escritorio 7 8 ¿Qué hace falta? Pero yo, ¿cómo hago? “Infoestructura” 1. Vocabularios y servicios terminológicos 2. Procesamiento de mensajes o artefactos 3. Desarrollo o Adaptación de Perfiles y Guías 4. Comunicaciones y seguridad 5. Registros comunes (master files) Haremos foco hoy en ALGUNAS herramientas OPENSOURCE relacionadas con estándares de HL7 para * Procesamiento de mensajes o artefactos * Desarrollo o Adaptación de Perfiles y Guías Procesamiento de mensajes HL7 V2.x/HL7 V3 y documentos CDA: Mirth Connect Mensajeria HL7 V2.x: Apache HAPI (Java) Desarrollo de Guias para Documentos CDA R2: MDHT (CDA Tools for Eclipse) 9 10 Mirth Connect Mirth Connect Referencia: http://www.mirthcorp.com/community/mirth-connect Licencia Open Source (OSI/MPL 1.1) Motor de integración basado en estándares, de código abierto: – Ruteo / Filtrado – Transformación – Audit Log – Diversos protocolos – MLLP,FTP,DB,HTTP – Soporta HL7 v2.x,V3, DICOM, XML propietario – [PRACTICAMENTE SIN ESCRIBIR CODIGO] 11 Componentes Principales: – Server: corre bajo Sun Java JRE 1.5/5.0+ con 1GB RAM con cualquier db como repositorio u objeto: pgsql,derby,oracle,postgresql,ms sql server 2005 – Administrator: permite definir las interfaces y canales, y visualizar el estado del servidor y el log de mensajes – Server Manager: GUI de configuración (solo p/Windows) 12 Mirth Connect Conceptos Principales: – – Mirth Connect Canales • Origen • Filtros • Destino • Transformaciones Dashboard (cómo está funcionando cada canal) Canales, para cada canal en Mirth se define – – – – – Datos del Canal Origen Filtros Destino Transformaciones 13 14 Mirth Connect - Canales Mirth Connect - Origen 15 16 Mirth Connect - Transformaciones Mirth Connect - Filtros 17 18 Mirth Connect - Destinos Mirth Connect - Dashboard 19 20 HAPI HAPI Referencia: http://hl7api.sourceforge.net/ Leer un mensaje 1-Parser: Licencia: Apache, Open Source (MPL,GPL) Parser HL7 V2.x para Java – Soporta HL7 v2.x (2.1,2.2,2.3,2.3.1,2.4.2.5,2.5.1,2.6) y v2.x XML • Parseo de mensajes (leer y devolver un objeto con una estructura acorde al mensaje recibido) • Creación de mensajes • Envio y recepcion de mensajes (MLLP) • Validación de conformidad (contra perfiles generados por el HL7 Messaging Workbench) • Soporte de Segmentos Z (“Custom Model Classes”) Parser p = new GenericParser(); Message hapiMsg; try { // Este es el parser del mensaje!! hapiMsg = p.parse(msg); } catch (EncodingNotSupportedException e) { e.printStackTrace(); return; } catch (HL7Exception e) { e.printStackTrace(); return; } 21 22 HAPI MDHT CDA TOOLS Leer un mensaje 2-Extraccion de datos desde el objeto Referencia: http://cdatools.org/ Model-Driven Healthcare Tools Desarrollado por IBM y Veterans Adm. ADT_A01 adtMsg = (ADT_A01)hapiMsg; MSH msh = adtMsg.getMSH(); String msgType = msh.getMessageType().getMessageType().getValue(); String msgTrigger = msh.getMessageType().getTriggerEvent().getValue(); // Imprime "ADT A01" System.out.println(msgType + " " + msgTrigger); //Ahora buscamos el apellido (varios componentes del nombre del paciente) PN patientName = adtMsg.getPID().getPatientName(); // Imprime "SMITH" String familyName = patientName.getFamilyName().getValue(); System.out.println(familyName); Open Source Basado en Eclipse y MIF (message interchange format) en lugar de en XML Schemas. 23 24 MDHT CDA TOOLS Para Autores de Guías de Implementación MDHT CDA TOOLS MDHT CDA TOOLS permite definir y reusar - Templates a nivel de documento - Provee herramientas basadas en UML para Ej: debe contener primer y segundo apellido, un firmante legal y un codigo de tipo de documento de LOINC=”33221-1” - Templates a nivel de sección Ej: debe contener una sección de 'Problemas activos' con la lista de problemas activos del paciente - Templates a nivel de enunciado clínico Ej: debe contener el diagnóstico de egreso codificado con SNOMED CT 1. generar restricciones a CDA R2 2. combinar y extender modelos existentes (un modelo es un estandar o guia) 3. publicar guias de implementación , perfiles y diccionarios de datos 25 26 MDHT CDA TOOLS MDHT CDA TOOLS Para Implementadores: MDHT CDA TOOLS permite generar automáticamente código Java para: - Generar un documento CDA R2 válido respecto a un modelo (serialización) - Consumir un documento CDA R2 (des-serialización) - Validar un documento contra una guía o modelo 27 28 MDHT CDA TOOLS Conclusiones Código generado para un Reporte Neonatal en CDA 1. Existen HERRAMIENTAS OPEN-SOURCE para generar , procesar, validar y transmitir artefactos de interoperabilidad (mensajes, documentos), que cumplan con los estándares de HL7. 2. Las herramientas NO REEMPLAZAN EL CONOCIMIENTO. Los que usan estas herramientas tienen que saber DONDE ESTÁ LO QUE BUSCAN, o QUE INFORMACION QUIEREN TRANSMITIR. Y cuándo. 3. Para eso no hay más remedio que APRENDER. Programar menos: SI. Reducir los tiempos de los proyectos (¡de años a semanas!), SI. Pero... hay que aprender: HL7 V2.x, HL7 V3, CDA R2, antes de poder utilizarlas. NeonatalCareReport clinicalDocument = NCRFactory.eINSTANCE.createNeonatalCareReport().init(); PatientDataSectionNCR patientData = NCRFactory.eINSTANCE.createPatientDataSectionNCR().init(); EncountersSection encounters = NCRFactory.eINSTANCE.createEncountersSection().init(); clinicalDocument.addSection(patientData); patientData.addSection(encounters); NeonatalICUEncounterActivity encounter = NCRFactory.eINSTANCE.createNeonatalICUEncounterActivity().init(); encounters.addEncounter(encounter); CDAUtil.save(clinicalDocument, System.out); 29 30 ¿Preguntas? ¡Gracias! 31