Grado en Ingeniería de Tecnologías de...

111
i Equation Chapter 1 Section 1 Proyecto Fin de Grado Grado en Ingeniería de Tecnologías de Telecomunicación Servicio web para el acceso a información sanitaria de pacientes renales Dep. Ingeniería de Sistemas y Automática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Autor: Miguel Pedrera Jiménez Tutor: Laura M. Roa Romero Sevilla, 2016

Transcript of Grado en Ingeniería de Tecnologías de...

Page 1: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

i

Equation Chapter 1 Section 1

Proyecto Fin de Grado

Grado en Ingeniería de Tecnologías de

Telecomunicación

Servicio web para el acceso a información sanitaria

de pacientes renales

Dep. Ingeniería de Sistemas y Automática

Escuela Técnica Superior de Ingeniería

Universidad de Sevilla

Autor: Miguel Pedrera Jiménez

Tutor: Laura M. Roa Romero

Sevilla, 2016

Page 2: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales
Page 3: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

iii

Trabajo Fin de Grado

Grado en Ingeniería de las Tecnologías de Telecomunicación

Servicio web para el acceso a información sanitaria

de pacientes renales

Autor:

Miguel Pedrera Jiménez

Tutor:

Laura M. Roa Romero

Catedrática de Universidad

Dep. de Ingeniería de Sistemas y Automática

Escuela Técnica Superior de Ingeniería

Universidad de Sevilla

Sevilla, 2016

Page 4: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales
Page 5: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

v

Trabajo Fin de Grado: Servicio web para el acceso a información sanitaria de pacientes renales

Autor: Miguel Pedrera Jiménez

Tutor: Laura M. Roa Romero

El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros:

Presidente:

Vocales:

Secretario:

Acuerdan otorgarle la calificación de:

Sevilla, 2016

El Secretario del Tribunal

Page 6: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales
Page 7: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

vii

A Loli y Adrián, siempre seréis

parte de mí.

Page 8: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales
Page 9: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

ix

Agradecimientos

Con este trabajo se cierra una etapa de mi vida, y no me gustaría hacerlo sin acordarme y dar las gracias a

todas esas personas que me han acompañado a lo largo de este duro camino, convirtiéndolo en un agradable

paseo.

En primer lugar, a mis padres, Carmen y Miguel, y a mi hermana Marta, por darme todo lo que han tenido y

más. Por ser un ejemplo en el que fijarme cada día, sin el cuál no estaría ahora mismo escribiendo estas líneas.

A mi familia, los que están y los que no, a mis abuelos, mis tíos, mis primos… porque no hay nada más

importante que la familia, y cuando algún miembro ya no está, todo cambia para siempre.

A mis amigos de siempre, Pablo, Jose, Natalia, Lorena, Jorge y Víctor; por demostrarme cada día que la

amistad no tiene fecha de caducidad.

A los festivaleros, Sito, Fati, Curro, Marta y Trini; porque la música se vuelve especialmente valiosa cuando te

hace descubrir personas como ellos.

A todas las personas que he conocido durante mi etapa en la escuela, en especial a Soriano, Fran, Richy,

Marchal, Dani, Jairo, Bole, Ana, Franxi, Ale y Caye, porque estos años sin ellos no habrían sido lo mismo.

A mis ex-compañeros de Everis, en especial a Jorge y Miguel, por enseñarme que de unas prácticas no sólo te

llevas conocimientos, sino también grandes amigos.

A los profesores, por todo lo que me han enseñado, en particular a Laura María Roa, por confiar en mí para

este proyecto, y a Jorge Calvillo, por la inestimable atención y ayuda prestada durante la realización del

mismo.

A todos, muchas gracias.

Miguel Pedrera Jiménez

Sevilla, 2016

Page 10: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales
Page 11: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

xi

Resumen

La e-Salud alude a la práctica de cuidados sanitarios apoyada en tecnologías de la información y las

comunicaciones, introduciendo dichas tecnologías en la vida de los pacientes, y haciendo que participen de

forma activa en el cuidado de su salud.

Con un número cada vez mayor de sistemas de e-Salud trabajando conjuntamente, se hace necesario que

interoperen e intercambien información con el fin de mejorar la atención a los pacientes, reducir costes y hacer

sostenibles los complejos sistemas sanitarios.

Hacer que sistemas independientes interoperen no es una tarea sencilla pues dichos sistemas pueden trabajar

internamente de maneras muy distintas. Por ello se hace necesario que, de cara a comunicarse con otros

sistemas, se utilice un lenguaje común que todos entiendan. Ese lenguaje común puede ser convenido entre

cada par de sistemas (protocolo propietario) o adoptado desde un estándar de interoperabilidad en salud.

Este trabajo tiene por objeto, el diseño y desarrollo de un servicio web, siguiendo la especificación Fast

Healthcare Interoperability Resources (FHIR) de la organización Health Level 7 (HL7), para el acceso a

información sanitaria almacenada en la base de datos de un sistema de e-Salud para monitorización remota de

pacientes renales. Aunque el dominio de aplicación del servicio es la patología renal, los resultados son

extensibles a cualquier otro sistema que gestione información de pacientes crónicos.

Previo al diseño del servicio web, se ha llevado a cabo un profundo estudio del estándar, así como de su estado

actual y los principales sistemas que lo utilizan o planean utilizar, con el objetivo de enmarcar nuestro trabajo

en el contexto actual.

Page 12: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales
Page 13: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

xiii

Abstract

e-Health alludes to healthcare supported in TICs, introducing these technologies into patient’s lifes, and

making them participate in an active way in their own health care.

With a growing number of e-Salud systems working all together, it is increasingly necessary that they are able

to interoperate and share information, in order to improve patient’s care, reduce costs and help the complex

sanitary systems to be sustainable.

Getting independent systems into working together it’s not an easy task, because those systems could

internally work in so many different ways. It is because of that sort of things that we need a common language

for the systems to communicate, a language understandable by all of them. That common language could be

agreed between each pair of systems (proprietary protocol) or adopted from an interoperability standard in

health.

The aim of this work is the design and development of a web service, following the Fast Healthcare

Interoperability Resources (FHIR) specification from the HealthLevel 7(HL7) organization, for access the

healthcare information stored in an e-Salud system for remote monitoring of renal patients. Although the

service application domain is renal pathology, results could be extended to any other system used to manage

chronicle patient’s information.

Previous to the design of web service, it has conducted a thorough study of the standard, its current status and

major systems that use or plan to use, in order to frame our work in the current context.

Page 14: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales
Page 15: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

xv

Índice

Agradecimientos ix

Resumen xi

Abstract xiii

Índice xv

Índice de Tablas xvii

Índice de Figuras xix

Notación xxi

1 Introducción 1 1.1. Motivación y Objetivos 1 1.2. Metodología de trabajo 3 1.3. Plan de trabajo 3

2 Estado del arte 5 2.1. La Enfermedad Renal Crónica 5

2.1.1. Diálisis Peritoneal, beneficios y problemática 6 2.2. El sistema e-Nefro 6 2.3. Interoperabilidad en Salud 7

2.3.1. El estándar HL7 FHIR 7 2.4. Material y método 14

3 Resultados 15 3.1. Revisión literaria sobre la especificación HL7 FHIR 15

3.1.1. Metodología de búsqueda 15 3.1.2. Resultados 16 3.1.3. Discusión 18 3.1.4. Conclusiones 19

3.2. Identificación y modelado de los objetos de información de e-Nefro 20 3.2.1. Identificación de los objetos de información 20 3.2.2. Modelado de los objetos de información 22

3.3. Identificación y modelado de los Recursos FHIR 36 3.3.1. Identificación de los Recursos FHIR 37 3.3.2. Modelado de los Recursos FHIR 38

3.4. Definición de los métodos de acceso a la información 47 3.4.1. Forma de acceso a la información 48 3.4.2. Lista de métodos de acceso a los recursos FHIR 48

3.5. Implementación del servicio web 58 3.5.1. Diseño del servicio web 58 3.5.2. Desarrollo del servicio web 59 3.5.3. Validación del servicio web 67

4 Conclusiones y líneas futuras 85 4.1. Líneas futuras 86

5 Referencias 87

Page 16: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales
Page 17: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

xvii

Índice de Tablas

Tabla 3-1. Objeto Paciente 26

Tabla 3-2. Objeto Personal sanitario 27

Tabla 3-3. Objeto Organización 28

Tabla 3-4. Objeto Cita 29

Tabla 3-5. Objeto Actividad Toma de medicación 30

Tabla 3-6. Objeto Registro Toma de medicación 31

Tabla 3-7. Objeto Actividad Medida de variable 31

Tabla 3-8. Objeto Registro Medida de variable 32

Tabla 3-9. Objeto Actividad Toma de imagen 33

Tabla 3-10. Objeto Registro Toma de imagen 34

Tabla 3-11. Objeto Incidencia 34

Tabla 3-12. Objeto Plan de cuidados 35

Tabla 3-13. Objeto Periodo de seguimiento 35

Tabla 3-14. Lista de recursos FHIR 37

Tabla 3-15. Recurso Patient 38

Tabla 3-16. Recurso Practitioner 38

Tabla 3-17. Recurso Organization 39

Tabla 3-18. Recurso Appointment 39

Tabla 3-19. Recurso Encounter 40

Tabla 3-20. Recurso Location 41

Tabla 3-21. Recurso MedicationOrder 41

Tabla 3-22. Recurso MedicationStatement 42

Tabla 3-23. Recurso ProcedureRequest 43

Tabla 3-24. Recurso Observation 44

Tabla 3-25. Recurso DetectedIssue 45

Tabla 3-26. Recurso CarePlan 46

Tabla 3-27. Recurso EpisodeOfCare 47

Tabla 3-28. Recurso Condition 47

Tabla 3-29. Método para el recurso Patient (I) 48

Tabla 3-30. Método para el recurso Patient (II) 49

Tabla 3-31. Método para el recurso Practitioner 49

Page 18: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

Tabla 3-32. Método para el recurso Appointment (I) 50

Tabla 3-33. Método para el recurso Appointment (II) 50

Tabla 3-34. Método para el recurso Appointment (III) 50

Tabla 3-35. Método para el recurso Appointment (IV) 51

Tabla 3-36. Método para el recurso Encounter (I) 51

Tabla 3-37. Método para el recurso Encounter (II) 51

Tabla 3-38. Método para el recurso Encounter (III) 52

Tabla 3-39. Método para el recurso Encounter (IV) 52

Tabla 3-40. Método para el recurso MedicationOrder (I) 53

Tabla 3-41. Método para el recurso MedicationOrder (II) 53

Tabla 3-42. Método para el recurso MedicationStatement (I) 54

Tabla 3-43. Método para el recurso MedicationStatement (II) 54

Tabla 3-44. Método para el recurso ProcedureRequest (I) 54

Tabla 3-45. Método para el recurso ProcedureRequest (II) 55

Tabla 3-46. Método para el recurso Observation (I) 55

Tabla 3-47. Método para el recurso Observation (II) 56

Tabla 3-48. Método para el recurso DetectedIssue (I) 56

Tabla 3-49. Método para el recurso DetectedIssue (II) 56

Tabla 3-50. Método para el recurso CarePlan 57

Tabla 3-51 Método para el recurso EpisodeOfCare 57

Page 19: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

xix

Índice de Figuras

Figura 1-1. Funcionalidad del servicio web 2

Figura 1-2. Metodología incremental 3

Figura 2-1. Estructura del Recurso FHIR 9

Figura 2-2. Tipos de datos en FHIR 10

Figura 3-1. Diagrama de flujo de la selección de artículos 16

Figura 3-2. Distribución temporal de los artículos sobre FHIR 16

Figura 3-3. Clasificación en función del área médica donde se aplica FHIR 17

Figura 3-4. Clasificación según el tipo de sistema donde se aplica FHIR 18

Figura 3-5. Funcionalidad del Paciente/Cuidador en e-Nefro 20

Figura 3-6. Funcionalidad del Profesional en e-Nefro 21

Figura 3-7. Modelo de datos de e-Nefro: Información personal de usuario 23

Figura 3-8. Modelo de datos de e-Nefro: Organización del profesional 23

Figura 3-9. Modelo de datos de e-Nefro: Cargo y especialidad del profesional 24

Figura 3-10. Modelo de datos de e-Nefro: Actividades 24

Figura 3-11. Modelo de datos de e-Nefro: Registros 25

Figura 3-12. Modelo de datos de e-Nefro: Relación profesional-paciente 25

Figura 3-13. Modelo de datos de e-Nefro: Relación cuidador-paciente 26

Figura 3-14. Relaciones entre objetos de información 36

Figura 3-15. Referencias en el recurso Practitioner 39

Figura 3-16. Referencias en el recurso Appointment 40

Figura 3-17. Referencias en el recurso Encounter 41

Figura 3-18. Referencias en el recurso MedicationOrder 42

Figura 3-19. Referencias en el recurso MedicationStatement 43

Figura 3-20. Referencias en el recurso ProcedureRequest 44

Figura 3-21. Referencias en el recurso Observation 45

Figura 3-22. Referencias en el recurso DetectedIssue 45

Figura 3-23. Referencias en el recurso CarePlan 46

Figura 3-24. Referencias en el recurso EpisodeOfCare 47

Figura 3-25. Sintaxis GET/POST de la operación Search 48

Figura 3-26. Diagrama de secuencia de la funcionalidad del servicio web 58

Figura 3-27. Diagrama de paquetes de la estructura del servicio web 59

Figura 3-28- Paquete servlet 60

Page 20: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

Figura 3-29. Paquete narrative 61

Figura 3-30. Paquete bean 62

Figura 3-31. Paquete SQL 63

Figura 3-32. Paquete model 64

Figura 3-33. Paquete provider 65

Figura 3-34. Paquete config 67

Figura 3-35. Módulo de validación: Página principal 68

Figura 3-36. Módulo de validación: Página de recurso 68

Figura 3-37. Módulo de validación: Página de resultado 69

Figura 3-38. Petición/respuesta consulta de un paciente 70

Figura 3-39. Elemento narrativo de recurso Patient 71

Figura 3-40. Petición/Respuesta consulta de un paciente inexistete. 72

Figura 3-41. Petición/Respuesta consulta de pacientes a cargo de un profesional 72

Figura 3-42. Petición/Respuesta consulta de un profesional 73

Figura 3-43. Elemento narrativo de recurso Practitioner 75

Figura 3-44. Petición/Respuesta consulta de un profesional inexistente 75

Figura 3-45. Petición/Respuesta consulta de las citas de un profesional 76

Figura 3-46. Petición/Respuesta consulta de los encuentros de un profesional 78

Figura 3-47. Petición/Respuesta acceso a método no implementado 80

Figura 3-48. Cliente FHIR Android: Interfaz 81

Figura 3-49. Cliente FHIR Android: Muestra de los pacientes obtenidos 82

Figura 3-50. Cliente FHIR Android: Notificación de no infomación 83

Page 21: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

xxi

Notación

FHIR

CDA

Fast Health Interoperability Resources

Clinical Document Architecture

HL7

ERC

TSR

TX

HD

DP

DSTU

URI

API

CASE

UML

POM

URI

Health Level Seven

Enfermedad Renal Crónica

Tratamiento Sustitutivo Renal

Trasplante Renal

Hemodiálisis

Diálisis Peritoneal

Draft Standard for Trial Use

Uniform Resource Identifier

Application Programming Interface

Computer Aided Software Engineering

Unified Modeling Language

Project Object Model

Uniform Resource Identifier

Page 22: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales
Page 23: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

1

1 INTRODUCCIÓN

n este primer capítulo, se exponen los motivos y objetivos de este trabajo, y cómo se ha llevado a cabo

dicha tarea, explicando y justificando la metodología de trabajo escogida y desglosando el plan de

trabajo que se ha diseñado y llevado a cabo.

1.1. Motivación y Objetivos

La e-Salud alude a la práctica de cuidados sanitarios apoyada en tecnologías de la información y las

comunicaciones, introduciendo dichas tecnologías en la vida de los pacientes, y haciendo que participen de

forma activa en el cuidado de su salud. Se busca hacer de la atención sanitaria un proceso cada vez más

eficiente.

Con un gran número de sistemas de e-Salud trabajando conjuntamente, el intercambio de información entre

ellos es un pilar fundamental en los procesos de atención a los pacientes, gestión y generación de conocimiento

clínico, reducción de costes y sostenibilidad del sistema sanitario. No obstante, con frecuencia se desarrollan

sistemas de información sanitarios que no contemplan ese intercambio de información con otros, lo que se

traduce en una asistencia fragmentada y lo que se han venido a llamar las islas de información.

El interés de este proyecto surge de la necesidad de hacer accesible la información almacenada en la base de

datos de un sistema de e-Salud para el tratamiento de pacientes renales crónicos (sistema e-Nefro) a otros

sistemas. Entre la información almacenada en dicha base de datos se puede encontrar: tratamientos seguidos

por los pacientes, citas concertadas, registros e incidencias de las actividades que han realizado en el

tratamiento de su enfermedad. Si se dejara esta información aislada en el ámbito de e-Nefro, estaríamos

perdiendo parte del potencial del sistema, y estaríamos lejos de lograr una implementación eficiente para el

tratamiento de la enfermedad renal crónica.

Se busca, por tanto, una integración de e-Nefro con el resto de sistemas para así hacer posible que toda la

información que genera el sistema pueda ser extraída y utilizada por otros. Para ello se diseñará y desarrollará

un servicio web siguiendo la reciente especificación FHIR de HL7 para el intercambio de información

sanitaria. En la Figura 1-1 se muestra el esquema que pretendemos alcanzar, donde nuestro servicio web hará

de intermediario entre la base de datos de e-Nefro y el resto de clientes FHIR externos.

E

“El conocimiento es poder. El conocimiento

compartido es poder multiplicado.”

Robert Noyce

Page 24: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

2

Figura 1-1. Funcionalidad del servicio web

Frente a otros estándares, y como se describe en el apartado 2.3.1, se ha escogido FHIR porque está llamado a

ser una de las especificaciones de referencia para el intercambio de información en la próxima generación de la

e-Salud pues busca reducir de forma importante los tiempos y, por consiguiente, los costes de los proyectos de

integración, al ser diseñado para ser fácil de aprender, desarrollar e implementar, a la vez que combina las

características más interesantes de los estándares actualmente en uso.

En definitiva, podemos resumir los objetivos del proyecto en los siguientes puntos:

Estudio del estándar HL7 FHIR y su aplicación en sistemas de e-Salud para el tratamiento de

enfermedades crónicas.

Diseño e implementación de un servicio web que permita el acceso a la información de la base de

datos de e-Nefro a cualquier otro sistema que adopte el estándar anteriormente mencionado.

Extracción de conclusiones y valoración de la utilización del estándar para sistemas de este tipo.

Page 25: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

3

1.2. Metodología de trabajo

Para la realización del trabajo se va a llevar a cabo una metodología iterativa y creciente, más conocida como

metodología incremental. Esta metodología es muy empleada en el desarrollo ágil de software donde los

requisitos y soluciones evolucionan con el tiempo según la necesidad del proyecto.

Figura 1-2. Metodología incremental

Esta metodología de trabajo difiere del tradicional desarrollo en cascada, en el que llevaríamos a cabo las

tareas en el orden lógico de realización. De este modo, una vez estudiado el problema médico y técnico a

resolver, se realizarán las tareas de diseño, implementación y pruebas, de manera incremental.

Con esto se pretende, por un lado, obtener beneficio de lo aprendido a lo largo de cada iteración y aplicarlo en

el siguiente, es decir, retroalimentación, y, por otro lado, detectar, gracias a las comprobaciones y pruebas a

cada bloque, los errores lo antes posible, y poder solucionarlos con la menor repercusión posible en el trabajo

realizado hasta el momento.

1.3. Plan de trabajo

Un proyecto de este tipo conlleva una serie de tareas para su comprensión y realización:

1. Estudio y comprensión de la enfermedad renal crónica, así como de sus principales tratamientos

domiciliarios: prediálisis, diálisis peritoneal y tratamiento conservador.

2. Estudio y comprensión del problema técnico a resolver con nuestro sistema: la necesidad de

interoperabilidad entre aplicaciones sanitarias, y cómo se logra.

3. Estudio y comprensión del estándar de comunicación en salud FHIR y su API, y la aplicación de éste

en un sistema de e-Salud para pacientes crónicos.

4. Identificación de los objetos de información existentes en la aplicación, tras el estudio de la aplicación

e-Nefro y su base de datos.

Las tareas que vienen a continuación, seguirán una metodología iterativa y creciente, llevándose a cabo en

bloque para cada objeto de información identificado en el punto anterior.

5. Modelado de los objetos de información, identificando sus atributos y relacionándolos con la base de

datos de la aplicación.

6. Establecer la correspondencia entre los objetos de información definidos y los recursos ofrecidos por

FHIR y sus campos.

Page 26: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

4

7. Solución técnica para la creación de los objetos de información definidos anteriormente, esto es,

