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.
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
- W konsoli Google Cloud na stronie selektora projektów wybierz lub utwórz projekt Google Cloud.
- Sprawdź, czy w projekcie Cloud włączone są płatności. Dowiedz się, jak sprawdzić, czy w projekcie są włączone płatności.
- Włącz niezbędne interfejsy API (BigQuery, Healthcare API).
Aktywowanie Cloud Shell
- 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:
- 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
- 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
- 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.
- Otwórz konsolę Google Cloud Healthcare i stronę przeglądarki
- Kliknij nowo utworzony ZBIÓR DANYCH.
- Kliknij nowo utworzony MATERIAŁ DANYCH .
- Kliknij DODAJ NOWĄ KONFIGURACJĘ TRANSMISJI.
- 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
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:
- Otwórz funkcje w Cloud Functions i kliknij UTWÓRZ FUNKCJĘ.
- Ustaw nazwę fhir-datastore-proxy, region na us-central1 i opcję uwierzytelniania „Wymagaj uwierzytelniania”
- 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
- Naciśnij Dalej, aby przejść do następnej strony, na której dodamy kod
- 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
- Skopiuj kod z repozytorium i wklej go w edytorze wbudowanym.
- Otwórz plik pom.xml i skopiuj plik pom z repozytorium do edytora wbudowanego.
- Kliknij WDRÓŻ, a Twoja funkcja zostanie wkrótce utworzona i uruchomiona
Uwaga:
- 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
- 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:
- Sklonuj repozytorium przykładów aplikacji FHIR: https://github.com/google/fhir-app-examples
- 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ą pliku ./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
- Otwórz plik FhirApplication.kt i w polu baseUrl wpisz adres URL swojej funkcji w Cloud Functions.
- 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:
- Sprawdź, czy obiekt FragmentContainerView znajduje się w elemencie ConstraintLayout w pliku app/src/main/res/layout/activity_main.xml.
- 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" 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.
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,
- Uruchom aplikację w emulatorze Androida i obserwuj wczytywanie kwestionariusza
- Odpowiedz na pytania i u góry kliknij Prześlij
- Powinien pojawić się komunikat „Pacjent został zapisany”. w aplikacji
Wyświetl wynik bazy FHIR
Przejdź do konsoli FHIRViewer Google Cloud Healthcare
Wybierz bazę FHIR i zapytanie, a następnie kliknij RUN SEARCH (Uruchom wyszukiwanie). Wyniki wyszukiwania powinny pojawić się tuż poniżej.
Wyświetl wynik zbioru danych BigQuery
Otwórz konsolę Google Cloud BigQuery i w panelu Eksplorator przejdź do zbioru danych utworzonego dla tego projektu.
Kliknij Podgląd, a zobaczysz tę samą liczbę i wynikowe dane, które znajdują się w bazie FHIR Healthcare w zbiorze danych BigQuery.
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:
- Przeglądarka FHIR w konsoli Google Cloud
- 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:
- W konsoli Google Cloud otwórz stronę Zarządzanie zasobami.
- Na liście projektów wybierz projekt do usunięcia, a potem kliknij Usuń
- 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:
- Skonfiguruj aplikację na Androida
- Konfigurowanie Google Cloud Healthcare API
- Utworzono zbiór danych Healthcare i magazyn FHIR
- Utworzono zbiór danych BigQuery
- Skonfigurowano strumień BigQuery do zapisywania danych FHIR Datastore w zbiorze danych BigQuery
- Wdrożono funkcję w Cloud Functions służącą do zapisywania danych R4 w FHIR w Datastore
- 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.