Administra datos de FHIR desde una app para Android con OHS y Google Cloud

1. Introducción

En este codelab, aprenderemos a usar OHS (Open Health Stack) y la API de Cloud Healthcare de Google Cloud para crear soluciones innovadoras para el cuidado de la salud que sean seguras, escalables y compatibles. La combinación de estas potentes herramientas brinda a los trabajadores de la salud y a los desarrolladores la capacidad de crear soluciones basadas en datos que pueden mejorar significativamente la atención y los resultados de los pacientes.

Tenemos la intención de aprovechar la potencia de Open Health Stack y la API de Google Cloud Healthcare en una app para dispositivos móviles que usa el SDK de Android-FHIR para permitir que los usuarios administren los registros de pacientes de FHIR en Google Cloud.

Veamos los pasos de implementación.

Qué compilarás

En esta implementación,

  • Usaremos la biblioteca de Structured Data Capture para renderizar un cuestionario y la biblioteca de FHIR Engine para almacenar el contenido de FHIR de la respuesta.
  • Luego, los datos se subirán a Cloud FHIR Store con la API de Cloud Healthcare.
  • Antes de subir el archivo, primero nos autenticaremos con Firebase.

8514f90f016ecfc0.png

El diagrama anterior representa el flujo. Lee el blog para obtener una explicación detallada de cada componente.

2. Requisitos

  • Un navegador, como Chrome o Firefox.
  • Un proyecto de Google Cloud con la facturación habilitada.
  • Una versión reciente de Android Studio
  • Un Android Emulator configurado (también puedes usar tu dispositivo Android físico)

Crea tu proyecto

  1. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
  2. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.
  3. Habilita las APIs necesarias (BigQuery y Healthcare API)

Activa Cloud Shell

  1. Usarás Cloud Shell, un entorno de línea de comandos que se ejecuta en Google Cloud y que viene precargado con bq:

En la consola de Cloud, haz clic en Activar Cloud Shell en la esquina superior derecha:

51622c00acec2fa.png

  1. Una vez que te conectes a Cloud Shell, deberías ver que ya te autenticaste y que el proyecto ya se configuró con tu ID del proyecto. Si tu proyecto no está configurado, usa el siguiente comando para configurarlo:
gcloud config set project <YOUR_PROJECT_ID>

Consulta la documentación para ver los comandos y el uso de gcloud.

3. Configuración de la API de Healthcare

  1. Asegúrate de que la API de Healthcare esté habilitada: Ve a la biblioteca de APIs de la consola de Google Cloud, busca la API de Healthcare, haz clic en HABILITAR y se habilitará la API y se agregará la cuenta de servicio de Healthcare al proyecto.
  2. Otorga permisos de administrador de BigQuery a la cuenta de servicio. Ejecuta el siguiente comando de gcloud en la terminal de Cloud Shell para otorgar permiso:
gcloud projects add-iam-policy-binding <<YOUR_PROJECT_ID>> \
--member=serviceAccount:service-<<PROJECT_NUMBER>>@gcp-sa-healthcare.iam.gserviceaccount.com  --role=roles/bigquery.admin

Nota: Puedes encontrar tu PROJECT_ID y PROJECT_NUMBER en la consola. Consulta el documento para obtener información sobre la identificación.

Crea un conjunto de datos de atención médica

En Cloud Shell, ejecuta el siguiente comando para crear el conjunto de datos de Healthcare:

gcloud beta healthcare datasets create <<DATASET_ID>> --location=us-central1

Establece la ubicación en una región.

Crea un almacén de datos de FHIR

En Cloud Shell, ejecuta el siguiente comando para crear el almacén de datos de FHIR:

gcloud beta healthcare fhir-stores create <<FHIR_STORE>> \
  --dataset=<<DATASET_ID>> --location=us-central1 --version=r4

Establece la ubicación en una región.

4. Configuración y transmisión de BigQuery

En este instructivo, se explica cómo guardar datos de FHIR Store en un conjunto de datos de BigQuery para que se puedan consultar, programar y analizar aprovechando la potencia de BigQuery y BQML.

Crea un conjunto de datos de BigQuery

Un conjunto de datos de BigQuery es una colección de tablas. Todas las tablas de un conjunto de datos se almacenan en la misma ubicación de datos. También puedes adjuntar controles de acceso personalizados para limitar el acceso a un conjunto de datos y sus tablas.

En Cloud Shell, ejecuta el siguiente comando:

bq mk --location=us-central1 --dataset <<PROJECT_ID>>:<<BQ_DATASET>>

Establece la ubicación en una región.

Crea una transmisión de BigQuery

