Zarządzaj danymi FHIR z aplikacji na Androida przy użyciu OHS i Google Cloud

1. Wprowadzenie

W tym ćwiczeniu z programowania dowiesz się, jak używać OHS (Open Health Stack) i Google Cloud Healthcare API do tworzenia innowacyjnych rozwiązań dla opieki zdrowotnej, które są bezpieczne, skalowalne i zgodne z przepisami. Połączenie tych zaawansowanych narzędzi umożliwia pracownikom służby zdrowia i programistom tworzenie rozwiązań opartych na danych, które mogą znacząco poprawić opiekę nad pacjentami i wyniki leczenia.

Chcemy wykorzystać możliwości Open Health Stack i Google Cloud Healthcare API w aplikacji mobilnej, która używa pakietu Android-FHIR SDK, aby umożliwić użytkownikom zarządzanie rekordami pacjentów FHIR w Google Cloud.

Przyjrzyjmy się krokom implementacji.

Co utworzysz

W tej implementacji:

  • Użyjemy biblioteki Structured Data Capture Library do renderowania kwestionariusza oraz biblioteki FHIR Engine do przechowywania treści odpowiedzi w formacie FHIR.
  • Dane zostaną przesłane do Cloud FHIR Store za pomocą Cloud Healthcare API.
  • Przed przesłaniem uwierzytelnimy się za pomocą Firebase.

8514f90f016ecfc0.png

Diagram powyżej przedstawia przepływ. Szczegółowe wyjaśnienie każdego komponentu znajdziesz na blogu.

2. Wymagania

  • Przeglądarka, np. Chrome lub Firefox.
  • Projekt Google Cloud z włączonymi płatnościami.
  • Najnowsza wersja Android Studio.
  • Skonfigurowany emulator Androida (możesz też użyć fizycznego urządzenia z Androidem).

Tworzenie projektu

  1. W konsoli Google Cloud na stronie selektora projektu wybierz lub utwórz projekt Google Cloud .
  2. Sprawdź, czy w projekcie w chmurze włączone są płatności. Dowiedz się, jak sprawdzić, czy w projekcie są włączone płatności.
  3. Włącz niezbędne interfejsy API (BigQuery, Healthcare API).

Aktywowanie Cloud Shell

  1. Będziesz używać Cloud Shell, środowiska wiersza poleceń działającego w Google Cloud, które jest wstępnie załadowane narzędziem bq:

W konsoli Cloud kliknij Aktywuj Cloud Shell w prawym górnym rogu:

51622c00acec2fa.png

  1. Po połączeniu z Cloud Shell zobaczysz, że uwierzytelnianie zostało już przeprowadzone, a projekt jest już ustawiony na Twój identyfikator projektu. Jeśli projekt nie jest ustawiony, użyj tego polecenia, aby go ustawić:
gcloud config set project <YOUR_PROJECT_ID>

Informacje o poleceniach gcloud i ich użyciu znajdziesz w dokumentacji.

3. Konfiguracja Healthcare API

  1. Sprawdź, czy Healthcare API jest włączony: otwórz bibliotekę interfejsów API w konsoli Google Cloud, wyszukaj Healthcare API, kliknij WŁĄCZ, aby włączyć interfejs API i dodać konto usługi Healthcare do projektu.
  2. Przyznanie kontu usługi uprawnień administratora BigQuery: aby przyznać uprawnienia, wykonaj to polecenie gcloud w terminalu Cloud Shell:
gcloud projects add-iam-policy-binding <<YOUR_PROJECT_ID>> \
--member=serviceAccount:service-<<PROJECT_NUMBER>>@gcp-sa-healthcare.iam.gserviceaccount.com  --role=roles/bigquery.admin

Uwaga: identyfikator projektu i numer projektu znajdziesz w konsoli. Informacje o identyfikacji znajdziesz w dokumentacji.

Tworzenie zbioru danych Healthcare

Aby utworzyć zbiór danych Healthcare, uruchom w Cloud Shell to polecenie:

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