creación de las clases que los definen y los métodos para la extracción de información de la base de

datos.

8. Diseño de los métodos de consulta que se ofrecerán al resto de sistemas para el acceso a la

información.

9. Implementación de los métodos para la solicitud de los recursos FHIR con la información clínica,

extraída donde se lleva a cabo el mapeo de la información obtenida a los recursos FHIR, tal como los

habíamos establecido anteriormente.

10. Implementación de los puntos anteriores en el servicio web.

11. Evaluación y pruebas.

Page 27: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

5

2 ESTADO DEL ARTE

s necesario hablar del contexto sanitario y técnico en el que se enmarca el presente trabajo. En primer

lugar, se va a ver en qué consiste la enfermedad renal crónica, qué terapias existen actualmente para ella y

la problemática que conllevan, centrándonos en la prediálisis y la diálisis peritoneal.

También se explicará con mayor profundidad qué es y cómo funciona el sistema e-Nefro, ya mencionado

anteriormente, y qué solución ofrece a los pacientes renales crónicos.

Por último, se tratará el tema de la interoperabilidad en el ámbito sanitario y el estándar HL7 FHIR.

2.1. La Enfermedad Renal Crónica

La Enfermedad Renal Crónica (ERC) es una patología consistente en la pérdida de las funciones vitales que

desempeñan los riñones [1]. Si este deterioro de la función renal es importante pasa a denominarse

Enfermedad Renal Crónica Avanzada (ERCA) y no es posible seguir tratándola de forma conservadora

(medicación y medidas higiénico-dietéticas), siendo necesario pasar a lo que se conoce como Tratamiento

Sustitutivo Renal (TSR).

Cada año casi 6.000 nuevos pacientes ven progresar su ERC hasta la necesidad de recibir uno de los tres tipos

de TSR en nuestro país [2].

Dados los costes sanitarios, sociales y personales del TSR, lo convierten en un problema sanitario de especial

relevancia. El TSR tiene tres modalidades: Trasplante renal (TX), Hemodiálisis (HD) y Diálisis Peritoneal

(DP), pudiendo ser tratado inicialmente con una de ellas y sucesivamente con las otras, en beneficio del

paciente [1].

Trasplante Renal (TX), consiste en el trasplante de un riñón sano en un paciente con una enfermedad

renal avanzada. Cada año se realizan alrededor de 2500 trasplantes renales en nuestro país, y hay algo

más de 4000 pacientes en lista de espera. Por motivos clínicos, sólo un 48% de los pacientes de ERC

pueden acceder a un riñón [2].

Hemodiálisis (HD), la sangre del paciente se extrae y depura empleando una máquina que la filtra y se

la devuelve al paciente, para lo cual tiene que desplazarse a un hospital o centro especializado tres

veces por semana como mínimo. La mayoría de los pacientes, en torno al 90%, en diálisis usan esta

modalidad, en parte, debido a que la situación estructural y organizativa actual favorece la realización

de esta técnica [2].

Diálisis Peritoneal (DP), esta modalidad de tratamiento es domiciliaria. La eliminación de sustancias

tóxicas se realiza a través de la membrana peritoneal del paciente, y se puede realizar de forma manual

o de manera automatizada, durante la noche, mientras se duerme. El paciente solo acude al hospital

E

“Nunca consideres el estudio como una obligación, sino

como una oportunidad de penetrar en el maravilloso

mundo del saber.”

Albert Einstein

Page 28: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

6

para revisión cada uno o dos meses. Pese a estas ventajas, un escaso porcentaje, en torno al 10%, de

pacientes usan esta modalidad [2], debido a que no está suficientemente desarrollada en nuestro país

(aspectos organizativos, respaldo de especialistas y capacitación de los facultativos) y a que no se

realiza una adecuada información al paciente sobre su enfermedad y las opciones de tratamiento.

2.1.1. Diálisis Peritoneal, beneficios y problemática

Este tratamiento tiene especial relevancia en nuestro trabajo, pues el sistema e-Nefro ha sido diseñado para

cubrir las necesidades de los pacientes en prediálisis y diálisis peritoneal.

Como hemos dicho anteriormente, la DP, a diferencia de la HD, es una modalidad de tratamiento domiciliaria,

esto es, el paciente realiza su tratamiento, o la mayor parte de éste, desde su propio hogar.

Al margen de los aspectos médicos, la DP presenta una serie de ventajas y problemática derivadas de ser una

técnica domiciliaria.

Podemos hablar de dos grandes beneficios, tanto para paciente como para el sistema sanitario:

No altera en demasía la vida laboral y familiar de los pacientes, lo que repercute en una mayor

independencia y en una mejor calidad de vida [3].

Reduce costes y libera infraestructura y personal hospitalario [1] [2].

Por estas ventajas, podemos considerar la DP una técnica muy recomendable para pacientes que quieran

mantenerse laboralmente activos, así como niños y ancianos que tengan buen soporte familiar.

No obstante, este tipo de técnicas llevan implícita una serie de inconvenientes que hay que tener muy en

cuenta para proporcionar un buen servicio al paciente [3]:

La menor supervisión médica con respecto a los pacientes tratados con HD.

Inseguridad del paciente, provocada por su responsabilidad e implicación en el tratamiento.

Con el sistema e-Nefro, explicado a continuación, se intenta poner solución a esta problemática, acortando la

brecha existente entre paciente y profesional sanitario.

2.2. El sistema e-Nefro

En Nefrología, la aplicación de las TIC puede dotar de capacidades como el control remoto de pacientes en

diálisis, la monitorización de las sesiones de diálisis para la detección temprana de problemas, o la transmisión

de datos y mensajes desde el hogar.

El proyecto e-Nefro es un esfuerzo multicéntrico entre la Universidad de Sevilla y diversos hospitales

nacionales [4]. En dicho proyecto se investiga sobre la mejor forma de optimizar los cuidados en el hogar de

los pacientes en tratamiento conservador, prediálisis y diálisis peritoneal, con la intención de potenciar los

autocuidados, la seguridad del paciente en su domicilio, y el seguimiento supervisado y continuo de dichos

pacientes.

Para ello, se ha diseñado una arquitectura modular adaptable para la teleasistencia integral de pacientes

nefrológicos (extensible a cualquier otra especialidad y escenario clínico), donde se pone en práctica una

metodología de aplicación TIC en sanidad que prima la implicación en su diseño y desarrollo a los usuarios

(profesionales y pacientes), con el fin de que se adaptes a sus necesidades reales.

Con e-Nefro, se busca que los pacientes se sientan más seguros con su implicación directa en el tratamiento.

Para ello, el sistema les da la capacidad de:

Monitorizar y transmitir automáticamente sus condiciones sanitarias.

Estar en contacto con los médicos, para notificar situaciones de emergencia.

Recibir información sobre el tratamiento de acuerdo a sus preferencias.

Page 29: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

7

Por su parte, los profesionales sanitarios también cuentan con una serie de funcionalidades, que ayudan a dar

una mejor atención a los pacientes:

El acceso a información útil, con una visualización de ésta ajustada a las necesidades y preferencias de

cada usuario, para evaluar la evolución de los pacientes.

La capacidad de acceder a registros de los pacientes completos y fiables.

El acceso a los datos del usuario asistido actualizados en tiempo real en cualquier momento.

La recepción de eventos críticos, sin ser inundados con intervenciones/alarmas no críticas.

Todos estos requisitos tienen un punto común, se basan en la generación y recepción de información sanitaria.

El sistema e-Nefro, se apoya en una base de datos relacional implementada con tecnología Postgresql, para

almacenar la información de manera persistente, y acceder a ella de manera estructurada cuando sea necesario.

En ella se almacena la información referente a las personas implicadas en el tratamiento, pacientes,

profesionales y cuidadores; así como de las organizaciones que intervienen en él; el plan de cuidados y las

actividades que debe realizar el paciente en su domicilio; los registros e incidencias generados por éste en el

seguimiento de su tratamiento y los mensajes entre paciente y profesionales.

Toda esta información almacenada, base del sistema e-Nefro, es lo que se quiere hacer accesible con el

servicio web diseñado al resto de sistemas de salud. En el Capítulo 3 se analizará el modelo de datos de e-

Nefro, para la identificación de los objetos de información de interés para otros sistemas.

2.3. Interoperabilidad en Salud

La interoperabilidad es la habilidad de un conjunto de sistemas para trabajar juntos intercambiando

información, conocimiento y servicios.

La necesidad de sistemas interoperables en salud es evidente, pues se requiere un constante intercambio

de información entre los profesionales de la salud, entre el personal sanitario y los pacientes, entre

instituciones prestadoras de servicios, entre sistemas auxiliares con sistemas de registros clínicos

electrónicos, etc. [5].

Dichos sistemas pueden haber sido desarrollados por organizaciones diferentes e implementados con

distintas tecnologías. De cara a la interoperabilidad, los sistemas son cajas negras en los que no importa

cómo trabajen internamente, lo importante es que la información que desean comunicar pueda ser

entendida y utilizada por el resto.

En consecuencia, la comunicación entre dichos sistemas requiere que se comparta un marco de referencia

común que permita la interacción y coordinación entre ellos. Uno de los mecanismos para establecer ese

marco común es a través de estándares de interoperabilidad, los cuales ofrecen uniformidad en la

denominación de los componentes del sistema de salud ya sean personas, diagnósticos o procedimientos,

y la forma de ser transmitidos, para garantizar que los datos estén disponibles y tengan significado clínico

y administrativo.

Hay una gran cantidad de estándares para la comunicación en salud. En función de qué tipo de

interoperabilidad se busque será interesante usar uno u otro. En lo que respecta al presente trabajo, es

interesante mencionar tres estándares de HL7 que anteceden a FHIR y de los cuáles ha heredado sus

características más interesantes, estos son, HL7 V2 [6], HL7 V3 [7] y CDA [8].

2.3.1. El estándar HL7 FHIR

El estándar FHIR [9], Fast Healthcare Interoperability Resources, es la última especificación de estándares

HL7 para el intercambio electrónico de información en salud, cuyo surgimiento obedece a las dificultades de

implementación de HL7 V3, a la necesidad de transición de HL7 V2 y los retos que suponen las nuevas

tendencias como salud móvil (mobile Health o m-Health), intercambio de registros clínicos personales

(Personal Health Record, PHR), historia clínica electrónica (Electronic Health Record, EHR), las

comunicaciones en la nube o el Internet de las cosas (Internet of Things, IoT). Está en fase DSTU (Draft

Standard for Trial Use), siendo la DSTU 2 la versión oficial actual.

Page 30: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

8

FHIR ha sido diseñado desde el punto de vista de las necesidades de las implantaciones y con la idea de

que sean tan sencillas como sea posible. Por su naturaleza y diseño, es fácil de aprender, de desarrollar y

de implementar, consiguiendo reducir de forma notable los tiempos y, por consiguiente, el coste final de

los proyectos de integración. Además, se ha diseñado para que pueda convivir e integrarse correctamente

con sistemas actuales empleando versiones antiguas de las especificaciones HL7, lo que a priori supone

una ventaja para su incorporación a sistemas ya operativos.

El estándar está diseñado específicamente para la web. La información se intercambia en base a estructuras

XML o JSON que utilizan un protocolo REST basado en HTTP, en contraposición a los servicios basados en

SOAP que se pueden encontrar en la mayoría de sistemas de este tipo. La API RESTful define una serie de

operaciones a realizar sobre los recursos, donde cobrará especial relevancia la interacción Search, utilizada

para la búsqueda de recursos siguiendo algún criterio [10].

Hay que tener en cuenta que FHIR no es un protocolo de seguridad, ni define ninguna función relacionada con

ella. Sin embargo, FHIR sí define los protocolos de intercambio y modelos de contenido que necesitan ser

utilizado para un intercambio de información seguro. Sin entrar en demasiados detalles, el estándar propone

una serie de medidas de seguridad [11]:

Comunicaciones cifradas mediante TLS/SSL, por ejemplo, utilizando el protocolo HTTPS.

Sistemas de identificación y autenticación de usuarios.

Sistemas de control de acceso a las operaciones del servidor, mediante etiquetas de seguridad.

Sistemas de generación de logs, con los que conseguir un registro de las acciones llevadas a cabo

en el servidor, y detectar intrusos.

Uso de firmas digitales.

Cuidado en el uso de archivos adjuntos y elementos narrativos.

Para comprender la especificación FHIR, es necesario familiarizarse con términos como Recursos, Elementos

Narrativos y Extensiones; además de tener conocimientos previos en los conceptos de Mensajes" y

Documentos" electrónicos ya empleados en las especificaciones HL7 V2 y V3, y CDA.

2.3.1.1. Recursos FHIR: tipos de datos, extensiones y elementos narrativos

FHIR se basa en lo que denominan Recursos [12]. Un recurso es la unidad básica de interoperabilidad, la

unidad más pequeña que tiene sentido intercambiar. Los recursos son representaciones de conceptos del

mundo sanitario, y administrativo, como, por ejemplo, paciente, profesional sanitario, procedimiento o cita.

Los recursos tienen una serie de elementos comunes (Figura 2-1) [13]:

Un identificador a través de la cual puede ser registrado, localizado y recuperado.

El contenido, formado por una serie de campos de información, definidos en la estructura del

propio recurso.

Un mecanismo de extensión que permite a los implementadores añadir nuevas propiedades de

manera sencilla.

Un componente denominado elemento narrativo, que permite una visión legible de los datos

almacenados en el recurso.

Page 31: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

9

Figura 2-1. Estructura del Recurso FHIR

En primer lugar, todos los recursos necesitan un identificador, que es asignado por el servidor. Este

identificador es único dentro del espacio de todos los recursos del mismo tipo en el servidor. Una vez

asignado, el identificador no cambia nunca.

La información va almacenada en los campos del propio recurso. Estos campos dependen del tipo de

recurso que estemos manejando, por ejemplo, en el recurso del tipo Paciente, hablaríamos de campos

como Nombre o Fecha de nacimiento, mientras que en un recurso Cita, tendríamos campos como

Localización o Fecha de inicio.

Estos campos están definidos en la estructura del propio recurso, y tienen asignado un tipo de datos

concreto [14]. FHIR define una serie de tipos de datos, simples o primitivos, como String o Boolean, y

Complejos, como CodeableConcept o Period, formados a su vez por tipos de datos más simples.

En la Figura 2-2 podemos ver todos los tipos de datos definidos en FHIR.

Page 32: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

10

Figura 2-2. Tipos de datos en FHIR

Algunos atributos, que siguen la nomenclatura atributo[x], pueden ser implementados con diferentes tipos

datos, en función de lo que necesitemos de ellos (Figura 2-3).

Figura 2-3. Tipo de dato atributo[x]

Un tipo de dato especial es el llamado Reference (Figura 2-4) [15], que nos proporciona un mecanismo muy

útil a la hora de estructurar la información. Con él, es posible contener recursos dentro de otros. Esto nos

permite combinar recursos y poder plasmar la información sanitaria en toda su complejidad. Por ejemplo,

podríamos tener un recurso de tipo Practitioner, y en su campo ManagingOrganization referenciar un recurso

de tipo Organization, con toda la información relativa a la organización a la que pertenece el profesional.

Existen dos tipos de referencias:

Internas, referencias a recursos empaquetados dentro del recurso principal.

Externas, referencias a recursos almacenados externamente a través de su URI.

Page 33: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

11

Figura 2-4. Diagrama de referencia a recursos

El campo reference contiene la dirección del recurso contenido, pudiendo ser una URL o un identificador,

mientras que el campo display sirve para identificar a lo que se está haciendo referencia, sin entrar en detalle.

En nuestro servicio utilizaremos el primer tipo de referencia. En la Figura 2-5 se muestra un ejemplo.

Figura 2-5. Ejemplo de referencia a recursos

Tal como especifica el estándar, existen algunas limitaciones en los recursos contenidos: no deben tener

extensiones, recursos contenidos ni elemento narrativo.

Como hemos dicho anteriormente, los recursos son representaciones de conceptos básicos del mundo

sanitario y administrativo. A veces, es necesario utilizar FHIR en contextos locales o sistemas tan

específicos, que estos recursos definidos se nos quedan cortos a la hora de representar nuestra

información. Ante este problema, FHIR nos da la solución en forma de Extensiones [16]. Una extensión

no es más que añadir nuevos campos de información a un recurso ya definido.

Todas las extensiones requieren la publicación de una definición formal, mediante un recurso tipo

StructureDefinition (Figura 2-6). Siempre que se intercambian los recursos que contienen las extensiones, las

definiciones de las extensiones estarán a disposición de todas las partes que comparten los recursos.

Figura 2-6. Diagrama de extensión de recursos

Page 34: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

12

Cada extensión contiene un URI, en el campo url, que hace referencia a la fuente de la definición, mientras

que el campo value contiene la información como tal. El campo value puede ser cualquiera de los tipos de

datos vistos anteriormente, incluido el tipo Reference.

En la Figura 2-7 se puede ver un ejemplo de recurso Patient extendido.

Figura 2-7. Ejemplo de extensión de recursos

Por último, hay que hablar de los elementos narrativos [17], cuya finalidad es facilitar la legibilidad humana

del contenido. Para ello se utiliza un fragmento XHTML, generando el resumen de los datos, en forma no

estructurada (Figura 2-8).

Figura 2-8. Diagrama de elemento narrativo

El contenido del elemento div es el fragmento de XHTML que únicamente contendrá elementos básicos de

HTML Esto es para asegurar que el contenido del elemento narrativo está íntegramente dentro del recurso y

que no hay contenido activo. Dicho contenido introduciría problemas de seguridad y por tanto se prohíbe su

uso.

Page 35: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

13

Podemos ver un ejemplo de elemento narrativo en la Figura 2-9.

Figura 2-9. Ejemplo de elemento narrativo

En la Figura 2-10, se puede ver el resultado práctico del elemento narrativo de un recurso que contiene la

información de un profesional médico.

Figura 2-10. Resultado de elemento narrativo

En el apartado correspondiente a la implementación del servicio web, se verá cómo se generan estos

elementos, y de qué forma pueden los clientes utilizarlos.

2.3.1.2. Mensajes y Documentos

Aunque, debido al tipo de servicio web que se va a diseñar, no se han utilizado Mensajes y Documentos, es

conveniente explicarlos brevemente para ver el potencial de FHIR.

Los recursos pueden agruparse en forma de mensajes, al igual que se hacía en las versiones 2 y 3 de HL7. En

la mensajería FHIR, cuando ocurre un evento que desencadena la necesidad de un intercambio de información,

se genera y envía un mensaje desde una aplicación de origen a una aplicación de destino, de forma similar a

los mensajes y eventos disparadores en HL7 V3.

Así mismo, también se pueden utilizar para construir documentos clínicos. Los documentos FHIR, al igual que

en CDA, tienen una serie de características (persistencia, custodia, potencial de autenticación, contexto,

integridad y legibilidad humana), que los convierten en una representación de la realidad de un evento clínico.

Page 36: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

14

2.4. Material y método

Para concluir el estado del arte, se hablará de las principales herramientas que se han utilizado para las tareas

de diseño e implementación del servicio web.

MagicDraw [18]. Esta herramienta CASE (Computer Aided Software Engineering), compatible con

el estándar UML, ha sido utilizada en las tareas de modelado necesarias para el diseño del servicio

web, esto es, modelado de los objetos de información y las relaciones existentes entre ellos, y de la

funcionalidad y estructura del servicio web.

Eclipse Mars [19]. Para el desarrollo del servicio web, se ha utilizado esta plataforma de desarrollo en

la plataforma Java, junto a los plugins de Spring [20] e Hibernate [21], muy utilizados en el

desarrollo de aplicaciones de este tipo.

Apache Maven [22]. Maven es una herramienta CASE de gestión de proyectos de software y

comprensión, basada en el concepto de un Proyect Object Model (POM). Se ha utilizado Maven para

describir el proyecto software a construir, sus dependencias de otros módulos y componentes

externos, y el orden de construcción de los elementos. Su principal característica es que está listo para

usar en red. El motor incluido en su núcleo puede dinámicamente descargar plugins de un repositorio

que provee acceso a muchas versiones de diferentes proyectos Open Source en Java, de Apache y

otras organizaciones y desarrolladores.

Apache Tomcat 8.0 [23]. Se utiliza este contenedor web con soporte de servlets y JSPs, para el

despliegue de nuestro servicio web, a través de Eclipse.

PostgreSQL [24]. Sistema de gestión de bases de datos relacional orientado a objetos y de código

libre. La base de datos de e-Nefro está implementada bajo este sistema, por lo que se ha utilizado tanto

en la fase de diseño, para realizar consultas y estudiar la base de datos, como en la fase de

implementación, para extraer y manejar la información, incorporando la librería correspondiente en

Eclipse.

Android Studio [25]. Herramienta principal para el desarrollo de aplicaciones Android. Este IDE

desarrollado por la misma compañía propietaria del sistema operativo Android, lo que aporta

numerosas ventajas adicionales a la hora de escribir aplicaciones para su plataforma. En nuestro caso

