1. Introduzione
In questo codelab impareremo a utilizzare OHS (Open Health Stack) e l'API Cloud Healthcare di Google Cloud per creare soluzioni sanitarie innovative, sicure, scalabili e conformi. La combinazione di questi potenti strumenti offre a operatori sanitari e sviluppatori la possibilità di creare soluzioni basate sui dati che possono migliorare significativamente la cura e gli esiti dei pazienti.
Intendiamo sfruttare la potenza di Open Health Stack e dell'API Cloud Healthcare di Google in un'app mobile che utilizza l'SDK Android-FHIR per consentire agli utenti di gestire le cartelle cliniche FHIR in Google Cloud.
Vediamo i passaggi di implementazione.
Cosa creerai
In questa implementazione,
- Utilizzeremo la libreria Structured Data Capture per eseguire il rendering di un questionario e la libreria FHIR Engine per archiviare i contenuti FHIR della risposta.
- I dati verranno poi caricati nel Cloud FHIR Store utilizzando l'API Cloud Healthcare
- Prima del caricamento, ci autenticheremo utilizzando Firebase

Il diagramma sopra rappresenta il flusso. Leggi il blog per una spiegazione dettagliata di ogni componente.
2. Requisiti
- Un browser, ad esempio Chrome o Firefox
- Un progetto cloud Google Cloud con la fatturazione abilitata
- Una versione recente di Android Studio
- Un emulatore Android configurato (puoi utilizzare anche il tuo dispositivo Android fisico)
Creare il progetto
- Nella console Google Cloud, nella pagina di selezione del progetto, seleziona o crea un progetto Google Cloud.
- Verifica che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata per un progetto.
- Abilita le API necessarie (BigQuery, API Healthcare)
Attiva Cloud Shell
- Utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione in Google Cloud precaricato con bq:
Nella console Cloud, fai clic su Attiva Cloud Shell nell'angolo in alto a destra:

- Una volta eseguita la connessione a Cloud Shell, dovresti vedere che il tuo account è già autenticato e il progetto è già impostato sul tuo ID progetto. Se il progetto non è impostato, utilizza il seguente comando per impostarlo:
gcloud config set project <YOUR_PROJECT_ID>
Consulta la documentazione per i comandi e l'utilizzo di gcloud.
3. Configurazione dell'API Healthcare
- Assicurati che l'API Healthcare sia abilitata: vai alla libreria API di console Google Cloud, cerca l'API Healthcare, fai clic su ABILITA e l'API verrà abilitata e l'account di servizio Healthcare verrà aggiunto al progetto
- Concedi le autorizzazioni di amministratore BigQuery al service account. Esegui il comando gcloud riportato di seguito nel terminale Cloud Shell per concedere l'autorizzazione:
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: puoi trovare PROJECT_ID e PROJECT_NUMBER nella console. Per l'identificazione, consulta la documentazione.
Crea un set di dati sanitari
In Cloud Shell, esegui il comando seguente per creare il set di dati sanitari:
gcloud beta healthcare datasets create <<DATASET_ID>> --location=us-central1
Imposta la località su una regione.
Crea datastore FHIR
In Cloud Shell, esegui il comando seguente per creare il datastore FHIR:
gcloud beta healthcare fhir-stores create <<FHIR_STORE>> \
--dataset=<<DATASET_ID>> --location=us-central1 --version=r4
Imposta la località su una regione.
4. Configurazione e streaming di BigQuery
Ciò include il salvataggio dei dati di FHIR Store nel set di dati BigQuery in modo che possano essere sottoposti a query, programmati e analizzati sfruttando la potenza di BigQuery e BQML.
Crea un set di dati BigQuery
Un set di dati BigQuery è una raccolta di tabelle. Tutte le tabelle di un set di dati vengono archiviate nella stessa posizione dei dati. Puoi anche allegare controlli dell'accesso personalizzati per limitare l'accesso a un set di dati e alle relative tabelle.
In Cloud Shell, esegui questo comando:
bq mk --location=us-central1 --dataset <<PROJECT_ID>>:<<BQ_DATASET>>
Imposta la località su una regione.
Crea BigQuery Streaming
Lo streaming è necessario per esportare le modifiche alle risorse in BigQuery ogni volta che una risorsa FHIR viene creata, aggiornata, sottoposta a patch o eliminata in un datastore FHIR. Ogni archivio può avere fino a 10 configurazioni dei flussi di dati.
- Vai alla pagina Browser della console Google Cloud Healthcare.
- Fai clic sul DATASET appena creato.
- Fai clic sul DATA STORE appena creato
. - Fai clic su AGGIUNGI NUOVA CONFIGURAZIONE DI FLUSSI DI DATI.

