1. Introduction
Dans cet atelier de programmation, nous allons apprendre à utiliser OHS (Open Health Stack) et l'API Google Cloud Healthcare pour créer des solutions de santé innovantes, sécurisées, évolutives et conformes. La combinaison de ces outils puissants permet aux professionnels de la santé et aux développeurs de créer des solutions basées sur les données qui peuvent améliorer considérablement les soins et les résultats pour les patients.
Nous prévoyons d'exploiter la puissance d'Open Health Stack et de l'API Google Cloud Healthcare dans une application mobile qui utilise le SDK Android-FHIR pour permettre aux utilisateurs de gérer les dossiers patients FHIR dans Google Cloud.
Passons aux étapes d'implémentation.
Ce que vous allez faire
Dans cette implémentation,
- Nous utiliserons la bibliothèque Structured Data Capture pour afficher un questionnaire et la bibliothèque FHIR Engine pour stocker le contenu FHIR de la réponse.
- Les données seront ensuite importées dans le Cloud FHIR Store à l'aide de l'API Cloud Healthcare.
- Avant d'importer le fichier, nous allons d'abord nous authentifier à l'aide de Firebase.

Le diagramme ci-dessus représente le flux. Pour obtenir une explication détaillée de chaque composant, consultez notre blog.
2. Conditions requises
- Un navigateur tel que Chrome ou Firefox
- Un projet Google Cloud avec facturation activée
- Une version récente d'Android Studio
- Un émulateur Android configuré (vous pouvez également utiliser votre appareil Android physique)
Créer votre projet
- Dans la console Google Cloud, sur la page du sélecteur de projet, sélectionnez ou créez un projet Google Cloud.
- Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.
- Activez les API nécessaires (BigQuery, Healthcare API).
Activer Cloud Shell
- Vous allez utiliser Cloud Shell, un environnement de ligne de commande exécuté dans Google Cloud et fourni avec bq :
Dans la console Cloud, cliquez sur "Activer Cloud Shell" en haut à droite :

- Une fois connecté à Cloud Shell, vous êtes en principe authentifié, et le projet est déjà défini avec votre ID de projet. Si votre projet n'est pas défini, utilisez la commande suivante pour le définir :
gcloud config set project <YOUR_PROJECT_ID>
Consultez la documentation pour connaître les commandes gcloud ainsi que leur utilisation.
3. Configurer l'API Healthcare
- Assurez-vous que l'API Healthcare est activée : accédez à la bibliothèque d'API de la console Google Cloud, recherchez l'API Healthcare, cliquez sur "ACTIVER" pour activer l'API et ajouter le compte de service Healthcare au projet.
- Accorder des autorisations d'administrateur BigQuery au compte de service Exécutez la commande gcloud ci-dessous dans le terminal Cloud Shell pour accorder l'autorisation :
gcloud projects add-iam-policy-binding <<YOUR_PROJECT_ID>> \
--member=serviceAccount:service-<<PROJECT_NUMBER>>@gcp-sa-healthcare.iam.gserviceaccount.com --role=roles/bigquery.admin
Remarque : Vous pouvez trouver votre PROJECT_ID et votre PROJECT_NUMBER dans la console. Pour en savoir plus, consultez la documentation.
Créer un ensemble de données Healthcare
Dans Cloud Shell, exécutez la commande ci-dessous pour créer l'ensemble de données Healthcare :
gcloud beta healthcare datasets create <<DATASET_ID>> --location=us-central1
Définissez l'emplacement sur une région.
Créer un FHIR Datastore
Dans Cloud Shell, exécutez la commande ci-dessous pour créer le data store FHIR :
gcloud beta healthcare fhir-stores create <<FHIR_STORE>> \
--dataset=<<DATASET_ID>> --location=us-central1 --version=r4
Définissez l'emplacement sur une région.
4. Configuration et streaming BigQuery
Cela inclut l'enregistrement des données FHIR Store dans un ensemble de données BigQuery afin qu'elles puissent être interrogées, programmées et analysées en exploitant la puissance de BigQuery et de BQML.
Créer un ensemble de données BigQuery
Un ensemble de données BigQuery est une collection de tables. Toutes les tables d'un ensemble de données sont stockées au même emplacement. Vous pouvez également associer des contrôles d'accès personnalisés pour limiter l'accès à un ensemble de données et à ses tables.
Dans Cloud Shell, exécutez la commande ci-dessous :
bq mk --location=us-central1 --dataset <<PROJECT_ID>>:<<BQ_DATASET>>
Définissez l'emplacement sur une région.
Créer un flux BigQuery
Le streaming est nécessaire pour exporter les modifications apportées aux ressources vers BigQuery chaque fois qu'une ressource FHIR est créée, mise à jour, corrigée ou supprimée dans un magasin FHIR. Chaque datastore est autorisé à disposer d'un maximum de 10 configurations de streaming.
- Accédez à la page du navigateur de la console Google Cloud Healthcare.
- Cliquez sur l'ENSEMBLE DE DONNÉES que vous venez de créer.
- Cliquez sur le DATA STORE que vous venez de créer
. - Cliquez sur AJOUTER UNE CONFIGURATION DE STREAMING.

