จัดการข้อมูล FHIR จากแอป Android ด้วย OHS และ Google Cloud

1. บทนำ

ใน Codelab นี้ เราจะได้เรียนรู้วิธีใช้ OHS (Open Health Stack) และ Google Cloud Healthcare API เพื่อสร้างโซลูชันการดูแลสุขภาพที่เป็นนวัตกรรมที่ปลอดภัย รองรับการปรับขนาด และเป็นไปตามข้อกำหนด การผสานเครื่องมืออันทรงพลังเหล่านี้เข้าด้วยกันทำให้ผู้ปฏิบัติงานด้านสาธารณสุขและนักพัฒนาซอฟต์แวร์สามารถสร้างโซลูชันที่ขับเคลื่อนด้วยข้อมูล ซึ่งสามารถปรับปรุงการดูแลผู้ป่วยและผลลัพธ์ให้ดียิ่งขึ้นได้อย่างมาก

เราตั้งใจที่จะใช้ศักยภาพของ Open Health Stack และ Google Cloud Healthcare API ในแอปบนอุปกรณ์เคลื่อนที่ที่ใช้ Android-FHIR SDK เพื่อให้ผู้ใช้จัดการเวชระเบียน FHIR ใน Google Cloud ได้

เรามาเจาะลึกขั้นตอนการติดตั้งใช้งานกัน

สิ่งที่คุณจะสร้าง

ในการใช้งานนี้

  • เราจะใช้ไลบรารีการบันทึกข้อมูลที่มีโครงสร้างเพื่อแสดงผลแบบสอบถาม และใช้ไลบรารี FHIR Engine เพื่อจัดเก็บเนื้อหา FHIR ของคำตอบ
  • จากนั้นระบบจะอัปโหลดข้อมูลไปยัง Cloud FHIR Store โดยใช้ Cloud Healthcare API
  • ก่อนที่จะอัปโหลด เราจะตรวจสอบสิทธิ์ของตัวเองโดยใช้ Firebase ก่อน

8514f90f016ecfc0.png

แผนภาพด้านบนจะแสดงโฟลว์ อ่านบล็อกเพื่อดูคำอธิบายโดยละเอียดของแต่ละคอมโพเนนต์

2. ข้อกำหนด

  • เบราว์เซอร์ เช่น Chrome หรือ Firefox
  • โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน
  • Android Studio เวอร์ชันล่าสุด
  • การตั้งค่าโปรแกรมจำลอง Android (คุณใช้อุปกรณ์ Android จริงได้ด้วย)

สร้างโปรเจ็กต์

  1. ในคอนโซล Google Cloud ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud ในหน้าตัวเลือกโปรเจ็กต์
  2. ตรวจสอบว่าเปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ที่อยู่ในระบบคลาวด์แล้ว ดูวิธีตรวจสอบว่าเปิดใช้การเรียกเก็บเงินในโปรเจ็กต์แล้ว
  3. เปิดใช้ API ที่จำเป็น (BigQuery, Healthcare API)

เปิดใช้งาน Cloud Shell

  1. คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมแบบบรรทัดคำสั่งที่ทำงานใน Google Cloud และโหลด bq ไว้ล่วงหน้า

คลิก "เปิดใช้งาน Cloud Shell" ที่มุมขวาบนจาก Cloud Console:

51622c00acec2fa.png

  1. เมื่อเชื่อมต่อกับ Cloud Shell คุณควรเห็นว่าคุณผ่านการตรวจสอบสิทธิ์แล้ว และโปรเจ็กต์ได้ตั้งเป็นรหัสโปรเจ็กต์ของคุณแล้ว หากไม่ได้ตั้งค่าโปรเจ็กต์ไว้ ให้ใช้คำสั่งต่อไปนี้เพื่อตั้งโปรเจ็กต์
gcloud config set project <YOUR_PROJECT_ID>

ดูคำสั่งและการใช้งาน gcloud ในเอกสารประกอบ

