Introduction
This documentation covers the OpenSRP Android App. This is a Kotlin application for delivering configurable, offline-capable, and mobile-first healthcare project implementations.
OpenSRP is architected as a FHIR-native platform powered by Google's Android FHIR SDK and HAPI FHIR. OpenSRP users experience a module-oriented design based on over a decade of real world experience implementing digital health projects.
This repository contains the Android mobile application built to:
- Load configuration data as FHIR resources
- Support the WHO Smart Guidelines
- Manage the identities of healthcare workers (HCWs), community health workers (CHWs), care teams, patients, and clients
- Collect, view, and edit healthcare data with dynamic forms using FHIR's Structured Data Capture (SDC) implementation
- Securely store healthcare data encrypted at rest and securely transmit healthcare data using TLS
- Manage location hierarchies defined by community to national and international administrative boundaries
For remote data storage and login, the mobile application requires:
- A Keycloak server to manage identity, authentication, and authorization;
- A HAPI FHIR server to store operation and configuration data that includes the HAPI FHIR to Keycloak integration.
Programming Language
Android Libraries
- Hilt- for dependency injection
- Jetpack Compose - for building sharable declarative Android UI
- Jetpack Compose navigation - to navigate between compose screens
- Android navigation component - to navigate between activities and fragments
- Android Livedata and ViewModel
Architecture
The app is architectured in the following manner:
- The app is built around MVVM architecuture with the data layer implemented using the Repository pattern.
- The entry point of the application also follows Single-Activity architecture after the user is logged in.
Generated documentation is available here.
Data flow diagrams
OpenSRP apps are defined through data that creates functionality and is mediated by tooling. THe below digram describes these relationships.
The below digram shows how healthcare workflows are implemented through content and tooling in the context of an antenatal care program with generated data.
Data Access
The application uses FHIR Engine APIs from Google's Android FHIR SDK (which internally uses Room libary) to access the local Sqlite database.
Configurations
The application syncs particular resources (conventionally, Composition and Binary) from the HAPI FHIR server to configure the app. The configurations control application workflows as well as the look and feel of the app.
Testing
See testing section.