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

1. Wprowadzenie

Podczas tego ćwiczenia w Codelabs dowiesz się, jak używać OHS (Open Health Stack) i Google Cloud Healthcare API do tworzenia innowacyjnych rozwiązań związanych z opieką zdrowotną, które są bezpieczne, skalowalne i zgodne z przepisami. Połączenie tych zaawansowanych narzędzi zapewnia pracownikom opieki zdrowotnej i deweloperom możliwość tworzenia rozwiązań opartych na danych, które mogą znacznie poprawić opiekę nad pacjentami i poprawić ich wyniki.

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

Przyjrzyjmy się poszczególnym etapom implementacji.

Co utworzysz

W ramach tej implementacji

  • Wyrenderujemy kwestionariusz ustrukturyzowanych danych, a do zapisania treści FHIR odpowiedzi użyjemy biblioteki FHIR odpowiedzi.
  • Dane zostaną przesłane do bazy Cloud FHIR za pomocą interfejsu Cloud Healthcare API.
  • Przed przesłaniem pliku najpierw uwierzytelnimy się za pomocą Firebase.

8514f90f016ecfc0.png

Schemat powyżej przedstawia przepływ. Szczegółowe omówienie poszczególnych komponentów znajdziesz na blogu.

2. Wymagania

  • przeglądarki, na przykład Chrome lub Firefox;
  • Projekt Google Cloud z włączonymi płatnościami
  • najnowszą wersję 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 projektów wybierz lub utwórz projekt Google Cloud.
  2. Sprawdź, czy w projekcie Cloud 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. Użyjesz Cloud Shell – środowiska wiersza poleceń działającego w Google Cloud, które ma wstępnie zainstalowane narzędzie bq:

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

51622c00acec2fa.png

  1. Po nawiązaniu połączenia z Cloud Shell powinno pojawić się informacja, że użytkownik jest już uwierzytelniony i że projekt jest już ustawiony na identyfikator Twojego projektu. Jeśli projekt nie został skonfigurowany, ustaw go za pomocą tego polecenia:
gcloud config set project <YOUR_PROJECT_ID>

Więcej informacji o poleceniach i sposobie korzystania z gcloud znajdziesz w dokumentacji.

3. Konfiguracja Healthcare API

  1. Sprawdź, czy interfejs Healthcare API jest włączony: otwórz bibliotekę interfejsów API konsoli Google Cloud, wyszukaj Healthcare API i kliknij WŁĄCZ, aby uruchomić interfejs API i dodać do projektu konto usługi Healthcare
  2. Przyznając uprawnienia administratora BigQuery do konta usługi, wykonaj w terminalu Cloud Shell to polecenie gcloud, aby przyznać uprawnienia:
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: identyfikatory PROJECT_ID i PROJECT_NUMBER znajdziesz w konsoli. Ich identyfikację znajdziesz w dokumencie.

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ę jako regionu.

Utwórz magazyn 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ę jako regionu.

4. Konfiguracja i strumieniowanie BigQuery

Obejmuje to zapisywanie danych magazynu FHIR w zbiorze danych BigQuery, aby można było wykonywać zapytania, programować i analizować je z wykorzystaniem 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. Możesz też dołączyć niestandardowe kontrole 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ę jako regionu.

Tworzenie strumieniowego przesyłania danych BigQuery

Strumieniowanie jest wymagane do eksportowania zmian zasobów do BigQuery za każdym razem, gdy zasób FHIR zostanie utworzony, zaktualizowany 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 i stronę przeglądarki
  2. Kliknij nowo utworzony ZBIÓR DANYCH.
  3. Kliknij nowo utworzony MATERIAŁ DANYCH 7acaa364337086aa.png.
  4. Kliknij DODAJ NOWĄ KONFIGURACJĘ TRANSMISJI.

caa2cc881d3406aa.png

  1. Wybierz z listy nowo utworzony zbiór danych BigQuery, jako typ schematu wybierz „Analytics 2”. i typ zasobu „Pacjent” z listy (możesz wybrać dowolną liczbę typów zasobów) i kliknij Gotowe

1e038c694fcca1ef.png

To wszystko. Wszystko gotowe do zapisywania danych bazy FHIR i strumieniowania ich do BigQuery.

5. Cloud Functions (zapisywanie danych R4 w Datastore Datastore przy użyciu interfejsu Healthcare API)

Cloud Functions umożliwia wygodne pisanie kodu i wdrażanie go w chmurze w sposób bezserwerowy. Jest skalowalny i płatny według wykorzystania, uwzględnia zdarzenia oraz jest otwarty pod względem technologii i języków. Więcej funkcji znajdziesz w dokumentacji.

Dostępna przez nas funkcja ma na celu uwierzytelnianie i zapisywanie danych w formacie FHIR R4 w magazynie danych FHIR za pomocą interfejsu Cloud Healthcare API. Aby utworzyć funkcję w Cloud Functions:

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

Nazwa: CLOUD_FUNCTIONS_ENDPOINT | Wartość: punkt końcowy URL funkcji. Znajdziesz go w bloku Uwierzytelnianie powyżej i będzie mieć postać: https://us-central1-PROJECT_ID.cloudfunctions.net/fhir-datastore-proxy

Nazwa: PROJECT_ID | Wartość: identyfikator projektu

Nazwa: DATASET_LOCATION | Wartość: lokalizacja bazy 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 zostać wyświetlony wbudowany edytor, wybierz język Java 17 i przejdź do klasy HelloHttpFunction.java. Zmień jego 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 Twoja funkcja zostanie wkrótce utworzona i uruchomiona

