Quản lý dữ liệu FHIR từ ứng dụng Android bằng OHS và Google Cloud

1. Giới thiệu

Trong lớp học lập trình này, chúng ta sẽ tìm hiểu cách sử dụng OHS (Open Health Stack) và Google Cloud Healthcare API để tạo các giải pháp chăm sóc sức khoẻ sáng tạo, an toàn, có khả năng mở rộng và tuân thủ. Sự kết hợp của các công cụ mạnh mẽ này giúp nhân viên y tế và nhà phát triển có khả năng tạo ra các giải pháp dựa trên dữ liệu có thể cải thiện đáng kể việc chăm sóc bệnh nhân và kết quả điều trị.

Chúng tôi dự định tận dụng sức mạnh của Open Health Stack và Google Cloud Healthcare API trong một ứng dụng di động sử dụng Android-FHIR SDK để cho phép người dùng quản lý hồ sơ bệnh nhân FHIR trong Google Cloud.

Hãy cùng tìm hiểu các bước triển khai.

Sản phẩm bạn sẽ tạo ra

Trong quá trình triển khai này,

  • Chúng ta sẽ sử dụng Thư viện thu thập dữ liệu có cấu trúc để hiển thị Bảng câu hỏi và thư viện FHIR Engine để lưu trữ nội dung FHIR của phản hồi
  • Sau đó, dữ liệu sẽ được tải lên Cloud FHIR Store bằng Cloud Healthcare API
  • Trước khi tải lên, trước tiên, chúng ta sẽ xác thực bằng Firebase

8514f90f016ecfc0.png

Sơ đồ trên thể hiện quy trình. Hãy đọc blog để biết thông tin giải thích chi tiết về từng thành phần.

2. Yêu cầu

  • Một trình duyệt, chẳng hạn như Chrome hoặc Firefox
  • Một dự án trên Google Cloud đã bật tính năng thanh toán
  • Một phiên bản Android Studio gần đây
  • Một Trình mô phỏng Android đã thiết lập (bạn cũng có thể sử dụng thiết bị Android thực tế)

Tạo dự án

  1. Trong Google Cloud Console, trên trang bộ chọn dự án, hãy chọn hoặc tạo một dự án trên Google Cloud.
  2. Đảm bảo rằng tính năng thanh toán đã được bật cho dự án trên đám mây của bạn. Tìm hiểu cách kiểm tra xem tính năng thanh toán đã được bật trên một dự án hay chưa.
  3. Bật các API cần thiết (BigQuery, Healthcare API)

Kích hoạt Cloud Shell

  1. Bạn sẽ sử dụng Cloud Shell, một môi trường dòng lệnh chạy trong Google Cloud được tải sẵn bq:

Trên Cloud Console, hãy nhấp vào Kích hoạt Cloud Shell ở góc trên cùng bên phải:

51622c00acec2fa.png

  1. Sau khi kết nối với Cloud Shell, bạn sẽ thấy rằng mình đã được xác thực và dự án đã được đặt thành mã dự án của bạn. Nếu dự án chưa được đặt, hãy sử dụng lệnh sau để đặt:
gcloud config set project <YOUR_PROJECT_ID>

Tham khảo tài liệu về các lệnh và cách sử dụng gcloud.

3. Thiết lập Healthcare API

  1. Đảm bảo rằng Healthcare API đã được bật: Chuyển đến thư viện API của Google Cloud Console, tìm kiếm Healthcare API, nhấp vào BẬT. API này sẽ bật API và thêm Tài khoản dịch vụ Healthcare vào dự án
  2. Cấp quyền quản trị BigQuery cho Tài khoản dịch vụ Thực thi lệnh gcloud bên dưới trong thiết bị đầu cuối Cloud Shell để cấp quyền:
gcloud projects add-iam-policy-binding <<YOUR_PROJECT_ID>> \
--member=serviceAccount:service-<<PROJECT_NUMBER>>@gcp-sa-healthcare.iam.gserviceaccount.com  --role=roles/bigquery.admin

Lưu ý: Bạn có thể tìm thấy PROJECT_ID và PROJECT_NUMBER trong bảng điều khiển, hãy tham khảo tài liệu để xác định.

Tạo tập dữ liệu Healthcare

