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:
- Özelliklerin kullanılabilirlik durumunu kontrol etme
- Yazma izni isteyin
- Veri kaynağı oluşturma (
MedicalDataSource) - 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 istemcideFEATURE_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
}
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
MedicalDataSourceoluş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
MedicalDataSourceiç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
MedicalDataSourceoluş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):
MedicalDataSourceiç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)
)
)