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

แผนภาพด้านบนแสดงโฟลว์ อ่านคำอธิบายโดยละเอียดของแต่ละองค์ประกอบได้ในบล็อก
2. ข้อกำหนด
- เบราว์เซอร์ เช่น Chrome หรือ Firefox
- โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน
- Android Studio เวอร์ชันล่าสุด
- ตั้งค่าโปรแกรมจำลองของ Android (คุณใช้อุปกรณ์ Android จริงได้ด้วย)
สร้างโปรเจ็กต์
- ในคอนโซล Google Cloud ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud ในหน้าตัวเลือกโปรเจ็กต์
- ตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Cloud แล้ว ดูวิธีตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินในโปรเจ็กต์แล้วหรือไม่
- เปิดใช้ API ที่จำเป็น (BigQuery, Healthcare API)
เปิดใช้งาน Cloud Shell
- คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานใน Google Cloud และมาพร้อมกับ bq ที่โหลดไว้ล่วงหน้า
จาก Cloud Console ให้คลิกเปิดใช้งาน Cloud Shell ที่มุมขวาบน

- เมื่อเชื่อมต่อกับ Cloud Shell แล้ว คุณควรเห็นว่าคุณได้รับการตรวจสอบสิทธิ์แล้วและระบบได้ตั้งค่าโปรเจ็กต์เป็นรหัสโปรเจ็กต์ของคุณแล้ว หากยังไม่ได้ตั้งค่าโปรเจ็กต์ ให้ใช้คำสั่งต่อไปนี้เพื่อตั้งค่า
gcloud config set project <YOUR_PROJECT_ID>
โปรดดูคำสั่งและการใช้งาน gcloud ในเอกสารประกอบ
3. การตั้งค่า Healthcare API
- ตรวจสอบว่าได้เปิดใช้ Healthcare API แล้ว โดยไปที่ไลบรารี API ของคอนโซล Google Cloud ค้นหา Healthcare API คลิกเปิดใช้ แล้วระบบจะเปิดใช้ API และเพิ่มบัญชีบริการ Healthcare ลงในโปรเจ็กต์
- การให้สิทธิ์ผู้ดูแลระบบ 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
ใน Cloud Shell ให้เรียกใช้คำสั่งด้านล่างเพื่อสร้างที่เก็บข้อมูล FHIR
gcloud beta healthcare fhir-stores create <<FHIR_STORE>> \
--dataset=<<DATASET_ID>> --location=us-central1 --version=r4
ตั้งค่าสถานที่ตั้งเป็นภูมิภาค
4. การตั้งค่าและการสตรีม BigQuery
ซึ่งครอบคลุมการบันทึกข้อมูล FHIR Store ในชุดข้อมูล BigQuery เพื่อให้สามารถค้นหา ตั้งโปรแกรม และวิเคราะห์ได้โดยใช้ประโยชน์จากความสามารถของ BigQuery และ BQML
สร้างชุดข้อมูล BigQuery
ชุดข้อมูล BigQuery คือคอลเล็กชันของตาราง ตารางทั้งหมดในชุดข้อมูลจะจัดเก็บไว้ในตำแหน่งข้อมูลเดียวกัน นอกจากนี้ คุณยังแนบการควบคุมการเข้าถึงที่กำหนดเองเพื่อจำกัดการเข้าถึงชุดข้อมูลและตารางของชุดข้อมูลได้ด้วย
เรียกใช้คำสั่งด้านล่างใน Cloud Shell
bq mk --location=us-central1 --dataset <<PROJECT_ID>>:<<BQ_DATASET>>
ตั้งค่าสถานที่ตั้งเป็นภูมิภาค
สร้างการสตรีม BigQuery
คุณต้องใช้การสตรีมเพื่อส่งออกการเปลี่ยนแปลงทรัพยากรไปยัง BigQuery ทุกครั้งที่มีการสร้าง อัปเดต แพตช์ หรือลบทรัพยากร FHIR ในที่เก็บ FHIR แต่ละที่เก็บมีการกำหนดค่าสตรีมมิงได้สูงสุด 10 รายการ
- ไปที่คอนโซล Google Cloud Healthcare หน้าเบราว์เซอร์
- คลิกชุดข้อมูลที่สร้างขึ้นใหม่
- คลิก DATA STORE ที่สร้างขึ้นใหม่

- คลิกเพิ่มการกำหนดค่าการสตรีมใหม่

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

