Tıbbi verileri yazma

Bu kılavuz, Health Connect 1.1.0-beta02 veya sonraki sürümlerle uyumludur.

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

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

Özelliğin kullanılabilirliği

Kullanıcının cihazının Health Connect'te Tıbbi Kayıtlar'ı destekleyip desteklemediğini belirlemek için istemcide FEATURE_PERSONAL_HEALTH_RECORD özelliğinin 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 edinmek için Özellik kullanılabilirliğini kontrol etme bölümünü inceleyin.

Gerekli izinler

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

  • android.permission.health.WRITE_MEDICAL_DATA

Bu izinleri Google Play Console'da uygulamanız için ve uygulamanızın manifest dosyasında 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ğini de kontrol etmeniz gerekir.

Kullanıcıdan izin isteme

Uygulamanız, istemci örneği oluşturduktan sonra kullanıcıdan izin istemelidir. Kullanıcıların diledikleri zaman izin vermelerine veya izinleri reddetmelerine olanak tanınmalıdır.

Bunun için gerekli veri türlerine yönelik bir izin grubu oluşturun. Öncelikle, kümedeki izinlerin Android manifest dosyanızda beyan edildiğinden 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ızın gerekli izinlere sahip olup olmadığını görmek için getGrantedPermissions yöntemini kullanın. Yoksa bu izinleri istemek için createRequestPermissionResultContract seçeneğini kullanın. Health Connect izinleri ekranı açılır.

// 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 izinleri kullanmadan önce her seferinde kontrol etmesi ve iznin kaybedildiği senaryoları ele alması gerekir.

Veri Kaynakları

Health Connect'teki MedicalDataSource, sağlık kuruluşu, hastane veya API gibi kullanıcılara 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 olan ancak API'ler veya sağlık sistemleri gibi farklı kaynaklardan gelen tıbbi kayıtlar ayrılabilir.

MedicalDataSource kayıtları oluştururken aşağıdakileri göz önünde bulundurun:

  • Tüm kayıtlar aynı kaynaktan geliyorsa bir tane oluşturun MedicalDataSource.
  • Kayıtlar birden fazla kaynaktan geliyorsa aşağıdaki durumlarda tek bir MedicalDataSource oluşturabilirsiniz:
    • Veriler mutabık kılınır.
    • Tüm kayıtlar, FHIR kaynak türü ve FHIR kaynak kimliğinin benzersiz bir kombinasyonuna sahiptir. Bir MedicalDataSource içinde, herhangi bir FHIR kaynak kimliğine sahip bir FHIR kaynak türünün yalnızca bir kaydı olabilir.
  • Aksi takdirde, yinelenen kimlikleri önlemek için her veri kaynağına özel bir MedicalDataSource oluşturun.

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

MedicalDataSource mülkleri:

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

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

    Örneğin, bir istemci uygulaması derin bağlantıyı destekliyorsa bu derin bağlantı, FHIR temel URI'si 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 gerekiyorsa aynı id değerini referans alın:

// 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çerir) temsil eder.

MedicalResource mülkleri:

  • DataSourceId (zorunlu): MedicalDataSource için açıklandığı şekilde 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ılara yönelik kategorisi, kullanıcılara yönelik izinlerle eşlenir.

FHIR kaynaklarını JSON biçiminde hazırlama

Tıbbi kaynakları Health Connect'e yazmadan önce FHIR kaynak kayıtlarınızı JSON biçiminde hazırlayın. Tıbbi kaynak olarak eklemek için her JSON'u kendi değişkeninde depolayı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

Bir MedicalDataSource için yeni MedicalResource kayıtları eklemek veya mevcut kayıtları güncellemek üzere UpsertMedicalResourceRequest kullanın:

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

FHIR kaynak türü olarak AllergyIntolerance kullanan ve Tıbbi Kayıtlar'da FHIR_RESOURCE_TYPE_ALLERGY_INTOLERANCE tıbbi kaynak türüyle eşleşen JSON örneğini aşağıda bulabilirsiniz:

{
  "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ıt, 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)
    )
)