se ha utilizado para la implementación de un cliente Android FHIR que utilice nuestro servicio web.

HAPI FHIR [26]. Para la implementación de la especificación HL7 FHIR en nuestro servicio web, se

utiliza esta API de código abierto, completamente compatible con aplicaciones Java. Entre los

distintos usos que se proponen para la librería, es especialmente interesante para nuestro proyecto el

de emplearla en una aplicación que permita a aplicaciones externas acceder a nuestra información

(Figura 2-11).

Figura 2-11. Funcionalidad HAPI FHIR

Page 37: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

15

3 RESULTADOS

n este tercer capítulo, se muestran los resultados obtenidos en la realización del trabajo. En primer lugar,

se ha realizado una revisión literaria sobre la situación actual de FHIR, centrada en determinar las

principales áreas y sistemas donde se está utilizando dicha especificación.

Tras ello, se han realizado las tareas que abarcan el diseño del servicio web: identificación y modelado de

objetos de información de e-Nefro, identificación y modelado de los recursos FHIR a intercambiar y diseño de

los métodos de acceso a la información.

Por último, se ha llevado a cabo la implementación del servicio web, utilizando para ello una API de código

abierto de FHIR en Java: HAPI FHIR.

3.1. Revisión literaria sobre la especificación HL7 FHIR

Previo al diseño del servicio, se ha realizado un estudio de la situación actual del estándar a través de una

profunda revisión literaria. Con este análisis, se busca conocer en qué áreas médicas se está aplicando el

estándar, así como cuáles son los principales sistemas que están planteando su implementación, para poder

enmarcar nuestro servicio en el panorama actual.

A continuación, se expone la metodología de búsqueda utilizada para recopilar la información, los resultados

obtenidos del estudio y su discusión, y las principales conclusiones que podemos extraer de ello.

3.1.1. Metodología de búsqueda

Para la elaboración de esta revisión bibliográfica, se han realizado búsquedas de artículos relevantes,

atendiendo al número citaciones en otros artículos, en lengua inglesa utilizando las bases de datos de Scopus,

ScienceDirect y Google Scholar, desde el año 2013, fecha de publicación de FHIR, hasta abril de 2016

(documentos en prensa incluidos). El conjunto de artículos se obtuvo recogiendo aquellos que incluían "FHIR"

o “Fast Health Interoperability Resource” en el título, resumen o como palabras clave, dando ambas búsquedas

prácticamente el mismo resultado. Se excluyeron de dicha lista artículos de opinión y documentos no

catalogados como artículos.

La Figura 3-1 muestra el proceso de selección para el conjunto de artículos, en la que, tras agrupar todos los

artículos de las diferentes bases de datos, y excluir duplicados, se hizo una revisión del resumen y,

posteriormente, del contenido, para excluir aquellos artículos en los que FHIR no era el objeto del trabajo, o no

se presentaba ninguna implementación que fuera a utilizarlo.

E

“Los científicos estudian el mundo tal como es; los

ingenieros crean el mundo que nunca ha sido.”

Theodore von Kármán

Page 38: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

16

Figura 3-1. Diagrama de flujo de la selección de artículos

3.1.2. Resultados

La búsqueda en las bases de datos mencionadas dio un total de 45 artículos donde se mencionaba la

especificación FHIR. Tras combinar los resultados y eliminar los duplicados, nos quedamos con 35 artículos,

de los cuáles tras hacer una revisión del resumen y contenido, sólo 21 de ellos cumplían los requisitos del

proceso de selección.

Como se puede ver en la Figura 3-2, a partir del conjunto de artículos seleccionado, se extrajeron datos como

su fecha de publicación, interesante para estudiar la tendencia que seguirán, y la importancia de FHIR, en el

futuro.

Figura 3-2. Distribución temporal de los artículos sobre FHIR

Page 39: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

17

Podemos observar que el número de artículos publicados sobre FHIR va en aumento. Tras la publicación del

artículo de presentación en 2013, en 2014 no se publicaron artículos donde la jugase un papel relevante. Ya en

2015, con la especificación más asentada, nos encontramos con un total de 17 artículos publicados sobre dicha

especificación, y sólo en los cuatro primeros meses de 2016 se publicaron otros tres artículos.

Los artículos seleccionados también han sido clasificados en función de en qué área de la medicina se va a

aplicar el sistema de e-Salud para el que se propone el uso de FHIR (Figura 3-3). Hay que mencionar que 5 de

los 21 artículos seleccionados no tratan sobre un sistema donde aplicarlo, sino sobre aspectos teórico-técnicos

de la especificación como tal, por lo que no han sido incluidos en la siguiente clasificación, que se realiza

sobre los 16 artículos restantes.

El 41% (6) de los artículos tratan sobre la utilización de FHIR en sistemas de información sanitaria general,

con el propósito de que se integre en el conjunto de sistemas e intercambie información con éstos. El 23% (4)

proponen utilizar FHIR en sistemas para la monitorización de pacientes crónicos, donde se registrarán sus

variables que serán accesibles por otros sistemas, aunque no especifican a qué tipo de pacientes concretos irán

dirigidos. Profundizando algo más en este tipo de sistemas, el 6% de los artículos habla de aplicar FHIR en un

sistema de lo que se conoce como Healthy Ageing [27], mientras que otro 6% (1) va dirigidos a pacientes de

Diabetes mellitus gestacional [28]. Por último, un 25% (4) trata sobre sistemas de ayuda a la decisión clínica y

de generación de conocimiento, mediante análisis de datos genómicos y la aplicación de reglas de decisión.

Figura 3-3. Clasificación en función del área médica donde se aplica FHIR

Otra clasificación interesante a la hora de analizar la tendencia de los sistemas que utilizan FHIR, es la de en

qué tipo de sistemas se plantea su uso (Figura 3-4). En este aspecto, encontramos:

3 artículos son meramente informativos sobre FHIR. Entre ellos se encuentra el artículo de

presentación [29], y 2 artículos que tratan sobre la colaboración médico-paciente [30] y la toma de

decisiones clínicas [31], y el aporte de la especificación a estas tareas.

4 artículos realizan un estudio teórico de FHIR, los recursos que ofrece, tipos de datos [32-34] y la

capacidad para utilizarlo con un sistema basado en arquetipos. [35]

4 artículos [36-39] plantean el uso de FHIR en el envío y captación de registros en sistemas de

monitorización para pacientes crónicos y hogares asistidos, entre ellos el sistema CyPhyS+ [39], para

para personas de edad avanzada, rama conocida como healthy ageing [27].

Page 40: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

18

4 artículos [40-43] que aplican FHIR en sistemas de ayuda a la decisión clínica y de generación de

conocimiento, mediante análisis de datos genómicos y la aplicación reglas de decisión.

3 artículos [44-46] sobre el uso de FHIR en aplicaciones móviles, lo que se conoce como m-Salud

[47], una de las principales tendencias de la e-Salud.

2 artículos [48-49] plantean el uso de FHIR en sistemas EHR, para integrarlos con el resto de

sistemas. Concretamente, se plantea su uso en OpenMRS [50].

Un artículo [51] sobre el uso de FHIR en un sistema de validación de documentos clínicos.

Figura 3-4. Clasificación según el tipo de sistema donde se aplica FHIR

3.1.3. Discusión

En la introducción se estableció el objetivo de la revisión: estudiar la situación actual de la especificación

FHIR, y valorar su uso frente a otras propuestas. Se seleccionaron un total de 21 artículos donde FHIR jugaba

un papel relevante.

Viendo la evolución de los artículos desde el año 2013 hasta la actualidad (Figura 3-2) podemos ver una

tendencia claramente creciente en el número de artículos publicados. En 2013, año en el que se lanzó la

especificación, tenemos el artículo [29] en el que fue presentado por HL7 y en el que se describen sus

principales características. Durante 2014 no hubo artículos relevantes, pues FHIR estaba recién lanzado, y en

una fase muy baja de desarrollo, por lo que se necesitaba tiempo para estudiarlo en profundidad y ver cómo

evolucionaba. Ya durante 2015 y los cuatro primeros meses de 2016, con la especificación más asentada,

encontramos 17 y 4 artículos, respectivamente, donde se trata su uso en diferentes sistemas de actual

relevancia. Esta evolución nos hace pensar que, en los próximos años, con FHIR más maduro y estudiado, el

número de sistemas que lo utilizarán aumentará considerablemente.

Analizando la Figura 3-3, donde se han clasificado los sistemas que se integrarán con FHIR, en función el área

de la medicina a la que pertenecen, podemos observar que su uso no se limita a un área concreta, sino que

vemos implementaciones en tres grandes áreas: sistemas de información clínica general, donde se registran las

historias clínicas de los pacientes, sistemas para pacientes crónicos y en sistemas para la toma de decisiones

médicas. Esto es posible debido a que FHIR no nos limita su uso a un área concreta, sino que ofrece una serie

de recursos básicos que son empleados en todas las áreas médicas, tales como Paciente o Procedimiento, a la

vez que permite la extensión de éstos para adecuarlos a un contexto específico. He aquí una de las

características que hacen tan interesante a FHIR, su flexibilidad.

Page 41: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

19

A nivel técnico, FHIR se considera [44] una especificación emergente que aprovecha elementos positivos de

sus antepasados HL7 v2 y v3, y CDA, abordando sus limitaciones. Estos estándares han jugado un papel

importante en garantizar la interoperabilidad de la asistencia sanitaria, pero que debido a las nuevas tendencias

en e-Salud, como las aplicaciones móviles, o los sistemas de EHR, se hacen demasiado complejos para una

integración del sistema rápida y poco costosa.

Por un lado, FHIR se basa en el estilo arquitectónico REST, siendo [38] adecuado para dispositivos ligeros y

con poca capacidad de procesado, como los terminales móviles. También [38] hay que temer en cuenta que

son dispositivos portátiles, donde la batería es un factor fundamental a tener en cuenta, y utilizar una

tecnología que la ahorre al máximo es una gran ventaja. Aquí vemos una de los principales campos donde

FHIR puede ser especialmente interesante, los sistemas de m-Salud. Atendiendo a la clasificación por el tipo

de sistema donde se plantea utilizar FHIR (Figura 3-4), podemos observar que las aplicaciones móviles juegan

un papel importante en la tendencia del estándar, así como los sistemas de monitorización, que también

cuentan con elementos de batería.

La interoperabilidad es esencial para hacer frente a las limitaciones causadas por la aplicación ad hoc de los

sistemas de información e historia clínica. FHIR [48] es particularmente relevante en este tipo de sistemas, una

de las bases de la atención médica moderna.

Otro de los puntos que hace la especificación tan interesante, es que su diseño se ha hecho pensando en crear

un estándar de interoperabilidad lo más sencillo posible de implementar, reduciendo los costes de los

proyectos de integración. Es por ello particularmente relevante para OpenMRS [50], un sistema de registros

médicos de código abierto ampliamente utilizado en todas las economías emergentes. Debido a la naturaleza

del proyecto, es especialmente interesante el principio de ahorro de costes bajo los que la especificación ha

sido diseñada. FHIR tiene el potencial de permitir a OpenMRS alejarse de una API propia para la integración

con otros sistemas y definir los planes a largo plazo para la transición hacia una API basada en FHIR que

reduce en gran medida la curva de aprendizaje para los desarrolladores y reducir costes [48] [49].

Otra de las líneas de investigación abierta, es la combinación de FHIR con arquetipos. El uso de arquetipos

aportaría una serie de ventajas como ser capaz de verificar si un recurso es válido dentro del modelo de

referencia, aunque aún hay cuestiones a resolver cuando se trata de arquetipos, sobre todo debido a la

separación entre la definición narrativa y la definición formal de los recursos [35].

Actualmente, se está trabajando en el estudio de FHIR, con el objetivo de hacer que funcione junto a otros

estándares y mecanismos de interoperabilidad. Esto es relativamente sencillo de conseguir con las

especificaciones previas de HL7, HL7 V2 y V3 y CDA [52], pues FHIR se ha diseñado con esa idea.

Conseguir esta integración con otros estándares, como por ejemplo Arden Syntax [41], requiere un esfuerzo

mayor.

En comparación con estas especificaciones HL7 previas, FHIR ha implementado sus características más

interesantes como la generación de mensajes y documentos clínicos, además de reducir la complejidad. Es

especialmente interesante, como ya se ha comentado, [38] en sistemas con batería, donde es preferible el uso

de la arquitectura REST que implementa FHIR, frente a SOAP, implementada, por ejemplo, por HL7 V2, uno

de los estándares actualmente más asentados. Así mismo [38], se ha demostrado que hay una disminución

significativa en el tráfico de datos cuando se basa en una arquitectura REST en combinación con HL7 FHIR.

Otra ventaja es que el recurso FHIR proporciona un nivel de auto descriptivo, en comparación con el enfoque

HL7v2 y v3, siendo mucho más intuitivo de manejar, ahorrando tiempo de aprendizaje a los desarrolladores.

Desde este punto de vista, resulta interesante dar el paso a FHIR, un estándar más flexible, ligero, eficiente y

fácil de implementar, siempre teniendo en cuenta los costes asociados a adaptar los sistemas actuales a este

nuevo estándar.

3.1.4. Conclusiones

FHIR está llamado a ser una de las especificaciones de referencia para el intercambio de información en la

próxima generación de la e-Salud. Cada vez cobra más peso en los artículos sobre sistemas de e-Salud

actuales, en detraimiento de otras especificaciones como HL7 V2 y V3, y CDA.

Debido a cómo se ha concebido su diseño, hace que sea fácil y poco costoso de implementar, y al utilizar

tecnología REST, es especialmente interesante en aparatos portátiles y con poca capacidad de procesamiento,

Page 42: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

20

como los terminales móviles. Hemos visto que su uso no está limitado a ningún área médica, así como tipo de

tecnología, pudiendo ser utilizado tanto en sistemas de historia clínica, de monitorización de pacientes crónicos

o de ayuda al a toma de decisión.

Como todo nuevo estándar que se quiera introducir, es necesario hacer un esfuerzo para adaptar los sistemas

actuales a él, especialmente en la combinación con estándares actualmente en uso y en entornos de trabajo

específicos.

La situación actual de FHIR está condicionada por su corta vida. En la actualidad, gran parte del esfuerzo va

destinado a analizarlo en profundidad y mejorarlo, así como hacer que trabaje junto a otros estándares y

mecanismos de interoperabilidad. Aquí es donde radica su principal limitación, técnicamente es una

especificación que combina lo mejor de sus antepasados con la sencillez, pero debido a su corta vida, y que

aún está continua evolución, faltan unos años hasta que los sistemas de e-Salud lo implementen como estándar

de interoperabilidad de referencia. Todo apunta a que en los próximos años se llevará a cabo esta transición de

los sistemas actuales hacia FHIR.

3.2. Identificación y modelado de los objetos de información de e-Nefro

El primer paso en el diseño del servicio web es identificar qué información se va a ofrecer al resto de sistemas.

Esta tarea consta de dos etapas. En primer lugar, es necesario estudiar el sistema e-Nefro, sus funcionalidades e

interacción con el usuario, y extraer los objetos de información que tienen interés exportar fuera del sistema.

En segundo lugar, ya con los objetos de información identificados, es necesario estudiar la base de datos del

sistema, así como su estructura, y modelar estos objetos, identificando los campos que han de tener y su

relación con las tablas de la base de datos del sistema.

3.2.1. Identificación de los objetos de información

Como hemos introducido, en primer lugar, es necesario hacer un estudio de la funcionalidad del sistema e-

Nefro, ya explicado en el estado del arte. Para dicho estudio se ha utilizado su manual de usuario, analizando

cómo interactúan pacientes y profesionales con la aplicación. Se van a exponer las principales conclusiones

sacadas de dicho estudio, así como los objetos identificados.

En primer lugar, e-Nefro establece los tipos de usuario Administrador, Jefe de servicio, Responsable,

Profesional médico y Paciente/Cuidador.

En nuestro caso, para identificar los objetos de información, nos vamos a centrar en los dos últimos, pues son

los usuarios que tienen importancia médica en el sistema.

Los pacientes en e-Nefro son personas afectadas por una enfermedad renal crónica. Se establece para ellos un

periodo de seguimiento y un plan de cuidados para el tratamiento de su enfermedad. Es posible que un

paciente cuente con un cuidador, otra persona que interactuará con el Sistema E-Nefro en nombre del paciente.

En la figura se puede ver cómo sería el menú de la aplicación para un usuario de este tipo.

Figura 3-5. Funcionalidad del Paciente/Cuidador en e-Nefro

Registro Clínico: desde esta opción, el paciente podrá consultar, editar o registrar la información

clínica necesaria para que su médico pueda realizar el seguimiento de su tratamiento.

Incidencias: pulsando en esta opción del menú, el usuario podrá registrar una incidencia y recibir una

recomendación automática.

Page 43: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

21

Plan de Cuidados: el paciente podrá consultar el plan de cuidados que su profesional médico le ha

diseñado. El plan de cuidados está formado por actividades, que pueden ser citas, tomas de

medicamento, medida de variables fisiológicas o toma de imágenes.

Paciente/Cuidador: aquí podrán ser consultados los datos personales del paciente/cuidador. También

podrá solicitar la modificación de estos datos.

Mensaje: el paciente podrá consultar los mensajes que le han sido enviados y contestar a los que

reciba. Sin embargo, no podrá comenzar de motu propio la comunicación con los miembros del

equipo médico a través de esta vía.

Por su parte, los profesionales médicos, que forman parte de una organización sanitaria, también juegan un

papel fundamental en el sistema. Se pretende que, través de e-Nefro, el profesional pueda conocer toda la

información de sus pacientes y disponga de un apartado de análisis de datos que le permita estudiar las

respuestas que dan a los distintos planes de cuidado.

En la figura se puede ver cómo sería el menú de la aplicación para un usuario de este tipo.

Figura 3-6. Funcionalidad del Profesional en e-Nefro

Pacientes: muestra el listado de los pacientes que corresponde al profesional médico. A partir de aquí

se podrán consultar todos los datos del mismo.

Citas: se muestra el formulario para dar de alta una nueva cita y en la zona inferior, se muestran las

citas ya programadas.

Incidencias: en este apartado el profesional podrá consultar todas las incidencias que sus pacientes

han dado de alta.

Mensajes: muestra un gestor de mensajería. El profesional podrá escribir a cualquiera de sus

pacientes. Además, podrá responder los mensajes que reciba de otros usuarios del sistema.

Análisis de datos: en este apartado el profesional podrá realizar diversos análisis de los datos

almacenados sobre sus pacientes.

Con todo ello, podemos identificar una serie de objetos de información en el sistema e-Nefro:

Paciente

Cuidador

Profesional sanitario

Organización

Periodo de seguimiento

Plan de cuidados

o Cita

o Toma de medicamento

o Medida de variable fisiológica

o Toma de Imágenes

Page 44: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

22

Registro Clínico

o Cita

o Toma de medicamento

o Medida de variable fisiológica

o Toma de Imágenes

Incidencia

Mensaje

Un punto a tener en cuenta, es que estos objetos no solo tienen que existir, sino tener sentido fuera del contexto

de e-Nefro. Es por ello que se descarta el objeto ‘Mensaje’ para el modelado e inclusión en el servicio, pues la

información que contiene solo tiene sentido dentro del sistema.

En el siguiente apartado, se desarrollarán estos objetos de información, identificando sus campos, y

relacionándolos con la base de datos de la aplicación.

3.2.2. Modelado de los objetos de información

Una vez identificados los objetos de información que intercambiaremos con el resto de sistemas, hay que

modelarlos, indicando los atributos que lo forman e identificándolos con campos de la base de datos de donde

recogeremos la información.

Para ello, lo primero será hacer un análisis de la base de datos del Sistema y su estructura, para ver qué

información contiene y cómo está organizada. Una vez entendido su funcionamiento, procederemos al

modelado de los objetos.

En estos objetos es donde se guardará la información obtenida de las consultas a la base de datos para,

posteriormente, modelarla en los recursos FHIR. Por ello, como métodos únicamente tendrán los llamados

Getters & Setters, para obtener o modificar, respectivamente, estos atributos con la información.

3.2.2.1. Estudio y análisis del modelo de datos de e-Nefro

Para el análisis se ha empleado la documentación de la base de datos de e-Nefro, suministrada por el Grupo de

Ingeniería Biomédica, así como consultas puntuales a una base de datos real, con el objetivo de determinar qué

información estaba almacenada en ciertos campos donde la documentación no era del todo clara.

Como se ha dicho, e-Nefro, como sistema de registros clínicos, se sustenta en una base de datos relacional

implementada con tecnología PostgreSQL. La base de datos cuenta con un total de 85 tablas y 416 columnas.

Debido a esta extensión, no se va a entrar en demasiada profundidad en el estudio realizado, únicamente nos

centraremos en las tablas cuya información van a aparecer en nuestros objetos.

La información de los usuarios de la aplicación se almacena en la tabla e_usuario (Figura 3-7). Es información

propia del usuario e-Nefro en cuestión y no su información personal. Esta información se almacena en la tabla