Ustaw lokalizację na region.

Tworzenie magazynu danych FHIR

Aby utworzyć magazyn danych FHIR, uruchom w Cloud Shell to polecenie:

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

Ustaw lokalizację na region.

4. Konfiguracja i strumieniowe przesyłanie danych BigQuery

Obejmuje to zapisywanie danych z magazynu FHIR w zbiorze danych BigQuery, aby można było wykonywać na nich zapytania, programować je i analizować, wykorzystując możliwości BigQuery i BQML.

Tworzenie zbioru danych BigQuery

Zbiór danych BigQuery to zbiór tabel. Wszystkie tabele w zbiorze danych są przechowywane w tej samej lokalizacji danych location. Możesz też dołączyć niestandardowe ustawienia kontroli dostępu, aby ograniczyć dostęp do zbioru danych i jego tabel.

W Cloud Shell uruchom to polecenie:

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

Ustaw lokalizację na region.

Tworzenie strumienia BigQuery

Strumieniowe przesyłanie danych jest wymagane, aby eksportować zmiany zasobów do BigQuery za każdym razem, gdy zasób FHIR zostanie utworzony, zaktualizowany, zmodyfikowany lub usunięty w bazie FHIR. Każda baza może mieć maksymalnie 10 konfiguracji strumieniowego przesyłania danych.

  1. Otwórz konsolę Google Cloud Healthcare.
  2. Kliknij nowo utworzony ZBIÓR DANYCH.
  3. Kliknij nowo utworzony MAGAZYN DANYCH 7acaa364337086aa.png
  4. Kliknij DODAJ NOWĄ KONFIGURACJĘ STRUMIENIOWEGO PRZESYŁANIA DANYCH.

caa2cc881d3406aa.png

  1. Na liście wybierz nowo utworzony zbiór danych BigQuery, jako typ schematu wybierz „Analytics V2”, a jako typ zasobu „Pacjent” (możesz wybrać dowolną liczbę typów zasobów) i kliknij Gotowe.

1e038c694fcca1ef.png

To wszystko. Możesz już zapisywać dane z magazynu FHIR i przesyłać je strumieniowo do BigQuery.

5. Cloud Functions (zapisywanie danych R4 w magazynie danych FHIR za pomocą Healthcare API)

Cloud Functions umożliwia wygodne pisanie kodu i wdrażanie go w chmurze w sposób bezserwerowy. Jest skalowalna, płatność według wykorzystania, oparta na zdarzeniach i otwarta pod względem technologii i obsługi języków. Więcej funkcji znajdziesz w dokumentacji.

Funkcja, którą napiszemy, ma na celu uwierzytelnianie i zapisywanie danych w formacie FHIR R4 w magazynie danych FHIR za pomocą Cloud Healthcare API. Aby utworzyć funkcję w Cloud Functions:

  1. Otwórz Cloud Functions i kliknij UTWÓRZ FUNKCJĘ.
  2. Ustaw nazwę na fhir-datastore-proxy, region na us-central1, a opcję uwierzytelniania na „Wymagaj uwierzytelniania”.
  3. Rozwiń ustawienia środowiska wykonawczego, kompilacji, połączeń i zabezpieczeń. Dodasz 5 zmiennych środowiska wykonawczego:

Nazwa: CLOUD_FUNCTIONS_ENDPOINT | Wartość: adres URL punktu końcowego funkcji. Zobaczysz go w bloku Uwierzytelnianie powyżej. Będzie miał postać: https://us-central1-PROJECT_ID.cloudfunctions.net/fhir-datastore-proxy

Nazwa: PROJECT_ID | Wartość: identyfikator projektu

Nazwa: DATASET_LOCATION | Wartość: lokalizacja magazynu danych FHIR

Nazwa: DATASET_ID | Wartość: identyfikator magazynu danych Healthcare