- Seleziona il set di dati BigQuery appena creato dall'elenco, il tipo di schema "Analytics V2" e il tipo di risorsa "Paziente" dall'elenco (puoi scegliere tutti i tipi di risorse che vuoi) e fai clic su Fine.

È tutto. Ora puoi salvare i dati dell'archivio FHIR e trasmetterli in streaming a BigQuery.
5. Cloud Functions (Write R4 Data to FHIR Datastore using Healthcare API)
Cloud Functions ti consente di scrivere comodamente il codice ed eseguirne il deployment nel cloud in modo serverless. È scalabile, con pagamento a consumo, basato su eventi e aperto in termini di tecnologia e supporto linguistico. Per ulteriori funzionalità, consulta la documentazione.
La funzione che scriveremo ha lo scopo di autenticare e scrivere i dati in formato FHIR R4 nel datastore FHIR utilizzando l'API Cloud Healthcare. Per creare la funzione Cloud Functions:
- Vai a Cloud Functions e fai clic su CREA FUNZIONE.
- Imposta il nome su fhir-datastore-proxy, la regione su us-central1 e l'opzione Autenticazione su "Richiedi autenticazione".
- Espandi le impostazioni di runtime, build, connessioni e sicurezza. Aggiungerai cinque variabili di ambiente runtime:
Nome: CLOUD_FUNCTIONS_ENDPOINT | Valore: l'endpoint URL della funzione. Lo vedrai nel blocco Autenticazione sopra e avrà il formato: https://us-central1-PROJECT_ID.cloudfunctions.net/fhir-datastore-proxy
Nome: PROJECT_ID | Valore: il tuo ID progetto
Nome: DATASET_LOCATION | Valore: la posizione del tuo FHIR Datastore
Nome: DATASET_ID | Valore: l'ID datastore sanitario
Nome: FHIR_STORE_ID | Valore: l'ID datastore FHIR
- Premi Avanti per passare alla pagina successiva, dove aggiungeremo il nostro codice.
- Ora dovrebbe essere visualizzato un editor incorporato. Seleziona Java 17 come linguaggio e vai alla classe HelloHttpFunction.java. Rinominalo in FhirDatastoreProxy.java. Non dimenticare di rinominare anche il punto di accesso in gcfv2.FhirDatastoreProxy
- Copia il codice dal repository e incollalo nell'editor incorporato.
- Vai al file pom.xml e copia il file pom nel repository nell'editor incorporato.
- Fai clic su ESEGUI IL DEPLOYMENT e la funzione verrà creata ed eseguita a breve.
Nota:
- L'API Cloud Healthcare utilizzata in questa funzione utilizza le credenziali predefinite dell'applicazione per autenticare le richieste in arrivo all'API Healthcare
- Salva l'URL della funzione di cui è stato eseguito il deployment per poterla richiamare dall'app per Android. Finora abbiamo creato tutti i componenti necessari per consentire all'app per Android di scrivere dati FHIR in BigQuery utilizzando l'API Healthcare in modo indipendente. Ora assicuriamoci che tutti i componenti siano collegati e che l'API venga richiamata all'invio di un questionario.
6. Configurazione del progetto Android e di Firebase
Utilizzeremo una versione recente di Android Studio e un emulatore Android configurato (puoi utilizzare anche il tuo dispositivo Android fisico). Quando è tutto pronto, segui i passaggi riportati di seguito:
- Clona il repository FHIR App Examples: https://github.com/google/fhir-app-examples
- Apri Android Studio, seleziona Import Project (Gradle, Eclipse ADT, ecc.) e scegli la cartella cloudfunction/ dal codice sorgente che hai scaricato in precedenza.Apri app/google-services.json. È vuoto e deve essere riempito.
Genera una chiave SHA-1 utilizzando ./gradlew signingReport e prendi nota del campo SHA1 nella variante di debug
Aggiungi l'app a Firebase utilizzando la console Firebase (segui i passaggi 1 e 2). Nel campo "Debug signing certificate SHA-1 " (SHA-1 del certificato di firma di debug), inserisci il valore del passaggio precedente.
Scarica google-services.json e sostituisci i contenuti di Firebase con quelli del file vuoto nella cartella dell'app
L'SDK Firebase è già stato aggiunto nei file Gradle di build
- Apri FhirApplication.kt e imposta il campo baseUrl sull'URL della tua funzione Cloud Functions
- Seleziona "Sincronizza il progetto con i file Gradle" dalla barra degli strumenti di Android Studio.
Abbiamo completato la configurazione e l'inclusione delle dipendenze dell'implementazione.
7. Configurazione e risposta al questionario
Abbiamo già configurato il questionario nel repository. Ma esaminiamo il codice:
- Assicurati che FragmentContainerView sia presente all'interno di ConstraintLayout nel file app/src/main/res/layout/activity_main.xml
- Assicurati che QuestionnaireFragment abbia un questionario FHIR con codifica JSON per eseguire il rendering del frammento
In questo caso, utilizzeremo il file JSON " new-patient-registration-paginated.json" per eseguire il rendering del frammento. Controlla i file MainActivity.kt, AddPatientFragment.kt e AddPatientViewModel.kt.
Ora che abbiamo verificato il frammento, il file JSON e il modello, esegui l'app e prova a inserire le risposte per i campi del questionario.
Noterai la convalida di stringhe, date, campi numerici e altre condizioni.
Puoi eseguire l'app e controllare il log per vedere il record creato.