Trong Cloud Shell, hãy chạy lệnh bên dưới để tạo tập dữ liệu Healthcare:

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

Đặt vị trí thành một khu vực.

Tạo Datastore FHIR

Trong Cloud Shell, hãy chạy lệnh bên dưới để tạo datastore FHIR:

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

Đặt vị trí thành một khu vực.

4. Thiết lập và truyền trực tuyến BigQuery

Điều này bao gồm việc lưu dữ liệu FHIR Store trong Tập dữ liệu BigQuery để có thể truy vấn, lập trình và phân tích bằng cách tận dụng sức mạnh của BigQuery và BQML.

Tạo tập dữ liệu BigQuery

Tập dữ liệu BigQuery là một tập hợp các bảng. Tất cả các bảng trong một tập dữ liệu đều được lưu trữ ở cùng một vị trí dữ liệu location. Bạn cũng có thể đính kèm các chế độ kiểm soát quyền truy cập tuỳ chỉnh để hạn chế quyền truy cập vào một tập dữ liệu và các bảng của tập dữ liệu đó.

Trong Cloud Shell, hãy chạy lệnh bên dưới:

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

Đặt vị trí thành một khu vực.

Tạo tính năng truyền trực tuyến BigQuery

Bạn cần truyền trực tuyến để xuất các thay đổi về tài nguyên sang BigQuery mỗi khi một tài nguyên FHIR được tạo, cập nhật, vá hoặc xoá trong một FHIR store. Mỗi cửa hàng được phép có tối đa 10 cấu hình truyền trực tuyến.

  1. Chuyển đến trang trình duyệt bảng điều khiển Google Cloud Healthcare
  2. Nhấp vào TẬP DỮ LIỆU mới tạo
  3. Nhấp vào CỬA HÀNG DỮ LIỆU mới tạo 7acaa364337086aa.png
  4. Nhấp vào THÊM CẤU HÌNH TRUYỀN TRỰC TUYẾN MỚI

caa2cc881d3406aa.png

  1. Chọn Tập dữ liệu BigQuery mới tạo trong danh sách, loại Giản đồ là "Analytics V2" và Loại tài nguyên "Patient" (Bệnh nhân) trong danh sách (Bạn có thể chọn nhiều loại tài nguyên) rồi nhấp vào Xong

1e038c694fcca1ef.png

Vậy là xong. Bạn đã sẵn sàng lưu dữ liệu FHIR store và truyền trực tuyến dữ liệu đó sang BigQuery.

5. Cloud Functions (Ghi dữ liệu R4 vào Datastore FHIR bằng Healthcare API)

Cloud Functions cho phép bạn viết mã và triển khai lên đám mây một cách thuận tiện theo kiểu phi máy chủ. Công cụ này có khả năng mở rộng, trả tiền theo mức dùng, dựa trên sự kiện và mở về mặt công nghệ cũng như hỗ trợ ngôn ngữ. Tham khảo tài liệu để biết thêm các tính năng.

Hàm mà chúng ta sẽ viết có mục đích xác thực và ghi dữ liệu ở định dạng FHIR R4 vào FHIR Data Store bằng Cloud Healthcare API. Cách tạo Cloud Function:

  1. Chuyển đến Cloud Functions rồi nhấp vào TẠO HÀM
  2. Đặt tên thành fhir-datastore-proxy, vùng thành us-central1 và tuỳ chọn Xác thực thành "Yêu cầu xác thực"
  3. Mở rộng các chế độ cài đặt Thời gian chạy, bản dựng, kết nối và bảo mật. Bạn sẽ thêm 5 biến môi trường Thời gian chạy:

Tên: CLOUD_FUNCTIONS_ENDPOINT | Giá trị: điểm cuối URL của Hàm Bạn sẽ thấy giá trị này trong khối Xác thực ở trên và có dạng: https://us-central1-PROJECT_ID.cloudfunctions.net/fhir-datastore-proxy

Tên: PROJECT_ID | Giá trị: mã dự án của bạn

Tên: DATASET_LOCATION | Giá trị: vị trí của Datastore FHIR

Tên: DATASET_ID | Giá trị: mã Datastore Healthcare

