Está en la página 1de 30

Estándares e Interoperabilidad en

Salud Electrónica
Protocolos de Comunicación
Me presento ...
• Pablo Pazos Gutiérrez
– LinkedIn: tinyurl.com/pablopazos
– GitHub: github.com/ppazos
– Twitter: twitter.com/ppazos
– Blog: http://informatica-medica.blogspot.com.uy/
– @: pablo.pazos@cabolabs.com
• Ingeniero en Computación
– Especializado en Informática en Salud, Estándares e Interoperabilidad
• Director de CaboLabs Informática en Salud
• Co-chair del Programa de Capacitación de openEHR Foundation
• Docente de los cursos de la ACHISA

© CaboLabs 2016 2
Agenda
• Protocolos de Comunicación
• Introducción a Arquitecturas REST
• Introducción a HL7 v2.x

© CaboLabs 2016 3
Estándares

Para información y comunicación


Estándares
• HL7
– Objetivo: comunicación de datos clínicos, administrativos y financieros
– V . : e sajería ER7 XML, 5 do i ios órde es, resultados, gestió de pa ie tes, …
– V : RIM, e sajería XML, do i ios la oratorio, far a ia, gestió de pa ie tes, …
– CDA: documentos clínicos XML
• openEHR
– Objetivo: HCE interoperable, accesible, flexible, mantenible y sustentable a largo plazo
– Modelo dual: nueva forma de implementar EHRs, involucra al profesional de la salud
– Modelo de Información:
• genérico, pequeño, implementado en software
– Modelo de Arquetipos:
• formal, definición del contenido de la HCE, gestionado fuera del software por clínicos!
• NEMA DICOM
– Objetivo: almacenamiento y comunicación de estudios imagenológicos digitales
– Información y comunicaciones de estudios imagenológicos
• ISO 13606
– Objetivo: interoperabilidad semántica de datos clínicos
– Comunicación XML, modelo dual

© CaboLabs 2016 5
Definiciones
• Dirección IP:
– identificador de una interfaz en la red, un nodo de red puede tener más de una interfaz (RJ45, WiFi, ...)
– IPv4: 32 bits (2^32 direcciones posibles), ej: 172.16.254.1
– IPv6: 128 bits (2^128 direcciones posibles), ej: 2001:db8:85a3::8a2e:370:7334
• Número de puerto:
– identificador de un proceso corriendo dentro de un nodo de red (un programa)
• Protocolo de comunicación:
– especificación formal de mecanismos de comunicación de datos entre nodos de red, incluyendo formatos
de mensajes, orden de mensajes, condiciones y reglas.
• Modelo de capas / Pila de protocolos de Internet:
– los protocolos siguen un modelo de capas donde cada capa resuelve un conjunto de problemas, desde la
capa física (cable) hasta la capa de aplicación (nuestros programas), pasando por la capa de transporte
(SO), la capa de red (nodos remotos) y la capa de enlace (nodos físicamente conectados).
– la pila de protocolos de Internet, también llamada pila de TCP/IP, tiene 5 capas.
• https://es.wikipedia.org/wiki/Pila_de_protocolos

© CaboLabs 2016 6
Protocolos

teórico, capítulo 2
Protocolos
• TCP: Transmission Control Protocol
– comunicación entre procesos corriendo en computadoras distintas,
conectadas mediante una red ej. Internet
– flujo continuo de bytes
• TCP no define comienzo ni fin de los mensajes
• la capa de aplicación debe saber procesar los mensajes
– paquetes de tamaño fijo (~1500 bytes)
• mensajes de capa de aplicación se fragmentan
– comunicación confiable
• llegan todos los paquetes, sin corrupción y en orden
– bidireccional (full duplex)
– orientado a conexión, cada una identificada por:
• IP servidor + puerto servidor + IP cliente + puerto cliente
– dirección IP identifica interfaz de red
• una computadora puede tener más de una (ej. RJ45 y WIFI)
– número de puerto identifica proceso
• Puertos comunes: 80: HTTP, 104: DICOM, 25: SMTP, 21: FTP
– programas usan sockets como interfaz para recibir y enviar
• todos los lenguajes de programación tienen operaciones para trabajar con sockets