e_person, relacionada con la primera a través del atributo usua_persona. Las tablas e_valor_dominio y

e_tipoidentificacion, se utilizan para almacenar códigos y sus descripciones, generales y de identificación

respectivamente, que se relacionan con las tablas principales de la misma forma que antes.

Vemos que la tabla e_usuario, además de a e_person, hace muchas referencias a otras tablas. Por importancia,

hay que mencionar la referencia a la tabla e_organizationelement (Figura 3-8) que contiene la información

referente a la organización sanitaria a la que pertenece el usuario.

Y a la tabla e_staffmember (Figura 3-9), donde se almacena qué cargo y especialidad ocupa el usuario,

profesional en este caso, en la organización.

Page 45: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

23

Figura 3-7. Modelo de datos de e-Nefro: Información personal de usuario

Figura 3-8. Modelo de datos de e-Nefro: Organización del profesional

Como se explicó con anterioridad, cada usuario dispone de un plan de cuidados, formado por actividades, y en

su seguimiento se generan registros e incidencias. Vamos a ver la estructura que sigue la información referente

a una actividad Cita, siendo ésta extensible al resto de actividades.

La información del plan seguido por un usuario se almacena en e_plan. Esta tabla se relaciona con la tabla

e_usuario, explicada anteriormente, y con la tabla e_appointmentactivity, tabla principal de una actividad de

tipo Cita, y donde se almacena la información referente a ella. Común a todas las tablas de actividades, existe

la tabla e_activity, que almacena información común que poseen todas las actividades de un plan. Por último,

los registros que produce la realización de la actividad Cita son almacenados en e_appointmentregistry,

también relacionada con la tabla principal de la Cita. Se pueden ver estas relaciones en la Figura 3-10.

Page 46: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

24

Figura 3-9. Modelo de datos de e-Nefro: Cargo y especialidad del profesional

Figura 3-10. Modelo de datos de e-Nefro: Actividades

La tabla para los registros generados, además de con e_appointmentactivity, se relaciona con otras dos tablas,

e_clinicalregistry, donde se almacena información común a todas las tablas de tipo registros, y

e_clinicalinformation, donde se almacena información clínica como el paciente que ha generado el registro

(Figura 3-11).

Por último, aunque ya se ha visto que las tablas están relacionadas entre sí, hay tablas especificas utilizadas

para relacionar elementos de información y cuyo nombre empieza de la forma e_rel_X.

Page 47: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

25

Es especialmente interesante la tabla e_rel_profmedi (Figura 3-12) pues relaciona a pacientes y profesionales,

haciendo que podamos obtener todos los pacientes que tiene un profesional a su cargo.

Figura 3-11. Modelo de datos de e-Nefro: Registros

Figura 3-12. Modelo de datos de e-Nefro: Relación profesional-paciente

Page 48: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

26

Del mismo modo, la tabla e_rel_espepaci (Figura 3-13) relaciona paciente y cuidador.

Figura 3-13. Modelo de datos de e-Nefro: Relación cuidador-paciente

Con esto, ya tenemos identificada la información existente en la base de datos. En los siguientes apartados,

procederemos al modelado de los objetos de información definidos.

3.2.2.2. Objeto Paciente

En la Tabla 3-1 se muestra el objeto que contiene la información referente a un usuario de tipo paciente. Se

identifican y describen sus atributos y dónde está almacenada cada elemento de información en la base de

datos. También se añade la representación del objeto modelado.

Tabla 3-1. Objeto Paciente

Atributo Relación con BD Descripción Objeto modelado

idPaciente pers_id Identificador del objeto

estado usua_estadousuario Estado del usuario en la

aplicación

numHist pers_numhist Número de historia clínica

del paciente

nombre pers_name Nombre del paciente

primerApellido pers_firstsurname Primer apellido del paciente

segundoApellido pers_secondsurname Segundo apellido del

paciente

tipoDocumento tpid_codigo Tipo de documento que

identifica al paciente

Page 49: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

27

Atributo Relación con BD Descripción Objeto modelado

documento pers_document Documento de

identificación del paciente

sexo pers_sexo Sexo del paciente

fechaNacimiento pers_birthtime Fecha de nacimiento del

paciente

telefono pers_telefono Teléfono del paciente

telecom pers_telcom Correo electrónico del

paciente

direccion pers_address Dirección del paciente

3.2.2.3. Objeto Personal sanitario

Objeto que contiene la información almacenada en base de datos sobre un usuario del tipo Profesional o

Cuidador.

Se emplea una única clase para ambos tipos de usuarios, ya que la información a extraer es la misma, y

posteriormente veremos que FHIR tiene un único recurso definido tanto para profesionales sanitarios, como

para cuidadores particulares, por lo que es más eficiente utilizar una misma clase.

Tabla 3-2. Objeto Personal sanitario

Atributo Relación con BD Descripción Objeto modelado

idSanitario pers_id Identificador del objeto

idOrganizacion orga_id Identificador de la

organización del sanitario

estado usua_estadousuario Estado del usuario en la

aplicación

tipo usua_tipo Tipo de personal sanitario

nombre pers_name Nombre del sanitario

primerApellido pers_firstsurname Primer apellido del sanitario

segundoApellido pers_secondsurname Segundo apellido del

sanitario

tipoDocumento tpid_codigo Tipo de documento que

identifica al sanitario

documento pers_document Documento de

identificación del sanitario

sexo pers_sexo Sexo del profesional

fechaNacimiento pers_birthtime Fecha de nacimiento del

profesional

Page 50: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

28

Atributo Relación con BD Descripción Objeto modelado

telefono pers_telefono Teléfono del profesional

telecom pers_telcom Correo electrónico del

profesional

cargo staf_cargo Cargo que desempeña el

profesional

cargoEspecialidad staf_nombre Especialidad médica del

profesional

3.2.2.4. Objeto Organización

Objeto que contiene la información de base de datos de una organización implicada en la asistencia sanitaria

del paciente.

Tabla 3-3. Objeto Organización

Atributo Relación con BD Descripción Objeto modelado

idOrganizacion orga_id Identificador del objeto

nombre orga_name Nombre de la organización

direccion orga_address Dirección de la organización

telefono orga_telefono Teléfono de la organización

telecom orga_telecom Correo electrónico de la

organización

3.2.2.5. Objeto Cita

Objeto que contiene la información de base de datos relativa a la cita de un paciente con un profesional

sanitario, lo que genera dicho encuentro.

Page 51: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

29

Tabla 3-4. Objeto Cita

Atributo Relación con BD Descripción Objeto modelado

idCita appo_id Identificador del objeto

idPlan appo_id_plan Identificador del plan al que

pertenece la actividad

idPaciente plan_pacienteusuario Identificador del paciente

implicado en la cita

idProfesional appo_id_citadocon Identificador del profesional

implicado en la cita

localizacion acti_location Lugar de la cita

fechaInicio acti_startdate Fecha de inicio de la cita

causa acti_problemaa Razón por la que la cita tiene

lugar

descripcion acti_descripcion Descripción de la cita

obserMed appo_observacionpriv Observaciones médicas

realizadas durante la cita

obserEnf appo_observacionenfe Observaciones de enfermería

realizadas durante la cita

comenPac cric_comentarios Comentarios para el paciente

3.2.2.6. Objeto Actividad Toma de medicamento

Objeto que contiene la información de una actividad de tipo medicación de un paciente.

Page 52: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

30

Tabla 3-5. Objeto Actividad Toma de medicación

Atributo Relación con BD Descripción Objeto modelado

idMedAct mact_id Identificador el objeto

idPlan mact_id_plan Identificador del plan al que

pertenece la actividad

idPaciente plan_pacienteusuario Id del paciente implicado en

la toma de medicación

idPrescriptor acti_creador Id del profesional que

prescribe el medicamento

medicamento reso_codigo Medicamento a tomar

dosis mact_amount Dosis a tomar

unidadMedida mact_unitmeasure Unidad de medida de la

dosis

frecuencia acti_frequency Frecuencia de la toma

dias acti_dias Días que tiene que tomar el

medicamento

cadaDias acti_cadaxdias Cada cuántos días tiene que

tomar el medicamento

cadaHoras acti_cadaxhoras Cada cuántas horas tiene que

tomar el medicamento

relComida acti_relcomidas Relación de la toma con las

comidas

fechaInicio acti_startdate Fecha de inicio del

tratamiento

fechaFin acti_enddate Fecha de fin del tratamiento

causa acti_problemaa Causa de la toma del

medicamento

descripcion acti_description Descripción de la actividad a

realizar

Page 53: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

31

3.2.2.7. Objeto Registro Toma de medicamento

Objeto que contiene la información de un registro de tipo medicación de un paciente.

Tabla 3-6. Objeto Registro Toma de medicación

Atributo Relación con BD Descripción Objeto modelado

idMedReg macr_id Identificador del objeto

idMedAct mact_id Identificador de la actividad de la

que se genera el registro

fechaToma crir_date Fecha de creación del registro

comentario crir_comentarios Comentarios sobre el registro

3.2.2.8. Objeto Actividad Medida de variable

Objeto que contiene la información de una actividad de tipo medida de variable fisiológica de un

paciente.

Tabla 3-7. Objeto Actividad Medida de variable

Atributo Relación con BD Descripción Objeto modelado

idVarAct phya_id Identificador el objeto

idPlan phya_id_plan Identificador del plan al que

pertenece la actividad

idPaciente plan_pacienteusuario Id del paciente implicado en

la actividad

idPrescriptor acti_creador Id del profesional que

prescribe la actividad

variableMedida phys_codigo Variable fisiológica medida

frecuencia acti_frequency Frecuencia de la actividad

dias acti_dias Días que tiene que realizar la

actividad

cadaDias acti_cadaxdias Cada cuántos días tiene que

realizar la actividad

cadaHoras acti_cadaxhoras Cada cuántas horas tiene que

realizar la actividad

Page 54: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

32

Atributo Relación con BD Descripción Objeto modelado

relComida acti_relcomidas Relación de la actividad con

las comidas

fechaInicio acti_startdate Fecha de inicio de realización

de la actividad

fechaFin acti_enddate Fecha de fin de realización

de la actividad

causa acti_problemaa Causa de tener que realizar la

actividad

descripcion acti_description Descripción de la actividad

3.2.2.9. Objeto Registro Medida de variable

Objeto que contiene la información de un registro de tipo medida de variable fisiológica realizada por un

paciente.

Tabla 3-8. Objeto Registro Medida de variable

3.2.2.10. Objeto Actividad Toma de imagen

Objeto que contiene la información de una actividad de tipo toma de imagen de un paciente.

Atributo Relación con BD Descripción Objeto modelado

idVarReg phyr_id Identificador del objeto

idVarAct phya_id Identificador de la actividad de la

que se genera el registro

medida phyr_medida Valor de la medida

fecha crir_date Fecha de creación del registro

comentario crir_comentario Comentarios sobre el registro

Page 55: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

33

Tabla 3-9. Objeto Actividad Toma de imagen

Atributo Relación con BD Descripción Objeto modelado

idImgAct take_id Identificador el objeto

idPlan take_id_plan Identificador del plan al que

pertenece la actividad

idPaciente plan_pacienteusuario Identificador del paciente

implicado en la actividad

idPrescriptor acti_creador Id del profesional que prescribe

la actividad

causa acti_problemaa Causa de tener que realizar la

actividad

dias acti_dias Días que tiene que realizar la

actividad

cadaDias acti_cadaxdias Cada cuántos días tiene que

realizar la actividad

cadaHoras acti_cadaxhoras Cada cuántas horas tiene que

realizar la actividad

fechaInicio acti_startdate Fecha de inicio de realización

de la actividad

fechaFin acti_enddate Fecha de fin de realización de

la actividad

frecuencia acti_frequency Frecuencia de la actividad

descripcion acti_description Descripción de la actividad

3.2.2.11. Objeto Registro Toma de imagen

Objeto que contiene la información de un registro de tipo toma de imagen realizada por un paciente.

Page 56: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

34

Tabla 3-10. Objeto Registro Toma de imagen

Atributo Relación con BD Descripción Objeto modelado

idImgReg takr_id Identificador del objeto

idImgAct take_id Identificador de la actividad de la

que se genera el registro

fecha docu_fechainsercion Fecha de creación del registro

ruta docu_ruta Ruta de la imagen tomada

descripcion takr_picture Descripción de la imagen tomada

comentario crir_comentarios Comentarios sobre el registro

3.2.2.12. Objeto Incidencia

Objeto que contiene la información de una incidencia registrada por un paciente.

Tabla 3-11. Objeto Incidencia

Atributo Relación con BD Descripción Objeto modelado

idIncidencia heal_id Identificador del objeto

idPaciente clin_pacienteusuario Identificador del paciente

que registra la incidencia

fecha crir_date Fecha de registro de la

incidencia

descripcion tinc_descripcion Descripción de la incidencia

recomendacion tinc_recomendacio Recomendación a la

incidencia

comentarios crir_comentario Comentarios sobre la

incidencia

Page 57: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

35

3.2.2.13. Objeto Plan de cuidados

Objeto que contiene la información del plan de cuidados seguido por un paciente.

Tabla 3-12. Objeto Plan de cuidados

Atributo Relación con BD Descripción Objeto modelado

idPlan plan_id Identificador del objeto

idPaciente plan_pacienteusuario Identificador del paciente que

sigue el plan de cuidados

descripcion plan_description Descripción de plan de

cuidados

razon plan_reason Razón de existencia del plan

de cuidados

tiempoDefinido plan_definitiontime Tiempo definido para el plan

de cuidados

estado plan_active Estado del plan de cuidados

3.2.2.14. Objeto Periodo de seguimiento

Objeto que contiene la información del periodo de seguimiento de un paciente.

Tabla 3-13. Objeto Periodo de seguimiento

Atributo Relación con BD Descripción Objeto modelado

idPeriodo peri_id Identificador del objeto

idPaciente peri_id_usuario Identificador del paciente en

seguimiento

fechaInicio peri_startdate Fecha de inicio del periodo de

seguimiento

fechaFin peri_enddate Fecha de fin del periodo de

seguimiento

problema peri_problema Problema que origina el

periodo de seguimiento

resumen peri_resumen Descripción del periodo de

seguimiento

Page 58: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

36

3.2.2.15. Relaciones entre objetos

Figura 3-14. Relaciones entre objetos de información

Los objetos de información se relacionan entre sí mediante los atributos que siguen la nomenclatura idX

(Figura 3-14). Con ellos, es posible obtener el resto de la información necesaria para crear un determinado

recurso, realizando las subconsultas pertinentes.

Por ejemplo, si quisiéramos obtener la información de un profesional sanitario, es necesario, además de su

información personal, incluir a qué organización pertenece, y los datos de ésta. Para ello, construiríamos un

objeto Personal sanitario, y a partir de su atributo idOrganizacion, haríamos una nueva consulta a base de datos

y construiríamos un objeto del tipo Organización. Con ambos objetos, ya tendríamos toda la información

referente al profesional en cuestión, que se modelaría a un recurso FHIR, lo cual se verá en el siguiente

capítulo.

En el siguiente diagrama, vemos las relaciones existentes entre los objetos. Por simplicidad, sólo se han

incluido los atributos ya mencionados utilizados para las relaciones, así como una única clase que engloba a

los tres tipos de actividades y registros.

3.3. Identificación y modelado de los Recursos FHIR

Una vez definidos y modelados los objetos de información, podemos pasar a modelar los recursos FHIR que

utilizará nuestro servicio para enviar la información. Habrá que dar forma a la información contenida en estos

objetos ya definidos, de acuerdo a lo que el estándar propone.

Por ello, el primer paso será hacer un estudio de qué recursos ofrece el estándar [6], viendo cuáles son

interesantes para un sistema de este tipo, así como de sus campos de información, para ver con qué atributos

de nuestros objetos se corresponden, y si es necesario extender dicho recurso.

Tras esto, se pasará a modelar los recursos FHIR que se intercambiarán con el resto de sistemas, indicando los

atributos que contendrá, y el tipo de datos y cardinalidad de éstos.

Page 59: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

37

3.3.1. Identificación de los Recursos FHIR

Para la identificación de los Recursos FHIR que va a implementar nuestro servicio web, se ha realizado un

profundo estudio de la lista de recursos que ofrece la especificación [9], viendo cuáles se ajustan más a los

objetos de información identificados, e intentando evitar las extensiones.

En total, se van a emplear catorce Recursos FHIR, habiendo tenido que extender sólo cuatro de ellos. En la

Tabla 3-14 se pueden ver estos recursos, donde se especifica a qué objeto propio corresponde la información

que contienen, y si han sido extendidos.

Tabla 3-14. Lista de recursos FHIR

Recurso FHIR Objeto de Información Extendido

Patient Paciente No

Practitioner Personal sanitario

Cuidador No

Organization Organización No

Appointment Cita No

Encounter Cita Sí

Location Cita No

MedicationOrder Actividad Toma de medicamento No

MedicationAdministration Registro Toma de medicamento No

ProcedureRequest Actividad Medida de variable

Actividad Toma de imagen Sí

Observation Registro Medida de variable

Registro Toma de imagen No

DetectedIssue Incidencia Sí

CarePlan Plan de cuidados No

EpisodeOfCare Periodo de seguimiento Sí

Condition Plan de cuidados

Periodo de seguimiento No

En el siguiente apartado, se verá cómo se han modelado estos recursos, explicando cuál es su funcionalidad en

FHIR, y qué información van a contener en nuestro caso práctico.

Page 60: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

38

3.3.2. Modelado de los Recursos FHIR

3.3.2.1. Recurso Patient

Este recurso contiene la información relativa a los pacientes que participan en alguna actividad relacionada con

la salud, incluyendo, actividades sanitarias, atención psiquiátrica, servicios sociales, cuidados durante el

embarazo, enfermería y de vivienda asistida, servicios dietéticos, seguimiento de la salud personal y datos de

ejercicios Sus atributos se centran en la información necesaria para apoyar los procedimientos cínicos,

administrativos, financieros y logísticos que tienen lugar en torno al paciente.

En nuestro caso, contiene la información relativa al objeto Paciente, no siendo necesario extender el recurso

para ello.

Tabla 3-15. Recurso Patient

3.3.2.2. Recurso Practitioner

Este recurso engloba a todas las personas que están involucradas en el proceso de cuidado de la salud de un

paciente, como parte de sus actividades y responsabilidades formales. Entre otros roles, contempla ser

utilizado para el personal médico, personal de enfermería y cuidadores.

En nuestro caso, contendrá la información de los objetos Personal sanitario y Cuidador, no siendo necesario

extender el recurso para ello.

Tabla 3-16. Recurso Practitioner

Atributo Tipo de Dato Cardinalidad Descripción

active boolean 0..1 Indica si el profesional sigue activo.

identifier Identifier 0..* Identificador del profesional.

name HumanName 0..* Nombre y apellidos del profesional.

gender code 0..1 Sexo del profesional.

birthDate date 0..1 Fecha de nacimiento del profesional.

telecom ContactPoint 0..* Teléfono/Correo electrónico del profesional.

practitionerRole BackboneElement 0..* Cargo, especialidad y organización del

profesional.

Contiene un recurso del tipo Organization, organización sanitaria a la que pertenece el profesional,

referenciado en el campo managingOrganization

Atributo Tipo de Dato Cardinalidad Descripción

active boolean 0..1 Indica si el registro del paciente sigue activo.

identifier Identifier 0..* Identificador del paciente.

name HumanName 0..* Nombre y apellidos del paciente.

gender code 0..1 Sexo del paciente.

birthDate date 0..1 Fecha de nacimiento del paciente.

telecom ContactPoint 0..* Teléfono/Correo electrónico del paciente.

address Address 0..* Dirección del paciente.

Page 61: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

39

Figura 3-15. Referencias en el recurso Practitioner

3.3.2.3. Recurso Organization

Este recurso contiene la información relativa a las organizaciones que pueden formar parte de la asistencia

sanitaria a un paciente. Por lo general, suele utilizarse contenido en otros recursos.

En nuestro caso, contendrá la información del objeto Organización, sin ser necesario extenderlo, y, como se

ha visto anteriormente, irá contenido dentro del recurso Practitioner.

Tabla 3-17. Recurso Organization

Atributo Tipo de Dato Cardinalidad Descripción

type CodeableConcept 0..1 Tipo de organización.

name string 0..1 Nombre de la organización.

address Address 0..* Dirección de la organización.

telecom ContactPoint 0..* Teléfono/Correo electrónico de la organización.

3.3.2.4. Recurso Appointment

Este recurso contiene la información de la cita de un paciente con un profesional sanitario, conteniendo

información como los participantes implicados (paciente, profesional y localización), cuándo tendrá lugar o

causa de la cita.

En nuestro caso, contiene parte de la información del objeto Cita, pues se excluye la referente a las

observaciones y comentarios realizados durante esta, que irá contenida en un recurso más apropiado, por lo

que no es necesario extenderlo.

Tabla 3-18. Recurso Appointment

