เกี่ยวกับ Codelab นี้
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 ก่อน
แผนภาพด้านบนจะแสดงโฟลว์ อ่านบล็อกเพื่อดูคำอธิบายโดยละเอียดของแต่ละคอมโพเนนต์
2 ข้อกำหนด
- เบราว์เซอร์ เช่น Chrome หรือ Firefox
- โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน
- Android Studio เวอร์ชันล่าสุด
- การตั้งค่าโปรแกรมจำลอง Android (คุณใช้อุปกรณ์ Android จริงได้ด้วย)
สร้างโปรเจ็กต์
- ในคอนโซล Google Cloud ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud ในหน้าตัวเลือกโปรเจ็กต์
- ตรวจสอบว่าเปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ที่อยู่ในระบบคลาวด์แล้ว ดูวิธีตรวจสอบว่าเปิดใช้การเรียกเก็บเงินในโปรเจ็กต์แล้ว
- เปิดใช้ API ที่จำเป็น (BigQuery, Healthcare API)
เปิดใช้งาน Cloud Shell
- คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมแบบบรรทัดคำสั่งที่ทำงานใน Google Cloud และโหลด bq ไว้ล่วงหน้า
คลิก "เปิดใช้งาน Cloud Shell" ที่มุมขวาบนจาก Cloud Console:
- เมื่อเชื่อมต่อกับ Cloud Shell คุณควรเห็นว่าคุณผ่านการตรวจสอบสิทธิ์แล้ว และโปรเจ็กต์ได้ตั้งเป็นรหัสโปรเจ็กต์ของคุณแล้ว หากไม่ได้ตั้งค่าโปรเจ็กต์ไว้ ให้ใช้คำสั่งต่อไปนี้เพื่อตั้งโปรเจ็กต์
gcloud config set project <YOUR_PROJECT_ID>
ดูคำสั่งและการใช้งาน gcloud ในเอกสารประกอบ
3 ตั้งค่า Healthcare API
- ตรวจสอบว่าได้เปิดใช้ Healthcare API อยู่โดยไปที่ไลบรารี Google Cloud Console API ค้นหา 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 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 รายการ
- ไปที่คอนโซล Google Cloud Healthcare, หน้าเบราว์เซอร์
- คลิกชุดข้อมูลที่สร้างขึ้นใหม่
- คลิก "DATA STORE"
ที่สร้างใหม่
- คลิกเพิ่มการกำหนดค่าสตรีมมิงใหม่
- เลือกชุดข้อมูล BigQuery ที่สร้างขึ้นใหม่จากรายการ เป็นประเภทสคีมาเป็น "Analytics V2" และประเภททรัพยากร "ผู้ป่วย" จากรายการ (คุณสามารถเลือกชนิดทรัพยากรได้หลายรายการ) และคลิก เสร็จสิ้น
เท่านี้เอง คุณพร้อมแล้วที่จะบันทึกข้อมูลที่เก็บ FHIR และสตรีมไปยัง BigQuery
5 Cloud Functions (เขียนข้อมูล R4 ไปยัง FHIR Datastore โดยใช้ Healthcare API)
Cloud Functions ช่วยให้คุณเขียนโค้ดและทำให้ใช้งานได้บนระบบคลาวด์ในรูปแบบ Serverless ได้อย่างสะดวก รองรับการปรับขนาด จ่ายตามการใช้งานจริง ขับเคลื่อนด้วยเหตุการณ์ และเปิดกว้างในแง่ของการสนับสนุนด้านเทคโนโลยีและภาษา ดูฟีเจอร์เพิ่มเติมในเอกสารประกอบ
ฟังก์ชันที่เราจะเขียนมีไว้เพื่อตรวจสอบสิทธิ์และเขียนข้อมูลที่กำลังมาในรูปแบบ FHIR R4 ลงในพื้นที่เก็บข้อมูล FHIR โดยใช้ Cloud Healthcare API วิธีสร้าง Cloud Function
- ไปที่ฟังก์ชันของระบบคลาวด์ แล้วคลิกสร้างฟังก์ชัน
- ตั้งชื่อเป็น 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
- คัดลอกโค้ดจากที่เก็บแล้ววางในตัวแก้ไขในบรรทัด
- ไปที่ไฟล์ pom.xml และคัดลอกไฟล์ pom ในที่เก็บลงในเครื่องมือแก้ไขในบรรทัด
- คลิก DEPLOY แล้วระบบจะสร้างและเรียกใช้ฟังก์ชันในไม่ช้า
หมายเหตุ:
- Cloud Healthcare API ที่ใช้ในฟังก์ชันนี้ใช้ข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชันเพื่อตรวจสอบสิทธิ์คำขอที่มาจาก Healthcare API
- บันทึก URL ของฟังก์ชันที่ทำให้ใช้งานได้แล้วเพื่อให้สามารถเรียกใช้จากแอปพลิเคชัน Android จนถึงตอนนี้ เราได้สร้างส่วนต่างๆ ทั้งหมดที่จำเป็นต่อการเขียนข้อมูล FHIR ไปยัง BigQuery โดยใช้ Healthcare API อย่างอิสระ ตอนนี้มาตรวจสอบว่าองค์ประกอบทั้งหมดเชื่อมต่อกันและมีการเรียกใช้ API เมื่อส่งแบบสอบถาม
6 การตั้งค่าโปรเจ็กต์ Android และ Firebase
เราจะใช้ Android Studio เวอร์ชันล่าสุดและการตั้งค่าโปรแกรมจำลอง Android (คุณใช้อุปกรณ์ Android จริงได้ด้วย) เมื่อพร้อมแล้ว ให้ทำตามขั้นตอนด้านล่าง
- โคลนที่เก็บตัวอย่างแอป FHIR: https://github.com/google/fhir-app-examples
- เปิด 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 ของบิลด์แล้ว
- เปิด FhirApplication.kt แล้วตั้งค่าช่อง baseUrl เป็น URL ของ Cloud Function
- เลือก "ซิงค์โปรเจ็กต์กับไฟล์ Gradle" จากแถบเครื่องมือ Android Studio
ตอนนี้เราได้ดำเนินการในส่วนการตั้งค่าและการรวมทรัพยากร Dependency เรียบร้อยแล้ว
7 การตั้งค่าและการตอบกลับแบบสอบถาม
เราได้ตั้งค่าแบบสอบถามในที่เก็บแล้ว แต่ลองมาดูโค้ดกัน
- ตรวจสอบว่า FragmentContainerView มีอยู่ใน ConstraintLayout ในไฟล์ app/src/main/res/layout/activity_main.xml
- ตรวจสอบว่า QuestionnaireFragment มี FHIR Questionnaire ที่เข้ารหัส JSON เพื่อแสดงผลส่วนย่อย
ในกรณีนี้ เราจะใช้ JSON - " new-patient-registration-paginated.json" เพื่อแสดงผลส่วนย่อย ตรวจสอบไฟล์ MainActivity.kt, AddPatientFragment.kt และ AddPatientViewModel.kt
เมื่อยืนยันส่วนย่อย, JSON และโมเดลแล้ว ให้เรียกใช้แอปและลองป้อนคำตอบสำหรับฟิลด์ในแบบสอบถาม
คุณจะเห็นการตรวจสอบความถูกต้องของช่องสตริง วันที่ ตัวเลข และเงื่อนไขอื่นๆ
คุณสามารถเรียกใช้แอปและตรวจสอบบันทึกเพื่อดูระเบียนที่สร้างไว้
ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ Fragment ได้ที่นี่ ซึ่งก็ใช้กับส่วนย่อยของแบบสอบถามและการตั้งค่าคำตอบได้พอสมควร
8 FHIRStore และการแสดงผลชุดข้อมูล BigQuery
ตอนนี้เราตั้งค่าและอัปเดตเรียบร้อยแล้ว ให้คลิก "ซิงค์โปรเจ็กต์กับไฟล์ Gradle" เมื่อดำเนินการเสร็จแล้ว
- โปรดเรียกใช้แอปในโปรแกรมจำลองของ Android และดูการโหลดแบบสอบถามของคุณ
- ตอบคำถามแล้วคลิก "ส่ง" ที่ด้านบน
- คุณควรเห็นข้อความ "บันทึกข้อมูลผู้ป่วยแล้ว" ในแอป
ดูผลลัพธ์ของที่เก็บ FHIR
ไปที่คอนโซล FHIRViewer ของ Google Cloud Healthcare
เลือกที่เก็บ FHIR แล้วทำการค้นหา และกด "เรียกใช้การค้นหา" คุณจะเห็นผลการค้นหาที่ด้านล่าง
ดูผลลัพธ์ของชุดข้อมูล BigQuery
ไปที่คอนโซล BigQuery ของ Google Cloud และในแผงสำรวจ ให้ไปที่ชุดข้อมูลที่คุณสร้างไว้สำหรับโปรเจ็กต์นี้
คลิก "แสดงตัวอย่าง" แล้วคุณจะเห็นตัวเลขและข้อมูลผลลัพธ์เดียวกันที่พบในที่เก็บ Healthcare FHIR ในชุดข้อมูล BigQuery
ตอนนี้คุณดำเนินการ BigQuery SQL, Analytics และ ML กับข้อมูล FHIR ที่เพิ่งบันทึกไว้ในชุดข้อมูลในระบบคลาวด์ได้แล้ว
9 ความสามารถในการค้นหาและออฟไลน์
โปรดทำตามหลักเกณฑ์การออกแบบซึ่งจำเป็นต้องเปิดใช้ในการใช้งานที่พูดถึงในที่นี้เพื่อให้แอป FHIR SDK บน Android ที่ขับเคลื่อนโดย OHS ทำงานได้
สำหรับการค้นหาทรัพยากร FHIR เรามี 2 วิธีดังนี้
- ผู้ดู FHIR ใน Google Cloud Console
- วิธีการค้นหา FHIR โดยใช้คำขอ GET หรือ POST
10 การสาธิตแอป
ตอนนี้แอปของเราได้รับการพัฒนาแล้ว ลองเล่นดู และดูผลลัพธ์ในระบบคลาวด์
11 ล้างข้อมูล
โปรดทำตามขั้นตอนต่อไปนี้เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในโพสต์นี้
- ในคอนโซล Google Cloud ให้ไปที่หน้าจัดการทรัพยากร
- ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิกลบ
- ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์ แล้วคลิกปิดเครื่องเพื่อลบโปรเจ็กต์
12 ขอแสดงความยินดี
ยินดีด้วย ในโปรเจ็กต์นี้
- ตั้งค่าแอป Android
- ตั้งค่า Google Cloud Healthcare API
- สร้างชุดข้อมูล Healthcare และ FHIR Datastore แล้ว
- สร้างชุดข้อมูล BigQuery แล้ว
- กำหนดค่าสตรีม BigQuery เพื่อเขียนข้อมูล FHIR Datastore ไปยังชุดข้อมูล BigQuery
- ทำให้ Cloud Function ใช้งานได้เพื่อเขียนข้อมูล R4 ไปยัง FHIR Datastore แล้ว
- Cloud Functions ที่ทริกเกอร์จากแอป Android เมื่อส่งคำตอบแบบสอบถาม
เมื่อขั้นตอนชัดเจนแล้ว ก็ลองทำตามขั้นตอนเดียวกันนี้สำหรับการซิงค์การแก้ไข FHIR ของผู้ป่วยไปยังระบบคลาวด์