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

यह गाइड, 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 में मेडिकल रिसॉर्स लिखने से पहले, JSON में अपने FHIR रिसॉर्स रिकॉर्ड तैयार करें. हर 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 स्ट्रिंग को दिखाया है.

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