Proposed application architecture
OpenMRS being a medical records platform is a widely used data model and API. Building upon this data model provides a very standard base of services that are required for any EMR in general. Although, the limitation is that the reference OpenMRS application's UI is meant to be used by data entry operators and not clinician directly. Thus, we would like to build upon the OpenMRS API, yet have a beautiful user experience for clinicians
We have seen other projects that used only the OpenMRS data model and not the API services. This has resulted in those projects over-time getting forked and hard to upgrade to newer changes in the OpenMRS model. Thus, we would not like to be in a similar position, yet maintain flexibility on how we do the user experience.
The OpenMRS modular structure allows us to extend the data model, extend the API as well as expose these as RESTful webservices. RaXa-JSS uses the extensibility of OpenMRS platform in the following ways:
- New tables are created inside OpenMRS schema (https://wiki.openmrs.org/x/sw8z)
- New API to CRUD data from these tables (Registering Module services to OpenMRS Context)
- Controllers (GET/POST) that access the API (https://wiki.openmrs.org/x/ZhAz) - skip View/JSP
- Expose Controllers as webservice endpoints (https://wiki.openmrs.org/x/CpEaAQ)
Technology Stack (side-by-side to the above diagram):
- Database Layer - MySQL
- API Layer - Hibernate, Spring 3.0
- Web Layer - Spring MVC, webservices.rest (https://wiki.openmrs.org/x/xoAaAQ)
- App Layer - Using ExtJS 4.1 for mouse-keyboard interface modules and Sencha Touch 2.0 for touch-screen interface modules
HTML5 Feature set:
- Form features (Placeholder, autofocus, email, spinbox, searchbox, form validators, required)
- Web Workers
- Web Storage (Since, we will primary deal with one patient in one tab only)
Server-side REST services:
- OpenMRS Webservices.REST module provides REST resources for core OpenMRS objects. This module is extended through RaXa modules that also provide REST services to new resources.
- REST server is exposed through CORS and can be accessible from outside the domain of the hosted server.