Tên: FHIR_STORE_ID | Giá trị: mã FHIR Store

  1. Nhấn vào Tiếp theo để chuyển đến trang tiếp theo, nơi chúng ta sẽ thêm mã
  2. Trình chỉnh sửa nội tuyến sẽ xuất hiện, chọn Java 17 làm ngôn ngữ rồi chuyển đến lớp HelloHttpFunction.java. Đổi tên thành FhirDatastoreProxy.java. Đừng quên đổi tên điểm truy cập thành gcfv2.FhirDatastoreProxy
  3. Sao chép mã từ kho lưu trữ rồi dán vào trình chỉnh sửa nội tuyến
  4. Chuyển đến tệp pom.xml rồi sao chép tệp pom trong kho lưu trữ vào trình chỉnh sửa nội tuyến
  5. Nhấp vào TRIỂN KHAI và hàm của bạn sẽ được tạo và chạy ngay

Lưu ý:

  1. Cloud Healthcare API được sử dụng trong hàm này sử dụng Thông tin đăng nhập mặc định của ứng dụng để xác thực các yêu cầu gửi đến Healthcare API
  2. Lưu URL hàm đã triển khai để có thể gọi từ ứng dụng Android Cho đến nay, chúng ta đã tạo tất cả các phần cần thiết để Ứng dụng Android ghi dữ liệu FHIR vào BigQuery bằng Healthcare API một cách độc lập. Bây giờ, hãy đảm bảo rằng tất cả các phần đều được kết nối và API được gọi khi gửi bảng câu hỏi.

6. Thiết lập dự án Android và Firebase

Chúng ta sẽ sử dụng một phiên bản gần đây của Android Studio và một Trình mô phỏng Android đã thiết lập (bạn cũng có thể sử dụng thiết bị Android thực tế). Sau khi kích hoạt xong, hãy làm theo các bước dưới đây:

  1. Sao chép kho lưu trữ Ví dụ về ứng dụng FHIR: https://github.com/google/fhir-app-examples
  2. Mở Android Studio, chọn Nhập dự án (Gradle, Eclipse ADT, v.v.) rồi chọn thư mục cloudfunction/ trong mã nguồn mà bạn đã tải xuống trước đó. Mở app/google-services.json. Tệp này trống và cần được điền.

Tạo khoá SHA-1 bằng ./gradlew signingReport rồi ghi lại trường SHA1 trong biến thể gỡ lỗi

Thêm ứng dụng vào Firebase bằng Firebase Console (làm theo Bước 1 và 2) bằng Firebase Console. Trong trường "SHA-1 chứng chỉ ký gỡ lỗi", hãy điền giá trị từ bước trước

Tải google-services.json xuống rồi thay thế nội dung từ Firebase vào tệp trống trong thư mục ứng dụng

Firebase SDK đã được thêm vào các tệp Gradle bản dựng

  1. Mở FhirApplication.kt rồi đặt trường baseUrl thành URL của Cloud Function
  2. Chọn "Đồng bộ hoá dự án với các tệp Gradle" trên thanh công cụ Android Studio

Chúng ta đã hoàn tất phần thiết lập và đưa vào phần phụ thuộc của quá trình triển khai.

7. Thiết lập và phản hồi bảng câu hỏi

Chúng ta đã thiết lập xong phần thiết lập Bảng câu hỏi trong kho lưu trữ. Nhưng hãy xem qua mã:

  1. Đảm bảo rằng FragmentContainerView có trong ConstraintLayout trong tệp bố cục app/src/main/res/layout/activity_main.xml
  2. Đảm bảo rằng QuestionnaireFragment có Bảng câu hỏi FHIR được mã hoá JSON để hiển thị fragment

Trong trường hợp này, chúng ta sẽ sử dụng json – " new-patient-registration-paginated.json" để hiển thị fragment. Kiểm tra các tệp MainActivity.kt, AddPatientFragment.ktAddPatientViewModel.kt

Sau khi xác minh fragment, JSON và mô hình, hãy tiếp tục chạy ứng dụng và thử nhập câu trả lời cho các trường trong bộ câu hỏi

Bạn sẽ nhận thấy quá trình xác thực chuỗi, ngày, trường số và các điều kiện khác

Bạn có thể chạy ứng dụng và kiểm tra nhật ký để xem bản ghi đã tạo

9e1bb440074f1a88.png