© CaboLabs 2016 8
Protocolos
• MLLP: Minimal Lower Layer Protocol
– utilizado para transportar mensajes HL7 v2.x
• alta performance, es básicamente TCP
• permite procesar los mensajes con mayor facilidad (se sabe
exactamente cuándo empiezan y terminan los mensajes)
– separadores de mensajes sobre TCP
• <SB> Start Block (ASCII 11)
• Mensaje HL7
• <EB> End Block (ASCII 28)
• <CR> Carriage Return (ASCII 13)
• HL7 v2.x over MLLP
<SB>
MSH|^~\&|A|B|C|D|199605141144||ADT^A01|20031104082400|P|2.3<CR>
EVN|A01|20031104082400.0000+0100|20031104082400<CR>
PID||""|10||Vries^Danny^D.^^de||19951202|M|<CR>
PV1||N|<CR>
<EB><CR>

© CaboLabs 2016 9
Protocolos
• HTTP: HyperText Transfer Protocol
– 2 mensajes request/response, transportados sobre TCP
• línea + cabezales + cuerpo
– utiliza el puerto 80 por defecto
– métodos de request GET/POST/PUT/HEAD/DELETE
– códigos de estado de response (200, 404, 500)
– se utiliza para acceder a recursos, ej. páginas web, archivos
• identificados por una URL http://cabolabs.com/...
• utilizado para implementar la Web (aplicación sobre la Internet)
– servicios web REST se implementan sobre HTTP
• utilizan XML o JSON como formato de mensaje
• SOAP: Simple Object Access Protocol
– transporte de información estructurada (objetos) codificados en XML
– en general transportados sobre HTTP
– llamadas a operaciones de aplicaciones + parámetros + resultados,
basado en XML-RPC
– WSDL describe servicios SOAP
© CaboLabs 2016 10
HTTP

HyperText Transfer Protocol


HTTP
• Define 2 mensajes:
– request: cliente  servidor
– response: servidor  cliente
• Transporte por TCP (puerto 80 por defecto)

GET / HTTP/1.1<CR><LF> HTTP/1.1 302 Found


Host: www.google.com<CR><LF> Location: http://www.google.com.uy
<CR><LF> Cache-Control: private
Content-Type: text/html; charset=UTF-8
Date: Sun, 26 Jan 2014 22:02:20 GMT
Server: gws
Content-Length: 262
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN

<HTML><HEAD><TITLE>302 Moved</TITLE></HEAD>
<BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.com.uy/">here</A>.
</BODY></HTML>

© CaboLabs 2016 12
HTTP
• Para enviar un request, necesito una conexión TCP
• TCP trabaja con direcciones IP y números de puerto
• HTTP con nombres de dominio como google.com
• Necesitamos saber que IP tiene un dominio: DNS (Domain Name System)
• Hay herramientas y se puede hacer por programa, ej.
– http://www.dnsstuff.com/tools#dnsReport|type=domain&&value=google.com
– Ver IPs de registros bajo WWW, como 74.125.198.104 (prueba acceder a esa IP desde el
navegador)

© CaboLabs 2016 13
HTTP
• Utiliza URL: uniform resource locator
– http://www.ietf.org/rfc/rfc1738.txt
• ej. http://cabolabs.com/es/capacitacion#interoperabilidad
– Protocolo o Esquema: http (podría ser https, ftp, etc.)
– Host: cabolabs.com
– Puerto: 80 (puerto web por defecto)
– Ruta: /es/capacitación
– Consulta (parámetros): ?id=1&par=valor
– Fragmento: #interoperabilidad
• HTTP Request Methods:
– http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
– GET: solicita información
• Parámetros en la URL (clave=valor)
– POST: envía información
• Parámetros en el cuerpo del pedido
• Puede contener archivos, XML u otro tipo de contenidos

