Está en la página 1de 15

Post Report FHIR Curso en español - OPS - - octubre 2021

Elaborado por:

Ever González

SONDA/SOAINT – Consultor de Infraestructura

Fecha:

15/12/2021

1
1. Introducción a FHIR
1.1.1. Introducción

Fast Healthcare Interoperability Resources (FHIR) describe formatos y elementos de datos y una
interfaz de programación de aplicaciones para el intercambio de registros médicos electrónicos. El
estándar fue creado por la organización internacional de estándares de salud Health Level Seven
(HL7).

1.1.2. Resources
En esta unidad se vieron las diferentes opciones que se tienen para identificar una cosa lógica;
contará con una ubicación donde se le puede encontrar y que incluye tanto el id como el host
donde se almacena dicho recurso.

Enlace donde encontrar todos los recursos de FHIR:

http://hl7.org/implement/standards/fhir/resourcelist.html

Los recursos se encuentran según su nivel de madurez en orden Alpha bético, lo marcados un una
“N” son recursos normativos.

2
Ejemplos de un recurso (Resourse Observation)
- XML como en JSON.

<Observation xmlns="http://hl7.org/fhir">

<text>

<status value="generated"/>

<div xmlns="http://www.w3.org/1999/xhtml">Sept 17, 2012: Blood pressure

107/65 (normal)</div>

</text>

<name>

<coding>

<system value="http://loinc.org"/>

<code value="55284-4"/>

<display value="Blood pressure systolic and diastolic"/>

</coding>

</name>

<interpretation>

...

Fragmento de la versión XML de un recurso Observation