3. ตั้งค่า Healthcare API

  1. ตรวจสอบว่าได้เปิดใช้ Healthcare API อยู่โดยไปที่ไลบรารี Google Cloud Console API ค้นหา Healthcare API คลิก "เปิดใช้" จากนั้น API จะเพิ่มบัญชีบริการ Healthcare ลงในโปรเจ็กต์
  2. การให้สิทธิ์ผู้ดูแลระบบ BigQuery แก่บัญชีบริการ เรียกใช้คำสั่ง gcloud ด้านล่างในเทอร์มินัล 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

หมายเหตุ: คุณสามารถค้นหา PROJECT_ID และ PROJECT_NUMBER ได้จากคอนโซล โปรดดูเอกสารเพื่อระบุตัวตน

สร้างชุดข้อมูล Healthcare

ใน Cloud Shell ให้เรียกใช้คำสั่งด้านล่างเพื่อสร้างชุดข้อมูล Healthcare

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

ตั้งค่าตำแหน่งเป็นภูมิภาค

สร้าง FHIR Datastore

ใน Cloud Shell ให้เรียกใช้คำสั่งด้านล่างเพื่อสร้างพื้นที่เก็บข้อมูล FHIR

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

ตั้งค่าตำแหน่งเป็นภูมิภาค

4. การตั้งค่า BigQuery และสตรีมมิง

ซึ่งครอบคลุมถึงการบันทึกข้อมูลที่เก็บ FHIR ในชุดข้อมูล BigQuery เพื่อให้ค้นหา ตั้งโปรแกรม และวิเคราะห์โดยใช้ประโยชน์จากศักยภาพของ BigQuery และ BQML ได้

สร้างชุดข้อมูล BigQuery

ชุดข้อมูล BigQuery คือคอลเล็กชันของตาราง ตารางทั้งหมดในชุดข้อมูลจะได้รับการจัดเก็บไว้ในตำแหน่งข้อมูลเดียวกัน คุณยังแนบการควบคุมการเข้าถึงที่กำหนดเองเพื่อจำกัดการเข้าถึงชุดข้อมูลและตารางของชุดข้อมูลได้ด้วย

ใน Cloud Shell ให้เรียกใช้คำสั่งต่อไปนี้

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

ตั้งค่าตำแหน่งเป็นภูมิภาค

สร้างสตรีมมิง BigQuery

คุณจำเป็นต้องสตรีมเพื่อส่งออกการเปลี่ยนแปลงทรัพยากรไปยัง BigQuery ทุกครั้งที่มีการสร้าง อัปเดต แพตช์ หรือลบทรัพยากร FHIR ในที่เก็บ FHIR แต่ละร้านค้ามีการกำหนดค่าสตรีมมิงได้สูงสุด 10 รายการ

  1. ไปที่คอนโซล Google Cloud Healthcare, หน้าเบราว์เซอร์
  2. คลิกชุดข้อมูลที่สร้างขึ้นใหม่
  3. คลิก "DATA STORE" 7acaa364337086aa.png ที่สร้างใหม่
  4. คลิกเพิ่มการกำหนดค่าสตรีมมิงใหม่

caa2cc881d3406aa.png

  1. เลือกชุดข้อมูล BigQuery ที่สร้างขึ้นใหม่จากรายการ เป็นประเภทสคีมาเป็น "Analytics V2" และประเภททรัพยากร "ผู้ป่วย" จากรายการ (คุณสามารถเลือกชนิดทรัพยากรได้หลายรายการ) และคลิก เสร็จสิ้น

1e038c694fcca1ef.png

เท่านี้เอง คุณพร้อมแล้วที่จะบันทึกข้อมูลที่เก็บ FHIR และสตรีมไปยัง BigQuery

5. Cloud Functions (เขียนข้อมูล R4 ไปยัง FHIR Datastore โดยใช้ Healthcare API)