- Sélectionnez l'ensemble de données BigQuery que vous venez de créer dans la liste, le type de schéma "Analytics V2" et le type de ressource "Patient" dans la liste (vous pouvez choisir autant de types de ressources que vous le souhaitez), puis cliquez sur "OK".

Et voilà ! Vous êtes prêt à enregistrer les données du magasin FHIR et à les diffuser vers BigQuery.
5. Cloud Functions (écrire des données R4 dans un datastore FHIR à l'aide de l'API Healthcare)
Cloud Functions vous permet d'écrire facilement votre code et de le déployer dans le cloud sans serveur. Il est évolutif, basé sur le paiement à l'usage et sur les événements, et ouvert en termes de technologie et de langues prises en charge. Pour découvrir d'autres fonctionnalités, consultez la documentation.
La fonction que nous allons écrire vise à authentifier et à écrire les données au format FHIR R4 dans le FHIR Data Store à l'aide de l'API Cloud Healthcare. Pour créer la fonction Cloud :
- Accédez à Functions et cliquez sur CRÉER UNE FONCTION.
- Définissez le nom sur fhir-datastore-proxy, la région sur us-central1 et l'option d'authentification sur "Require Authentication" (Authentification requise).
- Développez les paramètres d'exécution, de compilation, de connexion et de sécurité. Vous allez ajouter cinq variables d'environnement d'exécution :
Nom : CLOUD_FUNCTIONS_ENDPOINT | Valeur : point de terminaison d'URL de la fonction. Vous le verrez dans le bloc "Authentication" (Authentification) ci-dessus. Il se présentera sous la forme https://us-central1-PROJECT_ID.cloudfunctions.net/fhir-datastore-proxy.
Nom : PROJECT_ID | Valeur : ID de votre projet
Nom : DATASET_LOCATION | Valeur : emplacement de votre FHIR Datastore
Nom : DATASET_ID | Valeur : ID du Healthcare Datastore
Nom : FHIR_STORE_ID | Valeur : ID du magasin FHIR
- Appuyez sur "Suivant" pour accéder à la page suivante, où nous ajouterons notre code.
- Un éditeur intégré devrait maintenant s'afficher. Sélectionnez Java 17 comme langage, puis accédez à la classe HelloHttpFunction.java. Renommez-le en FhirDatastoreProxy.java. N'oubliez pas de renommer également le point d'entrée en gcfv2.FhirDatastoreProxy.
- Copiez le code du dépôt et collez-le dans l'éditeur intégré.
- Accédez au fichier pom.xml et copiez le fichier pom du dépôt dans l'éditeur intégré.
- Cliquez sur "DEPLOY" (DÉPLOYER). Votre fonction sera créée et exécutée sous peu.
Remarque :
- L'API Cloud Healthcare utilisée dans cette fonction utilise les identifiants par défaut de l'application pour authentifier les requêtes envoyées à l'API Healthcare.
- Enregistrez l'URL de la fonction déployée pour pouvoir l'appeler depuis l'application Android. Jusqu'à présent, nous avons créé tous les éléments nécessaires pour que l'application Android puisse écrire des données FHIR dans BigQuery à l'aide de l'API Healthcare de manière indépendante. Assurons-nous maintenant que tous les éléments sont connectés et que l'API est appelée lors de l'envoi d'un questionnaire.
6. Configuration du projet Android et de Firebase
Nous allons utiliser une version récente d'Android Studio et un émulateur Android configuré (vous pouvez également utiliser votre appareil Android physique). Une fois fait, procédez comme suit :
- Clonez le dépôt d'exemples d'applications FHIR : https://github.com/google/fhir-app-examples
- Ouvrez Android Studio, sélectionnez "Import Project (Gradle, Eclipse ADT, etc.)" (Importer un projet (Gradle, Eclipse ADT, etc.)), puis choisissez le dossier cloudfunction/ dans le code source que vous avez téléchargé précédemment. Ouvrez app/google-services.json. Il est vide et doit être rempli.
Générez une clé SHA-1 à l'aide de ./gradlew signingReport et notez le champ SHA1 sous la variante de débogage.
Ajoutez l'application à Firebase à l'aide de la console Firebase (suivez les étapes 1 et 2). Dans le champ "SHA-1 du certificat de signature de débogage", saisissez la valeur de l'étape précédente.
Téléchargez google-services.json et remplacez le contenu de Firebase par le fichier vide dans le dossier de l'application.
Le SDK Firebase a déjà été ajouté aux fichiers Gradle de compilation.
- Ouvrez FhirApplication.kt et définissez le champ baseUrl sur l'URL de votre fonction Cloud Functions.
- Sélectionnez "Synchroniser votre projet avec les fichiers Gradle" dans la barre d'outils d'Android Studio.
Nous avons terminé la configuration et l'inclusion des dépendances pour l'implémentation.
7. Configuration et réponse au questionnaire
Nous avons déjà configuré le questionnaire dans le dépôt. Mais examinons le code :
- Assurez-vous que FragmentContainerView est présent dans ConstraintLayout dans le fichier app/src/main/res/layout/activity_main.xml.
- Assurez-vous que QuestionnaireFragment dispose d'un questionnaire FHIR encodé au format JSON pour afficher le fragment.
Dans ce cas, nous utiliserons le fichier JSON new-patient-registration-paginated.json pour afficher le fragment. Vérifiez les fichiers MainActivity.kt, AddPatientFragment.kt et AddPatientViewModel.kt.
Maintenant que nous avons vérifié le fragment, le fichier JSON et le modèle, exécutez l'application et essayez de saisir des réponses aux champs du questionnaire.
Vous remarquerez la validation des champs de chaîne, de date et numériques, ainsi que d'autres conditions.
Vous pouvez exécuter l'application et consulter le journal pour voir l'enregistrement créé.

