OpenMRS-jr at Hospital Albert Schweitzer Haiti

149 views
Skip to first unread message

James

unread,
Jun 19, 2011, 10:11:09 PM6/19/11
to ict4chw
Greetings to all!

I am the Chief Information Officer at Hospital Albert Schweitzer
Haiti. I have been here for over seven years now. One of my
responsibilities includes our health information system. When I
arrived we were struggling to keep alive a Paradox for DOS database
that contained that data. It was antiquated and unmanageable. Slowly
we have been implementing OpenMRS, www.openmrs.org It has completely
replaced the legacy system now.

Since the very beginning of my time at HAS I have continually been
asked by our community health and M&E directors about the possibility
of using mobile devices for field data collection. This has been a
topic of much discussion in the OpenMRS community over the past years
too. One of our requirements was that all patient information must be
integrated into OpenMRS. Thus, if we were going to use a mobile
device, we needed to have it fully integrated with OpenMRS. We have
chosen cell-phones as our data entry platform rather than laptops/
netbooks because of significantly lower power consumption, simplicity,
security and less overhead and maintenance. All Haitians know how to
use a cell phone, even sending text messages is very popular. Very
few know how to use a computer, mouse, etc. Much to our delight, mid
last year an announcement for OpenMRS-jr (pronounced OpenMRS junior)
was made.

OpenMRS-jr is a mobile application developed using the JavaRosa
platform. It uses the OpenMRS XForms Module to communicate with
OpenMRS. For more information on the XForms Module, visit…
https://wiki.openmrs.org/display/docs/XForms+Module

The initial version of OpenMRS-jr, written by Munaf Sheikh, allowed
the following…
• Specify a base URL for a working OpenMRS installation
• Login to the app on the phone with a valid OpenMRS username and
password
• Download the list of available cohorts of patients
• Select a cohort of patients to download, and download the patients
onto the mobile device
• Download XForms onto the mobile device from OpenMRS
• Select a patient, and fill out one or more XForms for that patient
• Register new patients

HAS wanted to collect patient information at our remote clinics when
patients come to be seen by the doctor/nurse. Some of our remote
clinics don’t even have cell phone service in the building, but this
was not a problem for OpenMRS-jr. It’s able to fill out forms, and
then send them later when a connection is available. Because of the
expense of Internet on cell phones in Haiti, we opted to use this
method (store-and-forward) entirely, using phones with WiFi capability
and synchronizing them up on the hospital network. Perhaps this can
change if/when low-cost Internet becomes available in Haiti.

Another problem we encountered with the initial version of OpenMRS-jr
is that it was only possible for a form to be filled out for a patient
that was in the cohort list downloaded to the phone. This is alright
if you’re tracking patients in a small program, but didn’t fit with
our use case. In our OpenMRS database, we have over 650,000 patients,
made up of anyone who lives in the hospital catchment area, or anyone
that has ever visited the hospital. Having a cohort of more than
about 100 patients in OpenMRS-jr isn’t possible. There was no telling
when any of those patients would fall sick and come to a clinic. As a
result, HAS needed OpenMRS-jr to evolve to the next level in order to
meet our needs. We needed to be able to fill out a form for any
patient using their HAS assigned identifier (which the patients carry
with them when coming to the clinic or the hospital). With special
thanks to Afrisis – África Sistemas,lda, and Natu Lauchande and
special funding from Dimagi, Inc, we are nearing the end of the
changes necessary for HAS to use OpenMRS-jr. We are nearly ready to
pilot a one-nurse, one-phone test in our closest/most accessible
dispensary. Based on the outcome of this actual testing by a
healthcare provider we will be able to fine-tune the development of
OpenMRS-jr.

We hope to solve an outstanding problem with OpenMRS-jr; referral/
counter-referral. We want the hospital to know that a patient has
been referred from the clinic (other than the paper referral form the
nurse in the clinic fills out and sends with the patient). This is a
hospital referral. When the form is filled out in OpenMRS-jr,
patients with those observations can be included in a report to notify
the hospital of patients that have been referred. Going the other
direction (counter-referral) we want the clinic to know that a patient
has been seen at the hospital and discharged). We can make a cohort
of patients that have recently been discharged from the hospital and
synchronize them to the phone. That is a counter-referral.

We also plan to use cell phones and OpenMRS-jr to collect data from
our rural health agents. This will include house visits for weighing
children, and giving vaccinations, etc. Now this information can
appear directly into the OpenMRS patient dashboard, where the doctors
at the hospital can see a more complete patient history.

