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 ra các giải pháp chăm sóc sức khoẻ tiên tiến, bảo mật, có thể mở rộng và tuân thủ. Nhờ sự kết hợp của những công cụ mạnh mẽ này, nhân viên chăm sóc sức khoẻ và nhà phát triển có thể tạo ra các giải pháp dựa trên dữ liệu để cải thiện đáng kể kết quả chăm sóc bệnh nhân và kết quả điều trị.

Chúng tôi dự định khai thác sức mạnh của Open Health Stack và API Google Cloud Healthcare API trong một ứng dụng di động sử dụng SDK Android-FHIR để 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 cách triển khai này,

  • Chúng tôi 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 Công cụ FHIR để lưu trữ nội dung FHIR của câu trả lờ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, đầu tiên, chúng tôi sẽ tự xác thực bằng Firebase

8514f90f016ecfc0.pngS

Sơ đồ trên thể hiện luồng. Đọc blog để biết nội dung 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
  • Phiên bản Android Studio gần nhất
  • Thiết lập Trình mô phỏng Android (bạn cũng có thể sử dụng thiết bị Android thực)

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 bạn đã bật tính năng thanh toán cho dự án trên Google Cloud. Tìm hiểu cách kiểm tra xem tính năng thanh toán có được bật trên một dự án hay không.
  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 bằng bq:

Trong Bảng điều khiển Cloud, 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. Nếu chưa thiết lập dự án, hãy sử dụng lệnh sau để thiết lập:
gcloud config set project <YOUR_PROJECT_ID>

Hãy tham khảo tài liệu để biết các lệnh gcloud và cách sử dụng.

3. Thiết lập API Healthcare

  1. Đảm bảo bạn đã bật API Health: Truy cập vào thư viện Google Cloud Console API, tìm API Healthcare, nhấp vào BẬT, sau đó nhấp vào nút BẬT, sau đó nhấp vào API, đồng thời thêm Tài khoản dịch vụ Healthcare vào dự án
  2. Cấp quyền quản trị của BigQuery cho Tài khoản dịch vụ Thực thi lệnh gcloud dưới đây trong thiết bị đầu cuối của 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 doc để 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 FHIR Datastore

Trong Cloud Shell, hãy chạy lệnh bên dưới để tạo kho dữ liệu 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 Cửa hàng FHIR trong Tập dữ liệu BigQuery để dữ liệu có thể được 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ả bảng trong một tập dữ liệu được lưu trữ tại cùng một vị trí dữ liệu. Bạn cũng có thể đính kèm các chế độ kiểm soát quyền truy cập tuỳ chỉnh để giới hạn quyền truy cập vào một tập dữ liệu và các bảng trong 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 luồng dữ liệu BigQuery

Bạn phải sử dụng tính năng phát 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 cửa hàng FHIR. 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. Truy cập vào bảng điều khiển Google Cloud Healthcare, trang trình duyệt
  2. Nhấp vào DATASET mới được tạo
  3. Nhấp vào CỬA HÀNG DỮ LIỆU mới tạo 7acaa364337086aa.pngS
  4. Nhấp vào THÊM CẤU HÌNH PHÁT TRỰC TIẾP MỚI

caa2cc881d3406aa.png

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

1e038c694fcca1ef.png.

Vậy là xong. Bạn đã sẵn sàng lưu dữ liệu cửa hàng FHIR và truyền dữ liệu đó đến BigQuery.

5. Chức năng đám mây (Ghi dữ liệu R4 vào kho dữ liệu FHIR bằng API Healthcare)

Chức năng đám mây 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 cách không máy chủ. Nền tảng này có thể mở rộng theo cách thức có thể mở rộng, trả tiền theo mức dùng, theo sự kiện và có thể mở rộng về mặt công nghệ và hỗ trợ ngôn ngữ. Hãy tham khảo tài liệu này để biết thêm các tính năng.

Hàm mà chúng ta sẽ viết nhằm xác thực và ghi dữ liệu sắp xuất hiện ở định dạng FHIR R4 vào Kho dữ liệu FHIR bằng Cloud Healthcare API. Cách tạo Hàm đám mây:

  1. Chuyển đến Cloud Function rồi nhấp vào TẠO FUNCTION
  2. Đặt tên thành fhir-datastore-proxy, khu vực thành us-central1 và tùy chọn Xác thực thành "Yêu cầu xác thực"
  3. Mở rộng chế độ 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 kho dữ liệu FHIR của bạn

Tên: DATASET_ID | Giá trị: Mã kho dữ liệu của Healthcare

Tên: FHIR_STORE_ID | Giá trị: Mã cửa hàng FHIR

  1. Nhấn "Next" (Tiếp theo) để chuyển sang trang tiếp theo nơi chúng ta sẽ thêm mã
  2. Lúc này, trình chỉnh sửa cùng dòng sẽ xuất hiện, hãy 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 cùng dòng
  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 cùng dòng
  5. Nhấp vào DEPLOY, hàm của bạn sẽ sớm được tạo và chạy