เท่านี้เอง คุณพร้อมที่จะบันทึกข้อมูลที่จัดเก็บ FHIR และสตรีมไปยัง BigQuery แล้ว
5. Cloud Functions (เขียนข้อมูล R4 ไปยัง FHIR Datastore โดยใช้ Healthcare API)
Cloud Functions ช่วยให้คุณเขียนโค้ดและนำไปใช้งานในระบบคลาวด์ได้อย่างสะดวกแบบ Serverless โดยมีความสามารถในการปรับขนาด จ่ายเมื่อใช้ ขับเคลื่อนด้วยเหตุการณ์ และเปิดกว้างในแง่ของการสนับสนุนด้านเทคโนโลยีและภาษา ดูฟีเจอร์เพิ่มเติมได้ในเอกสารประกอบ
ฟังก์ชันที่เราจะเขียนมีจุดประสงค์เพื่อตรวจสอบสิทธิ์และเขียนข้อมูลที่อยู่ในรูปแบบ FHIR R4 ลงใน FHIR Data Store โดยใช้ Cloud Healthcare API วิธีสร้าง Cloud Function
- ไปที่ Functions ของ Cloud แล้วคลิกสร้างฟังก์ชัน
- ตั้งชื่อเป็น fhir-datastore-proxy, ภูมิภาคเป็น us-central1 และตัวเลือกการตรวจสอบสิทธิ์เป็น "ต้องมีการตรวจสอบสิทธิ์"
- ขยายการตั้งค่ารันไทม์ บิลด์ การเชื่อมต่อ และความปลอดภัย คุณจะเพิ่มตัวแปรสภาพแวดล้อมรันไทม์ 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
- กด "ถัดไป" เพื่อไปยังหน้าถัดไป ซึ่งเราจะเพิ่มโค้ด
- ตอนนี้ควรแสดงเครื่องมือแก้ไขในบรรทัดแล้ว ให้เลือก Java 17 เป็นภาษา แล้วไปที่คลาส HelloHttpFunction.java เปลี่ยนชื่อเป็น FhirDatastoreProxy.java นอกจากนี้ อย่าลืมเปลี่ยนชื่อจุดแรกเข้าเป็น gcfv2.FhirDatastoreProxy ด้วย
- คัดลอกโค้ดจาก repo แล้ววางลงในโปรแกรมแก้ไขแบบอินไลน์
- ไปที่ไฟล์ pom.xml แล้วคัดลอกไฟล์ pom ในที่เก็บลงในเครื่องมือแก้ไขแบบอินไลน์
- คลิก "DEPLOY" แล้วระบบจะสร้างและเรียกใช้ฟังก์ชันของคุณในเร็วๆ นี้
หมายเหตุ:
- Cloud Healthcare API ที่ใช้ในฟังก์ชันนี้ใช้ข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชันเพื่อตรวจสอบสิทธิ์คำขอที่ส่งไปยัง Healthcare API
- บันทึก URL ของฟังก์ชันที่ติดตั้งใช้งานเพื่อให้เรียกใช้จากแอปพลิเคชัน Android ได้ จนถึงตอนนี้เราได้สร้างชิ้นส่วนทั้งหมดที่จำเป็นสำหรับแอป Android เพื่อเขียนข้อมูล FHIR ไปยัง BigQuery โดยใช้ Healthcare API แยกกัน ตอนนี้เรามาตรวจสอบว่าทุกอย่างเชื่อมต่อกันแล้วและมีการเรียกใช้ API เมื่อส่งแบบสอบถาม
6. การตั้งค่าโปรเจ็กต์ Android และ Firebase
เราจะใช้ Android Studio เวอร์ชันล่าสุดและโปรแกรมจำลอง Android ที่ตั้งค่าไว้ (คุณใช้อุปกรณ์ Android จริงได้ด้วย) เมื่อพร้อมแล้ว ให้ทำตามขั้นตอนด้านล่าง
- โคลนที่เก็บตัวอย่างแอป FHIR: https://github.com/google/fhir-app-examples
- เปิด Android Studio เลือก Import Project (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 ของบิลด์แล้ว
- เปิด FhirApplication.kt แล้วตั้งค่าฟิลด์ baseUrl เป็น URL ของ Cloud Function
- เลือก "ซิงค์โปรเจ็กต์กับไฟล์ Gradle" จากแถบเครื่องมือของ Android Studio
ตอนนี้เราได้ตั้งค่าและรวมทรัพยากร Dependency ในการติดตั้งใช้งานเรียบร้อยแล้ว
7. การตั้งค่าและการตอบแบบสอบถาม
เราได้ตั้งค่าการตั้งค่าแบบสอบถามในที่เก็บแล้ว แต่เรามาดูโค้ดกัน
- ตรวจสอบว่า FragmentContainerView อยู่ภายใน ConstraintLayout ในไฟล์ app/src/main/res/layout/activity_main.xml
- ตรวจสอบว่า QuestionnaireFragment มีแบบสอบถาม FHIR ที่เข้ารหัส JSON เพื่อแสดงผล Fragment
ในกรณีนี้ เราจะใช้ JSON - " new-patient-registration-paginated.json" เพื่อแสดงผล Fragment ตรวจสอบไฟล์ MainActivity.kt, AddPatientFragment.kt และ AddPatientViewModel.kt
ตอนนี้เราได้ยืนยัน Fragment, JSON และโมเดลแล้ว ให้เรียกใช้แอปและลองป้อนคำตอบสำหรับช่องในแบบสอบถาม
คุณจะเห็นการตรวจสอบความถูกต้องของฟิลด์สตริง วันที่ ฟิลด์ตัวเลข และเงื่อนไขอื่นๆ
คุณสามารถเรียกใช้แอปและตรวจสอบบันทึกเพื่อดูระเบียนที่สร้างขึ้น

ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ Fragment ได้ที่นี่ การตั้งค่าส่วนย่อยของแบบสอบถามและการตอบกลับก็มีเพียงเท่านี้
8. การแสดงผลชุดข้อมูล FHIRStore และ BigQuery
ตอนนี้เราพร้อมที่จะตั้งค่าและอัปเดตแล้ว ให้คลิก "ซิงค์โปรเจ็กต์กับไฟล์ Gradle" เมื่อเสร็จแล้ว
- เรียกใช้แอปในโปรแกรมจำลองของ Android แล้วดูแบบสอบถามโหลด
- ตอบคำถามแล้วคลิกส่งที่ด้านบน
- คุณควรเห็นข้อความ "บันทึกผู้ป่วยแล้ว" ในแอป
ดูผลลัพธ์ของที่เก็บ FHIR
ไปที่คอนโซล FHIRViewer ของ Google Cloud Healthcare

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

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

ตอนนี้คุณสามารถเรียกใช้ BigQuery SQL, Analytics และ ML ในข้อมูล FHIR ที่เพิ่งบันทึกลงในชุดข้อมูลระบบคลาวด์ได้แล้ว
9. ความสามารถในการค้นหาและใช้งานแบบออฟไลน์
หากต้องการให้แอป Android FHIR SDK ที่ขับเคลื่อนโดย OHS ทำงานแบบออฟไลน์ได้ โปรดทำตามหลักเกณฑ์การออกแบบที่ต้องเปิดใช้ในการติดตั้งใช้งานที่เราจะพูดถึงที่นี่
สำหรับการค้นหาทรัพยากร FHIR เรามี 2 วิธีดังนี้
- เครื่องมือดู FHIR ในคอนโซล Google Cloud
- วิธีการค้นหา FHIR โดยใช้คำขอ GET หรือ POST
10. การสาธิตแอป
เมื่อพัฒนาแอปแล้ว มาลองใช้แอปกันและดูผลลัพธ์ในระบบคลาวด์
11. ล้างข้อมูล
โปรดทำตามขั้นตอนต่อไปนี้เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในโพสต์นี้
- ในคอนโซล Google Cloud ให้ไปที่หน้าจัดการทรัพยากร
- ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิกลบ
- ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์ แล้วคลิกปิดเพื่อลบโปรเจ็กต์
12. ขอแสดงความยินดี
ยินดีด้วย ในโปรเจ็กต์นี้ เราได้สร้างแอปพลิเคชัน Android เพื่อจัดเก็บและค้นหาข้อมูล FHIR ของผู้ป่วยในที่เก็บข้อมูล FHIR ของ Cloud Healthcare และชุดข้อมูล BigQuery โดยใช้ Cloud Healthcare API ในเวลาเพียง 7 ขั้นตอน
- ตั้งค่าแอป Android
- ตั้งค่า Google Cloud Healthcare API
- สร้างชุดข้อมูลการดูแลสุขภาพและ FHIR Datastore
- ชุดข้อมูล BigQuery ที่สร้างขึ้น
- กำหนดค่าสตรีม BigQuery เพื่อเขียนข้อมูล FHIR Datastore ไปยังชุดข้อมูล BigQuery
- ติดตั้งใช้งาน Cloud Function เพื่อเขียนข้อมูล R4 ไปยัง FHIR Datastore
- ทริกเกอร์ Cloud Functions จากแอป Android เมื่อส่งคำตอบแบบสอบถาม
เมื่อทราบขั้นตอนที่ชัดเจนแล้ว คุณสามารถลองทำตามขั้นตอนเดียวกันสำหรับการซิงค์การแก้ไข FHIR ของผู้ป่วยกับระบบคลาวด์ได้