Bạn có thể tìm hiểu thêm về cách sử dụng mảnh tại đây. Đó là hầu hết các bước thiết lập mảnh bảng câu hỏi và phản hồi.

8. Hiển thị kết quả tập dữ liệu FHIRStore và BigQuery

Sau khi thiết lập và cập nhật xong, hãy nhấp vào "Đồng bộ hoá dự án với các tệp Gradle". Sau khi bạn hoàn thành bước này,

  1. Chạy ứng dụng trên Trình mô phỏng Android và xem bảng câu hỏi tải
  2. Trả lời các câu hỏi rồi nhấp vào nút gửi ở trên cùng
  3. Bạn sẽ thấy thông báo "Đã lưu bệnh nhân" trên ứng dụng

Xem kết quả FHIR Store

Chuyển đến bảng điều khiển Google Cloud Healthcare FHIRViewer

1064f03b4e1e45f5.png

Chọn FHIR Store, truy vấn rồi nhấn vào CHẠY TÌM KIẾM. Bạn sẽ thấy kết quả tìm kiếm ngay bên dưới. 37a070480a06362c.png

Xem kết quả tập dữ liệu BigQuery

Chuyển đến bảng điều khiển Google Cloud BigQuery console rồi trên ngăn Trình khám phá, hãy chuyển đến tập dữ liệu mà bạn đã tạo cho dự án này.

7c483ec6d578b8cd.png

Nhấp vào Xem trước và bạn sẽ thấy cùng số lượng và dữ liệu kết quả mà bạn tìm thấy trong Healthcare FHIR Store trong Tập dữ liệu BigQuery.

faafeae4a837a41c.png

Giờ đây, bạn có thể thực hiện BigQuery SQL, Analytics và ML trên dữ liệu FHIR mà bạn vừa lưu vào tập dữ liệu trên đám mây.

9. Tìm kiếm và khả năng hoạt động ngoại tuyến

Để đảm bảo khả năng hoạt động ngoại tuyến trên ứng dụng Android FHIR SDK do OHS cung cấp, hãy nhớ làm theo nguyên tắc thiết kế cần được bật trong quá trình triển khai mà chúng ta thảo luận ở đây.

Để tìm kiếm tài nguyên FHIR, chúng ta có 2 cách:

  1. Trình xem FHIR trong Google Cloud Console
  2. Phương thức tìm kiếm FHIR bằng yêu cầu GET hoặc POST

10. Bản minh hoạ ứng dụng

Sau khi phát triển ứng dụng, hãy dùng thử ứng dụng và xem kết quả trên đám mây.

11. Dọn dẹp

Để tránh phát sinh phí cho Tài khoản Google Cloud của bạn đối với các tài nguyên được sử dụng trong bài đăng này, hãy làm theo các bước sau:

  1. Trong bảng điều khiển Cloud, hãy chuyển đến trang Quản lý tài nguyên
  2. Trong danh sách dự án, hãy chọn dự án mà bạn muốn xoá, rồi nhấp vào Xoá
  3. Trong hộp thoại, hãy nhập mã dự án rồi nhấp vào Tắt để xoá dự án

12. Xin chúc mừng

Xin chúc mừng! Trong dự án này, chúng ta đã tạo thành công một ứng dụng Android để lưu trữ và truy vấn dữ liệu Bệnh nhân FHIR trên FHIR Store và tập dữ liệu BigQuery trên đám mây bằng Cloud Healthcare API chỉ trong 7 bước:

  1. Thiết lập ứng dụng Android
  2. Thiết lập Google Cloud Healthcare API
  3. Tạo tập dữ liệu Healthcare và Datastore FHIR
  4. Tạo tập dữ liệu BigQuery
  5. Định cấu hình luồng BigQuery để ghi dữ liệu Kho dữ liệu FHIR vào Tập dữ liệu BigQuery
  6. Triển khai Cloud Function để ghi dữ liệu R4 vào Datastore FHIR
  7. Kích hoạt Cloud Functions từ Ứng dụng Android khi gửi phản hồi bảng câu hỏi

Bây giờ, các bước đã rõ ràng, bạn có thể thử các bước tương tự để đồng bộ hoá việc chỉnh sửa Bệnh nhân FHIR lên đám mây.