© CaboLabs 2016 14
HTTP
• HTTP Headers: https://en.wikipedia.org/wiki/List_of_HTTP_header_fields
– Host: nombre de dominio y puerto (omitido si es el estándar = 80)
• cabolabs.com
– Accept: tipos de contenido aceptados (se usa para negociar contenido, ver REST)
• text/plain, text/xml, *.* http://www.iana.org/assignments/media-types
– Content-Type: tipo de contenido enviado en el cuerpo del pedido (para POST)
• multipart/form-data (para enviar archivos)
– Content-Length: tamaño en bytes de los datos del cuerpo
• para pedidos HTTP POST o para respuestas HTTP
– Headers (cabezales) en el pedido:
• GET /es/home HTTP/1.1\r\n
• Host: cabolabs.com\r\n
• Accept: */*\r\n \r\n
– Headers (cabezales) en la respuesta:
Si la respuesta es una página HTML,
• HTTP/1.1 200 OK\r\n
• Date: Mon, 15 Jul 2013 02:35:08 GMT\r\n el Content-Type es text/html
• …
• Transfer-Encoding: chunked\r\n
• Content-Type: text/html\r\n
• \r\n
• Cuerpo HTML

© CaboLabs 2016 15
HTTP
• Códigos de estado:
– http://es.wikipedia.org/wiki/Anexo:C%C3%B3digos_de_estado_HTTP
– 200: respuesta correcta
– 301: movido permanentemente
– 302: movido temporalmente
– 400: pedido incorrecto
– 403: acceso prohibido
– 404: recurso no encontrado
– 500: error interno
– 503: servicio no disponible
• Clasificación:
– 1xx: códigos de información
– 2xx: códigos de éxito
– 3xx: códigos de redirección de pedidos
– 4xx: códigos de error del cliente
– 5xx: códigos de error del servidor

© CaboLabs 2016 16
SOAP
• Compuesto de 3 partes
– SOAP Envelope
• Headers: especifica como el receptor debe procesar el mensaje.
• Body: codifica RPCs (operación, parámetros) y reporte de errores
(SOAP Fault).
– SOAP Encoding Rules
• Codificación de tipos de datos en XML.
• Arreglos, estructurados, tipos simples y complejos, valores
simples y complejos.
– SOAP RPC
• URI destino, nombre del método, firma del método, parámetros
del método (nombres y valores), patrón de intercambio de
mensajes, otros datos de cabezal.
• Puede utilizar distintos protocolos de transporte
– SOAP HTTP Binding es el más común

© CaboLabs 2016 17
SOAP
• WSDL: Web Service Definition Language
– Describe un servicio SOAP y su vinculación (binding) con un protocolo de transporte de
mensajes (ej. HTTP)
– XML Schema (XSD) para describir la estructura de los mensajes SOAP
– Herramienta wsgen para crear WS SOAP
• http://docs.oracle.com/javase/6/docs/technotes/tools/share/wsgen.html
– Herramientas permiten crear clientes Java desde WSDL
• http://cxf.apache.org/docs/wsdl-to-java.html
• wsdl2java.bat –autoNameResolution –client –d <Directorio de salida> –compile <ruta al WSDL>
• Servicios SOAP online
– http://www.service-repository.com/
– Ver WSDL online:
• http://tomi.vanek.sk/index.php?page=wsdl-viewer
• http://wsdlbrowser.com
– Cliente Groovy
• https://github.com/jwagenleitner/groovy-wslite

© CaboLabs 2016 18
SOAP

• Pedido:
– POST /StockQuote HTTP/1.1
Host: www.stockquoteserver.com
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn
SOAPAction: "Some-URI"
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-
ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<m:GetLastTradePrice xmlns:m="Some-URI">
<symbol>DIS</symbol>
</m:GetLastTradePrice>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

© CaboLabs 2016 19
SOAP

• Respuesta:
– HTTP/1.1 200 OK
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-
ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
<SOAP-ENV:Body>
<m:GetLastTradePriceResponse xmlns:m="Some-URI">
<Price>34.5</Price>
</m:GetLastTradePriceResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

© CaboLabs 2016 20
REST

teórico, capítulo 6
REST
• REpresentational State Transfer
– Realizar operaciones (verbos) sobre recursos (sujeto)
– Operaciones se mapean a métodos HTTP
• GET = obtener, POST = crear, PUT = crear o modificar, DELETE = eliminar
– Un mismo recurso tiene distintas representaciones
• HTML, XML, JSON, etc.
• Negociación de Contenido con Header (cabezal) "Accept" en el pedido HTTP o con
extensión de archivo en la URL (.xml, .json)
– Stateless:
• El servidor no recuerda pedidos anteriores.
• Todo el estado necesario para ejecutar una operación es transmitido en cada pedido
HTTP.
– URLs: identifican y localizan al recurso
• pedidos HTTP a URLs, usando distintos métodos para operar sobre el recurso

© CaboLabs 2016 22
REST
• Diseño de aplicación suguiendo REST
– Modelo de información ("recursos" para REST)
• ficha clínica
• documento
• paciente
– URLs:
• /ficha_clinica
• /documento
• /paciente
– Operaciones:
• GET /ficha_clinica (devuelve todas las fichas)
• GET /ficha_clinica/{id} (devuelve la ficha con cierto identificador)
• POST /ficha_clinica (crea una nueva ficha)
• PUT /ficha_clinica/{id} (modifica ficha con cierto identificador)
• DELETE /ficha_clinica/{id} (elimina ficha con cierto identificador)

© CaboLabs 2016 23
REST
• Ejecutemos operaciones
– Fácil: usando Insomnia (ver Guía de Herramientas)
– Difícil: enviando el request nosotros:

GET /ficha_clinica/1234 HTTP/1.1


Host: mihospital.com
Connection: keep-alive
Accept: application/xml
User-Agent: Mozilla/5.0 (Windows NT 5.1) ...
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8,es;q=0.6,gl;q=0.4,pt;q=0.2

¿Qué estamos haciendo?

© CaboLabs 2016 24
REST vs. SOAP

Característica REST SOAP


Define uno nuevo (sobre HTTP
Protocolo Reutiliza HTTP
en general)
Representación Cualquiera (XML, JSON, HTML, PDF ...) XML
Estado Stateless Stateless ó Stateful
Contrato Documentación WSDL
Métodos HTTP GET, POST, PUT, DELETE POST
No, porque POST no es
Caché HTTP Si, para operaciones GET, PUT y DELETE
idempotente
Reutiliza los códigos de estado de HTTP No utiliza códigos HTTP, utiliza el
Estado para informar al cliente de errores e elemento SOAP Fault para
información sobre las respuestas. informar de errores.

© CaboLabs 2016 25
HL7 v2.x

teórico, capítulo 5
HL7 v2.x
• Es el estándar para mensajería en salud más implementado del mundo
– v2.x, no v3
• El protocolo es simple
• Los mensajes son pequeños y fáciles de procesar
– Usando codificación ER7 (palitos)
• Utiliza MLLP para transporte
– Más eficiente que HTTP o SOAP
– Existen implementaciones sobre HTTP, MLLP es más común
• Perfiles IHE definen cómo usarlo en ciertos casos de uso
– Luego van a ver PIX, PDQ, LTW, ...

© CaboLabs 2016 27
HL7 v2.x
• Mensajes codificados en ER7 o XML
MSH|^~\&|SRC_APP|SRC_CNTR|TARGET_APP|TARGET_CNTR|201401271408||ADT^A04^ADT_A01|123456|T|2.5
EVN|A04|199912271300
PID|||PATID||PAZOS^PABLO||19811024|M|||1233 BARREIRO^^Montevideo^Montevideo^11300^UY||(598)123-4567
PV1||O|BOX 1^^^DEPTO. EMERGENCIA^^^EDIFICIO CENTRAL||||123^HOUSE^GREGORY

• Transacciones:
– ocurre un "evento disparador"
– envío de mensaje
– recepción de confirmación (ACK)
• Tipos de mensajes:
– ADT: Admission, Discharge, Transfer (Gestión de Pacientes)
– ACK: Confirmación de Recepción de Mensaje
– ORM: General Order Message (Órdenes)
– ORU: Unsolicited Observation Message (Resultados)
• Modelo: Mensajes  Segmentos (MSH, PID)  Campos  Tipo

© CaboLabs 2016 28
HL7 v2.x
<ADT_A01 xmlns="urn:hl7-org:v2xml">
• Mensaje codificado en XML <MSH>
<MSH.1>|</MSH.1>
• En la próxima clase veremos: <MSH.2>^~\&amp;</MSH.2>
<MSH.3>
– cómo validar estos mensajes usando XSD <HD.1>SRC_APP</HD.1>
</MSH.3>

– cómo extraer datos con XPath <MSH.4>


<HD.1>SRC_CNTR</HD.1>
</MSH.4>
• HL7 v2.x en su forma XML es como lo maneja <MSH.5>
<HD.1>TARGET_APP</HD.1>
Mirth Connect internamente </MSH.5>
<MSH.6>
– Lo veremos en el taller <HD.1>TARGET_CNTR</HD.1>
</MSH.6>
<MSH.7>
<TS.1>201401271408</TS.1>
</MSH.7>
<MSH.9>
<MSG.1>ADT</MSG.1>
<MSG.2>A04</MSG.2>
<MSG.3>ADT_A01</MSG.3>
</MSH.9>
<MSH.10>123456</MSH.10>
<MSH.11>
<PT.1>T</PT.1>
</MSH.11>
<MSH.12>
<VID.1>2.5</VID.1>
</MSH.12>
</MSH>
...

© CaboLabs 2016 29
¿Preguntas?

También podría gustarte