Se requiere la transmisión para exportar los cambios de recursos a BigQuery cada vez que se crea, actualiza o borra un recurso de FHIR, o se aplican parches a uno, en un almacén de FHIR. Cada almacén puede tener hasta 10 parámetros de configuración de la transmisión.

  1. Ve a la página del navegador de la consola de Google Cloud Healthcare.
  2. Haz clic en el CONJUNTO DE DATOS recién creado.
  3. Haz clic en el ALMACÉN DE DATOS recién creado 7acaa364337086aa.png.
  4. Haz clic en AGREGAR NUEVA CONFIGURACIÓN DE TRANSMISIÓN.

caa2cc881d3406aa.png

  1. Selecciona el conjunto de datos de BigQuery recién creado en la lista, el tipo de esquema como "Analytics V2" y el tipo de recurso "Paciente" en la lista (puedes elegir tantos tipos de recursos como quieras) y haz clic en Listo.

1e038c694fcca1ef.png

Eso es todo. Ya tienes todo listo para guardar los datos del almacén de FHIR y transmitirlos a BigQuery.

5. Cloud Functions (escribe datos de R4 en el almacén de datos de FHIR con la API de Healthcare)

Cloud Functions te permite escribir tu código y realizar la implementación en la nube de manera conveniente y sin servidores. Es escalable, de pago por uso, controlado por eventos y abierto en términos de tecnología y compatibilidad con idiomas. Consulta la documentación para conocer más funciones.

La función que escribiremos tiene como objetivo autenticar y escribir datos que llegan en formato FHIR R4 en el almacén de datos de FHIR con la API de Cloud Healthcare. Para crear la Cloud Function, haz lo siguiente:

  1. Ve a Cloud Functions y haz clic en CREAR FUNCIÓN.
  2. Establece el nombre en fhir-datastore-proxy, la región en us-central1 y la opción de autenticación en "Require Authentication".
  3. Expande la configuración del entorno de ejecución, la compilación, las conexiones y la seguridad. Agregarás cinco variables de entorno de ejecución:

Nombre: CLOUD_FUNCTIONS_ENDPOINT | Valor: Es el extremo de URL de la función. Lo verás en el bloque de autenticación anterior y tendrá el siguiente formato: https://us-central1-PROJECT_ID.cloudfunctions.net/fhir-datastore-proxy

Nombre: PROJECT_ID | Valor: Tu ID del proyecto

Nombre: DATASET_LOCATION | Valor: la ubicación de tu almacén de FHIR

Nombre: DATASET_ID | Valor: ID de Healthcare Datastore

Nombre: FHIR_STORE_ID | Valor: El ID del almacén de FHIR

  1. Presiona Siguiente para ir a la siguiente página, en la que agregaremos nuestro código.
  2. Ahora debería mostrarse un editor intercalado. Selecciona Java 17 como el lenguaje y ve a la clase HelloHttpFunction.java. Cámbiale el nombre a FhirDatastoreProxy.java. No olvides cambiar el nombre del punto de entrada a gcfv2.FhirDatastoreProxy.
  3. Copia el código del repositorio y pégalo en el editor directo.
  4. Ve al archivo pom.xml y copia el archivo pom del repo en el editor intercalado.
  5. Haz clic en IMPLEMENTAR, y tu función se creará y ejecutará pronto

Nota:

  1. La API de Cloud Healthcare que se usa en esta función usa las credenciales predeterminadas de la aplicación para autenticar las solicitudes que llegan a la API de Healthcare.
  2. Guarda la URL de la función implementada para poder invocarla desde la aplicación para Android. Hasta ahora, creamos todas las partes necesarias para que la app para Android escriba datos de FHIR en BigQuery de forma independiente con la API de Healthcare. Ahora, asegúrate de que todas las partes estén conectadas y de que se invoque la API cuando se envíe un cuestionario.

6. Configuración del proyecto de Android y de Firebase

Usaremos una versión reciente de Android Studio y un emulador de Android configurado (también puedes usar tu dispositivo Android físico). Cuando esté listo, sigue estos pasos:

  1. Clona el repo de ejemplos de apps de FHIR: https://github.com/google/fhir-app-examples
  2. Abre Android Studio, selecciona Import Project (Gradle, Eclipse ADT, etc.) y elige la carpeta cloudfunction/ del código fuente que descargaste antes.Abre app/google-services.json. Está vacío y debe completarse.

Genera una clave SHA-1 con ./gradlew signingReport y toma nota del campo SHA1 en la variante de depuración.

Agrega la app a Firebase con Firebase console (sigue los pasos 1 y 2). En el campo "Certificado de firma de depuración SHA-1 ", completa el valor del paso anterior.