Atributo Tipo de Dato Cardinalidad Descripcion

participant BackboneElement 0..* Participantes de la cita: Paciente, Profesionales

y Localización.

start instant 0..1 Instante de comienzo de la cita.

reason CodeableConcept 0..1 Causa de la cita.

description string 0..1 Descripción de la cita.

Así mismo, en este recurso van contenidos un recurso Patient, paciente implicado en la cita, un recurso

Practitioner, profesional con el que está citado el paciente, y un recurso Location, lugar donde ocurre la cita,

ambos referenciados en el campo actor (Figura 3-16).

Page 62: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

40

Figura 3-16. Referencias en el recurso Appointment

3.3.2.5. Recurso Encounter

Este recurso contiene la información del encuentro entre un paciente y un profesional sanitario, conteniendo

información sobre sus participantes, cuándo y dónde tuvo lugar, la razón del encuentro, y las observaciones y

comentarios realizados durante este.

En nuestro caso, contiene la información del objeto Cita, siendo necesario extender tres campos de

información: medicalComment, nursingComment y generalComment; que contendrán las observaciones y

comentarios realizadas por los profesionales durante la cita.

Tabla 3-19. Recurso Encounter

Atributo Tipo de Dato Cardinalidad Descripcion

patient Reference(Patient) 0..1 Paciente que participa en el

encuentro.

participant BackboneElement 0..* Profesional que participa en

el encuentro.

location Reference(Patient) 0..* Lugar del encuentro.

appointment Reference(Appointment) 0..1 Cita que origina el encuentro.

medicalComment string 0..1 Observaciones del

profesional médico.

nursingComment string 0..1 Observaciones de enfermería.

generalComment string 0..1 Comentarios para el paciente.

Así mismo, en este recurso van contenidos un recurso Patient, paciente implicado en el encuentro, un recurso

Practitioner, profesional implicado en el encuentro, un recurso Location, lugar donde ocurre el encuentro, y un

recurso Appointment, cita que origina el encuentro; referenciados en los campos patient, individual, location y

appointment, respectivamente (Figura 3-17).

Page 63: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

41

Figura 3-17. Referencias en el recurso Encounter

3.3.2.6. Recurso Location

Este recurso contiene la información relativa a lugares que pueden formar parte de la asistencia sanitaria a un

paciente. Por lo general, suele utilizarse contenido en otros recursos.

En nuestro caso, contiene parte de la información del objeto Cita, concretamente la localización donde tiene

lugar

Tabla 3-20. Recurso Location

Atributo Tipo de Dato Cardinalidad Descripción

name string 0..1 Nombre de la localización.

3.3.2.7. Recurso MedicationOrder

Este recurso se utiliza para prescribir el suministro de un medicamento al paciente, así como las instrucciones

para su administración (frecuencia, dosis…).

En nuestro caso, contendrá la información del objeto Actividad Toma de medicamento, no siendo necesario

extender el recurso.

Tabla 3-21. Recurso MedicationOrder

Atributo Tipo de Dato Cardinalidad Descripcion

patient Reference(Patient) 0..1 Paciente al que se le prescribe el

medicamento.

prescriber Reference(Patient) 0..1 Prescriptor del medicamento.

medication CodeableConcept 1..1 Medicamento prescrito.

reason CodeableConcept 0..1 Causa de la prescripción.

dosageInstruction BackboneElement 0..* Instrucciones de la toma.

Page 64: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

42

Atributo Tipo de Dato Cardinalidad Descripcion

dateWritten dateTime 0..1 Fecha de comienzo del tratamiento.

dateEnded dateTime 0..1 Fecha de fin del tratamiento.

note string 0..1 Información sobre la prescripción.

Así mismo, en este recurso van contenidos un recurso Patient, paciente que ha de tomar el medicamento, y un

recurso Practitioner, profesional que lo prescribe, en los campos patient y prescriber respectivamente (Figura

3-18).

Figura 3-18. Referencias en el recurso MedicationOrder

3.3.2.8. Recurso MedicationStatement

Este recurso es utilizado para los registros generados por la toma de medicamentos de un paciente. Contiene

información como el medicamento tomado, la fecha de la toma o comentarios sobre ésta.

En nuestro caso, contiene la información relativa al objeto Registro Toma de medicamento, no siendo

necesario extender el recurso.

Tabla 3-22. Recurso MedicationStatement

Atributo Tipo de Dato Cardinalidad Descripcion

status Reference(Patient) 1..1 Estado en el que se encuentra el tratamiento.

patient Reference(Patient) 1..1 Paciente al que se le prescribe el

medicamento.

medication CodeableConcept 1..1 Medicamento a tomar.

effectiveTime dateTime 1..1 Fecha de la toma del medicamento.

note string 0..1 Información sobre la toma.

Así mismo, contiene un recurso Patient, siendo éste el paciente implicado en la toma de medicamento,

referenciado a través del campo patient (Figura 3-19).

Page 65: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

43

Figura 3-19. Referencias en el recurso MedicationStatement

3.3.2.9. Recurso ProcedureRequest

Este recurso se utiliza para la solicitud de realización de alguna actividad que se lleva a cabo con o en un

paciente como parte de su plan de cuidados.

En nuestro caso, contiene la información de los objetos Actividad Medida de variable y Actividad Toma de

imagen, siendo necesario extender un campo frecuency, que contiene la frecuencia con la que esta actividad

debe ser realizada.

Tabla 3-23. Recurso ProcedureRequest

Atributo Tipo de Dato Cardinalidad Descripcion

subject Reference(Patient) 0..1 Paciente sobre el que se realiza la actividad.

orderer Reference(Practitioner) 0..1 Profesional que manda la actividad.

code CodeableConcept 1..1 Tipo de observación

reason CodeableConcept 0..1 Causa de tener que realizar la actividad.

scheduledPeriod Period 0..1 Durante cuánto tiempo se tiene que realizar

la actividad.

notes string 0..1 Descripción de la actividad.

frequency string 1..1 Frecuencia con la que hay que realizar la

actividad.

Así mismo, contiene un recurso Patient, paciente sobre el que se realiza la actividad, y un recurso Practitioner,

el profesional que la prescribió, en los campos subject y orderer (Figura 3-20).

Page 66: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

44

Figura 3-20. Referencias en el recurso ProcedureRequest

3.3.2.10. Recurso Observation

Dentro de este recurso se engloban todos los resultados obtenidos de las actividades realizadas con o sobre el

paciente. Entre ellos, encontramos medidas de signos vitales, datos de laboratorio o imágenes médicas.

En nuestro caso, contiene la información de los objetos Registro Medida de variable y Registro Toma de

imagen, no siendo necesario extenderlo.

Tabla 3-24. Recurso Observation

Atributo Tipo de Dato Cardinalidad Descripcion

status code 1..1 Estado de la actividad

subject Reference(Patient) 0..1 Paciente que realiza la actividad.

code CodeableConcept 1..1 Tipo de observación

effective dateTime 0..1 Momento en el que se realiza la

actividad.

value string

Attachment

1..* Valor de la medida.

Imagen adjunta.

comments string 0..1 Comentarios sobre la realización de

actividad.

Aunque se utiliza el mismo recurso para ambos objetos de información, en el caso de la medida de variable, el

campo value será de tipo string, conteniendo el valor de la medida, mientras que, en la toma de imagen, será

del tipo Attachment, conteniendo la ruta de la imagen tomada.

Así mismo, contiene un recurso Patient, siendo el paciente sobre el que se realizó la actividad y del que se ha

generado el registro, referenciado a través del campo subject (Figura 3-21).

Page 67: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

45

Figura 3-21. Referencias en el recurso Observation

3.3.2.11. Recurso DetectedIssue

Se emplea para indicar un problema o evento anómalo al margen de las actividades que realiza el paciente (por

ejemplo, dolores abdominales, náuseas o fiebre).

En nuestro caso, contiene la información de un objeto Incidencia, siendo necesario extender un campo

comments, para los comentarios realizados en el registro de la incidencia.

Tabla 3-25. Recurso DetectedIssue

Atributos Tipo de Dato Cardinalidad Descripcion

patient Reference(Patient) 0..1 Paciente que registra la incidencia.

date dateTime 0..1 Fecha de registro de la incidencia.

detail string 0..1 Descripción de la incidencia.

mitigation BackboneElement 0..* Momento en el que se realiza la actividad.

comments string 0..1 Comentarios sobre la incidencia.

Contiene un recurso Patient, el paciente que registra la incidencia, referenciado a través del campo patient

(Figura 3-22).

Figura 3-22. Referencias en el recurso DetectedIssue

Page 68: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

46

3.3.2.12. Recurso CarePlan

Este recurso contiene la información del plan de cuidados que sigue un paciente, donde se enmarcan las

actividades que debe realizar para el cuidado de su salud.

En nuestro caso, contiene la información del objeto Plan de cuidados, no siendo necesario extender el

recurso.

Tabla 3-26. Recurso CarePlan

Atributos Tipo de Dato Cardinalidad Descripcion

subject Reference(Patient) 0..1 Paciente que registra la incidencia.

description string 0..1 Descripción del plan de cuidados.

status string 1..1 Estado del plan de cuidados.

period Period 0..1 Duración del plan de cuidados.

addresses Reference(Condition) 0..* Problemas que trata el plan de cuidados.

Contiene un recurso Patient, el paciente que registra la incidencia, y un recurso Condition, problema que trata

de cubrir el plan de cuidados, referenciados en los campos subject y addresses, respectivamente (Figura 3-23).

Figura 3-23. Referencias en el recurso CarePlan

3.3.2.13. Recurso EpisodeOfCare

Contiene información acerca de la asociación de un paciente con un proveedor de atención médica durante un

período de tiempo en el que pueden producirse actividades y encuentros médicos.

En nuestro caso, contiene la información del objeto Periodo de seguimiento, siendo necesario extender un

campo reasonEnded, que indica por qué finalizó dicho periodo de seguimiento.

Page 69: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

47

Tabla 3-27. Recurso EpisodeOfCare

EpisodeOfCare Tipo de Dato Cardinalidad Descripcion

status code 1..1 Estado del periodo de seguimiento.

patient Reference(Patient) 0..1 Paciente que registra la incidencia.

period Period 0..1 Descripción del plan de cuidados.

condition Reference(Condition) 0..* Problemas de salud por el que existe

este periodo de seguimiento.

reasonEnded string 0..1 Causa del fin del periodo de

seguimiento.

Contiene un recurso Patient, el paciente que registra la incidencia, y un recurso Condition, problema que trata

de cubrir el plan de cuidados, referenciados en los campos subject y condition, respectivamente (Figura 3-24).

Figura 3-24. Referencias en el recurso EpisodeOfCare

3.3.2.14. Recurso Condition

Se utiliza para enfermedades o problemas médicos que padece un paciente y que originan que tenga que seguir

un determinado tratamiento o actividades para el cuidado de su salud.

En nuestro caso, contiene parte de la información de los objetos Plan de cuidados y Periodo de seguimiento,

concretamente, la enfermedad que causa que el paciente forme parte de ellos, no siendo necesario extender el

recurso.

Tabla 3-28. Recurso Condition

Condition Tipo de Dato Cardinalidad Descripcion

patient Reference(Patient) 1..1 Paciente que sufre el problema

code CodeableConcept 1..1 Problema de salud.

3.4. Definición de los métodos de acceso a la información

Una vez identificados y modelados los recursos que se van a ofrecer al resto de sistemas, hay que definir los

métodos de los que podrán hacer uso los clientes para acceder a ellos.

Page 70: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

48

3.4.1. Forma de acceso a la información

Como se ha comentado, FHIR se basa en el intercambio de recursos que contienen la información solicitada.

Debido a este enfoque de construir la especificación en torno a estos elementos básicos, es necesario definir los

métodos de acceso a la información para cada recurso de manera independiente. De este modo, el cliente,

formalmente, estará solicitando únicamente un tipo de recurso concreto utilizando los métodos definidos,

recursos contenidos aparte.

Los métodos definidos son operaciones Search, interacción definida por la propia especificación para que los

clientes puedan acceder a recursos siguiendo algún criterio de búsqueda. Esta interacción puede llevarse a cabo

con métodos GET o POST indistintamente [53] (Figura 3-25).

Figura 3-25. Sintaxis GET/POST de la operación Search

Cuando un cliente solicita un determinado recurso, lo que recibe es un recurso de tipo Bundle [54], que

contendrá los recursos que el cliente había solicitado, y con el que podrá trabajar para extraer dicha

información.

3.4.2. Lista de métodos de acceso a los recursos FHIR

En este apartado, se mostrará la lista completa de los métodos con los que contarán los clientes para acceder a

la información, clasificados según el tipo de recurso suministrado, a través de una serie de tablas que

contendrán el nombre del método, una breve descripción, los parámetros de entrada necesarios para la

consulta, la repuesta esperada y los posibles errores.

3.4.2.1. Métodos para el recurso Patient

Contamos con dos métodos para acceder a la información modelada en el recurso Patient, el primero para

solicitar un paciente concreto, y el segundo para solicitar todos los pacientes a cargo de un profesional.

Tabla 3-29. Método para el recurso Patient (I)

Nombre del método findPatientByNUH

Descripción Devuelve el paciente identificado por el número de historia pasado

como parámetro.

Parámetros de entrada NUH (String, obligatorio): Número de historia del paciente.

Respuesta data (XML Object, obligatorio): Contenedor con los recursos

solicitados.

Posibles errores

Límite de tiempo excedido.

Error en el servidor.

Page 71: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

49

Tabla 3-30. Método para el recurso Patient (II)

Nombre del método findPatientByPractitioner

Descripción Devuelve los pacientes a cargo del profesional identificado por el

DNI pasado como parámetro.

Parámetros de entrada DNI (String, obligatorio): Documento Nacional de Identidad del

profesional.

Respuesta data (XML Object, obligatorio): Contenedor con los recursos

solicitados.

Posibles errores Límite de tiempo excedido.

Error en el servidor.

3.4.2.2. Métodos para el recurso Practitioner

Contamos con un método para acceder a la información modelada en el recurso Practitioner, con el que se

obtiene la información del profesional solicitado.

Tabla 3-31. Método para el recurso Practitioner

Nombre del método findPractitionerByID

Descripción Devuelve el profesional identificado con el Documento Nacional de

Identidad pasado como parámetro.

Parámetros de entrada DNI (String, obligatorio): Documento Nacional de Identidad del

profesional.

Respuesta data (XML Object, obligatorio): Contenedor con los recursos

solicitados.

Posibles errores Límite de tiempo excedido.

Error en el servidor.

3.4.2.3. Métodos para el recurso Appointment

Contamos con cuatro métodos para acceder a la información modelada en el recurso Appointment. Con el

primero, se obtienen todas las citas futuras del paciente, mientras que, con el segundo, obtenemos aquellas

comprendidos entre las dos fechas pasadas como parámetros. De manera análoga, tendremos otros dos

métodos para obtener las citas que tiene concertadas un profesional.

Page 72: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

50

Tabla 3-32. Método para el recurso Appointment (I)

Nombre del método findAppointmentByPatient

Descripción Devuelve todas las citas futuras del paciente.

Parámetros de entrada NUH (String, obligatorio): Número de historia del paciente.

Respuesta data (XML Object, obligatorio): Contenedor con los recursos

solicitados.

Posibles errores

Límite de tiempo excedido.

Error en el servidor.

Tabla 3-33. Método para el recurso Appointment (II)

Nombre del método findAppoinmentByPatDate

Descripción Devuelve las citas del paciente comprendidas entre las dos fechas

pasadas como parámetros.

Parámetros de entrada

NUH (String, obligatorio): Número de historia del paciente.

Desde (Date, obligatorio): Fecha desde la que iniciar la búsqueda.

Hasta (Date, obligatorio): Fecha hasta la que parar la búsqueda.

Respuesta data (XML Object, obligatorio): Contenedor con los recursos

solicitados.

Posibles errores

Límite de tiempo excedido.

Error en el servidor.

Tabla 3-34. Método para el recurso Appointment (III)

Nombre del método findAppointmentByPractitioner

Descripción Devuelve todas las citas futuras del profesional.

Parámetros de entrada DNI (String, obligatorio): Documento Nacional de Identidad del

profesional.

Respuesta data (XML Object, obligatorio): Contenedor con los recursos

solicitados.

Posibles errores

Límite de tiempo excedido.

Error en el servidor.

Page 73: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

51

Tabla 3-35. Método para el recurso Appointment (IV)

Nombre del método findAppointmentByPracDate

Descripción Devuelve las citas del profesional, comprendidas entre las dos fechas

pasadas como parámetros.

Parámetros de entrada

DNI (String, obligatorio): Documento Nacional de Identidad del

profesional.

Desde (Date, obligatorio): Fecha desde la que iniciar la búsqueda.

Hasta (Date, obligatorio): Fecha hasta la que parar la búsqueda.

Respuesta data (XML Object, obligatorio): Contenedor con los recursos

solicitados.

Posibles errores

Límite de tiempo excedido.

Error en el servidor.

3.4.2.4. Métodos para el recurso Encounter

Contamos con cuatro métodos para acceder a la información modelada en el recurso Encounter. Con el

primero, se obtienen todos los encuentros que ha realizado el paciente, mientras que, con el segundo,

obtenemos aquellos comprendidos entre las dos fechas pasadas como parámetros. De manera análoga,

tendremos otros dos métodos para obtener los encuentros en los que ha participado un profesional.

Tabla 3-36. Método para el recurso Encounter (I)

Nombre del método findEncounterByPatient

Descripción Devuelve todas las citas del paciente.

Parámetros de entrada NUH (String, obligatorio): Número de historia del paciente.

Respuesta data (XML Object, obligatorio): Contenedor con los recursos

solicitados.

Posibles errores

Límite de tiempo excedido.

Error en el servidor.

Tabla 3-37. Método para el recurso Encounter (II)

Nombre del método findEncounterByPatDate

Descripción Devuelve las citas del paciente comprendidas entre las dos fechas

pasadas como parámetros.

Parámetros de entrada NUH (String, obligatorio): Número de historia del paciente.

Page 74: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

52

Desde (Date, obligatorio): Fecha desde la que iniciar la búsqueda.

Hasta (Date, obligatorio): Fecha hasta la que parar la búsqueda.

Respuesta data (XML Object, obligatorio): Contenedor con los recursos

solicitados.

Posibles errores

Límite de tiempo excedido.

Error en el servidor.

Tabla 3-38. Método para el recurso Encounter (III)

Nombre del método findEncounterByPractitioner

Descripción Devuelve todas las citas del profesional.

Parámetros de entrada DNI (String, obligatorio): Documento Nacional de Identidad del

profesional.

Respuesta data (XML Object, obligatorio): Contenedor con los recursos

solicitados.

Posibles errores Límite de tiempo excedido.

Error en el servidor.

Tabla 3-39. Método para el recurso Encounter (IV)

Nombre del método findEncounterByPracDate

Descripción Devuelve las citas del profesional, comprendidas entre las dos fechas

pasadas como parámetros.

Parámetros de entrada

DNI (String, obligatorio): Documento Nacional de Identidad del

profesional.

Desde (Date, obligatorio): Fecha desde la que iniciar la búsqueda.

Hasta (Date, obligatorio): Fecha hasta la que parar la búsqueda.

Respuesta data (XML Object, obligatorio): Contenedor con los recursos

solicitados.

Posibles errores Límite de tiempo excedido.

Error en el servidor.

Page 75: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

53

3.4.2.5. Métodos para el recurso MedicationOrder

Contamos con dos métodos para acceder a la información modelada en el recurso MedicationOrder. Con el

primero, se obtienen todas las actividades de este tipo del plan actual que sigue un paciente, mientras que, con

el segundo, obtenemos las del plan pasado que pasemos como parámetro.

Tabla 3-40. Método para el recurso MedicationOrder (I)

Nombre del método findMedOrderByNUH

Descripción Devuelve las actividades de toma de medicamento del plan actual del

paciente.

Parámetros de entrada NUH (String, obligatorio): Número de historia del paciente.

Respuesta data (XML Object, obligatorio): Contenedor con los recursos

solicitados.

Posibles errores

Límite de tiempo excedido.

Error en el servidor.

Tabla 3-41. Método para el recurso MedicationOrder (II)

Nombre del método findMedOrderByPlan

Descripción Devuelve las actividades de toma de medicamento del plan pasado

como parámetro.

Parámetros de entrada NUH (String, obligatorio): Número de historia del paciente.

PLAN (String, obligatorio): Identificador del plan del paciente.

Respuesta data (XML Object, obligatorio): Contenedor con los recursos

solicitados.

Posibles errores

Límite de tiempo excedido.

Error en el servidor.

3.4.2.6. Métodos para el recurso MedicationStatement

Contamos con dos métodos para acceder a la información modelada en el recurso MedicationStatement. Con

el primero, se obtienen todos los registros de este tipo registrados por el paciente, mientras que, con el

segundo, obtenemos aquellos comprendidos entre las dos fechas pasadas como parámetros.

Page 76: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

54