Pour en savoir plus sur l'utilisation des fragments, cliquez ici. C'est à peu près tout pour la configuration du fragment de questionnaire et de la réponse.
8. Affichage des résultats FHIRStore et de l'ensemble de données BigQuery
Maintenant que la configuration et les mises à jour sont terminées, cliquez sur "Sync Project with Gradle Files" (Synchroniser le projet avec les fichiers Gradle). Une fois l'opération terminée,
- Exécutez l'application sur Android Emulator et regardez votre questionnaire se charger.
- Répondez aux questions et cliquez sur "Envoyer" en haut de la page.
- Le message "Patient saved" (Patient enregistré) doit s'afficher dans l'application.
Afficher le résultat du magasin FHIR
Accédez à la console FHIRViewer de Google Cloud Healthcare.

Sélectionnez votre magasin FHIR, saisissez votre requête, puis cliquez sur "EXÉCUTER LA RECHERCHE". Les résultats de recherche devraient s'afficher juste en dessous. 
Afficher le résultat de l'ensemble de données BigQuery
Accédez à la console Google Cloud BigQuery, puis, dans le volet "Explorateur", accédez à l'ensemble de données que vous avez créé pour ce projet.

Cliquez sur "Aperçu". Vous devriez voir le même nombre et les mêmes données que ceux trouvés dans le magasin FHIR Healthcare dans l'ensemble de données BigQuery.

Vous pouvez désormais effectuer des requêtes BigQuery SQL, Analytics et ML sur les données FHIR que vous venez d'enregistrer dans l'ensemble de données cloud.
9. Recherche et fonctionnalité hors connexion
Pour garantir la fonctionnalité hors connexion sur l'application Android FHIR SDK optimisée par OHS, assurez-vous de suivre les consignes de conception qui doivent être activées dans l'implémentation dont nous parlons ici.
Pour rechercher des ressources FHIR, vous avez deux possibilités :
- Lecteur FHIR dans la console Google Cloud
- Méthode de recherche FHIR à l'aide de requêtes GET ou POST
10. Démonstration de l'application
Maintenant que notre application est développée, jouons avec elle et observons le résultat dans le cloud.
11. Effectuer un nettoyage
Pour éviter que les ressources utilisées dans cet article soient facturées sur votre compte Google Cloud, procédez comme suit :
- Dans la console Google Cloud, accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur "Supprimer".
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur "Arrêter" pour supprimer le projet.
12. Félicitations
Félicitations ! Dans ce projet, nous avons réussi à créer une application Android pour stocker et interroger les données FHIR des patients dans un magasin FHIR Cloud Healthcare et un ensemble de données BigQuery à l'aide de l'API Cloud Healthcare en seulement sept étapes :
- Configurer l'application Android
- Configurer l'API Google Cloud Healthcare
- Ensemble de données et datastore FHIR Healthcare créés
- Ensemble de données BigQuery créé
- Vous avez configuré un flux BigQuery pour écrire les données FHIR Datastore dans un ensemble de données BigQuery.
- Déploiement d'une fonction Cloud pour écrire des données R4 dans FHIR Datastore
- Fonctions Cloud Functions déclenchées à partir de l'application Android lors de l'envoi d'une réponse au questionnaire
Maintenant que les étapes sont claires, n'hésitez pas à les essayer pour la synchronisation de la modification FHIR du patient vers le cloud.