This blog post documents the work I did for GSoC 2016 on the OpenMRS Radiology Module.
The OpenMRS Radiology Module adds features of a Radiology Information System to OpenMRS. Currently the OpenMRS radiology reporting module has a poor support for building reports. To report a completed radiology order such as an x-ray examination, users of the module are presented with simple text field that they fill in their reports and on submission this text is stored inside the database as a string. But this was too limiting as radiologists use templates to create reports.
My task as GSoC student was to provide a means where users of this module will be able to use already developed templates to report their observations and store them as Complex Obs. Some of these templates can be downloaded from http://radreport.org/. These templates are in HTML 5 format.
- Ivange Larry Ndumbe (Software Engineering Student, Cameroon)
The OpenMRS Community was also very helpful in responding to my queries on talk.openmrs.org and on freenode at #openmrs. Amongst the very helpful community members are
What I did
After been accepted by OpenMRS as a GSoC 2016 student I first worked on a few introductory issues that helped me learn more about the code base and the standards and conventions used.
The big issues I worked on started with RAD-272. In this issue my responsibility was to provide support for report templates called MRRT templates. I had to parse the templates that are in HTML 5 format and extract metadata and store these metadata inside the database and store the files in a directory controlled by the module. After some research, I decided to use the jsoup HTML java parser to parse these templates files and extract metadata. You can see all this work here PULL-REQUEST-364. This work and other small issues mentioned above spanned up through midterms. And after midterms was school exams.
After my exams on the 18th of July, I picked up back work actively and was working mostly the whole day as I had nothing else to do. I think I was even working more than 12 hours some days but usually take a few breaks and watch one or two episodes of Fairy Tail(yes tail, I wonder if fairies have tails). At that time this pull request pull-364 had not been merged yet. And I had a lot of comments from mentors which I had to resolve all and also write unit test for all my changes. When this was finally merged I started working on template validation. Before my code was just importing the templates without validation them to make sure they follow the MRRT standards. So my next task was to implement template validation so that the system will reject template files that did not follow this standard. I used xsd 1.0 for the validation. But there was one feature that could not be implemented with xsd 1.0 but xsd 1.1 and standard Java did not support xsd 1.1 and the only two libraries I could find was xerces and saxon. The version of xerces that supported xsd 1.1 did not have an official maven repo and the version of saxon the supported xsd 1.1 did not have an open source license. I later implemented validation with standard java and xsd 1.0 and the missing feature I made up for it with a custom java validator that validates areas that could not be validated with xsd. Pull request for this can be found here pull-429. My next and current issue is RAD-273.
At this point the system is able to import templates, validate them upon importation and also display these templates on the UI. What’s left is to use these templates to create reports. The initial idea was to use openmrs complex obs. I took sometime to figure out how to use complex obs in code and when I finally got comfortable with complex obs and then I realized that there was a bug in the openmrs api with the feature we wanted to use with complex obs. This needed to be fixed before I can move forward. Initially I had to wait for this bug to be fixed or fix it but my mentor says it’s not a problem if my current pull request don’t get merged before 23rd August which was the last day for final evaluation submission. Good thing my commitments to the project and OpenMRS go way beyond GSoC and one summer. So I’ll definitely continue working on this project even after GSoC.
My Next Plans
I will be going in for GCI this year as a mentor. I look forward to apply all the skills I learnt from my mentors to mentor high school kids work on the Radiology Module.
Also as one of the GDG(Google Developers Group) Buea organizers, I’ll be mentoring some students this year on Java programming and introducing them to open source and OpenMRS. I hope one of them will be able to do GSoC next year too.
Also we’ll be hosting a lot of GSoC meetups to help other students get into GSoC 2017. So I look forward to learn more from the open source community.
For Prospective GSoC 2017 Students
I have but one advice for you. Start preparing now. If you want to have a shot at been accepted, you don’t need to wait until when Google announces accepted organizations because by that time popular organizations would have already had all the students they need. This is the exact same time in 2015 I started preparing for GSoC 2016. I saw a lot of students that get into the community after the organizations have been announced, some of them worked on so many issues in a short time, but that was enough to get them ahead of competition. Also when applying, avoid easy projects, they tend to have a lot of competitors. But that will depend on you skill level too. Good luck.
Links to all Merged pull requests
For list of pull request, see https://github.com/pulls?q=is%3Apr+author%3Aivange94+is%3Aclosed
Links to unmerged commits.
The work am doing currently is on this branch, https://github.com/ivange94/openmrs-module-radiology/tree/RAD-273.
- Increased debugging and troubleshooting skills
- Experience with relational databases (MySQL)
- Experience with contributing to free software projects, and communicating within a free software community
- Experience with Spring MVC Framework
- Gained mastery of REST webservices and perfect understanding of the OpenMRS REST framework
- Comfortable using git source control
- Used Apache Maven as a build tool
- Experience with unit testing with JUnit
- Learnt to follow standards and conventions
- Increased communication skills, able to ask questions better and after a lot of research.
- Got to work under pressure and strict deadlines
- Experience with EMR Systems.
- Team work