המדריך הזה תואם לגרסה 1.1.0-beta02 של Health Connect.
כדי לכתוב נתונים רפואיים באמצעות 'רשומות רפואיות' ב-Health Connect, פועלים לפי השלבים הבאים:
- בדיקת הזמינות של התכונות
- בקשת הרשאות כתיבה
- יצירת מקור נתונים (
MedicalDataSource
) - כתיבת משאב רפואי (
MedicalResource
)
זמינות התכונות
כדי לדעת אם המכשיר של המשתמש תומך ברשומות רפואיות ב-Health Connect, בודקים את הזמינות שלFEATURE_PERSONAL_HEALTH_RECORD
בלקוח:
if (healthConnectClient
.features
.getFeatureStatus(
HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD
) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {
// Feature is available
} else {
// Feature isn't available
}
מידע נוסף זמין במאמר בדיקת זמינות התכונות.
הרשאות נדרשות
ההרשאה הבאה מגנה על כתיבת נתונים רפואיים:
android.permission.health.WRITE_MEDICAL_DATA
צריך להצהיר על ההרשאות האלה ב-Play Console עבור האפליקציה, וגם בקובץ המניפסט של האפליקציה:
<application>
<uses-permission
android:name="android.permission.health.WRITE_MEDICAL_DATA" />
</application>
באחריותכם להצהיר על כל ההרשאות המתאימות שאתם מתכוונים להשתמש בהן במכשירים ובאפליקציות שלכם. כדאי גם לוודא שהמשתמש העניק את כל ההרשאות לפני השימוש.
בקשת הרשאות מהמשתמש
אחרי שיוצרים מופע של לקוח, האפליקציה צריכה לבקש הרשאות מהמשתמש. צריך לאפשר למשתמשים להעניק או לדחות הרשאות בכל שלב.
כדי לעשות זאת, יוצרים קבוצת הרשאות לסוגי הנתונים הנדרשים. קודם צריך לוודא שההרשאות שמוגדרות בסט מוצהרות במניפסט של Android.
// Create a set of permissions for required data types
import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_WRITE_MEDICAL_DATA
val PERMISSIONS =
setOf(
PERMISSION_WRITE_MEDICAL_DATA
)
אפשר להשתמש ב-getGrantedPermissions
כדי לבדוק אם האפליקציה כבר קיבלה את ההרשאות הנדרשות. אם לא, צריך להשתמש ב-createRequestPermissionResultContract
כדי לבקש את ההרשאות האלה. מוצג מסך ההרשאות של Health Connect.
// Create the permissions launcher
val requestPermissionActivityContract = PermissionController.createRequestPermissionResultContract()
val requestPermissions = registerForActivityResult(requestPermissionActivityContract) { granted ->
if (granted.containsAll(PERMISSIONS)) {
// Permissions successfully granted
} else {
// Lack of required permissions
}
}
suspend fun checkPermissionsAndRun(healthConnectClient: HealthConnectClient) {
val granted = healthConnectClient.permissionController.getGrantedPermissions()
if (granted.containsAll(PERMISSIONS)) {
// Permissions already granted; proceed with inserting or reading data
} else {
requestPermissions.launch(PERMISSIONS)
}
}
המשתמשים יכולים לתת או לבטל הרשאות בכל שלב, ולכן האפליקציה צריכה לבדוק מעת לעת אילו הרשאות ניתנו לה, ולטפל בתרחישים שבהם ההרשאה בוטלה.
מקורות נתונים
MedicalDataSource
ב-Health Connect מייצג מקור נתונים שגלוי למשתמשים, כמו ארגון בריאות, בית חולים או API.
התיקים הרפואיים שמאוחסנים ב-Health Connect מאורגנים בMedicalDataSource
. כך אפשר להפריד בין רשומות רפואיות של אותו אדם שמגיעות ממקורות שונים, כמו ממשקי API או מערכות בריאות.
אם כל הרשומות מגיעות מאותו מקור, אפליקציה לכתיבה צריכה ליצור רק MedicalDataSource
אחד. אם הרשומות מגיעות מכמה מקורות, אפליקציה עדיין יכולה ליצור MedicalDataSource
יחיד אם הנתונים תואמים ולכל הרשומות יש שילוב ייחודי של סוג משאב FHIR ומזהה משאב FHIR.
אחרת, צריך ליצור MedicalDataSource
לכל מקור נתונים.
כל הרשומות הרפואיות צריכות להיות משויכות ל-MedicalDataSource
, ולכן צריך ליצור אותו לפני כתיבת המשאבים.
מאפיינים של MedicalDataSource
:
- השם המוצג (חובה) – השם המוצג למשתמשים של מקור הנתונים, שזוהה באופן ייחודי לכל אפליקציית כתיבה.
מזהה URI בסיסי של FHIR (חובה) – אם הנתונים מגיעים משרת FHIR, צריך להזין את כתובת ה-URL הבסיסית של FHIR (לדוגמה,
https://example.com/fhir/
). אפשר לשייך כמה מקורות נתונים לאותה כתובת URL בסיסית של FHIR.אם הנתונים נוצרו על ידי אפליקציה ללא כתובת URL של FHIR, צריך להזין כאן URI ייחודי וברור שהוגדר על ידי האפליקציה (לדוגמה,
myapp://..
) שמפנה למקור הנתונים.לדוגמה, אם אפליקציית לקוח תומכת בקישורי עומק, אפשר להשתמש בקישור העומק הזה כ-URI בסיסי של FHIR. האורך המקסימלי של ה-URI הוא 2,000 תווים.
שם החבילה (מאוכלס אוטומטית) – האפליקציה שכותבת את הנתונים.
גרסת FHIR (חובה) – גרסת FHIR. חייבת להיות גרסה נתמכת.
יצירה של רשומת MedicalDataSource
צריך ליצור רשומה לכל ארגון או ישות בתחום הבריאות שהאפליקציה מקושרת אליהם.
// Create a `MedicalDataSource`
// Note that `displayName` must be unique across `MedicalDataSource`s
// Each `MedicalDataSource` is assigned an `id` by the system on creation
val medicalDataSource: MedicalDataSource =
healthConnectClient.createMedicalDataSource(
CreateMedicalDataSourceRequest(
fhirBaseUri = Uri.parse("https://fhir.com/oauth/api/FHIR/R4/"),
displayName = "Test Data Source",
fhirVersion = FhirVersion(4, 0, 1)
)
)
מחיקת רשומה של MedicalDataSource
בדוגמה הקודמת, המערכת מחזירה id
בזמן היצירה. אם צריך למחוק את רשומת MedicalDataSource
, צריך להפנות לאותו id
:
// Delete the `MedicalDataSource` that has the specified `id`
healthConnectClient.deleteMedicalDataSourceWithData(medicalDataSource.id)
מקורות מידע רפואי
MedicalResource
ב-Health Connect מייצג משאב FHIR (שמכיל רשומה רפואית), יחד עם מטא-נתונים.
מאפיינים של MedicalResource
:
- DataSourceId (חובה) – מקור הנתונים כפי שמתואר ב-
MedicalDataSource
. - גרסת FHIR (חובה) – גרסת FHIR. חייבת להיות גרסה נתמכת.
- FHIR Resource (חובה) מופע של FHIR Resource שמקודד באמצעות JSON.
- סוג המשאב הרפואי (מאוכלס אוטומטית) – הקטגוריה שמוצגת למשתמש של המשאב, שמופה להרשאות שמוצגות למשתמש.
הכנת משאבי FHIR ב-JSON
לפני שכותבים משאבים רפואיים ב-Health Connect, צריך להכין את רשומות המשאבים של FHIR ב-JSON. אחסון כל קובץ JSON במשתנה משלו כדי להוסיף אותו כמשאב רפואי.
אם אתם צריכים עזרה בפורמט FHIR JSON, תוכלו לעיין בנתונים לדוגמה שסופקו על ידי ארגון HL7.
הוספה או עדכון של רשומות MedicalResource
משתמשים ב-UpsertMedicalResourceRequest
כדי להוסיף רשומות חדשות או לעדכן רשומות קיימות של MedicalResource
עבור MedicalDataSource
:
// Insert `MedicalResource`s into the `MedicalDataSource`
val medicalResources: List<MedicalResource> =
healthConnectClient.upsertMedicalResources(
listOf(
UpsertMedicalResourceRequest(
medicalDataSource.id,
medicalDataSource.fhirVersion,
medicationJsonToInsert // a valid FHIR json string
)
)
)
// Update `MedicalResource`s in the `MedicalDataSource`
val updatedMedicalResources: List<MedicalResource> =
healthConnectClient.upsertMedicalResources(
listOf(
UpsertMedicalResourceRequest(
medicalDataSource.id,
medicalDataSource.fhirVersion,
// a valid FHIR json string
// if this resource has the same type and ID as in `medicationJsonToInsert`,
// this `upsertMedicalResources()` call will update the previously inserted
// `MedicalResource`
updatedMedicationJsonToInsert
)
)
)
דוגמה למשאב FHIR
בדוגמה הקודמת, המשתנה medicationJsonToInsert
ייצג מחרוזת JSON תקינה של FHIR.
זו דוגמה לאופן שבו קובץ ה-JSON יכול להיראות, באמצעות AllergyIntolerance כסוג משאב FHIR, שיומפה לסוג המשאב הרפואי FHIR_RESOURCE_TYPE_ALLERGY_INTOLERANCE
ברשומות רפואיות:
{
"resourceType": "AllergyIntolerance",
"id": "allergyintolerance-1",
"criticality": "high",
"code": {
"coding": [
{
"system": "http://snomed.info/sct",
"code": "91936005",
"display": "Penicillin allergy"
}
],
"text": "Penicillin allergy"
},
"recordedDate": "2020-10-09T14:58:00+00:00",
"asserter": {
"reference": "Patient/patient-1"
},
"lastOccurrence": "2020-10-09",
"patient": {
"reference": "Patient/patient-1",
"display": "B., Alex"
}
...
}
מחיקת רשומה של MedicalResource
יכול להיות שרשומות MedicalResource
יימחקו לפי מזהה:
// Delete `MedicalResource`s matching the specified `dataSourceId`, `type` and `fhirResourceId`
healthConnectClient.deleteMedicalResources(
medicalResources.map { medicalResource: MedicalResource ->
MedicalResourceId(
dataSourceId = medicalDataSource.id,
fhirResourceType = medicalResource.id.fhirResourceType,
fhirResourceId = medicalResource.id.fhirResourceId
)
}
)
או שהם יכולים להימחק על ידי medicalResourceType
:
// Delete all `MedicalResource`s that are in any pair of provided `dataSourceIds` and
// `medicalResourceTypes`
healthConnectClient.deleteMedicalResources(
DeleteMedicalResourcesRequest(
dataSourceIds = setOf(medicalDataSource.id),
medicalResourceTypes = setOf(MEDICAL_RESOURCE_TYPE_MEDICATIONS)
)
)