Tabla 3-42. Método para el recurso MedicationStatement (I)

Nombre del método findMedStatByNUH

Descripción Devuelve todos los registros de toma de medicamento del paciente.

Parámetros de entrada NUH (String, obligatorio): Número de historia del paciente.

Respuesta data (XML Object, obligatorio): Contenedor con los recursos

solicitados.

Posibles errores

Límite de tiempo excedido.

Error en el servidor.

Tabla 3-43. Método para el recurso MedicationStatement (II)

Nombre del método findMedStatByDate

Descripción Devuelve los registros de toma de medicamento del paciente,

comprendidos entre las dos fechas pasadas como parámetros.

Parámetros de entrada

NUH (String, obligatorio): Número de historia del paciente.

Desde (Date, obligatorio): Fecha desde la que iniciar la búsqueda.

Hasta (Date, obligatorio): Fecha hasta la que parar la búsqueda.

Respuesta data (XML Object, obligatorio): Contenedor con los recursos

solicitados.

Posibles errores

Límite de tiempo excedido.

Error en el servidor.

3.4.2.7. Métodos para el recurso ProcedureRequest

Contamos con dos métodos para acceder a la información modelada en el recurso ProcedureRequest. Con el

primero, se obtienen todas las actividades de medida de variable y toma de imagen del plan actual que sigue un

paciente, mientras que, con el segundo, obtenemos las del plan que pasemos como parámetro.

Tabla 3-44. Método para el recurso ProcedureRequest (I)

Nombre del método findProcReqByNUH

Descripción Devuelve las actividades de medida de variable y toma de imagen del

plan actual del paciente.

Parámetros de entrada NUH (String, obligatorio): Número de historia del paciente.

Respuesta data (XML Object, obligatorio): Contenedor con los recursos

Page 77: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

55

solicitados.

Posibles errores

Límite de tiempo excedido.

Error en el servidor.

Tabla 3-45. Método para el recurso ProcedureRequest (II)

Nombre del método findProcReqByPlan

Descripción Devuelve las actividades de medida de variable y toma de imagen del

plan pasado como parámetro.

Parámetros de entrada

NUH (String, obligatorio): Número de historia del paciente.

PLAN (String, obligatorio): Identificador del plan del paciente.

Respuesta data (XML Object, obligatorio): Contenedor con los recursos

solicitados.

Posibles errores

Límite de tiempo excedido.

Error en el servidor.

3.4.2.7. Métodos para el recurso Observation

Contamos con dos métodos para acceder a la información modelada en el recurso Observation. Con el

primero, se obtienen todos los registros de medida de variable y toma de imagen del paciente, mientras que,

con el segundo, obtenemos aquellos comprendidos entre las dos fechas pasadas como parámetros.

Tabla 3-46. Método para el recurso Observation (I)

Nombre del método findObservationByNUH

Descripción Devuelve todos los registros de medida de variable y toma de imagen

del paciente.

Parámetros de entrada NUH (String, obligatorio): Número de historia del paciente.

Respuesta data (XML Object, obligatorio): Contenedor con los recursos

solicitados.

Posibles errores

Límite de tiempo excedido.

Error en el servidor.

Page 78: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

56

Tabla 3-47. Método para el recurso Observation (II)

Nombre del método findObservationByDate

Descripción Devuelve los registros de medida de variable y toma de imagen del

paciente, comprendidos entre dos fechas.

Parámetros de entrada

NUH (String, obligatorio): Número de historia del paciente.

Desde (Date, obligatorio): Fecha desde la que iniciar la búsqueda.

Hasta (Date, obligatorio): Fecha hasta la que parar la búsqueda.

Respuesta data (XML Object, obligatorio): Contenedor con los recursos

solicitados.

Posibles errores

Límite de tiempo excedido.

Error en el servidor.

3.4.2.8. Métodos para el recurso DetectedIssue

Contamos con dos métodos para acceder a la información modelada en el recurso DetectedIssue. Con el

primero, se obtienen todos los registros de incidencia del paciente, mientras que, con el segundo, obtenemos

aquellos comprendidos entre las dos fechas pasadas como parámetros.

Tabla 3-48. Método para el recurso DetectedIssue (I)

Nombre del método findDetectedIssueByNUH

Descripción Devuelve todos los registros de incidencia del paciente.

Parámetros de entrada NUH (String, obligatorio): Número de historia del paciente.

Respuesta data (XML Object, obligatorio): Contenedor con los recursos

solicitados.

Posibles errores

Límite de tiempo excedido.

Error en el servidor.

Tabla 3-49. Método para el recurso DetectedIssue (II)

Nombre del método findDetectedIssueByDate

Descripción Devuelve los registros de incidencia del paciente, comprendidos entre

las dos fechas pasadas como parámetros.

Parámetros de entrada NUH (String, obligatorio): Número de historia del paciente.

Desde (Date, obligatorio): Fecha desde la que iniciar la búsqueda.

Page 79: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

57

Hasta (Date, obligatorio): Fecha hasta la que parar la búsqueda.

Respuesta data (XML Object, obligatorio): Contenedor con los recursos

solicitados.

Posibles errores

Límite de tiempo excedido.

Error en el servidor.

3.4.2.9. Métodos para el recurso CarePlan

Contamos con un método para acceder a la información modelada en el recurso CarePlan, con el que se

obtiene la información de los planes de cuidados que ha seguido un paciente, incluido el actual.

Tabla 3-50. Método para el recurso CarePlan

Nombre del método findCarePlanByNUH

Descripción Devuelve los planes de cuidado que ha seguido un paciente, incluido

el actual.

Parámetros de entrada NUH (String, obligatorio): Número de historia del paciente

Respuesta data (XML Object, obligatorio): Contenedor con los recursos

solicitados.

Posibles errores

Límite de tiempo excedido.

Error en el servidor.

3.4.2.10. Métodos para el recurso EpisodeOfCare

Contamos con un método para acceder a la información modelada en el recurso EpisodeOfCare, con el que se

obtiene la información de los periodos de seguimiento que han sido establecidos para un paciente, incluido el

actual.

Tabla 3-51 Método para el recurso EpisodeOfCare

Nombre del método findEpisCareByNUH

Descripción Devuelve los periodos de seguimiento que han establecido para el

paciente, incluido el actual.

Parámetros de entrada NUH (String, obligatorio): Número de historia del paciente.

Respuesta data (XML Object, obligatorio): Contenedor con los recursos

solicitados.

Posibles errores

Límite de tiempo excedido.

Error en el servidor.

Page 80: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

58

3.5. Implementación del servicio web

Para cerrar el capítulo, se describirá la implementación del servicio web, partiendo por su diseño, a nivel de

funcionalidad y estructura, e integrando los elementos que se han diseñado en los apartados anteriores. Tras

esto, se pasará a ver los aspectos más importantes de su desarrollo. Por último, se detallarán y expondrán las

pruebas realizadas sobre la implementación.

3.5.1. Diseño del servicio web

Aunque la Figura 1-1 representaba la funcionalidad del servicio web, es interesante completarla con los

elementos que se han ido diseñando en los apartados anteriores (objetos propios, recursos FHIR y métodos de

acceso), para ver qué papel juegan en ésta. Para ello, se ha creado un diagrama de secuencia, que podemos ver

en la Figura 3-26.

Figura 3-26. Diagrama de secuencia de la funcionalidad del servicio web

Los clientes solicitan la información almacenada en la base de datos mediante los métodos de acceso a

recursos, utilizando uno u otro en función de qué información requieran. Cuando el servicio web recibe la

petición, realiza la pertinente consulta a la base de datos de e-Nefro, almacenando la información que recibe en

el objeto propio que corresponda. Por último, se crea el recurso FHIR que se suministrará al cliente, utilizando

para ello la información almacenada en el objeto propio.

El servicio web se ha diseñado buscando una arquitectura modular y adaptable, a fin de que sea cómodo

trabajar con él, así como ser reutilizado para otros sistemas, añadiendo nuevos módulos si fuera necesario. Por

ello, se han agrupado los distintos archivos que forman el proyecto en paquetes funcionales, y organizando

estos en función del tipo de recurso. En la Figura 3-27 se muestra la estructura del servicio web mediante un

diagrama de paquetes.

Page 81: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

59

Figura 3-27. Diagrama de paquetes de la estructura del servicio web

Paquete bean: contiene las clases de los objetos de información de e-Nefro.

Paquete config: contiene la clase de configuración de la web de prueba que suministra la propia API,

que se verá en un apartado posterior.

Paquete model: contiene las clases donde se definen los recursos extendidos de nuestro sistema.

Paquete narrative: contiene los archivos necesarios para generar los elementos narrativos de los

recursos.

Paquete provider: contiene las clases proveedoras de recursos, donde se crean y suministran a los

clientes.

Paquete servlet: contiene la clase en la que se define el servicio web, y se establecen sus proveedores

de recursos y parámetros.

Paquete SQL: contiene las clases para la conexión y consulta a la base de datos de e-Nefro.

Paquete util: contiene clases para la creación de recursos que no se suministran al cliente

directamente, sino que van contenidos en otros que sí.

Todos estos elementos trabajan conjuntamente en la recepción de la petición de información, la obtención de

la información solicitada, y la formación y suministro del recurso correspondiente, como se verá en el

siguiente apartado.

3.5.2. Desarrollo del servicio web

Una vez visto cómo funciona y cómo se estructura el servicio web, podemos pasar a ver cómo se han

desarrollado los principales elementos que lo componen, y de qué forma trabajan conjuntamente para ofrecer

la información al cliente.

En esta primera implementación, se ha incluido todo lo relativo a los recursos Patient, Practitioner,

Appointment, Encounter y Organization, en los que se hace uso de todo lo previamente explicado sobre los

recursos FHIR: extensiones, recursos contenidos y elementos narrativos.

Page 82: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

60

Para poder trabajar con la especificación HL7 FHIR, es necesario incluir en el pom.xml las dependencias de

las librerías HAPI FHIR:

<!-- This dependency includes the core HAPI-FHIR classes -->

<dependency>

<groupId>ca.uhn.hapi.fhir</groupId>

<artifactId>hapi-fhir-base</artifactId>

<version>1.5-SNAPSHOT</version>

</dependency>

<!-- At least one "structures" JAR must also be included -->

<dependency>

<groupId>ca.uhn.hapi.fhir</groupId>

<artifactId>hapi-fhir-structures-dstu2</artifactId>

<version>1.5-SNAPSHOT</version>

</dependency>

<!-- This dependency is used for the "FHIR Tester" web app overlay -->

<dependency>

<groupId>ca.uhn.hapi.fhir</groupId>

<artifactId>hapi-fhir-testpage-overlay</artifactId>

<version>1.5-SNAPSHOT</version>

<type>war</type>

<scope>provided</scope>

</dependency>

<dependency>

<groupId>ca.uhn.hapi.fhir</groupId>

<artifactId>hapi-fhir-testpage-overlay</artifactId>

<version>1.5-SNAPSHOT</version>

<classifier>classes</classifier>

<scope>provided</scope>

</dependency>

El resto de elementos se explicarán agrupados por el paquete funcional en el que están contenidos.

3.5.2.1. Paquete servlet

Contiene la clase ExampleRestfulServlet de donde se define el servicio web (Figura 3-28).

Figura 3-28- Paquete servlet

En primer lugar, en el constructor, se establece la versión de FHIR que se implementa, siendo la actual versión

oficial, DSTU 2:

/**

* Constructor

*/

public ExampleRestfulServlet() {

super(FhirContext.forDstu2()); // Support DSTU2

}

A continuación se definen qué proveedores de recursos se van a implementar en el servicio. En esta primera

implementación tendremos cuatro, para los recursos Patient, Practitioner, Appointment y Encounter:

/*

* Three resource providers are defined. Each one handles a specific

* type of resource.

*/

List<IResourceProvider> providers = new ArrayList<IResourceProvider>();

providers.add(new PatientResourceProvider());

providers.add(new PractitionerResourceProvider());

providers.add(new AppointmentResourceProvider());

providers.add(new EncounterResourceProvider());

setResourceProviders(providers);

Page 83: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

61

También se declaran los generadores de elementos narrativos que implementará nuestro servicio. En nuestro

caso, se implementan el generador narrativo propio que provee la API, en la que únicamente se genera para el

recurso Patient, y un generador propio, en el que hemos definido el elemento narrativo del recurso Practitioner:

/*

* Use a narrative generator. This is a completely optional step,

* but can be useful as it causes HAPI to generate narratives for

* resources which don't otherwise have one.

*/

//Generador narrativo por defecto

INarrativeGenerator narrativeGen = new DefaultThymeleafNarrativeGenerator();

getFhirContext().setNarrativeGenerator(narrativeGen);

//Generador narrativo propio

String propFile = "file:C:/Users/migpedjim/Desktop/hapi-fhir-master/restful-server-

example/src/main/java/enefro/interop/narrative/narratives.properties";

CustomThymeleafNarrativeGenerator myNarrativeGen = new CustomThymeleafNarrativeGenerator(propFile);

getFhirContext().setNarrativeGenerator(myNarrativeGen);

Por último, se establecen una serie de parámetros para que sean más cómodas de leer las respuestas del

servidor:

/*

* This server interceptor causes the server to return nicely

* formatter and coloured responses instead of plain JSON/XML if

* the request is coming from a browser window. It is optional,

* but can be nice for testing.

*/

registerInterceptor(new ResponseHighlighterInterceptor());

/*

* Tells the server to return pretty-printed responses by default

*/

setDefaultPrettyPrint(true);

3.5.2.2. Paquete narrative

Este paquete contiene los archivos necesarios para la implementación del generador narrativo propio (Figura

3-29).

Figura 3-29. Paquete narrative

En narrative.properties se establecen las propiedades del generador. Concretamente, para qué recursos va a

generar su elemento narrativo, y dónde se encuentran estos:

#Recurso Practitioner

practitioner.class=ca.uhn.fhir.model.dstu2.resource.Practitioner

practitioner.narrative=file:C:/Users/migpedjim/Desktop/hapi-fhir-master/restful-server-

example/src/main/java/enefro/interop/narrative/Practitioner.html

En Practitioner.html se define el elemento narrativo que se va a generar. En primer lugar, se implementa la

hoja de estilos narrative.css, donde se define el estilo:

<head>

<link rel="stylesheet" type="text/css" href="narrative.css"/>

</head>

Page 84: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

62

Por último, se definen los elementos que lo componen, indicando qué atributos del recurso contiene y su

estructura HTML:

<div>

<th:block th:if="${not resource.name.empty}">

<div class="hapiHeaderText" th:narrative="${resource.name}"/>

</th:block>

<table class="hapiPropertyTable">

<tbody>

<tr th:if="${not resource.identifier.empty}">

<td>Identifier</td>

<td th:narrative="${resource.identifier[0]}"></td>

</tr>

<tr th:if="${not resource.telecom.empty}">

<td>Teléfono</td>

<td th:narrative="${resource.telecom[0].valueElement}"></td>

</tr>

<tr th:if="${not resource.telecom.empty}">

<td>Email</td>

<td th:narrative="${resource.telecom[1].valueElement}"></td>

</tr>

<tr th:if="${not resource.practitionerRole.empty}">

<td>Cargo</td>

<td th:narrative="${resource.practitionerRole[0].role}"></td>

</tr>

<tr th:if="${not resource.practitionerRole.empty}">

<td>Especialidad</td>

<td th:narrative="${resource.practitionerRole[0].specialty[0]}"></td>

</tr>

<tr th:if="${not resource.practitionerRole.empty}">

<td>Organización</td>

<td

th:narrative="${resource.practitionerRole[0].managingOrganization.resource.nameElement}"></td>

</tr>

</tbody>

</table>

</div>

3.5.2.3. Paquete bean

Este paquete contiene las clases de los objetos propios definidos en el sistema e-Nefro, a los que se mapea la

información extraída de la base de datos (Figura 3-30).

Figura 3-30. Paquete bean

Esta clase contiene los atributos definidos para el objeto al que representa. Por ejemplo, en el caso de la clase

AppointmentBean:

private int idCita;

private int idPlan;

private int idPaciente;

private int idProfesional;

private String localizacion;

private Date fechaInicio;

private String causa;

private String descripcion;

private String obserMed;

private String obserEnf;

private String comenPac;

Page 85: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

63

Y una serie de métodos para obtener dicha información:

//Metodo para obtener el id de la cita

public int getIdCita() {

return idCita;

}

//Metodo para obtener el id interno del paciene implicado

public int getIdPaciente() {

return idPaciente;

}

3.5.2.4. Paquete SQL

Este paquete contiene las clases con los métodos necesarios para realizar las consultas a la base de datos de e-

Nefro (Figura 3-31).

Figura 3-31. Paquete SQL

En primer lugar, se establece el manejador de la base de datos, en este caso implementada con tecnología

postgreSQL:

//Manejador de la base de datos

Class.forName("org.postgresql.Driver");

Antes de realizar la consulta, es necesario conectarse a la base de datos, pasando para ello un usuario con los

permisos necesarios, su contraseña y la URL del servidor de base de datos:

//Parametros y conexión a la bbdd

String usuario = "enefro_owner";

String password = "enefro_owner";

String url = "jdbc:postgresql://gibserv.us.es:4502/enefro";

Connection conexion = DriverManager.getConnection(url, usuario, password);

Una vez conectados, definimos la consulta y la ejecutamos. Esta sería una consulta para obtener la información

de las citas y encuentros de un profesional, dentro de la clase AppointmentSQL.java:

//Consulta a base de datos

String sql = "SELECT * FROM "

+ "((((e_appointmentactivity left join e_appointmentregistry on appo_id=appr_appointmentacti) "

+ "INNER JOIN e_activity ON appo_base_acti = acti_id) INNER JOIN e_plan ON appo_id_plan=plan_id) "

+ "LEFT JOIN e_clinicalregistry ON appr_base_crir=crir_id) WHERE appo_citadocon = (SELECT usua_id "

+ "FROM e_usuario INNER JOIN e_person ON usua_persona=pers_id WHERE pers_document = '"+idPrac+"')";

Statement st = conexion.createStatement();

ResultSet rs = st.executeQuery(sql);

Y pasamos a recorrer el resultado mapeando la información de cada elemento obtenido en el objeto propio

correspondiente. Estos objetos se irán agrupando en una lista que será devuelta por el método:

Page 86: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

64

//Recoremos el resultado de la consulta

while (rs.next())

{

AppointmentBean appointment = new AppointmentBean();

appointment = new AppointmentBean();

appointment.setIdPlan(rs.getInt("appo_id_plan"));

appointment.setIdPaciente(rs.getInt("plan_pacienteusuario"));

appointment.setIdProfesional(rs.getInt("appo_citadocon"));

appointment.setLocalizacion(rs.getString("acti_location"));

appointment.setFechaInicio(rs.getTimestamp("acti_startdate"));

appointment.setCausa(rs.getString("acti_problemaa"));

appointment.setDescripcion(rs.getString("acti_description"));

appointment.setObserMed(rs.getString("appo_observacionpriv"));

appointment.setObserEnf(rs.getString("appo_observacionenfe"));

appointment.setComenPac(rs.getString("crir_comentarios"));

listAppointments.add(appointment);

}

rs.close();

st.close();

conexion.close();

}

catch (Exception e){

e.printStackTrace();

}

return listAppointments;

}

3.5.2.5. Paquete model

Este paquete contiene las clases donde se definen los recursos extendidos (Figura 3-32).

Figura 3-32. Paquete model

En nuestro caso, hemos extendido el recurso Encounter, mediante la clase MyEncounter, para que contenga

la información relativa a las observaciones médicas, observaciones de enfermería y comentarios para el

paciente realizados durante el mismo.

Esta clase es necesario extenderla con el recurso al que está extendiendo, para que cuando se utilice

posteriormente, además de los recursos extendidos, contenga los propios:

@ResourceDef(name = "Encounter")

public class MyEncounter extends Encounter { … }

A continuación, se van definiendo y creando las extensiones, indicando el nombre, su descripción y algunos

parámetros: url (dirección que nos devuelve el recurso StructureDefinition con la información de la estructura

de la extensión), isModifier (si el atributo modifica el significado del recurso que lo contiene) y

definedLocally (si la extensión está definida localmente):

/**

* This is a basic extension, with a DataType value (in this case, StringDt)

*/

//Atributo extendido Observaciones medicas

@Child(name = "obsMedico")

@Description(shortDefinition = "Contiene las observaciones hechas por el profesional médico")

@Extension(url = "localhost:8080/extensión/encounter/obsmed", isModifier = false, definedLocally =

true)

private StringDt myObsMedico;

Y para poder trabajar con estos atributos extendidos del recurso, es necesario crear los métodos Get y Set

correspondientes:

Page 87: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

65

//Obtenemos las observaciones medicas del encuentro

public StringDt getObsMedico() {

return myObsMedico;

}

//Establecemos las observaciones medicas del encuentro

public void setObsMedico(StringDt obsMedico) {

this.myObsMedico = obsMedico;

}

3.5.2.6. Paquete provider

