GSoC 2016 Final Evaluation

This blog post documents the work I did for GSoC 2016 on the OpenMRS Radiology Module.

Title

Radiology Reporting Enhancement

Description

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.

TEAM

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

Daniel KayiwaPascal Brandt, Darius Jazayeri, Dimitri Renault, and Lluis Martinez

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

RAD-334 Add MrrtReportTemplateValidator

RAD-307 View report templates from list

RAD-312 add MrrtReportTemplateSearchCriteria

RAD-272: Providing suport for template import

RAD-248 Add orders tab

RAD-247: Create radiology menu

https://github.com/openmrs/openmrs-module-radiology/commits/master?author=ivange94

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.

Skills Acquired

  • My knowledge in Java, Java EE, and JavaScript increased greatly. Learnt a lot of best practices from my mentor and the community  and stackoverflow too.
  • Increased debugging and troubleshooting skills
  • Experience with relational databases (MySQL)
  • Experience with contributing to free software projects, and communicating within a free software community
  • Mastery of HTML, Javascript, and CSS, jQuery
  • 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

 

References

https://summerofcode.withgoogle.com/projects/?sp-page=3#6016981656403968

https://wiki.openmrs.org/display/projects/Radiology+Reporting+Enhancement

https://talk.openmrs.org/t/project-radiology-reporting-enhancement/6171/2

https://github.com/ivange94/

https://github.com/pulls?q=is%3Apr+author%3Aivange94+is%3Aclosed

 

 

 

 

 

 

GSoC Week 12

This week has not been productive at all. For this week I was suppose to be working on letting users use the new template feature to create reports. Me and my mentors agreed that we’ll store these reports as complex obs. I have read a lot of docs about complex obs but I still have not really understood how to proceed with this phase of the project. I even asked a question on talk and had a quick response. The response was helpful but its almost the same thing my mentors have been telling me so I it did not still give me enough to start coding. I guess there is something in their explanations that I just don’t get but I hope I do before the 23rd.

GSoC Updates Week 11

This week was really productive. I was working on template validation RAD-334. I had to use xsd with a template schema to validate templates according to the MRRT standard. So I started of by learning about xsd and xml validation. After that I started by creating and xsd file that will be used to validate templates. Unfortunately standard java only supports XSD 1.0 and we needed to use some features that were only present in XSD 1.1. The only two libraries I could find that support xsd 1.1 are xerces and saxon. The version of xerces that supported xsd 1.1 did not have an official maven repo and the version of saxon that supports xsd 1.1 had a commercial license. So I stayed with standard java and xsd 1.0. I made up for the weakness xsd 1.0 by implementing another validator in java that validated areas that could not be specified in the schema file. Merged pull request can be found here, pull-426.

Next am working on letting users use templates to create reports RAD-273

Here is a screenshot of what happens now when an invalid template is imported.

importing_invalid_template

 

 

 

GSoC Week 10

This week I worked on a few tickets, but my primary goal was to let users be able to view reports templates from the list imported reports. Thats possible now. I also made a few modifications to the report templates tab and made a little cleaner.

What’s left now to do is

  • implement validation of templates on import
  • also use templates as an alternative to a free text report

This is still much work but I pray I finish on time. Below are screenshots of the report templates tab and a view of an imported template.