In this post, I introduce the problem that I'm trying to tackle this Summer, and how I intend to provide a solution.
About OpenMRS
OpenMRS is an electronic medical record system that enables clinicians and medical care providers to maintain patient data without any technical expertise. From the OpenMRS site:
The organisation is a collaborative effort led by the Regenstrief Institute, Inc. (http://regenstrief.org), a world-renowned leader in medical informatics research, and Partners In Health (http://pih.org), a Boston-based philanthropic organization with a focus on improving the lives of underprivileged people worldwide through health care service and advocacy.
Started in 2004, OpenMRS is currently being implemented in countries such as Lesotho, Kenya, Malawi and South Africa. To get a taste of the data being collected :
In the implementation of OpenMRS in Eldorot, Kenya: To date, the system has stored close to 10 million patient-level measurements on 43,000 patients who have accumulated ~450,000 visits.
Hans Rosling in his famous TED Talk, enthusiastically shows why data presentation makes an impact on the analysis that can be made on it. OpenMRS has a vast amount of data that represents the health of people in areas that need immediate medical help. It is really exciting to work on a project that has the opportunity to help make an impact on the health of people. (The cliche of "Making the world a better place" is a reality with this project).
The Data in OpenMRS
To present the data, it's critically important to understand what the data is, what it represents and how it is (could be) used. OpenMRS' data model is built around 7 basic domains. Here I try to give a small explanation of each of the domains.(This is a first cut version of this, I'll be making revisions with inputs from more my mentor, Paul and anyone who can help. Really, inputs are more than welcome)
- Patient: Patient details (Name(s), family status, tribe, etc)
- Concept: The concept is the key of the model that stores all the 'codes' in the system. Types of concepts include:
- Procedure
- Drug
- Diagnosis
- Anatomy
- Specimen
- Symptom
- etc
- Encounter: A visit by the patient to the clinic. (or vice versa).
- Observation: A reading made by the clinician during an encounter
- Order: An order made for a drug/test for a patient
- Form: WebApp form generation
- User: WebApp users
OpenMRS has really neat features like that upcoming Cohort Definition Tool that will allow very plain language kind of queries to be made on the database. The task I intend to take up is to create an interface that will allow maximum flexibility in representing the result set of those queries customized to the user's needs. To do this, I will be making a toolkit for Data Visualization that should be interactive in a way that helps the user make a proper analysis on the data.
There are a number of Use Cases that I need to put together to understand why and for whom I'll be making this toolkit. A few simple ones are :
- Viewing a patient history of a period of time. Highlighting critical readings, allowing the user to navigate to particular observations or encounters for further details.
- Viewing the health of a certain tribe or Cohort over a period of time.
- Measuring the effectiveness of a certain drug for a group of people with particular symptoms.
Based on the use cases that we generate, I will start prototyping an interface for each usecase and see what can be used where.
Implementation
As an initial survey, I was looking around for existing tools that people use to generate charts/graphs of their data on the web. Obviously, there were a great number of options for web-based graph generators. But sadly, almost all of them were static, creating images of the graph using Java (JFreeChart, which is currently being used in OpenMRS) or PHP. Some API's allowed 'clickable graphs' that allow a certain amount of navigation into the details. As mentioned in the initial proposal of this project even before Summer of Code started, the only widget that was 'draggable' and allowed a very intuitive view of the data with a considerably amount of flexibility in view and navigation was the Google Finance widget (which broke the unsaid rule of Ajax by using Flash ;-) ) So, To start with, I intend to use Flash to re-create that experience.
Another interesting option was Adobe Flex that recently went Open Source. As a developer, I like the idea of being able to create flash widgets within my Eclipse environment. The demos on site seem very enticing, and the code is all in ActionScript, MXML, Javascript and HTML. It does have the overhead of learning a new architecture/api, and i'll have to see how it fits into the rest of OpenMRS.
So that's what I have planned. Let me know if you have any suggestions/corrections that you have about what I've said here.
Code Away SOCcers :)