Cloud Functions ช่วยให้คุณเขียนโค้ดและทำให้ใช้งานได้บนระบบคลาวด์ในรูปแบบ Serverless ได้อย่างสะดวก รองรับการปรับขนาด จ่ายตามการใช้งานจริง ขับเคลื่อนด้วยเหตุการณ์ และเปิดกว้างในแง่ของการสนับสนุนด้านเทคโนโลยีและภาษา ดูฟีเจอร์เพิ่มเติมในเอกสารประกอบ

ฟังก์ชันที่เราจะเขียนมีไว้เพื่อตรวจสอบสิทธิ์และเขียนข้อมูลที่กำลังมาในรูปแบบ FHIR R4 ลงในพื้นที่เก็บข้อมูล FHIR โดยใช้ Cloud Healthcare API วิธีสร้าง Cloud Function

  1. ไปที่ฟังก์ชันของระบบคลาวด์ แล้วคลิกสร้างฟังก์ชัน
  2. ตั้งชื่อเป็น fhir-datastore-proxy, ภูมิภาคเป็น us-central1 และตัวเลือกการตรวจสอบสิทธิ์เป็น "ต้องมีการตรวจสอบสิทธิ์"
  3. ขยายการตั้งค่ารันไทม์ บิลด์ การเชื่อมต่อ และความปลอดภัย คุณจะเพิ่มตัวแปรสภาพแวดล้อมรันไทม์ 5 ตัวแปรดังนี้

ชื่อ: CLOUD_FUNCTIONS_ENDPOINT | ค่า: URL ปลายทางของฟังก์ชัน คุณจะเห็นสิ่งนี้ในบล็อกการตรวจสอบสิทธิ์ด้านบน และจะอยู่ในรูปแบบ: https://us-central1-PROJECT_ID.cloudfunctions.net/fhir-datastore-proxy

ชื่อ: PROJECT_ID | ค่า: รหัสโปรเจ็กต์

ชื่อ: DATASET_LOCATION | ค่า: ตำแหน่งของ FHIR Datastore

ชื่อ: DATASET_ID | ค่า: รหัส Healthcare Datastore

ชื่อ: FHIR_STORE_ID | ค่า: รหัสร้านค้า FHIR

  1. กด "ถัดไป" เพื่อไปยังหน้าถัดไปซึ่งเราจะเพิ่มโค้ด
  2. ในตอนนี้ ระบบจะแสดงตัวแก้ไขในบรรทัด ให้เลือก Java 17 เป็นภาษา แล้วไปที่คลาส HelloHttpFunction.java เปลี่ยนชื่อเป็น FhirDatastoreProxy.java อย่าลืมเปลี่ยนชื่อจุดแรกเข้าเป็น gcfv2.FhirDatastoreProxy
  3. คัดลอกโค้ดจากที่เก็บแล้ววางในตัวแก้ไขในบรรทัด
  4. ไปที่ไฟล์ pom.xml และคัดลอกไฟล์ pom ในที่เก็บลงในเครื่องมือแก้ไขในบรรทัด
  5. คลิก DEPLOY แล้วระบบจะสร้างและเรียกใช้ฟังก์ชันในไม่ช้า

หมายเหตุ:

  1. Cloud Healthcare API ที่ใช้ในฟังก์ชันนี้ใช้ข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชันเพื่อตรวจสอบสิทธิ์คำขอที่มาจาก Healthcare API
  2. บันทึก URL ของฟังก์ชันที่ทำให้ใช้งานได้แล้วเพื่อให้สามารถเรียกใช้จากแอปพลิเคชัน Android จนถึงตอนนี้ เราได้สร้างส่วนต่างๆ ทั้งหมดที่จำเป็นต่อการเขียนข้อมูล FHIR ไปยัง BigQuery โดยใช้ Healthcare API อย่างอิสระ ตอนนี้มาตรวจสอบว่าองค์ประกอบทั้งหมดเชื่อมต่อกันและมีการเรียกใช้ API เมื่อส่งแบบสอบถาม