The application hasn't been tested extensive on different phones but
in theory it should work on most J2ME compatible phones. We have
received a small grant to purchase phones for our clinic providers and
rural health workers, and hope to start testing OpenMRS-jr on a Nokia
C3. Some limitations have been touchscreen and QWERTY keyboard
phones. We have done our testing on a Nokia N80 with great results.
We have also done some testing with an MFU W71 phone, with success
aside from the QWERTY keyboard issues.

We were initially excited about OpenMRS-jr because of its capacity to
run on lower-end phones. Android phones were cost prohibitive, so
using ODK Clinic wasn’t appealing. (I’ve yet to see the $100 Android
phone, let alone any Android phones in Haiti.)

For additional information and documentation on OpenMRS-jr visit the
OpenMRS Wiki at…
https://wiki.openmrs.org/display/docs/OpenMRS-jr

As we move forward with mobile data collection, I would welcome any
words of wisdom from those who have already walked down this path.
Also, if there are any questions on our experience with OpenMRS-jr
thus far, I would be happy to try to answer them.

Jonathan Payne

unread,
Jun 20, 2011, 1:29:52 AM6/20/11
to ict...@googlegroups.com
James,

A lot of people are interested in OpenMRS Jr, but hardly anyone has used it (including me), so thanks for the great post! Learned a lot. A couple questions:

- Does OpenMRS-Jr use JavaRosa or CommCare on the J2ME phone to render the xforms?

- We've had trouble connecting CommCare up to OpenMRS because the OpenMRS xforms module and CommCare use different formats. Was this issue addressed and how?

- Do you use the "OpenMRS process" of creating xforms? Meaning, create a form within OpenMRS, connecting everything to concepts, then convert it to an xform. Do you have to do any custom work with the XSLT in OpenMRS?

Also, please post the results and experience from your upcoming pilot test. 

Thanks,
jon


--
Jonathan Payne, MS
615.579.5413
skype: jonathandavidpayne



--
You received this message because you are subscribed to the Google Groups "ict4chw" group.
To post to this group, send email to ict...@googlegroups.com.
To unsubscribe from this group, send email to ict4chw+u...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/ict4chw?hl=en.


Sarah Bird

unread,
Jun 20, 2011, 1:56:35 AM6/20/11
to ict...@googlegroups.com
Hi all,

James, thank you for your interesting post. I had seen and tested an early version of openMRS-jr and am glad it's evolving into a full product.

I have been working with a study being conducted by Partners Healthcare / Partners In Health / Socios En Salud in Peru and thought it might be useful to share what we have been doing.

Upfront, I am aware that collecting research data is a different use-case, and so this may not be of interest to you, but it seemed...on theme.

The study is following 4,000 TB patients and their ~20,000 household contacts over an extended period of time.  When I came on to help the project, they had begun with paper forms and openMRS as the study database. But the volume of paper and data entry was huge (there are over 20 forms) and they wanted electronic data collection. There are about 100 data collectors (I am pretty sure they are all qualified nurses).

We opted to use openXdata as the mobile data collection tool.

Like your case, it runs on affordable, readily available phones that everyone is comfortable with.

Secondly, it has been used extensively so we could feel confident in its stability as a data collection platform.

The next challenge was integration with openMRS, which was a requirement of the study.

We have just finished writing the module which goes and polls openXdata (which happens to be sitting on the same server) but doesn't have to be, pulls data into openMRS based on the patient identifier. It can also add new patients (as long as a valid ID is given)

It is currently in testing and will be rolled out over this summer.

The intention is to open source it, we are just working on the permissions to get it up on the openMRS module website, and if you are interested, I can certainly let you know when that happens.

It is very much a one-way system designed to push data up to openMRS, and currently pretty customized to our use case, but i'm hoping that if it's useful for different groups it will evolve into a generalized solution.

In terms of words of wisdom, not many, just the obvious - test twice, go live once :D. And, in my opinion, the successful place to start is replacement of existing paper and human systems (i.e. as opposed to creating a new system to do a new thing with new technology).

Sincerely,

Sarah Bird

Alvin Marcelo

unread,
Jun 20, 2011, 2:23:24 AM6/20/11
to ict...@googlegroups.com
Dear all,

I guess there are a lot of tools out there that can, in a matter of time with enough resources, meet a certain need.

May I take this opportunity to ask what you might find valuable in a tool? So far these are what I am seeing:

