תיעוד ועיבוד של נתוני בריאות באמצעות ספרייה לתיעוד נתונים מובנה

1. לפני שמתחילים

מה תפַתחו

ב-Codelab הזה תלמדו איך ליצור אפליקציה ל-Android באמצעות 'ספריית נתונים מובְנים לתיעוד נתונים'. האפליקציה שלך תשתמש בספריית תיעוד הנתונים המובְנים כדי לעבד ולעבד שאלונים ותשובות של FHIR.

מה תלמדו

  • איך לשלב את ספריית הנתונים המובְנים באפליקציה ל-Android
  • איך להציג שאלון
  • איך לקבל תשובות בתור QuestionnaireResponse
  • איך לחלץ משאבי FHIR מ-QuestionnaireResponse

מה הדרישות כדי להצטרף לתוכנית?

ה-Codelab הזה מתמקד בספרייה לתיעוד נתונים מובנים. מושגים ובלוקים של קוד שאינם רלוונטיים מודגשים, וניתן פשוט להעתיק ולהדביק אותם. אם עדיין לא יצרתם אפליקציות ל-Android, אפשר להתחיל בבניית האפליקציה הראשונה.

2. להגדרה

הורדת הקוד

כדי להוריד את הקוד של ה-Codelab הזה, יש לשכפל את מאגר ה-SDK של Android FHIR: git clone https://github.com/google/android-fhir.git

הפרויקט לתחילת העבודה של ה-Codelab הזה נמצא ב-codelabs/datacapture.

ייבוא האפליקציה אל Android Studio

כדי להתחיל, מייבאים את האפליקציה למתחילים אל Android Studio.