Lưu ý:

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

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

Chúng tôi sẽ sử dụng phiên bản Android Studio mới nhất và thiết lập Trình mô phỏng Android (bạn cũng có thể sử dụng thiết bị Android thực). Khi ứng dụng đã sẵn sàng, 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 Import Project (Gradle, Eclipse ADT, v.v.) rồi chọn Cloudfunction/ thư mục trong mã nguồn mà bạn đã tải xuống trước đó. Mở app/google-services.json. Trường này trống và cần phải được điền.

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

Thêm ứng dụng vào Firebase bằng Bảng điều khiển của Firebase (thực hiện theo Bước 1 và 2) bằng cách sử dụng Bảng điều khiển của Firebase. Trong thẻ "Chứng chỉ ký gỡ lỗi SHA-1" hãy điền giá trị từ bước trước đó vào

Tải google-services.json xuống và 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 của bản dựng

  1. Mở FhirApplication.kt và đặt trường baseUrl thành URL của Cloud Function (Chức năng đám mây) của bạn
  2. Chọn "Sync your project with Gradle files" (Đồng bộ hoá dự án của bạn với các tệp Gradle) trên thanh công cụ của Android Studio

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

7. Cách thiết lập bảng câu hỏi và trả lời

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

  1. Đảm bảo FragmentContainerView hiển thị bên trong ConstraintLayout trong tệp app/src/main/res/layout/activity_main.xml
  2. Đảm bảo Bộ câu hỏi có Bộ câu hỏi FHIR mã hoá JSON để kết xuất mảnh

Trong trường hợp này, chúng ta sẽ sử dụng tệp json – " new-patient-registration-paginated.json&quot; để kết xuất mảnh. Kiểm tra tệp MainActivity.kt, AddPatientFragment.ktAddPatientViewModel.kt

Bây giờ, chúng ta đã xác minh mảnh, tệp 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ẽ thấy việc xác thực các trường chuỗi, ngày, 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.pngS

Bạn có thể tìm hiểu thêm về cách sử dụng mảnh tại đây. Như vậy là đủ cho mảnh câu hỏi và cách thiết lập câu trả lời.

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

Bây giờ, khi mà chúng ta đã thiết lập xong và cập nhật, hãy nhấp vào "Sync Project with Gradle Files" (Đồng bộ hoá dự án với tệp Gradle). Sau khi hoàn tất,

  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ả về cửa hàng FHIR

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

1064f03b4e1e45f5.pngS

Chọn Cửa hàng FHIR của bạn, truy vấn và nhấn vào CHẠY TÌM KIẾM và 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 BigQuery của Google Cloud. Trong ngăn Explorer, 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 số lượng cũng như dữ liệu kết quả mà bạn tìm thấy tại Cửa hàng chăm sóc sức khoẻ FHIR trong Tập dữ liệu BigQuery.

faafeae4a837a41c.png

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

9. Khả năng tìm kiếm và ngoại tuyến

Để đảm bảo khả năng hoạt động ngoại tuyến của ứng dụng SDK Android FHIR do OHS hỗ trợ, hãy nhớ tuân theo nguyên tắc thiết kế cần được bật khi 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ó hai cách:

  1. Trình xem FHIR trong Google Cloud Console
  2. Phương pháp tìm kiếm FHIR sử dụng yêu cầu GET hoặc POST

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

Bây giờ ứng dụng của chúng ta đã được phát triển, hãy cùng chơi ứng dụng và xem kết quả trên đám mây.

11. Dọn dẹp

Để tránh bị tính phí vào tài khoản Google Cloud cho các tài nguyên 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 Google 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, nhập ID dự án, sau đó 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 tôi đã tạo thành công một ứng dụng Android để lưu trữ và truy vấn dữ liệu FHIR của bệnh nhân trên Cửa hàng FHIR chăm sóc sức khoẻ trên đám mây và tập dữ liệu BigQuery bằng Cloud Healthcare API chỉ qua 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à kho dữ liệu FHIR
  4. Đã tạo tập dữ liệu BigQuery
  5. Đã định cấu hình Luồng BigQuery để ghi dữ liệu FHIR Datastore vào Tập dữ liệu BigQuery
  6. Triển khai một hàm đám mây để ghi dữ liệu R4 vào kho dữ liệu FHIR
  7. Kích hoạt Chức năng đám mây từ ứng dụng Android khi gửi câu trả lời cho bộ câu hỏi

Giờ đây, các bước đã rõ ràng, vui lòng thử lại các bước tương tự để đồng bộ hoá nội dung chỉnh sửa với FHIR cho bệnh nhân lên đám mây.