1. it works offline and syncs data when online
2. it works with phones field workers are already using (candybar, qwerty, etc)
3. it integrates with an EMR (in both cases OpenMRS)
4. it has a forms authoring and management system (XForms for OpenMRS, openXdata
5. open source
6. access to core developers
7. active implementer community
8. active developer community
9. availability of manuals
10. ?


I would be interested in what values implementers will be looking for in field data collection systems...

This semester, I will ask my students to evaluate the many tools using a framework which may include the factors above...


Thanks..

alvin
Alvin B. Marcelo, MD, FPCS
www.alvinmarcelo.com
Voicemail: +1-301-534-0795)
GPG 0x99CBC54C


James

unread,
Jun 20, 2011, 8:37:10 AM6/20/11
to ict4chw
Thanks everyone for your feedback. Here are some answers for your
questions Jon...

OpenMRS-jr is based on JavaRosa. The "jr" in the name actually stands
for JavaRosa.

OpenMRS-jr integrates tightly with OpenMRS and the XForms module. You
develop the forms with the OpenMRS XForms module. First step,
searching for, then dragging and dropping the concepts onto the
OpenMRS form schema. Second step, creating/editing the XForm with the
XForms designer, included as part of the XForms module.

Since you mentioned "XSLT" I'm going to go a little bit technical,
talking about stuff that I don't really know about. Apparently there
is some mapping/conversion between the standard XForm and what goes
into the phone; or perhaps it's used to interpret on what comes back
from the phone. Anyway, there is a global variable in OpenMRS called
"xforms.xsltJR" that gets the following value...

<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet version='2.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
xmlns:fn='http://www.w3.org/2005/xpath-functions'
xmlns:xf='http://www.w3.org/2002/xforms' >
<xsl:output method='xml' version='1.0' encoding='UTF-8'/>
<xsl:template match='/'>
<html xmlns='http://www.w3.org/1999/xhtml'
xmlns:xf='http://www.w3.org/2002/xforms'
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:xs='http://www.w3.org/2001/XMLSchema'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:ev='http://www.w3.org/2001/xml-events'
xmlns:jr='http://openrosa.org/javarosa'
>
<head>
<title>
<xsl:value-of select='/xf:xforms/xf:model/xf:instance/*/@name'/
>
</title>

<xf:model>
<xsl:copy-of select='/xf:xforms/xf:model/xf:instance' />

<xsl:for-each select='/xf:xforms/xf:model/xf:bind'>

<xsl:copy>
<xsl:attribute name='id'>
<xsl:value-of select='@id' />
</xsl:attribute>

<xsl:attribute name='nodeset'>
<xsl:value-of select='@nodeset' />
</xsl:attribute>

<xsl:if test='string-length(normalize-space(@type)) >
0'>
<xsl:attribute name='type'>
<xsl:value-of select='@type' />
</xsl:attribute>
</xsl:if>

<xsl:if test='string-length(normalize-
space(@visible)) > 0'>
<xsl:attribute name='visible'>
<xsl:value-of select='@visible' />
</xsl:attribute>
</xsl:if>

<xsl:if test='string-length(normalize-
space(@readonly)) > 0'>
<xsl:attribute name='readonly'>
<xsl:value-of select='@readonly' />
</xsl:attribute>
</xsl:if>

<xsl:if test='string-length(normalize-
space(@required)) > 0'>
<xsl:attribute name='required'>
<xsl:value-of select='@required' />
</xsl:attribute>
</xsl:if>

<xsl:if test='string-length(normalize-space(@locked))
> 0'>
<xsl:attribute name='readonly'>
<xsl:value-of select='@locked' />
</xsl:attribute>
</xsl:if>

<xsl:if test='string-length(normalize-
space(@calculate)) > 0'>
<xsl:attribute name='calculate'>
<xsl:value-of select='@calculate' />
</xsl:attribute>
</xsl:if>

<xsl:if test='string-length(normalize-
space(@relevant)) > 0'>
<xsl:attribute name='relevant'>
<xsl:value-of select='@relevant' />
</xsl:attribute>
</xsl:if>

<xsl:if test='string-length(normalize-
space(@constraint)) > 0'>
<xsl:attribute name='constraint'>
<xsl:value-of select='@constraint' />
</xsl:attribute>
</xsl:if>

<xsl:if test='string-length(normalize-space(@message))
> 0'>
<xsl:attribute name='jr:ConstraintMSG'>
<xsl:value-of select='@message' />
</xsl:attribute>
</xsl:if>

