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 Google Cloud Healthcare para crear soluciones innovadoras de atención médica que sean seguras, escalables y cumplan con todas las normas. 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 el cuidado 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 FHIR de los pacientes en Google Cloud.

Analicemos los pasos de implementación.

Qué compilarás

En esta implementación,

  • Usaremos la biblioteca de captura de datos estructurados 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 al almacén de FHIR de Cloud mediante la API de Cloud Healthcare.
  • Antes de subir el archivo, primero nos autenticaremos con Firebase

8514f90f016ecfc0.png

En el diagrama anterior, se 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
  • Una configuración de Android Emulator (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. Habilitar las APIs necesarias (API de BigQuery y Healthcare)

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 se autenticó y que el proyecto ya está configurado 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 para que se active la API y se agregue la cuenta de servicio de Healthcare al proyecto
  2. Otorgando 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 doc para la identificación.

Crear 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 como una región.

Crear almacén de datos 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 como una región.

4. Configuración y transmisión de BigQuery

Esto incluye guardar los datos del almacén de FHIR en el 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 en 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 como una región.

Crea transmisiones de BigQuery

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

  1. Ir 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 DATA STORE 7acaa364337086aa.png creado recientemente.
  4. Haz clic en AGREGAR CONFIGURACIÓN DE TRANSMISIÓN NUEVA.

caa2cc881d3406aa.png

  1. Selecciona el conjunto de datos de BigQuery recién creado de la lista. Tipo de esquema como “Analytics V2” y el tipo de recurso "Patient" de la lista (puedes elegir todos los tipos de recursos) y haz clic en Done.

1e038c694fcca1ef.png

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

5. Cloud Functions (escribe datos de R4 en Datastore de FHIR con la API de Healthcare)

Cloud Functions te permite escribir tu código de forma conveniente y, luego, implementarlo en la nube sin servidores. Es escalable, de pago por uso, se basa en eventos y es abierto en términos de tecnología y compatibilidad de lenguajes. Consulta la documentación para conocer más funciones.

La función que escribiremos tiene como objetivo autenticar y escribir los datos que ingresan en el formato FHIR R4 en el almacén de datos de FHIR mediante la API de Cloud Healthcare. Para crear la Cloud Function, sigue estos pasos:

  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 “Requerir autenticación”.
  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: 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: el ID de tu proyecto

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

Nombre: DATASET_ID | Valor: el ID del almacén de datos de Healthcare

Nombre: FHIR_STORE_ID | Valor: el ID de almacén de FHIR

  1. Presiona Siguiente para ir a la página siguiente, donde agregaremos nuestro código
  2. Debería aparecer un editor directo. Selecciona Java 17 como 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 repositorio en el editor directo.
  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 utiliza la credencial predeterminada 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 piezas necesarias para que la app para Android escriba datos FHIR en BigQuery con la API de Healthcare de forma independiente. Ahora asegurémonos de que todas las piezas estén conectadas y que se invoque la API cuando se envíe un cuestionario.

6. Configuración del proyecto de Android y 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 repositorio 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 anteriormente.Abre app/google-services.json. Está vacía y se debe completar.

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 a través de Firebase console (sigue los pasos 1 y 2) usando Firebase console. En la sección “Certificado de firma SHA-1 de depuración”, , completa el valor del paso anterior

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

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

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

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

7. Configuración y respuesta del cuestionario

Ya tenemos la configuración del cuestionario en el repositorio. Pero repasemos 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 el QuestionnaireFragment tenga un cuestionario FHIR con codificación JSON para renderizar el fragmento

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

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

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

Puedes ejecutar la app y revisar el registro para ver el registro que se creó

9e1bb440074f1a88.png

Puedes obtener más información sobre el uso de fragmentos aquí. Eso es casi todo lo relacionado con el fragmento del cuestionario y la configuración de las respuestas.

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

Ahora que ya está todo listo con la configuración y las actualizaciones, haz clic en "Sync Project with Gradle Files". Una vez completada,

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

Ver 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 una consulta y presiona EJECUTAR BÚSQUEDA. Deberías ver los resultados de la búsqueda justo debajo. 37a070480a06362c.png

Ver el resultado del conjunto de datos de BigQuery

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

8c483ec6d578b8cd.png

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

faafeae4a837a41c.png

Ahora puedes ejecutar BigQuery SQL, Analytics y AA en los datos FHIR que acabas de guardar en el conjunto de datos en la nube.

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

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

Para buscar recursos de FHIR, tenemos dos maneras de hacerlo:

  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 desarrollamos nuestra app, 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 con éxito una aplicación para Android para almacenar y consultar datos FHIR de pacientes en el almacén de FHIR de atención médica en la nube y un 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. Conjunto de datos de atención médica y almacén de datos FHIR creado
  4. Conjunto de datos de BigQuery creado
  5. Configurar una transmisión de BigQuery para escribir datos de FHIR Datastore en un conjunto de datos de BigQuery
  6. Implementaste una Cloud Function para escribir datos de R4 en el almacén de datos de FHIR
  7. Se activó Cloud Functions desde la app para Android al enviar la respuesta al cuestionario

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