
Technical Documentation
Implementing AvetisIntroduction: What is this?
This technical document provides a brief overview of how to implement a system like Avetis. It includes the (a) key technologies involved, (b) general development steps, and (c) details on our GitHub repository.
Although this documentation contains technical details aimed towards developers, it may provide general insights for implementing web-based eHealth projects. For a programmatic overview of Avetis, please review the Implementer’s Guide. Please referred to the OpenMRS wikis for more detailed developer guidelines.
Stack: Key Technologies Involved
The main software behind Avetis is OpenMRS, an open source electronic medical record (EMR) platform for developing countries (i.e., where there might be intermittent power and internet issues). It is being used in many countries to manage and provide care for diseases such as: HIV, tuberculosis, malaria, maternal health, primary care, and more.
OpenMRS is a web-based application, built with Spring MVC, that uses its API to, for example, interact with the data model (we included a searchable version of the tables below).
OpenMRS relies on a concept dictionary, which represents a medical ontology (CIEL – similar to SNOMED, ICD), for storing and retrieving patient data. Another important design feature of OpenMRS includes the use of modules (i.e., plugins) which have full access to the OpenMRS system including the database, API, web application, etc. The modules are used to add new features to the core app so the system could be used in various settings, such as clinics or hospitals or localized to various country requirements.
Avetis environments include the following architecture: a presentation layer (PL) with HTML + jQuery + other frontend technologies, Service layer (SL) with Java, and Database layer (DL) with MySQL. Spring helps interface between the PL and SL by following the Model-View-Controller (MVC) design pattern. Hibernate is used as an object relational mapper. All the various layers are able to be accessed and modified using modules through direct access to the API.

Avetis’ implementation of OpenMRS utilizes custom-built modules which interact with all three layers of the core system (refer to the diagram, above). Avetis uses modules to provide additional web pages with associated Service Layer code and additional database tables. Some of the core web pages have been replaced to suit Avetis’ requirements (e.g. login pages have been replaced to add reCAPTCHA to aid in website security).
Tutorial: General Steps in the Development Process
These step-by-step guidelines are to develop and manage a system like Avetis using OpenMRS. Please refer to the OpenMRS wikis for more details on the development process.
- Review the Implementer’s Guide – work with the stakeholders to develop use cases, requirements, etc.
- Select the development environment/staging server. Choose a server environment, such as localhost server or, e.g., cloud-hosted server such as AWS. The Avetis group would be pleased to provide guidance in setting up an AWS instance to run the server. OpenMRS can be installed using, e.g., Mac OS X, Linux, or Windows.
- Select the IDE – software development environment, e.g., Netbeans, Eclipse, or IntelliJ.
- Set up the technology infrastructure to support development of OpenMRS modules (e.g. Java, Maven). Details are provided in the OpenMRS wikis.
- Set up OpenMRS in a test environment.
- Develop a simple OpenMRS module to learn the basic technologies necessary for module development
- Start development/testing of your module. Integrate Git for the project. We can also use GitHub desktop for managing push/pull requests.
GitHub: Our Free Code Repository
Here are our GitHub projects:
- Openmrs: this is the standard OpenMRS core implementation code
- Covid-at-home: this is our implementation of a COVID-19 screener app using OpenMRS.
- avetis: this is our customized version of OpenMRS.
Please contact open@chla.usc.edu for guidance on setting up Avetis. We are happy to provide a 1:1 tutorial if requested.