Uwaga:

  1. Interfejs Cloud Healthcare API używany w tej funkcji korzysta z domyślnych danych uwierzytelniających aplikacji do uwierzytelniania żądań przychodzących do interfejsu Healthcare API
  2. Zapisz adres URL wdrożonej funkcji, aby móc wywoływać z aplikacji na Androida. Utworzyliśmy już wszystkie elementy niezbędne do niezależnego zapisywania danych FHIR w BigQuery przy użyciu interfejsu Healthcare API. Upewnijmy się teraz, że wszystkie elementy są połączone, a interfejs API jest wywoływany podczas przesyłania kwestionariusza.

6. Projekt Android i konfiguracja Firebase

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

  1. Sklonuj repozytorium przykładów aplikacji FHIR: https://github.com/google/fhir-app-examples
  2. Otwórz Android Studio, wybierz Importuj projekt (Gradle, Eclipse ADT itp.) i wybierz folder cloudfunction/ z pobranego wcześniej kodu źródłowego.Otwórz app/google-services.json. Pole jest puste i należy je wypełnić.

Wygeneruj klucz SHA-1 za pomocą polecenia ./gradlew signReport i zwróć uwagę na pole SHA1 dla wariantu debugowania

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

Pobierz plik google-services.json i zastąp zawartość z Firebase pustym plikiem w folderze aplikacji

Pakiet SDK Firebase został już dodany do plików Gradle kompilacji

  1. Otwórz plik FhirApplication.kt i w polu baseUrl wpisz adres URL swojej funkcji w Cloud Functions.
  2. Wybierz „Zsynchronizuj projekt z plikami Gradle” z paska narzędzi Android Studio

Zakończyliśmy etap konfigurowania i uwzględniania zależności.

7. Konfiguracja kwestionariusza i udzielanie odpowiedzi

Ankieta jest już skonfigurowana w repozytorium. Przejdźmy jednak do kodu:

  1. Sprawdź, czy obiekt FragmentContainerView znajduje się w elemencie ConstraintLayout w pliku app/src/main/res/layout/activity_main.xml.
  2. Sprawdź, czy kwestionariusz QuestionnaireFragment zawiera zakodowany w formacie JSON kwestionariusz FHIR do wyrenderowania

W tym przypadku użyjemy pliku json – new-patient-registration-paginated.json&quot; aby go wyrenderować. Sprawdź pliki MainActivity.kt, AddPatientFragment.kt i AddPatientViewModel.kt

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

Sprawdzisz poprawność ciągu znaków, daty, pól liczbowych i innych warunków

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

9e1bb440074f1a88.png

Więcej informacji o korzystaniu z fragmentów znajdziesz tutaj. To wszystko, jeśli chodzi o fragment kwestionariusza i udzielanie odpowiedzi.

8. Wyświetlanie wyników magazynu danych FHIR i BigQuery

Masz już wszystko skonfigurowane i aktualizacje. Kliknij „Synchronizuj projekt z plikami Gradle”. Gdy to zrobisz,

  1. Uruchom aplikację w emulatorze Androida i obserwuj wczytywanie kwestionariusza
  2. Odpowiedz na pytania i u góry kliknij Prześlij
  3. Powinien pojawić się komunikat „Pacjent został zapisany”. w aplikacji

Wyświetl wynik bazy FHIR

Przejdź do konsoli FHIRViewer Google Cloud Healthcare

1064f03b4e1e45f5.png

Wybierz bazę FHIR i zapytanie, a następnie kliknij RUN SEARCH (Uruchom wyszukiwanie). Wyniki wyszukiwania powinny pojawić się tuż poniżej. 37a070480a06362c.png

Wyświetl wynik zbioru danych BigQuery

Otwórz konsolę Google Cloud BigQuery i w panelu Eksplorator przejdź do zbioru danych utworzonego dla tego projektu.

7c483ec6d578b8cd.png

Kliknij Podgląd, a zobaczysz tę samą liczbę i wynikowe dane, które znajdują się w bazie FHIR Healthcare w zbiorze danych BigQuery.

faafeae4a837a41c.png

Możesz teraz wykonywać BigQuery SQL, Analytics i ML na danych FHIR zapisanych w zbiorze danych w chmurze.

9. Wyszukiwanie i offline

Aby zapewnić działanie w trybie offline w przypadku pakietu SDK FHIR na Androida opartego na OHS, postępuj zgodnie z wytycznymi dotyczącymi projektowania, które należy włączyć w omawianej tutaj implementacji.

Przeszukując zasoby FHIR dostępne są 2 sposoby:

  1. Przeglądarka FHIR w konsoli Google Cloud
  2. Metoda wyszukiwania FHIR przy użyciu żądań GET lub POST

10. Wersja demonstracyjna aplikacji

Teraz gdy aplikacja jest już opracowana, zapoznajmy się z nią i zobaczmy rezultaty w chmurze.

11. Czyszczenie danych

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. Na liście 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ę w 7 krokach utworzyć aplikację na Androida do przechowywania i wysyłania zapytań dotyczących danych FHIR w bazie FHIR w Cloud Healthcare i do zbioru danych BigQuery przy użyciu interfejsu Cloud Healthcare API:

  1. Skonfiguruj aplikację na Androida
  2. Konfigurowanie Google Cloud Healthcare API
  3. Utworzono zbiór danych Healthcare i magazyn FHIR
  4. Utworzono zbiór danych BigQuery
  5. Skonfigurowano strumień BigQuery do zapisywania danych FHIR Datastore w zbiorze danych BigQuery
  6. Wdrożono funkcję w Cloud Functions służącą do zapisywania danych R4 w FHIR w Datastore
  7. Aktywowanie funkcji w Cloud Functions za pomocą aplikacji na Androida po przesłaniu odpowiedzi na kwestionariusz

Teraz, gdy kroki są już oczywiste, możesz wypróbować te same kroki w przypadku synchronizacji FHIR synchronizowania pacjenta w chmurze.