Puoi scoprire di più sull'utilizzo dei frammenti qui. Questo è tutto per la configurazione del frammento del questionario e delle risposte.
8. Visualizzazione dei risultati del set di dati FHIRStore e BigQuery
Ora che abbiamo completato la configurazione e gli aggiornamenti, fai clic su "Sincronizza progetto con i file Gradle". Al termine,
- Esegui l'app sull'emulatore Android e guarda il caricamento del questionario
- Rispondi alle domande e fai clic su Invia in alto.
- Nell'app dovrebbe essere visualizzato il messaggio "Paziente salvato".
Visualizza il risultato del datastore FHIR
Vai alla console FHIRViewer di Google Cloud Healthcare

Seleziona il datastore FHIR, la query e fai clic su ESEGUI RICERCA per visualizzare i risultati della ricerca subito sotto. 
Visualizzare il risultato del set di dati BigQuery
Vai alla console Google Cloud BigQuery e, nel riquadro Explorer, vai al set di dati che hai creato per questo progetto.

Fai clic su Anteprima e dovresti visualizzare lo stesso numero e gli stessi dati che hai trovato nell'archivio FHIR di Healthcare nel set di dati BigQuery.

Ora puoi eseguire BigQuery SQL, Analytics e ML sui dati FHIR che hai appena salvato nel set di dati cloud.
9. Funzionalità di ricerca e offline
Per garantire la funzionalità offline nell'app SDK Android FHIR basata su OHS, assicurati di seguire le linee guida di progettazione che devono essere abilitate nell'implementazione di cui parliamo qui.
Per la ricerca di risorse FHIR, abbiamo due modi:
- Visualizzatore FHIR nella console Google Cloud
- Metodo di ricerca FHIR che utilizza richieste GET o POST
10. Demo dell'app
Ora che la nostra app è stata sviluppata, proviamola e vediamo il risultato nel cloud.
11. Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo post, segui questi passaggi:
- Nella console Google Cloud, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.
12. Complimenti
Complimenti! In questo progetto, abbiamo creato correttamente un'app per Android per archiviare ed eseguire query sui dati FHIR dei pazienti nel datastore FHIR di Cloud Healthcare e nel set di dati BigQuery utilizzando l'API Cloud Healthcare in soli 7 passaggi:
- Configurare l'app Android
- Configurare l'API Cloud Healthcare
- Set di dati sanitari e datastore FHIR creati
- Set di dati BigQuery creato
- Configurato uno stream BigQuery per scrivere i dati di FHIR Datastore nel set di dati BigQuery
- È stata eseguita il deployment di una funzione Cloud Functions per scrivere dati R4 in FHIR Datastore
- Cloud Functions attivate dall'app per Android all'invio della risposta al questionario
Ora che i passaggi sono chiari, puoi provare gli stessi passaggi per la sincronizzazione della modifica FHIR del paziente con il cloud.