Panduan ini kompatibel dengan Health Connect versi 1.1.0-beta02 atau yang lebih baru.
Untuk menulis data medis menggunakan Rekam Medis di Health Connect, ikuti langkah-langkah berikut:
- Memeriksa ketersediaan fitur
- Meminta izin tulis
- Membuat sumber data (
MedicalDataSource) - Menulis referensi medis (
MedicalResource)
Ketersediaan fitur
Untuk menentukan apakah perangkat pengguna mendukung Rekam Medis di Health Connect, periksa ketersediaanFEATURE_PERSONAL_HEALTH_RECORD di klien:
if (healthConnectClient
.features
.getFeatureStatus(
HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD
) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {
// Feature is available
} else {
// Feature isn't available
}
Izin yang diperlukan
Penulisan data medis dilindungi oleh izin berikut:
android.permission.health.WRITE_MEDICAL_DATA
Deklarasikan izin ini di Konsol Play untuk aplikasi Anda, serta dalam manifes aplikasi:
<application>
<uses-permission
android:name="android.permission.health.WRITE_MEDICAL_DATA" />
</application>
Anda bertanggung jawab untuk menyatakan semua izin yang sesuai yang ingin Anda gunakan di perangkat dan aplikasi Anda. Anda juga harus memeriksa apakah setiap izin telah diberikan oleh pengguna sebelum digunakan.
Meminta izin dari pengguna
Setelah membuat instance klien, aplikasi Anda perlu meminta izin dari pengguna. Pengguna harus diizinkan untuk memberikan atau menolak izin kapan saja.
Untuk melakukannya, buat kumpulan izin untuk jenis data yang diperlukan. Pastikan izin dalam kumpulan dideklarasikan dalam manifes Android Anda terlebih dahulu.
// 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
)
Gunakan getGrantedPermissions untuk mengetahui apakah aplikasi Anda sudah
mendapatkan izin yang diperlukan. Jika belum, gunakan
createRequestPermissionResultContract untuk meminta
izin tersebut. Tindakan ini akan menampilkan layar izin 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)
}
}
Karena pengguna dapat memberikan atau mencabut izin kapan saja, aplikasi Anda perlu memeriksa izin setiap kali sebelum menggunakannya dan menangani skenario saat izin hilang.
Sumber Data
MedicalDataSource di Health Connect mewakili
sumber data yang ditampilkan kepada pengguna, seperti organisasi layanan kesehatan, rumah sakit, atau
API.
Rekam medis yang disimpan di Health Connect diatur ke dalam
MedicalDataSource. Hal ini memungkinkan pemisahan rekam medis untuk individu yang sama
yang berasal dari berbagai sumber seperti API atau sistem layanan kesehatan.
Pertimbangkan hal berikut saat membuat data MedicalDataSource:
- Jika semua data berasal dari sumber yang sama, buat satu
MedicalDataSource. - Jika data berasal dari beberapa sumber, Anda dapat membuat satu
MedicalDataSourcejika:- Data direkonsiliasi.
- Semua data memiliki kombinasi unik jenis resource FHIR dan ID resource FHIR. Dalam
MedicalDataSource, hanya boleh ada satu data jenis resource FHIR dengan ID resource FHIR apa pun.
- Jika tidak, untuk mencegah ID duplikat, buat
MedicalDataSourceuntuk setiap sumber data.
Semua rekam medis harus dikaitkan dengan MedicalDataSource, sehingga ini harus
dibuat sebelum menulis resource.
Properti MedicalDataSource:
- Nama Tampilan (wajib diisi) - Nama tampilan yang ditampilkan kepada pengguna untuk sumber data, yang diidentifikasi secara unik per aplikasi penulisan.
URI Dasar FHIR (wajib) - Untuk data yang berasal dari server FHIR, URI ini harus berupa URL dasar FHIR (misalnya,
https://example.com/fhir/). Beberapa sumber data dapat dikaitkan dengan URL dasar FHIR yang sama.Jika data dibuat oleh aplikasi tanpa URL FHIR, URI ini harus unik dan dapat dipahami serta ditentukan oleh aplikasi (misalnya,
myapp://..) yang mengarah ke sumber data.Sebagai contoh, jika aplikasi klien mendukung deep linking, deeplink ini dapat digunakan sebagai URI Dasar FHIR. Panjang maksimum untuk URI adalah 2.000 karakter.
Nama paket (diisi otomatis) - Aplikasi yang menulis data.
FHIR Version (wajib diisi) - Versi FHIR. Harus berupa versi yang didukung.
Membuat data MedicalDataSource
Buat data untuk setiap organisasi atau entitas layanan kesehatan yang ditautkan ke aplikasi Anda.
// 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)
)
)
Menghapus data MedicalDataSource
Contoh sebelumnya menampilkan id oleh sistem saat pembuatan. Jika Anda perlu menghapus data MedicalDataSource, referensikan id yang sama:
// Delete the `MedicalDataSource` that has the specified `id`
healthConnectClient.deleteMedicalDataSourceWithData(medicalDataSource.id)
Referensi medis
MedicalResource di Health Connect mewakili resource FHIR (yang berisi rekam medis), beserta metadata.
Properti MedicalResource:
- DataSourceId (wajib) - Sumber data seperti yang dijelaskan untuk
MedicalDataSource. - FHIR Version (wajib diisi) - Versi FHIR. Harus berupa versi yang didukung.
- Resource FHIR (wajib) Instance resource FHIR yang dienkode JSON.
- Jenis Resource Medis (diisi secara otomatis) - Kategori yang ditampilkan kepada pengguna dari resource, yang dipetakan ke izin yang ditampilkan kepada pengguna.
Menyiapkan resource FHIR dalam JSON
Sebelum menulis resource medis ke Health Connect, siapkan data resource FHIR Anda dalam JSON. Simpan setiap JSON dalam variabelnya sendiri untuk disisipkan sebagai resource medis.
Jika Anda memerlukan bantuan terkait format JSON FHIR, lihat contoh data yang disediakan oleh organisasi HL7.
Menyisipkan atau memperbarui data MedicalResource
Gunakan UpsertMedicalResourceRequest untuk menyisipkan data baru atau memperbarui data yang ada
MedicalResource untuk MedicalDataSource:
// 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
)
)
)
Contoh resource FHIR
Pada contoh sebelumnya, variabel medicationJsonToInsert mewakili string JSON FHIR yang valid.
Berikut adalah contoh tampilan JSON tersebut, menggunakan AllergyIntolerance
sebagai jenis resource FHIR, yang akan dipetakan ke Jenis Resource Medis
FHIR_RESOURCE_TYPE_ALLERGY_INTOLERANCE di Rekam Medis:
{
"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"
}
...
}
Menghapus data MedicalResource
MedicalResource data dapat dihapus menurut ID:
// 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
)
}
)
Atau, data tersebut dapat dihapus oleh 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)
)
)