6. การตั้งค่าโปรเจ็กต์ Android และ Firebase

เราจะใช้ Android Studio เวอร์ชันล่าสุดและการตั้งค่าโปรแกรมจำลอง Android (คุณใช้อุปกรณ์ Android จริงได้ด้วย) เมื่อพร้อมแล้ว ให้ทำตามขั้นตอนด้านล่าง

  1. โคลนที่เก็บตัวอย่างแอป FHIR: https://github.com/google/fhir-app-examples
  2. เปิด Android Studio เลือก "นำเข้าโปรเจ็กต์" (Gradle, Eclipse ADT ฯลฯ) แล้วเลือกโฟลเดอร์ cloudfunction/ จากซอร์สโค้ดที่คุณดาวน์โหลดไว้ก่อนหน้านี้ เปิด app/google-services.json ช่องว่างเปล่าและต้องกรอกข้อมูล

สร้างคีย์ SHA-1 โดยใช้ ./gradlew SigningReport และจดช่อง SHA1 ใต้ตัวแปรการแก้ไขข้อบกพร่อง

เพิ่มแอปไปยัง Firebase โดยใช้คอนโซล Firebase (ทำตามขั้นตอนที่ 1 และ 2) โดยใช้คอนโซล Firebase ใน "แก้ไขข้อบกพร่องการลงชื่อในใบรับรอง SHA-1" ให้กรอกข้อมูลจากขั้นตอนก่อนหน้า

ดาวน์โหลด google-services.json และแทนที่เนื้อหาจาก Firebase ในไฟล์ที่ว่างเปล่าในโฟลเดอร์แอป

เพิ่ม Firebase SDK ในไฟล์ Gradle ของบิลด์แล้ว

  1. เปิด FhirApplication.kt แล้วตั้งค่าช่อง baseUrl เป็น URL ของ Cloud Function
  2. เลือก "ซิงค์โปรเจ็กต์กับไฟล์ Gradle" จากแถบเครื่องมือ Android Studio

ตอนนี้เราได้ดำเนินการในส่วนการตั้งค่าและการรวมทรัพยากร Dependency เรียบร้อยแล้ว

7. การตั้งค่าและการตอบกลับแบบสอบถาม

เราได้ตั้งค่าแบบสอบถามในที่เก็บแล้ว แต่ลองมาดูโค้ดกัน

  1. ตรวจสอบว่า FragmentContainerView มีอยู่ใน ConstraintLayout ในไฟล์ app/src/main/res/layout/activity_main.xml
  2. ตรวจสอบว่า QuestionnaireFragment มี FHIR Questionnaire ที่เข้ารหัส JSON เพื่อแสดงผลส่วนย่อย

ในกรณีนี้ เราจะใช้ JSON - " new-patient-registration-paginated.json&quot; เพื่อแสดงผลส่วนย่อย ตรวจสอบไฟล์ MainActivity.kt, AddPatientFragment.kt และ AddPatientViewModel.kt

เมื่อยืนยันส่วนย่อย, JSON และโมเดลแล้ว ให้เรียกใช้แอปและลองป้อนคำตอบสำหรับฟิลด์ในแบบสอบถาม

คุณจะเห็นการตรวจสอบความถูกต้องของช่องสตริง วันที่ ตัวเลข และเงื่อนไขอื่นๆ

คุณสามารถเรียกใช้แอปและตรวจสอบบันทึกเพื่อดูระเบียนที่สร้างไว้

9e1bb440074f1a88.png

ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ Fragment ได้ที่นี่ ซึ่งก็ใช้กับส่วนย่อยของแบบสอบถามและการตั้งค่าคำตอบได้พอสมควร

8. FHIRStore และการแสดงผลชุดข้อมูล BigQuery

