Tıbbi verileri yazma

Bu kılavuz, Health Connect'in 1.1.0-beta02 sürümüyle uyumludur.

Health Connect'teki Tıbbi Kayıtlar'ı kullanarak tıbbi veri yazmak için aşağıdaki adımları uygulayın:

  1. Özelliklerin kullanılabilirlik durumunu kontrol etme
  2. Yazma izni isteme
  3. Veri kaynağı oluşturma (MedicalDataSource)
  4. Tıbbi kaynak yazma (MedicalResource)

Özellik kullanılabilirliği

Kullanıcının cihazının Health Connect'te Sağlık Kayıtları'nı destekleyip desteklemediğini belirlemek için istemcide FEATURE_PERSONAL_HEALTH_RECORD'nın kullanılabilirliğini kontrol edin:

if (healthConnectClient
     .features
     .getFeatureStatus(
       HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD
     ) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {

  // Feature is available
} else {
  // Feature isn't available
}

Daha fazla bilgi için Özelliklerin kullanılabilirliğini kontrol etme başlıklı makaleyi inceleyin.

Gerekli izinler

Tıbbi verilerin yazılması aşağıdaki izinle korunur:

  • android.permission.health.WRITE_MEDICAL_DATA

Uygulamanızın manifest dosyasının yanı sıra Play Console'da da bu izinleri beyan edin:

<application>
  <uses-permission
android:name="android.permission.health.WRITE_MEDICAL_DATA" />
</application>

Cihazlarınızda ve uygulamalarınızda kullanmayı planladığınız tüm uygun izinleri beyan etmek sizin sorumluluğunuzdadır. Ayrıca, her iznin kullanılmadan önce kullanıcı tarafından verildiğinden de emin olmalısınız.

Kullanıcıdan izin isteme

İstemci örneği oluşturduktan sonra uygulamanızın kullanıcıdan izin istemesi gerekir. Kullanıcıların izinleri istedikleri zaman vermesine veya reddetmesine izin verilmelidir.

Bunun için gerekli veri türleri için bir izin grubu oluşturun. Gruptaki izinlerin önce Android manifestinizde tanımlandığından emin olun.

// 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
)

Uygulamanıza gerekli izinlerin verilip verilmediğini görmek için getGrantedPermissions aracını kullanın. Aksi takdirde, bu izinleri istemek için createRequestPermissionResultContract simgesini kullanın. Bu işlem, Health Connect izinleri ekranını gösterir.

// 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)
  }
}

Kullanıcılar izinleri istedikleri zaman verebilir veya iptal edebilir. Bu nedenle, uygulamanızın verilen izinleri düzenli olarak kontrol etmesi ve izinlerin kaybedildiği senaryoları yönetmesi gerekir.

Veri Kaynakları

Health Connect'teki MedicalDataSource, sağlık kuruluşu, hastane veya API gibi kullanıcıya yönelik bir veri kaynağını temsil eder.

Health Connect'te depolanan tıbbi kayıtlar MedicalDataSource olarak düzenlenir. Bu sayede, aynı kişiye ait olup API'ler veya sağlık sistemleri gibi farklı kaynaklardan gelen tıbbi kayıtlar ayrılabilir.

Tüm kayıtlar aynı kaynaktan geliyorsa yazma uygulamasının yalnızca bir MedicalDataSource oluşturması gerekir. Kayıtlar birden fazla kaynaktan geliyorsa uygulama, bu veriler mutabakatlaştırılırsa ve tüm kayıtlar benzersiz bir FHIR kaynak türü ve FHIR kaynak kimliği kombinasyonuna sahipse tek bir MedicalDataSource oluşturabilir. Aksi takdirde, her veri kaynağı için bir MedicalDataSource oluşturulmalıdır.

Tüm tıbbi kayıtlar bir MedicalDataSource ile ilişkilendirilmelidir. Bu nedenle, kaynaklar yazılmadan önce oluşturulmalıdır.