<xsl:if test="@id='patient.medical_record_number'">
<xsl:attribute
name="jr:preload">
<xsl:text>context</
xsl:text>
</xsl:attribute>

<xsl:attribute
name="jr:preloadParams">
<xsl:text>preloaded-
patient-identifier</xsl:text>
</xsl:attribute>
</xsl:if>


</xsl:copy>

</xsl:for-each>

</xf:model>

</head>

<body>
<xsl:for-each select='/xf:xforms/*'>
<xsl:if test='local-name() != "model"'>
<xsl:copy-of select='.' />
</xsl:if>
</xsl:for-each>
</body>
</html>

</xsl:template>
</xsl:stylesheet>

The non-technical answer is you just develop the form in the XForms
designer in the module and synchronize it to the phone. Easy as that;
no special programming required from the implementer.

If you have any more questions please feel free to ask.

Thanks,
James

On Jun 20, 12:29 am, Jonathan Payne <payn...@gmail.com> wrote:
> James,
>
> A lot of people are interested in OpenMRS Jr, but hardly anyone has used it
> (including me), so thanks for the great post! Learned a lot. A couple
> questions:
>
> - Does OpenMRS-Jr use JavaRosa or CommCare on the J2ME phone to render the
> xforms?
>
> - We've had trouble connecting CommCare up to OpenMRS because the OpenMRS
> xforms module and CommCare use different formats. Was this issue addressed
> and how?
>
> - Do you use the "OpenMRS process" of creating xforms? Meaning, create a
> form within OpenMRS, connecting everything to concepts, then convert it to
> an xform. Do you have to do any custom work with the XSLT in OpenMRS?
>
> Also, please post the results and experience from your upcoming pilot test.
>
> Thanks,
> jon
>
> --
> Jonathan Payne, MS
> 615.579.5413
> skype: jonathandavidpayne

>
> On Mon, Jun 20, 2011 at 5:11 AM, James <jmsr...@gmail.com> wrote:
> > Greetings to all!
>
> > I am the Chief Information Officer at Hospital Albert Schweitzer
> > Haiti.  I have been here for over seven years now.  One of my
> > responsibilities includes our health information system.  When I
> > arrived we were struggling to keep alive a Paradox for DOS database
> > that contained that data.  It was antiquated and unmanageable.  Slowly
> > we have been implementing OpenMRS,www.openmrs.orgIt has completely

Sarah Bird

unread,
Jun 20, 2011, 3:12:35 PM6/20/11
to ict...@googlegroups.com
Hi Alvin,

It depends on the situation I would say!

I have definitely experienced the following two things as distinct paradigms
a) data collection / research / surveys vs service delivery (service tends to demand more two way flow of information)
b) longitudinal data i.e. multiple records linked to a person (or different entity) over time vs not linked

Hopefully others will have other groupings too.

Bird

David Isaak

unread,
Jun 20, 2011, 3:27:00 PM6/20/11
to ict...@googlegroups.com
I recall stopping in at the ASH in Liancours in June 2006 to discuss mobile technology with IT staff and reviewing their use of their Paradox RDMS backend. I was working PDA-based data collection assessments with Save the Children USA. Impressive staff and hospital. good to hear about your progression with mobile.

Best Regards,

David Isaak
SixBlue Data

Andy Kanter

unread,
Jun 18, 2012, 12:21:06 PM6/18/12
to ict...@googlegroups.com
James,

MVP ran into identical issues for our implementation of mClinic (ODK Clinic) and with the help of Mindflow in Kenya, made changes which allow us to search the entire OpenMRS database, not just a cohort; create a new patient on the phone (or append to an existing patient); and view PMH of the cohort on the phone.  We believe OpenMRS can be the focus of integration in the health system, so we use either ChildCount+ or CommCare as the CHW information system, and then either OpenMRS or mClinic on Android for facility data collection. I would be interested in what you used for a phone for wifi connectivity as when we looked at this for Ethiopia, it was cheaper to have an Android if we needed wifi back-up then a Nokia (although this might have been due to limitations of phones which supported the Geez script).

We have also been looking at how dynamic cohorts (patient searches, not cohorts) can be used to produce reports on the phones for such things as referrals to verbal autopsy specialists (for deaths), immunizations (for children under 5), etc.

We also use ODK clinic to collect baseline immunization history information into OpenMRS where the new EzVac module produces a patient-specific recommendation and stores it back in OpenMRS, and then this recommendation shows up in the PMH section on the patient's record in the phone. We are exploring how this recommendation could be SMS'd dynamically as a query to openMRS as well.

