स्वास्थ्य से जुड़ा डेटा सेव करने की अनुमति

यह गाइड, Health Connect के 1.1.0-beta02 वर्शन के साथ काम करती है.

Health Connect में निजी स्वास्थ्य रिकॉर्ड (पीएचआर) का इस्तेमाल करके, चिकित्सा से जुड़ा डेटा सेव करने के लिए, यह तरीका अपनाएं:

  1. यह देखना कि सुविधा उपलब्ध है या नहीं
  2. डेटा में बदलाव करने की अनुमतियों का अनुरोध करना
  3. डेटा सोर्स बनाना (MedicalDataSource)
  4. मेडिकल रिसॉर्स लिखें (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)
  }
}

उपयोगकर्ता किसी भी समय अनुमतियां दे सकते हैं या उन्हें रद्द कर सकते हैं. इसलिए, आपके ऐप्लिकेशन को समय-समय पर यह देखना होगा कि उपयोगकर्ता ने कौनसी अनुमतियां दी हैं. साथ ही, उन स्थितियों को मैनेज करना होगा जिनमें अनुमति रद्द हो जाती है.

डेटा सोर्स

Health Connect में MedicalDataSource, उपयोगकर्ता के लिए उपलब्ध डेटा सोर्स को दिखाता है. जैसे, स्वास्थ्य सेवा देने वाला संगठन, अस्पताल या एपीआई.

Health Connect में सेव किए गए मेडिकल रिकॉर्ड को एक MedicalDataSource में व्यवस्थित किया जाता है. इससे, एक ही व्यक्ति के अलग-अलग सोर्स से मिले मेडिकल रिकॉर्ड को अलग-अलग रखा जा सकता है. जैसे, एपीआई या स्वास्थ्य सेवा देने वाले सिस्टम.

अगर सभी रिकॉर्ड एक ही सोर्स से आते हैं, तो लिखने वाले ऐप्लिकेशन को सिर्फ़ एक MedicalDataSource बनाना होगा. अगर रिकॉर्ड एक से ज़्यादा सोर्स से आते हैं, तो भी कोई ऐप्लिकेशन एक MedicalDataSource बना सकता है. हालांकि, इसके लिए ज़रूरी है कि उस डेटा को मिलान किया गया हो और सभी रिकॉर्ड में FHIR रिसॉर्स टाइप और FHIR रिसॉर्स आईडी का यूनीक कॉम्बिनेशन हो. अगर ऐसा नहीं है, तो हर डेटा सोर्स के लिए एक MedicalDataSource बनाया जाना चाहिए.

सभी मेडिकल रिकॉर्ड किसी MedicalDataSource से जुड़े होने चाहिए. इसलिए, संसाधन लिखने से पहले इसे बनाया जाना चाहिए.

MedicalDataSource की प्रॉपर्टी:

  • डिसप्ले नेम (ज़रूरी है) - डेटा सोर्स के लिए उपयोगकर्ता को दिखने वाला डिसप्ले नेम, जो हर लेखन ऐप्लिकेशन के लिए यूनीक होता है.
  • FHIR बेस यूआरआई (ज़रूरी है) - FHIR सर्वर से आने वाले डेटा के लिए, यह FHIR बेस यूआरएल होना चाहिए. उदाहरण के लिए, https://example.com/fhir/. एक ही FHIR बेस यूआरएल से कई डेटा सोर्स जोड़े जा सकते हैं.

    अगर डेटा को किसी ऐसे ऐप्लिकेशन से जनरेट किया गया है जिसमें FHIR यूआरएल नहीं है, तो यह ऐप्लिकेशन से तय किया गया यूनीक और समझने लायक यूआरआई होना चाहिए. उदाहरण के लिए, myapp://... यह डेटा के सोर्स पर ले जाता है.

    उदाहरण के लिए, अगर कोई क्लाइंट ऐप्लिकेशन डीप लिंकिंग की सुविधा देता है, तो इस डीपलिंक का इस्तेमाल FHIR बेस यूआरआई के तौर पर किया जा सकता है. यूआरआई की ज़्यादा से ज़्यादा लंबाई 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)

स्वास्थ्य से जुड़े संसाधन

Health Connect में MedicalResource, मेटाडेटा के साथ-साथ FHIR रिसॉर्स (जिसमें मेडिकल रिकॉर्ड शामिल होता है) को दिखाता है.

MedicalResource की प्रॉपर्टी:

  • DataSourceId (ज़रूरी है) - MedicalDataSource के लिए बताया गया डेटा सोर्स.
  • FHIR वर्शन (ज़रूरी है) - FHIR का वर्शन. यह इस्तेमाल किए जा सकने वाले वर्शन में होना चाहिए.
  • FHIR रिसॉर्स (ज़रूरी है) JSON में एन्कोड किया गया FHIR रिसॉर्स इंस्टेंस.
  • मेडिकल रिसॉर्स का टाइप (अपने-आप पॉप्युलेट होता है) - रिसॉर्स की उपयोगकर्ता के लिए उपलब्ध कैटगरी, जो उपयोगकर्ता के लिए उपलब्ध अनुमतियों से मैप होती है.

JSON में FHIR रिसॉर्स तैयार करना

Health Connect में मेडिकल रिसॉर्स लिखने से पहले, अपने FHIR रिसॉर्स रिकॉर्ड को JSON में तैयार करें. हर JSON को अपने वैरिएबल में सेव करें, ताकि उसे मेडिकल रिसॉर्स के तौर पर डाला जा सके.

अगर आपको FHIR JSON फ़ॉर्मैट के बारे में मदद चाहिए, तो HL7 संगठन के दिए गए उदाहरण के डेटा को देखें.

MedicalResource रिकॉर्ड डालना या अपडेट करना

MedicalDataSource के लिए नए MedicalResource रिकॉर्ड डालने या मौजूदा रिकॉर्ड अपडेट करने के लिए, UpsertMedicalResourceRequest का इस्तेमाल करें:

// 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 ने मान्य FHIR JSON स्ट्रिंग को दिखाया था.

यहां एक उदाहरण दिया गया है, जिसमें AllergyIntolerance को FHIR रिसॉर्स टाइप के तौर पर इस्तेमाल किया गया है. यह उदाहरण, PHR में 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)
    )
)