Descarga google-services.json y reemplaza el contenido de Firebase en el archivo vacío de la carpeta de la app.

El SDK de Firebase ya se agregó a los archivos Gradle de compilación.

  1. Abre FhirApplication.kt y configura el campo baseUrl en la URL de tu Cloud Function.
  2. Selecciona "Sync your project with Gradle files" en la barra de herramientas de Android Studio.

Ya completamos la configuración y la inclusión de dependencias de la implementación.

7. Configuración y respuesta del cuestionario

Ya configuramos el cuestionario en el repositorio. Pero revisemos el código:

  1. Asegúrate de que FragmentContainerView esté presente dentro de ConstraintLayout en el archivo app/src/main/res/layout/activity_main.xml.
  2. Asegúrate de que QuestionnaireFragment tenga un cuestionario de FHIR codificado en JSON para renderizar el fragmento.

En este caso, usaremos el archivo json " new-patient-registration-paginated.json" para renderizar el fragmento. Verifica los archivos MainActivity.kt, AddPatientFragment.kt y AddPatientViewModel.kt.

Ahora que verificamos el fragmento, el archivo JSON y el modelo, ejecuta la app y prueba ingresar respuestas para los campos del cuestionario.

Notarás la validación de campos de cadena, fecha y numéricos, y otras condiciones.

Puedes ejecutar la app y consultar el registro para ver el registro creado.

9e1bb440074f1a88.png

Puedes obtener más información para usar fragmentos aquí. Eso es todo en cuanto a la configuración del fragmento y la respuesta del cuestionario.

8. Visualización de resultados de FHIRStore y del conjunto de datos de BigQuery

Ahora que ya configuramos todo y realizamos las actualizaciones, haz clic en "Sync Project with Gradle Files". Una vez que se complete,

  1. Ejecuta la app en Android Emulator y observa cómo se carga el cuestionario
  2. Responde las preguntas y haz clic en Enviar en la parte superior.
  3. Deberías ver el mensaje "Se guardó el paciente" en la app.

Ver el resultado del almacén de FHIR

Navega a la consola de FHIRViewer de Google Cloud Healthcare.

1064f03b4e1e45f5.png

Selecciona tu almacén de FHIR, realiza la consulta y presiona EJECUTAR BÚSQUEDA. Deberías ver los resultados de la búsqueda justo debajo. 37a070480a06362c.png

Cómo ver el resultado del conjunto de datos de BigQuery

Navega a la consola de BigQuery de Google Cloud y, en el panel Explorador, ve al conjunto de datos que creaste para este proyecto.

7c483ec6d578b8cd.png

Haz clic en Vista previa y deberías ver la misma cantidad y los mismos datos resultantes que encontraste en el almacén de FHIR de Healthcare en el conjunto de datos de BigQuery.

faafeae4a837a41c.png

Ahora puedes realizar operaciones de BigQuery SQL, Analytics y ML en los datos de FHIR que acabas de guardar en el conjunto de datos de Cloud.

9. Funciones de búsqueda y sin conexión

Para garantizar la capacidad sin conexión en la app del SDK de FHIR de Android con tecnología de OHS, asegúrate de seguir el lineamiento de diseño que debe habilitarse en la implementación que analizamos aquí.

Para buscar recursos de FHIR, tenemos dos formas:

  1. Visualizador de FHIR en la consola de Google Cloud
  2. Método de búsqueda de FHIR con solicitudes GET o POST

10. Demostración de la app

Ahora que nuestra app está desarrollada, juguemos con ella y veamos el resultado en la nube.

11. Limpia

Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en esta publicación:

  1. En la consola de Google Cloud, ve a la página Administrar recursos.
  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrarlo.

12. ¡Felicitaciones!

¡Felicitaciones! En este proyecto, creamos correctamente una aplicación para Android para almacenar datos de pacientes de FHIR y realizar consultas sobre ellos en el almacén de FHIR de Cloud Healthcare y el conjunto de datos de BigQuery con la API de Cloud Healthcare en solo 7 pasos:

  1. Configura la app para Android
  2. Configura la API de Google Cloud Healthcare
  3. Se crearon el conjunto de datos de Healthcare y el almacén de datos de FHIR
  4. Conjunto de datos de BigQuery creado
  5. Se configuró una transmisión de BigQuery para escribir datos de FHIR Datastore en el conjunto de datos de BigQuery
  6. Se implementó una Cloud Function para escribir datos de R4 en el almacén de datos de FHIR
  7. Cloud Functions activadas desde la app para Android cuando se envía la respuesta del cuestionario

Ahora que los pasos son claros, puedes probar los mismos pasos para la sincronización de la edición de FHIR del paciente con la nube.