ตอนนี้เราตั้งค่าและอัปเดตเรียบร้อยแล้ว ให้คลิก "ซิงค์โปรเจ็กต์กับไฟล์ Gradle" เมื่อดำเนินการเสร็จแล้ว

  1. โปรดเรียกใช้แอปในโปรแกรมจำลองของ Android และดูการโหลดแบบสอบถามของคุณ
  2. ตอบคำถามแล้วคลิก "ส่ง" ที่ด้านบน
  3. คุณควรเห็นข้อความ "บันทึกข้อมูลผู้ป่วยแล้ว" ในแอป

ดูผลลัพธ์ของที่เก็บ FHIR

ไปที่คอนโซล FHIRViewer ของ Google Cloud Healthcare

1064f03b4e1e45f5.png

เลือกที่เก็บ FHIR แล้วทำการค้นหา และกด "เรียกใช้การค้นหา" คุณจะเห็นผลการค้นหาที่ด้านล่าง 37a070480a06362c.png

ดูผลลัพธ์ของชุดข้อมูล BigQuery

ไปที่คอนโซล BigQuery ของ Google Cloud และในแผงสำรวจ ให้ไปที่ชุดข้อมูลที่คุณสร้างไว้สำหรับโปรเจ็กต์นี้

7c483ec6d578b8cd.png

คลิก "แสดงตัวอย่าง" แล้วคุณจะเห็นตัวเลขและข้อมูลผลลัพธ์เดียวกันที่พบในที่เก็บ Healthcare FHIR ในชุดข้อมูล BigQuery

faafeae4a837a41c.png

ตอนนี้คุณดำเนินการ BigQuery SQL, Analytics และ ML กับข้อมูล FHIR ที่เพิ่งบันทึกไว้ในชุดข้อมูลในระบบคลาวด์ได้แล้ว

9. ความสามารถในการค้นหาและออฟไลน์

โปรดทำตามหลักเกณฑ์การออกแบบซึ่งจำเป็นต้องเปิดใช้ในการใช้งานที่พูดถึงในที่นี้เพื่อให้แอป FHIR SDK บน Android ที่ขับเคลื่อนโดย OHS ทำงานได้

สำหรับการค้นหาทรัพยากร FHIR เรามี 2 วิธีดังนี้

  1. ผู้ดู FHIR ใน Google Cloud Console
  2. วิธีการค้นหา FHIR โดยใช้คำขอ GET หรือ POST

10. การสาธิตแอป

ตอนนี้แอปของเราได้รับการพัฒนาแล้ว ลองเล่นดู และดูผลลัพธ์ในระบบคลาวด์

11. ล้างข้อมูล

โปรดทำตามขั้นตอนต่อไปนี้เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในโพสต์นี้

  1. ในคอนโซล Google Cloud ให้ไปที่หน้าจัดการทรัพยากร
  2. ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิกลบ
  3. ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์ แล้วคลิกปิดเครื่องเพื่อลบโปรเจ็กต์

12. ขอแสดงความยินดี

ยินดีด้วย ในโปรเจ็กต์นี้

  1. ตั้งค่าแอป Android
  2. ตั้งค่า Google Cloud Healthcare API
  3. สร้างชุดข้อมูล Healthcare และ FHIR Datastore แล้ว
  4. สร้างชุดข้อมูล BigQuery แล้ว
  5. กำหนดค่าสตรีม BigQuery เพื่อเขียนข้อมูล FHIR Datastore ไปยังชุดข้อมูล BigQuery
  6. ทำให้ Cloud Function ใช้งานได้เพื่อเขียนข้อมูล R4 ไปยัง FHIR Datastore แล้ว
  7. Cloud Functions ที่ทริกเกอร์จากแอป Android เมื่อส่งคำตอบแบบสอบถาม

เมื่อขั้นตอนชัดเจนแล้ว ก็ลองทำตามขั้นตอนเดียวกันนี้สำหรับการซิงค์การแก้ไข FHIR ของผู้ป่วยไปยังระบบคลาวด์