Great work! I think it should be possible for an ecosystem of applications to co-exist depending on infrastructure and functional requirements, yet all interoperate with a common data dictionary and data model in the backend. 

Andy
----------------------------------
Andrew S. Kanter, MD MPH FACMI
Asst. Prof. Clinical Biomedical Informatics 
and Clinical Epidemiology
622 W. 168th Street, VC5 (VC-562)
New York, NY 10032
Office: +1 212 305 4842 
Cell: +1 646 469 2421 
Skype: akanter-ippnw

James

unread,
Jun 18, 2012, 6:05:12 PM6/18/12
to ict...@googlegroups.com
Thanks Andy for your comments. 

The Nokia C3 phone runs just about $100 US and includes WiFi standard.  It's much simplier than a full-fledged smartphone/Android too.  I expect it has better battery life too.
http://www.amazon.com/NOKIA-WHITE-Unlocked-GSM-Phone/dp/B004EGHPMM/ref=sr_1_6?ie=UTF8&qid=1340056161&sr=8-6&keywords=Nokia+C3

Dynamic cohorts would certainly be of interest to us. In our initial deployment we have not used the patients synched to the phone at all.

Can mClinic (ODK Clinic) enter a form for a patient that is not already synchronized onto the phone?

Thanks,
James


On Monday, June 18, 2012 12:21:06 PM UTC-4, Andy Kanter wrote:
James,

MVP ran into identical issues for our implementation of mClinic (ODK Clinic) and with the help of Mindflow in Kenya, made changes which allow us to search the entire OpenMRS database, not just a cohort; create a new patient on the phone (or append to an existing patient); and view PMH of the cohort on the phone.  We believe OpenMRS can be the focus of integration in the health system, so we use either ChildCount+ or CommCare as the CHW information system, and then either OpenMRS or mClinic on Android for facility data collection. I would be interested in what you used for a phone for wifi connectivity as when we looked at this for Ethiopia, it was cheaper to have an Android if we needed wifi back-up then a Nokia (although this might have been due to limitations of phones which supported the Geez script).

We have also been looking at how dynamic cohorts (patient searches, not cohorts) can be used to produce reports on the phones for such things as referrals to verbal autopsy specialists (for deaths), immunizations (for children under 5), etc.

We also use ODK clinic to collect baseline immunization history information into OpenMRS where the new EzVac module produces a patient-specific recommendation and stores it back in OpenMRS, and then this recommendation shows up in the PMH section on the patient's record in the phone. We are exploring how this recommendation could be SMS'd dynamically as a query to openMRS as well.

Great work! I think it should be possible for an ecosystem of applications to co-exist depending on infrastructure and functional requirements, yet all interoperate with a common data dictionary and data model in the backend. 

Andy

Andrew Kanter

unread,
Jun 18, 2012, 6:59:29 PM6/18/12
to ict...@googlegroups.com
Yes. MClinic will create the patient if the patient ID does not already appear on the server. If the patient exists on the server but has not been downloaded to the phone, the record is appended to the patient on the server with that id

Andy 


Andrew S. Kanter, MD MPH
--
You received this message because you are subscribed to the Google Groups "ict4chw" group.
To view this discussion on the web visit https://groups.google.com/d/msg/ict4chw/-/XsyqXO9bCd4J.

alvin....@gmail.com

unread,
Jun 18, 2012, 7:23:44 PM6/18/12
to ict...@googlegroups.com
How does the algorithm do that Andy - ie, match new patient on phone to existing patient on server?

Our most often problem is a mismatch bet the two records:

Christopher Catipunan

Vs

Kristofer Katipunan

Will appreciate insights on how other ict4chws are solving this...

This is the value of syncing the list of patients on the phone prior to field work.

Alvin

Sent from my BlackBerry® wireless handheld

From: Andrew Kanter <andrew...@dbmi.columbia.edu>
Date: Mon, 18 Jun 2012 18:59:29 -0400 (EDT)
Subject: Re: [ict4chw] Re: OpenMRS-jr at Hospital Albert Schweitzer Haiti

Andrew Kanter

unread,
Jun 18, 2012, 7:27:58 PM6/18/12
to ict...@googlegroups.com
This is done solely on mrn. If they match then it's added. If the names do not exactly match then it shows up in a warning queue but the entry is appended anyway. 


Andrew S. Kanter, MD MPH
Sent from my iPhone 4G
Reply all
Reply to author
Forward
0 new messages