Nazwa: FHIR_STORE_ID | Wartość: identyfikator magazynu FHIR

  1. Naciśnij Dalej, aby przejść do następnej strony, na której dodamy kod.
  2. Powinien się teraz wyświetlić edytor wbudowany. Wybierz język Java 17 i otwórz klasę HelloHttpFunction.java. Zmień jej nazwę na FhirDatastoreProxy.java. Nie zapomnij też zmienić nazwy punktu wejścia na gcfv2.FhirDatastoreProxy.
  3. Skopiuj kod z repozytorium i wklej go w edytorze wbudowanym.
  4. Otwórz plik pom.xml i skopiuj plik pom z repozytorium do edytora wbudowanego.
  5. Kliknij WDRÓŻ, a funkcja zostanie utworzona i wkrótce uruchomiona.

Uwaga:

  1. Cloud Healthcare API używany w tej funkcji korzysta z domyślnych danych logowania aplikacji do uwierzytelniania żądań przychodzących do Healthcare API.
  2. Zapisz adres URL wdrożonej funkcji, aby móc ją wywoływać z aplikacji na Androida. Do tej pory utworzyliśmy wszystkie elementy wymagane do tego, aby aplikacja na Androida mogła niezależnie zapisywać dane FHIR w BigQuery za pomocą Healthcare API. Teraz upewnijmy się, że wszystkie elementy są połączone, a interfejs API jest wywoływany po przesłaniu kwestionariusza.

6. Konfiguracja projektu na Androida i Firebase

Będziemy używać najnowszej wersji Android Studio i skonfigurowanego emulatora Androida (możesz też użyć fizycznego urządzenia z Androidem). Gdy to zrobisz, wykonaj te czynności:

  1. Sklonuj repozytorium z przykładami aplikacji FHIR: https://github.com/google/fhir-app-examples.
  2. Otwórz Android Studio, wybierz Import Project (Gradle, Eclipse ADT, etc.) (Importuj projekt (Gradle, Eclipse ADT itp.)) i wybierz folder cloudfunction/ z pobranego wcześniej kodu źródłowego. Otwórz app/google-services.json. Jest pusty i trzeba go wypełnić.

Wygeneruj klucz SHA-1 za pomocą polecenia ./gradlew signingReport i zanotuj pole SHA1 w wariancie debug.

Dodaj aplikację do Firebase za pomocą konsoli Firebase (wykonaj kroki 1 i 2). W polu „Debug signing certificate SHA-1” (Odcisk cyfrowy SHA-1 certyfikatu podpisywania debugowania) wpisz wartość z poprzedniego kroku.

Pobierz plik google-services.json i zastąp jego zawartością pusty plik w folderze app.

Pakiet SDK Firebase został już dodany w plikach Gradle kompilacji.

  1. Otwórz plik FhirApplication.kt i ustaw pole baseUrl na adres URL funkcji w Cloud Functions.
  2. Na pasku narzędzi Android Studio wybierz „Sync your project with Gradle files” (Zsynchronizuj projekt z plikami Gradle).

Ukończyliśmy już część implementacji dotyczącą konfiguracji i dodawania zależności.

7. Konfiguracja kwestionariusza i odpowiedzi

Mamy już skonfigurowany kwestionariusz w repozytorium. Przyjrzyjmy się jednak kodowi:

  1. Sprawdź, czy FragmentContainerView znajduje się w ConstraintLayout w pliku app/src/main/res/layout/activity_main.xml.
  2. Sprawdź, czy QuestionnaireFragment zawiera kwestionariusz FHIR zakodowany w formacie JSON, aby renderować fragment.

W tym przypadku użyjemy pliku json – „new-patient-registration-paginated.json” – do renderowania fragmentu. Sprawdź pliki MainActivity.kt, AddPatientFragment.kt i AddPatientViewModel.kt.

Po sprawdzeniu fragmentu, pliku JSON i modelu uruchom aplikację i spróbuj wpisać odpowiedzi w polach kwestionariusza.

Zauważysz sprawdzanie poprawności pól tekstowych, dat, pól numerycznych i innych warunków.

Możesz uruchomić aplikację i sprawdzić log, aby zobaczyć utworzony rekord.

