Offline database design

DatabaseDataIndex
Sqllitediskmem (loaded when accessed)
Indexeddbmemmem
Lovefield with indexeddbmemmem

Encryption Strategy 

The android sqlite database is encrypted using sqlcipher. A secure random 256 bit aes encryption key is generated on the device on startup of the app and stored in the app private space.

The indexedDb on the chrome app is currently not encrypted. There is no way to securely generate or store encryption keys in javascript so for secure usage of the chrome app the hard disk of the user must be encrypted.

Tables 

Patient

Patient Address

Patient attribute

AddressHierarchyLevel

AddressHierarchyEntry 

Concept

EventLogMarker 

PatientAttributeType

Configs

LoginLocations

Visit

Encounter

Observation

ErrorLog