MedicalDataSource öğesinin özellikleri:

  • Görünen Ad (zorunlu): Veri kaynağının kullanıcıya yönelik görünen adı. Yazma uygulamasına göre benzersiz şekilde tanımlanır.
  • FHIR Base URI (gerekli): Bir FHIR sunucusundan gelen veriler için bu, FHIR temel URL'si olmalıdır (örneğin, https://example.com/fhir/). Birden fazla veri kaynağı aynı FHIR temel URL'siyle ilişkilendirilebilir.

    Veriler, FHIR URL'si olmayan bir uygulama tarafından oluşturuluyorsa bu, uygulamanın tanımladığı benzersiz ve anlaşılır bir URI (ör. myapp://..) olmalı ve verilerin kaynağını göstermelidir.

    Örneğin, bir istemci uygulaması derin bağlantıyı destekliyorsa bu derin bağlantı, FHIR Base URI olarak kullanılabilir. URI için maksimum uzunluk 2.000 karakterdir.

  • Paket adı (otomatik olarak doldurulur): Verileri yazan uygulama.

  • FHIR Sürümü (zorunlu): FHIR sürümü. Desteklenen bir sürüm olmalıdır.

MedicalDataSource kaydı oluşturma

Uygulamanızın bağlı olduğu her sağlık kuruluşu veya tüzel kişi için bir kayıt oluşturun.

// 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 kaydını silme

Önceki örnek, oluşturma sırasında sistem tarafından bir id döndürür. MedicalDataSource kaydını silmeniz gerekirse aynı id değerine referans verin:

// Delete the `MedicalDataSource` that has the specified `id`
healthConnectClient.deleteMedicalDataSourceWithData(medicalDataSource.id)

Tıbbi kaynaklar

Health Connect'teki MedicalResource, meta verilerle birlikte bir FHIR kaynağını (tıbbi kayıt içeren) temsil eder.

MedicalResource öğesinin özellikleri:

  • DataSourceId (zorunlu): MedicalDataSource için açıklandığı şekildeki veri kaynağı.
  • FHIR Sürümü (zorunlu): FHIR sürümü. Desteklenen bir sürüm olmalıdır.
  • FHIR kaynağı (zorunlu): JSON biçiminde kodlanmış FHIR kaynağı örneği.
  • Tıbbi Kaynak türü (otomatik olarak doldurulur): Kaynağın, kullanıcıya yönelik izinlerle eşlenen kullanıcıya yönelik kategorisi.

JSON biçiminde FHIR kaynakları hazırlama

Tıbbi kaynakları Health Connect'e yazmadan önce FHIR kaynak kayıtlarınızı JSON biçiminde hazırlayın. Her JSON'u tıbbi kaynak olarak eklemek için kendi değişkeninde saklayın.

FHIR JSON biçimiyle ilgili yardıma ihtiyacınız varsa HL7 kuruluşu tarafından sağlanan örnek verilere bakın.

MedicalResource kayıtlarını ekleme veya güncelleme

UpsertMedicalResourceRequest kullanarak MedicalDataSource için yeni kayıtlar ekleyin veya mevcut kayıtları güncelleyin: MedicalResource

// 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
            )
        )
    )

Örnek FHIR kaynağı

Önceki örnekte, medicationJsonToInsert değişkeni geçerli bir FHIR JSON dizesini temsil ediyordu.

Aşağıda, FHIR kaynak türü olarak AllergyIntolerance'ın kullanıldığı ve Tıbbi Kayıtlar'daki FHIR_RESOURCE_TYPE_ALLERGY_INTOLERANCE Tıbbi Kaynak Türü ile eşlenecek JSON'ın nasıl görünebileceğine dair bir örnek verilmiştir:

{
  "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 kaydını silme

MedicalResource kayıtları kimliğe göre silinebilir:

// 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
        )
    }
)

Alternatif olarak, medicalResourceType tarafından silinebilirler:

// 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)
    )
)