Este paquete contiene los proveedores de recursos, es decir, las clases en las que se forman y suministran los

recursos al cliente (Figura 3.33).

Figura 3-33. Paquete provider

Estas clases tienen una gran importancia en el servicio web, y son de especial complejidad, pues hacen uso de

todos los elementos explicados en la estructura del servicio. Para explicar su funcionamiento, se va a ver el

proveedor EncounteResourceProvider, que hace uso de recursos contenidos y extensiones.

Esta clase implementa la interfaz IResourceProvier, necesaria en todos los proveedores de recursos. Además,

es necesario definir qué tipo de recurso suministra, en nuestro caso MyEncounter, que extiende el recurso

Encounter definido por FHIR:

public class EncounterResourceProvider implements IResourceProvider{

@Override

public Class<? extends IBaseResource> getResourceType() {

return MyEncounter.class;

}

Tras esto, se definen los métodos de acceso al recurso, indicando qué tipo de operación es, a través de un

sistema de etiquetas que implementa la API, en nuestro caso Search. Este método en particular devuelve todos

los encuentros en los que ha participado un profesional en una lista de recursos MyEncounter, pasándole como

parámetro el DNI del profesional:

@Search()

Public List<MyEncounter> findEncounterByPractitioner(@RequiredParam(name=Encounter.SP_PRACTITIONER)

StringParam idPractitioner){

return listaEncounter;

}

Se va a describir cómo funcionan nuestros proveedores de recursos con este método como ejemplo.

En primer lugar, se recupera la información de la base de datos, mediante el método correspondiente de la

clase AppointmentSQL, y se mapea a una lista de AppointmentBean, que recorreremos con un iterador:

//Recuperamos los encuentros de base de datos

LinkedList<AppointmentBean> listaAppointmentsBean =

AppointmentSQL.getAppointmentsByPractitioner(idPractitioner.getValue());

Iterator<AppointmentBean> it = listaAppointmentsBean.iterator();

Page 88: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

66

Es necesario crear la lista de recursos MyEncounter que se suministrará al cliente, en la que iremos incluyendo

los recursos formados:

//Creamos la lista de recursos MyEncounter

List<MyEncounter> listaEncounter = new ArrayList<MyEncounter>();

Dentro de un bucle While, vamos recorriendo la lista de objetos AppointmentBean y formando los recursos

con su información:

//Recorremos la lista de PacientesBean para ir formando los recursos FHIR

while (it.hasNext()) {

AppointmentBean AppointmentActual = (AppointmentBean) it.next();

MyEncounter encounter = new MyEncounter();

… }

Dentro del bucle, se van añadiendo los atributos del recurso con la información correspondiente. Por ejemplo,

para añadir el Id del recurso, campo obligatorio:

//Identificador del recurso

encounter.setId(Long.toString(AppointmentActual.getIdCita()));

Para añadir un recurso contenido, como, por ejemplo, el paciente que participa en el encuentro, utilizamos la

clase PatientUtil, con la que podemos obtener un recurso Patient pasándole el identificador interno

almacenado en el campo idPaciente del objeto Encuentro.

Aunque todo el mecanismo de formación del recurso Patient (consulta a base de datos y mapeo al recurso

FHIR) se podría hacer sin utilizar esta clase externa, es más eficiente la creación de estas clases útiles y

utilizarlas directamente en todos los recursos donde se necesite. Una vez obtenido el recurso, se referencia a

través del atributo patient del recurso Encounter:

//Creamos un recurso Patient y lo incluimos

Patient patient = PatientUtil.findPatientById(AppointmentActual.getIdPaciente());

if(patient!=null){

encounter.getPatient().setResource(patient);

}

Los atributos extendidos se añaden del mismo modo que los propios, ya que hemos definido el recurso

extendido MyAppointment que los implementa:

//Observaciones medicas

StringDt ObsMedico = new StringDt();

ObsMedico.setValueAsString(AppointmentActual.getObserMed());

encounter.setObsMedico(ObsMedico);

//Observaciones de enfermeria

StringDt ObsEnf = new StringDt();

ObsEnf.setValueAsString(AppointmentActual.getObserEnf());

encounter.setObsEnferm(ObsEnf);

//Comentarios para el paciente

StringDt ComPac = new StringDt();

ComPac.setValueAsString(AppointmentActual.getComenPac());

encounter.setComPaciente(ComPac);

Una vez formada la lista de recursos Encounter, tendríamos toda la información solicitada por el cliente.

Page 89: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

67

3.5.3. Validación del servicio web

Una vez visto cómo ha sido desarrollado el servicio web, se van a mostrar las pruebas de funcionamiento más

relevantes realizadas sobre él.

Se han realizado dos bloques de pruebas, el primero desde el módulo web que suministra la propia API para el

testeo del servicio, y el segundo desde un cliente FHIR Android que se ha implementado específicamente para

ello.

Aunque se van a hacer uso de estos clientes para que sean más entendibles los resultados obtenidos, también es

posible realizar peticiones directamente al servidor desde la dirección base http://localhost:8080/restful-

server-example/fhir, establecida en el archivo web.xml:

<servlet-mapping>

<servlet-name>fhirServlet</servlet-name>

<url-pattern>/fhir/*</url-pattern>

</servlet-mapping>

3.5.3.1. Módulo web de testeo

La API implementa un módulo web de testeo, con el que es posible hacer uso, de manera sencilla, de los

proveedores de recursos que soporta nuestro servicio web. Se configura desde la clase FhirTesterConfig

dentro del paquete config (Figura 3-34).

Figura 3-34. Paquete config

Indicando qué servidor se va a testear con el módulo:

TesterConfig retVal = new TesterConfig();

retVal

.addServer()

.withId("home")

.withFhirVersion(FhirVersionEnum.DSTU2)

.withBaseUrl("${serverBase}/fhir")

.withName("Local Tester")

Se accede a ella a través de la dirección http://localhost:8080/restful-server-example/tester/, tal como se

establece en el archivo web.xml:

<servlet-mapping>

<servlet-name>spring</servlet-name>

<url-pattern>/tester/*</url-pattern>

</servlet-mapping>

El módulo provee de una interfaz agradable para realizar las pruebas sobre nuestro servicio. En la página

principal encontramos (Figura 3-35):

1. Información sobre nuestro servicio web: nombre, versión que implementa y dirección base.

2. Las opciones del servicio, donde se puede establecer si queremos la respuesta como XML o JSON

(Encoding) o si queremos que salgan de manera agradable visualmente (pretty).

3. La lista de recursos que provee nuestro servicio, desde la que seleccionar el proveedor que queremos

probar.

Page 90: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

68

Figura 3-35. Módulo de validación: Página principal

Si seleccionamos uno de los recursos desde la lista, por ejemplo, Patient, nos dirige a la página de testeo de

dicho proveedor, en la que podemos ver (Figura 3-36):

1. Información sobre qué recurso se provee.

2. Las operaciones implementadas en el proveedor. En nuestro caso, sólo la operación Search.

3. Los parámetros de búsqueda necesario para que el método del proveedor pueda realizar la búsqueda

de información. En función de qué parámetros se establezcan, estaremos haciendo uso de un método u

otro.

Figura 3-36. Módulo de validación: Página de recurso

Page 91: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

69

Tras establecer los parámetros y pulsar en el botón Search, se realiza la consulta y obtenemos los recursos

solicitados en la siguiente ventana, donde se incluye (Figura 3-37):

1. El tiempo que ha demorado la consulta.

2. El código que habría que implementar en el cliente para realizar la consulta.

3. La petición realizada al servidor.

4. La respuesta obtenida del servidor.

5. El resultado obtenido, en nuestro caso, en XML.

Figura 3-37. Módulo de validación: Página de resultado

3.5.3.2. Pruebas desde el módulo web de testeo

Debido a que algunas respuestas son muy extensas al incluir muchos recursos, se mostrará la respuesta

completa sólo en algunos casos, y se obviará si es redundante.

Acceso a la información del paciente con NUH 625218621

Se provee un recurso Patient cuyo NUH coincide con el que se le pasa como parámetro, en ese caso

625218621.

La petición se realiza mediante un GET, en el que viaja el parámetro de búsqueda que identifica al

paciente. Responde con un HTTP 200 OK, indicando que no ha habido errores durante el proceso (Figura

3-38).

Page 92: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

70

Figura 3-38. Petición/respuesta consulta de un paciente

El bundle contiene sólo una entrada, la correspondiente al recurso del paciente solicitado:

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

<id value="0e2ddd06-47ed-4318-a629-66ff7774b769"/>

<meta>

<lastUpdated value="2016-06-26T12:20:41.704+02:00"/>

</meta>

<type value="searchset"/>

<total value="1"/>

<link>

<relation value="self"/>

<url value="http://localhost:8080/restful-server-example/fhir/Patient?identifier=625218621"/>

</link>

<entry>

<fullUrl value="http://localhost:8080/restful-server-example/fhir/Patient/5"/>

<resource>

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

<id value="5"/>

<text>

<status value="generated"/>

<div xmlns="http://www.w3.org/1999/xhtml">

<div class="hapiHeaderText"> Lucía

<b>PAZ MARTÍNEZ </b>

</div>

<table class="hapiPropertyTable">

<tbody>

<tr>

<td>Identifier</td>

<td>625218621</td>

</tr>

<tr>

<td>Address</td>

<td>

<span>Calle Álava 34 </span>

<br/>

</td>

</tr>

<tr>

<td>Date of birth</td>

<td>

<span>25 abril 1973</span>

</td>

</tr>

</tbody>

</table>

</div>

</text>

<identifier>

<type>

<coding>

<system value="http://hl7.org/fhir/v2/0203"/>

<code value="MR"/>

</coding>

</type>

<value value="625218621"/>

</identifier>

Page 93: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

71

<identifier>

<type>

<text value="3"/>

</type>

<value value="87743365K"/>

</identifier>

<active value="true"/>

<name>

<family value="Paz Martínez"/>

<given value="Lucía"/>

</name>

<telecom>

<system value="phone"/>

<value value="698336655"/>

</telecom>

<telecom>

<system value="email"/>

<value value="[email protected]"/>

</telecom>

<gender value="female"/>

<birthDate value="1973-04-25"/>

<address>

<line value="Calle Álava 34"/>

</address>

</Patient>

</resource>

</entry>

</Bundle>

En la Figura 3-39 vemos el elemento narrativo que se genera junto a este recurso:

Figura 3-39. Elemento narrativo de recurso Patient

Acceso a la información de un paciente inexistente

Se provee un recurso Patient cuyo NUH coincide con el que se le pasa como parámetro, en este caso

inexistente en la base de datos.

La petición se realiza mediante un GET, en el que viaja el parámetro de búsqueda que identifica al paciente,

que para la prueba se ha establecido como ‘PacienteInexistente’. Responde con un HTTP 200 OK, indicando

que no ha habido errores durante el proceso (Figura 3-40).

Page 94: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

72

Figura 3-40. Petición/Respuesta consulta de un paciente inexistete.

El bundle no contiene ninguna entrada, pues no existe ningún paciente con ese NUH:

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

<id value="c63a3718-f572-4d23-8711-42af26dd5dfd"/>

<meta>

<lastUpdated value="2016-06-26T12:41:42.564+02:00"/>

</meta>

<type value="searchset"/>

<total value="0"/>

<link>

<relation value="self"/>

<url value="http://localhost:8080/restful-server-

example/fhir/Patient?identifier=PacienteInexistente"/>

</link>

</Bundle>

Acceso a la información de los pacientes a cargo del profesional con DNI 57722647F

Se provee los recursos Patient de los pacientes que están a cargo del profesional cuyo DNI coincide con el que

se le pasa como parámetro, en ese caso inexistente en este caso 57722647F.

La petición se realiza mediante un GET, en el que viaja el parámetro de búsqueda que identifica al profesional.

Responde con un HTTP 200 OK, indicando que no ha habido errores durante el proceso (Figura 3-41).

Figura 3-41. Petición/Respuesta consulta de pacientes a cargo de un profesional

Page 95: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

73

El bundle contiene tres entradas, correspondientes a tres pacientes que tiene este profesional bajo su cargo. Por

extensión y redundancia no se incluye.

Acceso a la información del profesional con DNI 57722647F

Se provee un recurso Practitioner cuyo DNI coincide con el que se le pasa como parámetro, en ese caso

57722647F.

La petición se realiza mediante un GET, en el que viaja el parámetro de búsqueda que identifica al paciente.

Responde con un HTTP 200 OK, indicando que no ha habido errores durante el proceso (Figura 3-42).

Figura 3-42. Petición/Respuesta consulta de un profesional

El bundle contiene sólo una entrada, la correspondiente al recurso del profesional solicitado:

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

<id value="d670f660-0683-478e-8887-f6629aa2d2d3"/>

<meta>

<lastUpdated value="2016-06-26T12:51:09.573+02:00"/>

</meta>

<type value="searchset"/>

<total value="1"/>

<link>

<relation value="self"/>

<url value="http://localhost:8080/restful-server-example/fhir/Practitioner?identifier=57722647F"/>

</link>

<entry>

<fullUrl value="http://localhost:8080/restful-server-example/fhir/Practitioner/4"/>

<resource>

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

<id value="4"/>

<text>

<status value="generated"/>

<div xmlns="http://www.w3.org/1999/xhtml">

<div class="hapiHeaderText"> Alberto

<b>NÚÑEZ GARCÍA </b>

</div>

<table class="hapiPropertyTable">

<tbody>

<tr>

<td>Identifier</td>

<td>57722647F</td>

</tr>

<tr>

<td>Teléfono</td>

<td>698454545</td>

</tr>

<tr>

<td>Email</td>

<td>[email protected]</td>

</tr>

<tr>

<td>Cargo</td>

Page 96: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

74

<td>MEDICO</td>

</tr>

<tr>

<td>Especialidad</td>

<td>Especialista Nefrología</td>

</tr>

<tr>

<td>Organización</td>

<td>Hospital de prueba</td>

</tr>

</tbody>

</table>

</div>

</text>

<contained>

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

<id value="1"/>

<name value="Hospital de prueba"/>

<telecom>

<system value="phone"/>

<value value="656895262"/>

</telecom>

<telecom>

<system value="email"/>

<value value="[email protected]"/>

</telecom>

<address>

<line value="41092"/>

</address>

</Organization>

</contained>

<identifier>

<type>

<text value="3"/>

</type>

<value value="57722647F"/>

</identifier>

<active value="true"/>

<name>

<family value="Núñez García"/>

<given value="Alberto"/>

</name>

<telecom>

<system value="phone"/>

<value value="698454545"/>

</telecom>

<telecom>

<system value="email"/>

<value value="[email protected]"/>

</telecom>

<gender value="male"/>

<birthDate value="1971-04-09"/>

<practitionerRole>

<managingOrganization>

<reference value="#1"/>

</managingOrganization>

<role>

<text value="MEDICO"/>

</role>

<specialty>

<text value="Especialista Nefrología"/>

</specialty>

</practitionerRole>

</Practitioner>

</resource>

</entry>

</Bundle>

En la Figura 3-43 vemos el elemento narrativo que se genera junto a este recurso.

Page 97: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

75

Figura 3-43. Elemento narrativo de recurso Practitioner

Acceso a la información de un profesional inexistente

Se provee un recurso Practitioner cuyo DNI coincide con el que se le pasa como parámetro, en ese caso

inexistente en la base de datos.

La petición se realiza mediante un GET, en el que viaja el parámetro de búsqueda que identifica al paciente,

que para la prueba se ha establecido como ‘ProfesionalInexistente’. Responde con un HTTP 200 OK,

indicando que no ha habido errores durante el proceso (Figura 3-44).

Figura 3-44. Petición/Respuesta consulta de un profesional inexistente

El bundle no contiene ninguna entrada, pues no existe ningún profesional con ese DNI:

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

<id value="bc0844b2-b286-46e9-9471-6948462f04b3"/>

<meta>

<lastUpdated value="2016-06-28T15:07:08.218+02:00"/>

</meta>

<type value="searchset"/>

<total value="0"/>

<link>

<relation value="self"/>

<url value="http://localhost:8080/restful-server-

example/fhir/Practitioner?identifier=ProfesionalInexistente"/>

</link>

</Bundle>

Page 98: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

76

Acceso a la información de todas las citas del profesional con DNI 57722647F

Se proveen los recursos Appointment de las citas del profesional cuyo DNI coincide con el que se le pasa

como parámetro, en este caso 57722647F.

La petición se realiza mediante un GET, en el que viaja el parámetro de búsqueda que identifica al profesional.

Responde con un HTTP 200 OK, indicando que no ha habido errores durante el proceso (Figura 3-45).

Figura 3-45. Petición/Respuesta consulta de las citas de un profesional

El bundle contiene catorce entradas, correspondientes a las citas del profesional. Por extensión, sólo se incluye

una de ellas.

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

<id value="5a07e44f-454a-4bf3-a102-56c8925aaa69"/>

<meta>

<lastUpdated value="2016-06-26T18:22:56.635+02:00"/>

</meta>

<type value="searchset"/>

<total value="14"/>

<link>

<relation value="self"/>

<url value="http://localhost:8080/restful-server-example/fhir/Appointment?practitioner=57722647F"/>

</link>

<entry>

<fullUrl value="http://localhost:8080/restful-server-example/fhir/Appointment/1"/>

<resource>

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

<id value="1"/>

<contained>

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

<id value="1"/>

<identifier>

<type>

<coding>

<system value="http://hl7.org/fhir/v2/0203"/>

<code value="MR"/>

</coding>

</type>

<value value="625218621"/>

</identifier>

<identifier>

<type>

<text value="3"/>

</type>

<value value="87743365K"/>

</identifier>

<active value="true"/>

<name>

<family value="Paz Martínez"/>

<given value="Lucía"/>

</name>

<telecom>

<system value="phone"/>

<value value="698336655"/>

</telecom>

Page 99: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

77

<telecom>

<system value="email"/>

<value value="[email protected]"/>

</telecom>

<gender value="female"/>

<birthDate value="1973-04-25"/>

<address>

<line value="Calle Álava 34"/>

</address>

</Patient>

</contained>

<contained>

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

<id value="2"/>

<identifier>

<type>

<text value="3"/>

</type>

<value value="57722647F"/>

</identifier>

<active value="true"/>

<name>

<family value="Núñez García"/>

<given value="Alberto"/>

</name>

<telecom>

<system value="phone"/>

<value value="698454545"/>

</telecom>

<telecom>

<system value="email"/>

<value value="[email protected]"/>

</telecom>

<gender value="male"/>

<birthDate value="1971-04-09"/>

<practitionerRole>

<role>

<text value="MEDICO"/>

</role>

<specialty>

<text value="Especialista Nefrología"/>

</specialty>

</practitionerRole>

</Practitioner>

</contained>

<contained>

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

<id value="3"/>

<name value="Sala 4"/>

</Location>

</contained>

<reason>

<text value="DIALISIS"/>

</reason>

<description value="Cita semanal"/>

<start value="2016-04-27"/>

<participant>

<type>

<text value="Paciente"/>

</type>

<actor>

<reference value="#1"/>

</actor>

</participant>

<participant>

<type>

<text value="Profesional sanitario"/>

</type>

<actor>

<reference value="#2"/>

</actor>

</participant>

<participant>

<type>

<text value="Localización"/>

</type>

<actor>

<reference value="#3"/>

</actor>

</participant>

</Appointment>

</resource>

</entry>

Page 100: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

78

Acceso a la información de todos los encuentros del profesional con DNI 57722647F

Se provee los recursos Encounter de los encuentros del profesional cuyo DNI coincide con el que se le pasa

como parámetro, en este caso 57722647F.

La petición se realiza mediante un GET, en el que viaja el parámetro de búsqueda que identifica al profesional.

Responde con un HTTP 200 OK, indicando que no ha habido errores durante el proceso (Figura 3-46).

Figura 3-46. Petición/Respuesta consulta de los encuentros de un profesional

El bundle contiene catorce entradas, correspondientes a los encuentros del profesional. Por extensión, sólo se

incluye uno de ellos.

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

<id value="10e978e6-7fd1-4c2f-b522-5f999320c9e8"/>

<meta>

<lastUpdated value="2016-06-26T18:26:35.650+02:00"/>

</meta>

<type value="searchset"/>

<total value="14"/>

<link>

<relation value="self"/>

<url value="http://localhost:8080/restful-server-example/fhir/Encounter?practitioner=57722647F"/>

</link>

<entry>

<fullUrl value="http://localhost:8080/restful-server-example/fhir/Encounter/4"/>

<resource>

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

<id value="4"/>

<contained>

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

<id value="1"/>

<identifier>

<type>

<coding>

<system value="http://hl7.org/fhir/v2/0203"/>

<code value="MR"/>

</coding>

</type>

</identifier>

<identifier>

<type>

<text value="3"/>

</type>

<value value="42266532F"/>

</identifier>

<active value="true"/>

<name>

<family value="Alvarez Castro"/>

<given value="Juan"/>

</name>

<telecom>

<system value="phone"/>

<value value="625698695"/>

</telecom>

<telecom>

Page 101: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

79

<system value="email"/>

<value value="[email protected]"/>

</telecom>

<gender value="male"/>

<birthDate value="1985-05-08"/>

<address>

<line value="Avenida Colonizadores 23"/>

</address>

</Patient>

</contained>

<contained>

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

<id value="2"/>

<identifier>

<type>

<text value="3"/>

</type>

<value value="57722647F"/>

</identifier>

<active value="true"/>

<name>

<family value="Núñez García"/>

<given value="Alberto"/>

</name>

<telecom>

<system value="phone"/>

<value value="698454545"/>

</telecom>

<telecom>

<system value="email"/>

<value value="[email protected]"/>

</telecom>

<gender value="male"/>

<birthDate value="1971-04-09"/>

<practitionerRole>

<role>

<text value="MEDICO"/>

</role>

<specialty>

<text value="Especialista Nefrología"/>

</specialty>

</practitionerRole>

</Practitioner>

</contained>

<contained>

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

<id value="3"/>

<reason>

<text value="DIALISIS"/>

</reason>

<description value="Cita ordinaria de seguimiento"/>

<start value="2016-05-18"/>

</Appointment>

</contained>

<contained>

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

<id value="4"/>

<name value="Sala 4"/>

</Location>

</contained>

<extension url="ObsMed">

<valueString value="El paciente hace un uso escaso del sistema. Recordarle que las actividades de su

plan de cuidados puede consultarlas en el mismo."/>

</extension>

<patient>

<reference value="#1"/>

</patient>

<participant>

<type>

<text value="Profesional sanitario"/>

</type>

<individual>

<reference value="#2"/>

</individual>

</participant>

<appointment>

<reference value="#3"/>

</appointment>

<location>

<location>

<reference value="#4"/>

</location>

</location>

</Encounter>

</resource>

</entry>

Page 102: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

80

Acceso a método no implementado

Se accede a un método no implementado en ningún proveedor de recursos. Concretamente, a un método para

el recurso Patient al que le estamos pasando como parámetro el identificador del paciente y del profesional a la

vez.

La petición se realiza mediante un GET, en el que viajan ambos parámetros. Responde con un HTTP 400

Petición Incorrecta, indicando esa petición no está implementada (Figura 3-47).

Figura 3-47. Petición/Respuesta acceso a método no implementado

En el contenido del mensaje se representa la causa del error, indicando que el servidor no conoce cómo

manejar una petición GET con esos parámetros:

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

<text>

<status value="generated"/>

<div xmlns="http://www.w3.org/1999/xhtml">

<h1>Operation Outcome</h1>

<table border="0">

<tr>

<td style="font-weight: bold;">error</td>

<td>[]</td>

<td>

<pre>Invalid request: The FHIR endpoint on this server does not know how to handle

GET operation[Patient] with parameters [[careprovider, identifier]]</pre>

</td>

</tr>

</table>

</div>

</text>

<issue>

<severity value="error"/>

<code value="processing"/>

<diagnostics value="Invalid request: The FHIR endpoint on this server does not know how to handle

GET operation[Patient] with parameters [[careprovider, identifier]]"/>

</issue>

</OperationOutcome>

3.5.3.3. Cliente FHIR Android

Por último, se ha desarrollado un cliente FHIR Android para validar el servicio web desde un sistema externo

real. Se escoge este tipo de sistema, por la creciente importancia de las aplicaciones móviles en salud, y en

particular sobre este sistema operativo.

La funcionalidad de la aplicación es muy sencilla, pues el objetivo de esta es únicamente la validación del

servicio. Concretamente, se introduce el DNI de un profesional y, pulsando el botón ‘BUSCAR’, devuelve la

información de los pacientes a su cargo (Figura 3-48).

Page 103: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

81

Figura 3-48. Cliente FHIR Android: Interfaz

Para trabajar con la especificación HL7 FHIR, es necesario añadir al Grandle la dependencia de la librería

HAPI FHIR para Android.

dependencies {

compile (group: 'ca.uhn.hapi.fhir', name: 'hapi-fhir-android', version: '1.5-SNAPSHOT', classifier:

'dstu2') {

exclude module: 'javax.servlet-api'

exclude module: 'hapi-fhir-base'

}

En primer lugar, re realiza la conexión al servidor web, pasando para ello como parámetro su dirección base.

Tras ello, realizamos la consulta pertinente contra este:

try {

FhirContext fc = FhirContext.forDstu2();

//Skip retrieval of conformance statement...

fc.getRestfulClientFactory().setServerValidationMode(ServerValidationModeEnum.NEVER);

IGenericClient gc = fc.newRestfulGenericClient("http://10.0.2.2:8080/restful-server-example/fhir");

//$NON-NLS-1$

return gc.search().forResource(Patient.class)

.where(new StringClientParam("careprovider").matches().value(profesional))

.execute();

} catch (Throwable e) {

Log.e("Err", "Err, handle this better", e);

}

En el caso de que el bundle suministrado no contenga entradas, se muestra un mensaje indicándolo:

if(o.isEmpty()){

Toast.makeText(getApplicationContext(),

"Profesional incorrecto o sin pacientes", Toast.LENGTH_SHORT).show();

}

else {

List<Patient> list = o != null ? o.getResources(Patient.class) : Collections.<Patient>emptyList();

mAdapter.setData(list);

}

Page 104: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

82

Una vez recibido el bundle, se recorren sus recursos y se muestra su contenido en la aplicación, utilizando para

ello su elemento narrativo:

Patient patient = data.get(position);

StringBuilder b = new StringBuilder("NUH/DNI: ");

for (IdentifierDt i : patient.getIdentifier()) {

if (i.isEmpty()) {

continue;

}

b.append(" ").append(i.getValue());

}

holder.header.setText(b.toString().trim());

holder.content.setText(Html.fromHtml(patient.getText().getDiv().getValueAsString()));

3.5.3.4. Pruebas desde el cliente FHIR Android

Acceso a la información de los pacientes a cargo del profesional con DNI 57722647F

Se proveen los recursos Patient de los pacientes que están a cargo del profesional cuyo DNI coincide con el

que se le pasa como parámetro, en ese caso inexistente en este caso 57722647F (Figura 3-49).

Figura 3-49. Cliente FHIR Android: Muestra de los pacientes obtenidos

Page 105: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

83

Acceso a la información de los pacientes a cargo de un profesional inexistente

Se proveen los recursos Patient de los pacientes que están a cargo del profesional cuyo DNI se le pasa como

parámetro, en este caso inexistente en la base de datos (Figura 3-50).

Figura 3-50. Cliente FHIR Android: Notificación de no infomación

Page 106: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales
Page 107: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

85

4 CONCLUSIONES Y LÍNEAS FUTURAS

n este proyecto se ha estudiado la especificación HL7 FHIR para el diseño y desarrollo de un servicio

web que haga accesible la información de un sistema de e-Salud para pacientes crónicos.

Concretamente, este sistema, e-Nefro, da servicio a pacientes renales crónicos, área médica de gran relevancia,

en la que, hasta ahora, no se había planteado el uso de la especificación.

La principal característica de FHIR, es la sencillez y rapidez de implantación de los proyectos de integración,

algo que en nuestro caso ha cumplido con nota. Una vez estudiado el modelo de datos de e-Nefro, y definidos

sus objetos de información, tanto el modelado teórico de esta información a los recursos FHIR, como la

implementación del servicio no ha supuesto gran complejidad.

La especificación HL7 FHIR entra en juego por primera vez a la hora de definir el trasvase de la información

almacenada de manera propia a los recursos definidos por FHIR. En este aspecto, la especificación se adapta

perfectamente a un sistema de las características de e-Nefro, pues de los catorce recursos FHIR que se han

necesitado para modelar toda su información, sólo fueron necesarios extender cuatro de ellos. Esto ocurre

gracias a la manera en la que FHIR define sus recursos, siendo estos conceptos médicos y administrativos

generales, que forman parte de cualquier proceso de atención médica.

Para la implementación del servicio web, se ha empleado una API de código abierto para Java: HAPI FHIR.

La API absorbe el principio con el que fue diseñada la especificación, y se aleja por completo de la

complejidad a la hora de desarrollar con ella. Como idea base, en el servicio se definen una serie de

proveedores de recursos, los cuales se encargan de formarlos y suministrarlos al cliente, de manera que el

desarrollo está enfocado en los recursos, al igual que la propia especificación.

Como aspectos negativos, hay que mencionar la corta vida del estándar, lo que hace que aun esté en fase

borrador y muchos de los recursos ahora definidos pueden verse modificados en posteriores versiones. Más

allá de eso, hay aún muchos frentes abiertos en el desarrollo de HAPI FHIR, concretamente en las extensiones

y elementos narrativos. Actualmente, es necesario que el cliente conozca la definición de la extensión y la

tenga definida como tal, algo que dificulta la integración de sistemas y por lo que se está trabajando en ello

para solventarlo. Así mismo, los elementos narrativos son muy útiles a la hora de visualizar la información de

manera cómoda, pero en la API sólo lo implementa para algunos pocos recursos, por lo que es necesario

definirlos localmente para los que no cuentan con él.

E

“A veces creo que hay vida en otros planetas, y a veces

creo que no. En cualquiera de los dos casos, la

conclusión es asombrosa.”

Carl Sagan

Page 108: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

86

4.1. Líneas futuras

Aunque el objetivo del trabajo ha sido alcanzado, si se quisiera implementar el servicio web en un entorno

real, habría que contemplar una serie de mejoras y ampliaciones:

Inclusión del resto de recursos FHIR. Como se explicó en el apartado de desarrollo del servicio, solo se

implementaron lo relativo a los recursos Patient, Practitioner, Organization, Appointment y Encounter, en

los cuales aparecían los distintos elementos que caracterizan la especificación: extensiones, recursos

contenido y elementos narrativos. Para una implementación real del servicio, sería necesario desarrollar lo

referente a los nueve recursos restantes.

Mecanismos de seguridad. En un servicio que se encarga de ofrecer información, y más aún información

sanitaria, la seguridad es fundamental. En el servicio desarrollado no se han establecido mecanismos de

seguridad, pues lo que se buscaba era estudiar el uso de la especificación en un sistema de las

características de e-Nefro. No obstante, cuando se habló de FHIR en el estado del arte, se mencionaron los

mecanismos de seguridad que propone, y que habría que implementar:

o Comunicaciones cifradas mediante TLS/SSL, por ejemplo, utilizando el protocolo HTTPS.

o Sistemas de identificación y autenticación de usuarios.

o Sistemas de control de acceso a las operaciones del servidor, mediante etiquetas de seguridad.

o Sistemas de generación de logs, con los que conseguir un registro de las acciones llevadas a

cabo en el servidor y detectar intrusos.

o Uso de firmas digitales.

Validación de recursos. Una funcionalidad interesante que define la especificación es la de validar los

recursos. Los recursos pueden ser validados de varias formas: mediante una plantilla XML, usando el

validador que suministra HL7 o en el mismo servicio web mediante la operación validate. Sea de la forma

que sea, sería necesario comprobar que los recursos están correctamente formados antes de enviarlos o

trabajar con ellos.

Page 109: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

87

5 REFERENCIAS

[1] de Nefrología, Sociedad Española. "El libro blanco de la Nefrología española (III)." Nefrología 20.5

(2000): 396-402.

[2] Arrieta, Javier. "Evaluación económica del tratamiento sustitutivo renal (hemodiálisis, diálisis

peritoneal y trasplante) en España." Nefrología 1.Suppl 1 (2010): 37-47.

[3] Montenegro, Jesús, Ricardo Correa-Rotter, and M. Riella. Tratado de diálisis peritoneal. Elsevier,

2009: 81-92.

[4] Calvillo-Arbizu, Jorge, et al. "Aproximación metodológica al diseño de un sistema de teleasistencia

para pacientes en prediálisis y diálisis peritoneal." Nefrología (Madrid) 34.2 (2014): 1-9.

[5] Asuman Dogac, “Interoperability in eHealth Systems” en Proceedings of the VLDB Endowment

Volume 5 Issue 12, August 2012 Pages 2026-2027

[6] HL7.org. HL7 Version 2 Product Suite. [En línea]

http://www.hl7.org/implement/standards/product_brief.cfm?product_id=185. [Último acceso: 20

junio 2016]

[7] HL7.org. HL7 Version 3 Product Suite.

[En línea] https://www.hl7.org/implement/standards/product_brief.cfm?product_id=186. [Último

acceso: 20 junio 2016]

[8] HL7.org. CDA Release 2.

[En línea]http://www.hl7.org/implement/standards/product_brief.cfm?product_id=7. [Último acceso:

20 junio 2016]

[9] HL7.org. FHIR Overview. [En línea] https://www.hl7.org/fhir/overview.html. [Último acceso: 20

junio 2016]

[10] HL7.org. RESTful API. [En línea] https://www.hl7.org/fhir/http.html. [Último acceso: 20 junio 2016]

[11] HL7.org. FHIR Security. [En línea] https://www.hl7.org/fhir/security.html. [Último acceso: 20 junio

2016]

[12] HL7.org. Resource Index. [En línea] https://www.hl7.org/fhir/resourcelist.html. [Último acceso: 20

junio 2016]

[13] HL7.org. Resource. [En línea] https://www.hl7.org/fhir/resource.html. [Último acceso: 20 junio 2016]

[14] HL7.org. Data Types. [En línea] https://www.hl7.org/fhir/datatypes.html. [Último acceso: 20 junio

2016]

[15] HL7.org. Resource References. [En línea] https://www.hl7.org/fhir/references.html. [Último acceso:

20 junio 2016]

[16] HL7.org. Extensibility. [En línea] https://www.hl7.org/fhir/extensibility.html. [Último acceso: 20

junio 2016]

[17] HL7.org. Narrative. [En línea] https://www.hl7.org/fhir/narrative.html. [Último acceso: 20 junio

2016]

[18] No Magic, Inc. MagicDraw. [En línea] http://www.nomagic.com/products/magicdraw.html. [Último

acceso: 20 junio 2016]

Page 110: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

88

[19] Eclipse. Eclipse Mars. [En línea] https://eclipse.org/mars/ [Último acceso: 20 junio 2016]

[20] Spring. Spring Framework. [En línea] https://spring.io/ [Último acceso: 20 junio 2016]

[21] Hibernate.org. Hibernate Framework. [En línea] http://hibernate.org/ [Último acceso: 20 junio 2016]

[22] Apache Maven. Mavej Project. [En línea] https://maven.apache.org/ [Último acceso: 20 junio 2016]

[23] Apache Tomcat. Tomcat 8.0. [En línea] https://tomcat.apache.org/download-80.cgi [Último acceso:

20 junio 2016]

[24] PostgreSQL.org. PostreSQL. [En línea] https://www.postgresql.org/ [Último acceso: 20 junio 2016]

[25] Android Studio. Android Studio and SDK. [En línea] https://developer.android.com/studio/index.html

[Último acceso: 20 junio 2016]

[26] HAPI. HAPI FHIR. [En línea] http://hapifhir.io/ [Último acceso: 20 junio 2016]

[27] Haveman‐Nies, Annemien, Lisette CPGM de Groot, and Wija A. van Staveren. "Dietary quality,

lifestyle factors and healthy ageing in Europe: the SENECA study." Age and ageing 32.4 (2003): 427-

434.

[28] Thomas A. Buchanan and Anny H. Xiang, “Gestational diabetes mellitus” en J Clin Invest.

2005;115(3):485–491.

[29] Duane Bender, “HL7 FHIR: An Agile and RESTful approach to healthcare information exchange” en

Proceedings of the 26th IEEE International Symposium on Computer-Based Medical Systems, 2013

Page(s):326 – 331

[30] Mark L. Braunstein, “Patient — Physician collaboration on FHIR (Fast Healthcare Interoperability

Resources)” en Collaboration Technologies and Systems (CTS), 2015 International Conference.

Pages 501-503

[31] McCallie Jr, David P. "Emerging Clinical Decision Support Technology for the Twenty First

Century." Healthcare Information Management Systems. Springer International Publishing, 2016.

477-491.

[32] Beredimas, Nikolaos, et al. "A reusable ontology for primitive and complex HL7 FHIR data types."

Engineering in Medicine and Biology Society (EMBC), 2015 37th Annual International Conference

of the IEEE. IEEE, 2015.

[33] Luz, Maria Penna, et al. "Providing Full Semantic Interoperability for the Fast Healthcare

Interoperability Resources Schemas with Resource Description Framework." Healthcare Informatics

(ICHI), 2015 International Conference on. IEEE, 2015.

[34] Dong, Xiao, Reza Samavi, and Thodoros Topaloglou. "COC: An Ontology for Capturing Semantics

of Circle of Care." Procedia Computer Science 63 (2015): 589-594.

[35] Cornet, R. "Combining Archetypes with Fast Health Interoperability Resources in Future-proof

Health Information Systems." Digital Healthcare Empowering Europeans: Proceedings of MIE2015

210 (2015): 180.

[36] Franz, Barbara, Andreas Schuler, and O. Kraus. "Applying FHIR in an Integrated Health Monitoring

System." EJBI 11.2 (2015).

[37] Schwartze, Jonas, et al. "An HL7-FHIR-based Object Model for a Home-Centered Data Warehouse

for Ambient Assisted Living Environments." Studies in health technology and informatics 216

(2014): 1060-1060.

[38] Schuler, Andreas, Barbara Franz, and Oliver Krauss. "A Comparison of Data Traffic in Standardized

Personal Health Monitoring Solutions." International Journal of Electronics and Telecommunications

61.2 (2015): 143-149.

[39] Dagale, Haresh, et al. "CyPhyS+: A Reliable and Managed Cyber-Physical System for Old-Age

Home Healthcare over a 6LoWPAN Using Wearable Motes." Services Computing (SCC), 2015 IEEE

International Conference on. IEEE, 2015.

Page 111: Grado en Ingeniería de Tecnologías de Telecomunicaciónbibing.us.es/proyectos/abreproy/90687/fichero/... · Servicio web para el acceso a información sanitaria de pacientes renales

89

[40] Alterovitz, Gil, et al. "SMART on FHIR Genomics: Facilitating standardized clinico-genomic apps."

Journal of the American Medical Informatics Association 22.6 (2015): 1173-1178.

[41] Kimura, E., and K. Ishihara. "Internal domain-specific language based on Arden Syntax and FHIR."

Studies in health technology and informatics 216 (2014): 955-955.

[42] Morrison, James J., et al. "Constructing a Computer-Aided Differential Diagnosis Engine from Open-

Source APIs." Journal of digital imaging (2016): 1-4.

[43] Luz, Maria Penna, et al. "Providing Full Semantic Interoperability for the Fast Healthcare

Interoperability Resources Schemas with Resource Description Framework." Healthcare Informatics

(ICHI), 2015 International Conference on. IEEE, 2015.

[44] Lamprinakos, Georgios C., et al. "Using FHIR to develop a healthcare mobile application." Wireless

Mobile Communication and Healthcare (Mobihealth), 2014 EAI 4th International Conference on.

IEEE, 2014.

[45] Mandel, Joshua C., et al. "SMART on FHIR: a standards-based, interoperable apps platform for

electronic health records." Journal of the American Medical Informatics Association (2016): ocv189.

[46] Pais, Sarita, et al. "Data integration for mobile wellness apps to support treatment of GDM."

Proceedings of the Australasian Computer Science Week Multiconference. ACM, 2016.

[47] Kay, Misha, Jonathan Santos, and Marina Takane. "mHealth: New horizons for health through mobile

technologies." World Health Organization (2011): 66-71.

[48] Kasthurirathne, S. N., et al. "Towards Standardized Patient Data Exchange: Integrating a FHIR Based

API for the Open Medical Record System." Studies in health technology and informatics 216 (2014):

932-932.

[49] Kasthurirathne, Suranga N., et al. "Enabling Better Interoperability for HealthCare: Lessons in

Developing a Standards Based Application Programing Interface for Electronic Medical Record

Systems." Journal of medical systems 39.11 (2015): 1-8.

[50] Mamlin, Burke W., et al. "Cooking up an open source EMR for developing countries: OpenMRS-a

recipe for successful collaboration." AMIA. 2006.

[51] Jawaid, Hira, et al. "Healthcare Data Validation and Conformance Testing Approach Using Rule-

Based Reasoning." Health Information Science. Springer International Publishing, 2015. 241-246.

[52] RINNER, Christoph; DUFTSCHMID, Georg. Bridging the Gap between HL7 CDA and HL7

FHIR: A JSON Based Mapping. En Health Informatics Meets EHealth: Predictive Modeling in

Healthcare–From Prediction to Prevention. Proceedings of the 10th EHealth2016 Conference.

IOS Press, 2016. p. 100.

[53] HL7.org. Search. [En línea] https://www.hl7.org/fhir/search.html. [Último acceso: 20 junio 2016]

[54] HL7.org. Resource Boundle. [En línea] https://www.hl7.org/fhir/bundle.html. [Último acceso: 20

junio 2016]