פותחים את Android Studio, בוחרים באפשרות Import Project (Gradle, Eclipse ADT, וכו') ואז בוחרים את התיקייה codelabs/datacapture מקוד המקור שהורדתם קודם.

מסך ההתחלה של Android Studio

הפעלת האפליקציה לתחילת הדרך

עכשיו, אחרי שייבאתם את הפרויקט אל Android Studio, אתם מוכנים להפעיל את האפליקציה בפעם הראשונה.

מחברים את מכשיר Android באמצעות USB למארח, או מפעילים את האמולטור של Android Studio ולוחצים על 'הפעלה' (לחצן הפעלה) בסרגל הכלים של Android Studio.

אפליקציית Hello World

כפי שאפשר לראות, אין כאן הרבה עדיין, אז קדימה, נתחיל להציג שאלון באפליקציה.

3. הוספה של ספריית תיעוד נתונים מובנים לפרויקט

הוספת יחסי התלות לספרייה לתיעוד נתונים מובנים

יחסי התלות של ספריית תיעוד הנתונים המובְנים מאפשרים לשלב את ספריית תיעוד הנתונים המובְנים באפליקציה. יש להוסיף את השורות הבאות בסוף קובץ app/build.gradle.kts של הפרויקט:

dependencies {
    // ...

    implementation("com.google.android.fhir:data-capture:1.0.0")
    implementation("androidx.fragment:fragment-ktx:1.5.5")
}

סנכרון הפרויקט עם קובצי Gradle

כדי לוודא שכל יחסי התלות זמינים לאפליקציה שלכם, בשלב הזה צריך לסנכרן את הפרויקט עם קובצי Gradle.

בסרגל הכלים של Android Studio, בוחרים באפשרות סנכרון הפרויקט עם Gradle Files (לחצן סנכרון של Gradle). אתם גם מפעילים שוב את האפליקציה כדי לבדוק אם יחסי התלות פועלים כמו שצריך.

4. הצגת שאלון

בשלב הזה, מוסיפים את הפונקציונליות לאפליקציה לתחילת העבודה כדי לעבד שאלון ב-FragmentContainerView.

בשלב הבא תוצג ב-Android Studio בקשה להוסיף את פריטי הייבוא הנחוצים:

  • androidx.core.os.bundleOf
  • androidx.fragment.app.add
  • androidx.fragment.app.commit
  • android.util.Log
  • com.google.android.fhir.datacapture.QuestionnaireFragment

שלב 1: הוספת FragmentContainerView

צריך להוסיף FragmentContainerView לפריסה של האפליקציה. כאן יוצגו ה-QuestionnaireFragment שתיצרו מאוחר יותר.

  1. פתיחה של activity_main.xml (res >Layout > activity_main.xml).
  2. האפשרויות לתצוגות 'קוד', 'פיצול' ו'עיצוב' מוצגות בפינה השמאלית העליונה ב'עורך הפריסה'.
  3. בוחרים בתצוגת הקוד. אפשרויות של תצוגת פריסה
  4. אין צורך ב-TextView, לכן כדאי למחוק. חשוב למחוק את כל הנתונים, החל מ-<TextView ועד ל-/> הסוגר.
  5. צריך להוסיף FragmentContainerView בתוך ConstraintLayout. הקובץ activity_main.xml אמור להיראות כך:
    <?xml version="1.0" encoding="utf-8" ?>
    <androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity"
    >
    
    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/fragment_container_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintTop_toTopOf="parent" />
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    

שלב 2: הוספה של QuestionnaireFragment אל FragmentContainerView

כדי לעבד את QuestionnaireFragment, נדרש שאלון FHIR בקידוד JSON. מכיוון שהשאלון קטן (<512KB), צריך לכלול אותו כ-String ב-Bundle של ארגומנטים שישמשו ליצירת המקטע. מטעמי ביצועים, יש לספק שאלונים גדולים יותר כ-URI.

אפשר לעיין בקובץ questionnaire.json אם רוצים, אבל אחד היתרונות של 'הספרייה לתיעוד נתונים מובנים' הוא שאין צורך לדעת את המבנה של שאלון FHIR (או כל דבר אחר על FHIR) כדי שהוא יוכל לעבד אותו! הקובץ הזה נבדק בתשומת לב רבה יותר בהמשך ב-Codelab.

יוצרים QuestionnaireFragment באמצעות הכלי לבניית מודלים, ומגדירים את השאלון באמצעות פונקציית ה-Setter. כדי להציג את QuestionnaireFragment בתוך מאגר הפריסה, צריך להשתמש ב-FragmentManager כדי ליצור FragmentTransaction.

פותחים את MainActivity.kt ומוסיפים את הקוד הבא למחלקה MainActivity:

// Step 2: Configure a QuestionnaireFragment
questionnaireJsonString = getStringFromAssets("questionnaire.json")

if (savedInstanceState == null) {
  supportFragmentManager.commit {
    setReorderingAllowed(true)
    add(
      R.id.fragment_container_view,
      QuestionnaireFragment.builder().setQuestionnaire(questionnaireJsonString!!).build()
    )
  }
}

מידע נוסף על שימוש במקטעים.

כדי להפעיל את Codelab, לוחצים על 'הפעלה' (לחצן הפעלה) בסרגל הכלים של Android Studio. אתם אמורים לראות משהו שדומה לזה:

שאלון שמעובד באמצעות אמולטור

עליך לעבור על השאלון ולנסות להזין כמה תשובות. נעשה שימוש בכמה ווידג'טים שונים לתשובות, כולל בוליאני, טקסט ותאריכים, שעובדו באופן אוטומטי על סמך הסוג הבסיסי בשאלון FHIR המקורי.

מבחינה טכנית, זה כל מה שצריך לעשות כדי לעבד שאלון! מעולה!

שאלון לא מאוד מועיל אם אין לך אפשרות לראות את התשובות שהמשתמשים סיפקו. עכשיו נעבור לשלב הבא של קבלת תשובה לשאלון!

5. קבלת תשובה לשאלון

בשלבים הקודמים העברנו שאלון FHIR באפליקציה שלך.

בקטע הזה תקבל את התשובות מהשאלון כתשובה לשאלון.

מוצאים את method submitQuestionnaire() ומוסיפים את הקוד הבא:

// Get a questionnaire response
val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container_view)
        as QuestionnaireFragment
val questionnaireResponse = fragment.getQuestionnaireResponse()

// Print the response to the log
val jsonParser = FhirContext.forCached(FhirVersionEnum.R4).newJsonParser()
val questionnaireResponseString =
    jsonParser.encodeResourceToString(questionnaireResponse)
Log.d("response", questionnaireResponseString)

כדי לקבל את התשובה לשאלון, מאחזרים את קטע השאלון שנוצר קודם לכן ואז משתמשים בשיטה getQuestionnaireResponse(). הפעולה הזו מחזירה HAPI FHIR QuestionnaireResponse שניתן להשתמש בו ישירות או עם חלקים אחרים של Android FHIR SDK. ה-Codelab הזה משתמש בספריות HAPI FHIR אחרות כדי להמיר אותו למחרוזת JSON להצגה ביומן.

