android-fhir

FAQs

  1. What is the Android FHIR SDK?
  2. What is FHIR?
  3. Why is a FHIR SDK needed? What problem does it solve?
  4. What are the components of the FHIR SDK?
  5. What is Google’s role in this project?
  6. Who else is involved?
  7. What is in/out of scope of the FHIR SDK?
  8. Do I have control of the data collected using the SDK?
  9. How is data encrypted?
  10. How can I build cross-platform applications?
  11. What applications currently use the SDK?
  12. How to do database inspect in the FHIR demo app?

What is the Android FHIR SDK?

It is an open source library for Android developers who want to build FHIR-enabled offline-capable, mobile-first healthcare applications.

What is FHIR?

FHIR (Fast Healthcare Interoperability Resources) is the latest version of the HL7 standard for building modern patient centered healthcare applications - see HL7 FHIR Specification

Why is a FHIR SDK needed? What problem does it solve?

Today there is no simple way to build a FHIR compliant app on Android that is suited to the needs of LMICs - particularly offline capabilities due to poor connectivity. The FHIR SDK makes it easy for developers to build custom applications without needing to also build and maintain all the underlying components.

What are the components of the FHIR SDK?

The SDK enables the common components that developers need to build rich, offline-capable, standard-compliant applications. This includes APIs for standard data capture, data access, search and sync as well as encrypted local storage (using SQLite DB).

What is Google’s role in this project?

We are contributing to the design and development of the open source FHIR SDK

Who else is involved?

The Android FHIR SDK project was initiated by the WHO together with teams from Android and ONA. There is an open consortium of groups convened by the WHO to progress the design and development of the FHIR SDK as part of supporting their SMART Guidelines work. To-date developers from ONA, IPRD and Argusoft as well as a number of independent software engineers have contributed to the code-base. It is an open source initiative and we welcome contributions from any developers who want to get involved.

What is in/out of scope of the FHIR SDK?

In the SDK:

Not in the SDK:

Do I have control of the data collected using the SDK?

The Android FHIR SDK stores data on device in a SQLite database and can be configured to sync the data with a FHIR server specified by the application. The choice of storage (on-prem or cloud based) is up to the individual implementation.

How is data encrypted?

Data in the SQLite database is encrypted at rest using standard Android device encryption (minimum support for Android 5.0). For devices using Android 6.0 or above, additional level of application based encryption is provided by SQLCipher integration. Read more

There is no limitation on supporting encryption in transit and this is recommended best practice for all implementers to put in place when syncing data between the Android client and a FHIR server.

How can I build cross-platform applications?

The Android FHIR SDK is designed for the Android OS. There are currently no plans to support iOS.

What applications currently use the SDK?

We have an active community of developers that are in the process of building applications using the FHIR SDK.

How to do database inspect in the FHIR demo app?

The data inside FHIR database are encrypted for safety reason. This is controlled by the flag enableEncryptionIfSupported flag in the FhirEngineConfiguration. To debug/inspect the database content(for example, in the demo app), developer can temporarily disable the encryption as following: In FhirApplication, when initiate the FhirEngineProvider, set enableEncryptionIfSupported to false. Code example:

class FhirApplication : Application() {
  // Only initiate the FhirEngine when used for the first time, not when the app is created.
  private val fhirEngine: FhirEngine by lazy { constructFhirEngine() }

  override fun onCreate() {
    super.onCreate()
    FhirEngineProvider.init(
      FhirEngineConfiguration(enableEncryptionIfSupported = false, RECREATE_AT_OPEN)
    )
    Sync.oneTimeSync<FhirPeriodicSyncWorker>(this)
  }

In AndroidStudio, run the demo app on a connected android device. Then go to View -> Tool Windows -> App Inspection, click on the Database Inspector tab to inspect the database resources.db.

One thing to note: If there is any database exception after disabling encryption, developers can wipe the demo app data either in Settings or via adb shell pm clear com.google.android.fhir.demo, and rerun the demo app.