9e1bb440074f1a88.png

Więcej informacji o korzystaniu z fragmentów znajdziesz tutaj. To już prawie wszystko, jeśli chodzi o konfigurację fragmentu kwestionariusza i odpowiedzi.

8. Wyświetlanie wyników w FHIRStore i zbiorze danych BigQuery

Po zakończeniu konfiguracji i aktualizacji kliknij „Sync Project with Gradle Files” (Zsynchronizuj projekt z plikami Gradle). Gdy to zrobisz:

  1. Uruchom aplikację w emulatorze Androida i zobacz, jak wczytuje się kwestionariusz.
  2. Odpowiedz na pytania i kliknij Prześlij u góry.
  3. W aplikacji powinien się wyświetlić komunikat „Patient is saved” (Pacjent został zapisany).

Wyświetlanie wyników w FHIR Store

Otwórz konsolę Google Cloud Healthcare FHIRViewer.

1064f03b4e1e45f5.png

Wybierz bazę FHIR, zapytanie i kliknij URUCHOM WYSZUKIWANIE. Wyniki wyszukiwania powinny się wyświetlić poniżej. 37a070480a06362c.png

Wyświetlanie wyników w zbiorze danych BigQuery

Otwórz konsolę Google Cloud BigQuery console i w panelu Eksplorator otwórz zbiór danych utworzony na potrzeby tego projektu.

7c483ec6d578b8cd.png

Kliknij Podgląd. W zbiorze danych BigQuery powinna się wyświetlić ta sama liczba i te same dane, które zostały znalezione w Healthcare FHIR Store.

faafeae4a837a41c.png

Możesz teraz wykonywać w BigQuery zapytania SQL, analizy i uczenie maszynowe na danych FHIR zapisanych w zbiorze danych w chmurze.

9. Wyszukiwanie i funkcje offline

Aby zapewnić funkcje offline w aplikacji FHIR SDK na Androida opartej na OHS, postępuj zgodnie z wytycznymi dotyczącymi projektowania, które trzeba włączyć w implementacji omówionej w tym dokumencie.

Zasoby FHIR można wyszukiwać na 2 sposoby:

  1. FHIR Viewer w konsoli Google Cloud.
  2. Metoda wyszukiwania FHIR za pomocą żądań GET lub POST.

10. Prezentacja aplikacji

Aplikacja jest już gotowa. Możemy więc ją przetestować i zobaczyć wyniki w chmurze.

11. Zwalnianie miejsca

Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym poście, wykonaj te czynności:

  1. W konsoli Google Cloud otwórz stronę Zarządzanie zasobami.
  2. Z listy projektów wybierz projekt do usunięcia, a potem kliknij Usuń.
  3. W oknie wpisz identyfikator projektu i kliknij Wyłącz, aby usunąć projekt.

12. Gratulacje

Gratulacje! W tym projekcie udało nam się utworzyć aplikację na Androida, która umożliwia przechowywanie danych pacjentów FHIR i wysyłanie do nich zapytań w chmurze Healthcare FHIR Store i zbiorze danych BigQuery za pomocą Cloud Healthcare API. Wykonaliśmy tylko 7 kroków:

  1. Konfiguracja aplikacji na Androida.
  2. Konfigurowanie Google Cloud Healthcare API.
  3. Utworzenie zbioru danych Healthcare i magazynu danych FHIR.
  4. Utworzenie zbioru danych BigQuery.
  5. Skonfigurowanie strumienia BigQuery do zapisywania danych z magazynu danych FHIR w zbiorze danych BigQuery.
  6. Wdrożenie funkcji w Cloud Functions do zapisywania danych R4 w magazynie danych FHIR.
  7. Wywoływanie funkcji w Cloud Functions z aplikacji na Androida po przesłaniu odpowiedzi na kwestionariusz.

Teraz, gdy znasz już te kroki, możesz je wypróbować, aby zsynchronizować edycję danych pacjentów FHIR z chmurą.