מפעילים שוב את האפליקציה כדי ליצור אותה מחדש עם השינויים האחרונים. אחרי שהשאלון מופעל, מזינים פרטים מסוימים בשאלון ומקישים על שליחה. ביומן, אמורה להופיע הודעה שמכילה את QuestionnaireResponse בפורמט JSON.

D/response: {"resourceType":"QuestionnaireResponse","item":[{"linkId":"PR","text":"Patient information","item":[{"linkId":"PR-name","text":"Name","item":[{"linkId":"PR-name-given","text":"First Name","answer":[{"valueString":"Dani"}]},{"linkId":"PR-name-family","text":"Family Name","answer":[{"valueString":"Lee"}]}]},{"linkId":"PR-birthdate","text":"Date of Birth","answer":[{"valueDate":"1990-02-14"}]},{"linkId":"PR-id","text":"Identifying information","item":[{"linkId":"PR-name-id-url"},{"linkId":"PR-name-id","text":"Patient Id","answer":[{"valueString":"12345"}]}]}]}]}

6. חילוץ משאבי FHIR מתגובה לשאלון

השאלון שכלול בפרויקט למתחילים מיועד לתהליך פשוט של רישום מטופלים, ולכן ייתכן שבסופו של דבר תרצו להשתמש בתשובות לשאלון כדי ליצור משאב מטופלים של FHIR שמבוסס עליו. ההמרה הזו מתשובה בשאלון למשאבי FHIR נקראת חילוץ נתונים. ניתן לעשות זאת באמצעות המחלקה ResourceMapper של ספריית תיעוד הנתונים המובְנים.

כדי לבצע את חילוץ הנתונים, יש להוסיף לשאלון את המידע הנדרש לחילוץ הנתונים. למרבה המזל, השאלון לדוגמה כבר הוגדר לחילוץ מבוסס-הגדרה.

מוצאים את method submitQuestionnaire() ומוסיפים את הקוד הבא:

lifecycleScope.launch {
  val questionnaire =
    jsonParser.parseResource(questionnaireJsonString) as Questionnaire
  val bundle = ResourceMapper.extract(questionnaire, questionnaireResponse)
  Log.d("extraction result", jsonParser.encodeResourceToString(bundle))
}

ל-ResourceMapper.extract() נדרש שאלון HAPI FHIR, שאותו אפשר ליצור על ידי ניתוח מחרוזת ה-JSON של השאלון קודם, ו-QuestionnaireResponse שכבר קיבלנו קודם. היא מחזירה חבילה של טרנזקציית HAPI FHIR שמכילה משאב אחד או יותר שחולצו. במקרה הזה, משאב מטופל אחד.

מפעילים שוב את האפליקציה כדי ליצור אותה מחדש עם השינויים האחרונים. כשהבדיקה תסתיים, מזינים כמה פרטים ומקישים על שליחה. ביומן, אמורה להופיע עכשיו הודעה extraction result שמכילה את ייצוג JSON של חבילת FHIR שחולצה.

D/extraction result: {"resourceType":"Bundle","type":"transaction","entry":[{"resource":{"resourceType":"Patient","identifier":[{"value":"12345"}],"name":[{"family":"Lee","given":["Dani"]}],"birthDate":"1990-02-14"}}]}

7. כל הכבוד!

השתמשת בספריית הנתונים המובְנים לתיעוד נתונים כדי לעבד שאלונים ותשובות ל-FHIR באפליקציה:

  • הצגת שאלון
  • קבלת תשובה לשאלון
  • חילוץ משאבי FHIR מ-QuestionnaireResponse

זה כל מה שצריך כדי להפעיל אותו!

ככל שתמשיכו, יכול להיות שתרצו לעבוד עם משאבי FHIR בדרכים נוספות. כדאי לעיין בספריית המנועים FHIR של Android FHIR SDK כדי ללמוד איך לאחסן ולנהל משאבי FHIR באופן מקומי באפליקציה שלכם ולסנכרן נתונים עם שרת FHIR מרוחק.

מה נכלל

  • איך להוסיף ספרייה לתיעוד נתונים מובנים לאפליקציה ל-Android
  • איך משתמשים ב-QuestionnaireFragment וב-ResourceMapper כדי לעבוד עם שאלוני FHIR

השלבים הבאים

  • עיין בתיעוד של ספריית התיעוד של הנתונים המובְנים
  • להתאים אישית את העיצוב והסגנון של שאלונים שעברו עיבוד
  • החלה של ספריית תיעוד הנתונים המובְנים באפליקציה שלכם ל-Android

מידע נוסף