{"Observation": {

"text": {

"status": {"value": "generated"},

"div": "<div>Sept 17, 2012: Blood pressure 107/65 (normal)<\/div>" }, "component":

{"name": {"coding": [

{"system": {"value": "http://loinc.org"},

"display": {"value": "Systolic blood pressure"},

"code": {"value": "8580-6"} }]},

"valueQuantity": {

"value": {

"value": "107"},

"units": {"value": "mm[Hg]"}

...
Fragmento de la versión JSON de un recurso Observation

3
2. Operaciones CRUD y consultas a un servidor FHIR
2.1.1. Operaciones en FHIR
En esta unidad nos centramos en la primera interacción con un server FHIR, los conceptos básicos
de REST, ejecutar distintas operaciones con recursos; Crear, recuperar y actualizar recursos y
aprender como consultar al servidor de diferentes formas utilizando diferentes parámetros.

Servidor FHIR para las actividades: http://fhirserver.hl7fundamentals.org/fhir/

Enviando un recurso al servidor de FHIR

Resultado.

ID asignado por el Servidor> 17560.

4
2.1.2. Consultas en FHIR

Realizando consulta.

La ubicación completa del recurso en el servidor es:

http://fhir.hl7fundamentals.org/r4/Patient/17560

Le pedimos al servidor que devuelva el recurso en formato XLM, poniendo en el encabezado del
pedido accept to application/xlm+fhir.

Actualizando un recurso.

En PostMan cambie el método GET a PUT y pegue el recurso que ha actualizado en el cuerpo de la
consulta donde dice el raw es el mejor lugar. Luego lo enviamos.

5
Respuesta del servidor FHIR.

¿Como Borrar un Recurso?

Para eliminar un recurso solo debe utilizar el comando DELETE.

DELETE <host>/<resourceType>/<id>

3. FHIR Advanzado
3.1.1. Transacciones en FHIR
Podemos elegir (como clientes FHIR) utilizar las interacciones REST habituales para cada recurso, o
usar Transacciones FHIR.

Figura 1. Estructura de distintas interacciones con un servidor FHIR enviadas uno a uno.

6
Figura 2. Esquema de múltiples interacciones al servidor, en un solo paquete, agrupados en un
Bundle.

Para realizar una transacción en un servidor FHIR, solo necesitamos efectuar un POST a la
dirección base FHIR del servidor, en cualquiera de los formatos soportados (JSON/XML).

POST [base] {? _format=[mime-type]}

Figura 3. Múltiples transacciones en un solo paquete a un servidor FHIR.

7
Figura 4. Respuesta de nuestro servidor FHIR.

3.1.2. Paradigmas
FHIR soporta cuatro paradigmas de interoperabilidad: REST, Documentos, Mensajes y Servicios. Se
habla también de dos paradigmas adicionales emergentes: Base de Datos o Storage y
Transferencia Masiva (Bulk Transfer).

8
3.1.3. Mensajes
En el paradigma de mensajería, las interacciones entre clientes y servidores se asemejan a las
definidas por la familia de estándares HL7 V2.x: hay un emisor y un receptor, hay un evento
disparador (algo que ocurre en el mundo real que dispara la creación y comunicación de un
mensaje específico), un mensaje de solicitud, y un mensaje de respuesta.

El mensaje de solicitud FHIR es una transacción FHIR con algunas reglas especiales:

1. Un mensaje FHIR es un Bundle con Bundle.type=message, y el primer recurso es siempre un


recurso especial denominado MessageHeader
2. El MessageHeader contiene los metadatos sobre el mensaje:
a. EventCoding (elemento codificado): el evento disparador
b. Sender (la aplicación que envía el mensaje)
c. Receiver (la aplicación que debería recibir el mensaje)
d. Message Identifier (identificador único para el mensaje, utilizado para auditoría y para asignarle
la respuesta que podría ser asincrónica)
e. Date/Time (Fecha y Hora de Creación del mensaje)

No hay necesidad que el transporte sea RESTful sobre http, se pueden enviar y recibir mensajes
usando transferencia de archivos, carpetas compartidas, HTTP, MLLP, Websphere, RabbitMQ, o
cualquier aplicación de encolamiento. El único requisito para el transporte es asegurar la entrega
de los mensajes y sus respuestas.
Los mensajes FHIR se clasifican según su impacto:
Consecuencia: el mensaje representa un cambio que puede ser ejecutado sólo una vez. Este tipo
de mensaje tendría solo UN mensaje de respuesta.
Notificación: El contenido de este mensaje es ‘actual’, y puede ser reprocesado. Este tipo de
mensaje solo debería recibir UN mensaje de respuesta.
Respuesta a Consulta: Este mensaje es una respuesta a una consulta, y se supone que la
información está actualizada. Siendo una consulta, este mensaje puede recibir múltiples mensajes
de respuesta.

9
4. FHIR Conformance
Esta unidad discute temas avanzados acerca de perfiles FHIR: cómo describir extensiones y
restricciones sobre recursos FHIR.

4.1.1. Extensiones
• Extensiones Simples.
Extensiones con un solo valor.

Ejemplo:

Algunos ítems para resaltar:


Metadatos acerca de la extensión: nombre, estado, descripción, requerimientos, versión de FHIR.
constrainedType: tipo de elemento. En este caso estamos restringiendo Extension: definiendo una
nueva extensión.
contextType: donde se utiliza este elemento: en un recurso, en un tipo de datos. En este caso:
recurso.
context: ¿A qué contexto se aplica esta extensión? En nuestro caso: patient.

10
Finalmente, la definición incluye el diferencial para la extensión. Las extensiones simples tienen
dos elementos: url y value[x]. Cualquier url, y una opción entre algunos tipos de valor (cantidad,
cadena, etc.).
Esta extension específica (‘el diferencial’) tiene:
1. Una url definida:
http://fhir.hl7fundamentals.org/berzerkistan/StructureDefinition/PatientTaxSituation
2. Un tipo de valor específico: Coding.

Ejemplo:

<?xml version="1.0" encoding="utf-8"?>


<StructureDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://hl7.org/fhir">
<url
value="http://fhir.hl7fundamentals.org/berzerkistan/StructureDefinition/Pati
entTaxSituation" />
<name value="PatientTaxSituation" />
<status value="draft" />
<date value="2015-09-22T20:02:49+10:00" />
<description value="Base StructureDefinition for Tax Situation" />
<requirements value="Record the tax situation for Berzerkistan patients"
/>
<fhirVersion value="1.0.1" />
<mapping>
<identity value="rim" />
<uri value="http://hl7.org/v3" />
<name value="RIM" />
</mapping>
<kind value="datatype" />
<constrainedType value="Extension" />
<abstract value="false" />
<contextType value="resource" />
<context value="Patient" />
<base value="http://hl7.org/fhir/StructureDefinition/Extension" />
<differential>
<element>
<path value="Extension" />
<definition value="Optional Extensions Element - found in all
resources." />
<min value="0" />
<max value="*" />
<type>

11
<code value="Element" />
</type>
<mapping>
<identity value="rim" />
<map value="N/A" />
</mapping>
</element>
<element>
<path value="Extension.url" />
<representation value="xmlAttr" />
<short value="identifies the meaning of the extension" />
<definition value="Source of the definition for the extension code - a
logical name or a URL." />
<comments value="The definition may point directly to a computable or
human-readable definition of the extensibility codes, or it may be a logical
URI as declared in some other specification. The definition should be
version specific. This will ideally be the URI for the Resource Profile
defining the extension, with the code for the extension after a #." />
<min value="1" />
<max value="1" />
<type>
<code value="uri" />
</type>
<fixedUri
value="http://fhir.hl7fundamentals.org/berzerkistan/StructureDefinition/Pati
entTaxSituation" />
<mapping>
<identity value="rim" />
<map value="N/A" />
</mapping>
</element>
<element>
<path value="Extension.value[x]" />
<short value="Value of extension" />
<definition value="Value of extension - may be a resource or one of a
constrained set of the data types (see Extensibility in the spec for list)."
/>
<min value="1" />
<max value="1" />
<type>
<code value="Coding" />
</type>
<binding>
<strength value="required"></strength>
<description value="PPH Tax Table"></description>

12
<valueSetReference>
<reference
value="http://fhir.hl7fundamentals.org/berzerkistan/ValueSet/PatientTaxSitua
tion"></reference>
</valueSetReference>

</binding>
<mapping>
<identity value="rim" />
<map value="N/A" />
</mapping>

</element>
</differential>
</StructureDefinition>

• Extensiones Complejas.
Las extensiones complejas se definen a través de un url y una lista de elementos. De hecho, se
pueden construir recursos enteros utilizando extensiones complejas. Si no hay ningún recurso en
FHIR que resuelva sus necesidades, se puede generar extendiendo algo llamado el recurso ‘Basic’.
Puede extender el recurso ‘Basic’ con todas las extensiones que necesite (Ver
https://www.hl7.org/fhir/basic.html) y crear sus propios recursos FHIR.

• Extensiones Modificantes.
Estas extensiones permiten que en una implementación se definan extensiones que DEBEN ser
procesados y entendidos por los sistemas que procesan los recursos.
Ejemplos de esto: registrar una instrucción acerca de NO tomar una medicación, usar un recurso
Condition para transmitir el hecho que la condición pertenece a otra persona, no al paciente
mismo, o declarar que el que un médico en especial NO ESTUVO PRESENTE en un procedimiento.
Así que, si su extensión modifica el contenido del recurso, y el recurso NO PUEDE SER PROCESADO
EN FORMA SEGURA PARA EL PACIENTE si se IGNORA, entonces su extension debe ser etiquetada
como ‘Modifier Extension’.

La declaración como ‘Modifier Extension’ es simple: sólo incluir isModifier=True en el recurso


StructureDefinition.

La implementación de las extensiones modificantes es más difícil, porque necesita agregar la


información a su sistema, y transferirla entre los sistemas también.

Se incluyen en una instancia usando el elemento modifierExtension en lugar del elemento


Extension.

13
4.1.2. Perfiles en FHIR
Puede crear recursos de conformidad de la misma manera que crea cualquier otro recurso,
editando XML o JSON, pero es un proceso complicado.

Existen herramientas específicas para crear recursos de conformidad FHIR (y continúan


evolucionando). Presentadas a continuación. *En nuestro caso, solo los 2 editores que fueron
utilizados para el desarrollo de este curso. *

- ClinFHIR

Sitio Web: http://clinfhir.com/

Editor de recursos para usuario no técnicos, editor para perfiles y extensiones, herramienta para
comentar perfiles.

Puede seleccionar su servidor de pacientes, perfiles y terminologías y crear sus instancias basados
en ellos. clinFHIR tiene muchas otras funcionalidades que puede probar.

- Forge

Sitio Web: https://fire.ly/forge/

Editor de recursos de conformidad para perfiles, restricciones, extensiones, slices, y vinculación de


vocabulario. Puede ser conectada a Simplifier o cualquier otro servidor que almacene recursos de
conformidad (recuerde que los perfiles pueden ser almacenados en cualquier servidor FHIR).

14
5. Anexo

Certificado:

15

También podría gustarte