My experience at Open Source Summit North America 2017

I’m a student with a lot of extracurricular activities. I’m a passionate open source developer, past Google Summer of Code 2016 & 2017 Intern, Google Code-in mentor, Software Developer(Skylabase Inc.), Docker Campus Ambassador, Buea Java User Group Leader, Google Code-in Org Admin(OpenMRS).

During my the Google Summer of Code 2017 applications, I remember having some discussions with my friend Konrad and asked if he’ll be applying for GSoC again this 2017 and he was like man, I’m not sure I’ll have the time to prepare a proposal, I’ll be traveling to Germany for CloudNativeCon and I’m like man that’s so cool. Who’s sponsoring and he said Linux Foundation. And I was like wow you must be a hell of a contributor to linux then. I was shocked to find out he had never contributed to any of Linux Foundations projects before the scholarship was awarded though he is a very passion open source developer like me and was also a GSoCer in 2015. I’m happy to say Konrad later became a 2017 GSoCer with Cloud Native Foundation something that wouldn’t have happen without attending their conference. Before this discussion with him I had been to Linux Foundations Events website a couple of times but I always felt like I’m not qualified for their scholarship since I had never contributed to any of their projects. So after hearing Konrad’s testimony I quickly visited the website again looking for interesting conferences to attend. Then I found Open Source Summit North America. That quickly got my attention. I looked at the content and found very interesting talks and amazing speakers. I was awarded the scholarship which was a complementary pass to all events at the conference. So I applied for travel funding too from Linux Foundation which was also awarded. The funds provided by Linux Foundation covered my round trip to LA and my hotel for 5 nights at JW Marriot L.A LIVE and also part of my visa fee.

The scholarship team at Linux Foundation was really helpful and very polite all the time even when I kept changing my mind sometimes. I was confused between Brussels and Ethiopian Airlines. Brussels was a shorter flight but more expensive while Ethiopia was less expensive but a very long flight with short connecting times. But I later on decided to take Ethiopia which I didn’t regret as I coincidently met two of my friends at the airport traveling to LA for the same conference with me on the same flight.

me teche and blaize.png
From left to right is me, Teche and Blaize

The flight to LA from Douala was a very long one since I took Ethopian Airlines. Was about 25 hours. At LAX, I was separated from the other guys at the customs border control. But I was fortunate enough to meet my GSoC mentor Judy Gichoya outside and we both headed to JW Marriot where I finally rejoined the guys.


at airport with mentor.png
Me and my GSoC mentor

The keynotes were really interesting. Most of the technical talks needed some prerequisite knowledge which I lacked. Most of the technical talks were was centered around sysadmins. So I mostly attended only the keynotes and leadership talks.

The change in time zone was kind of hard for me. LA is 8 hours behind Cameroon. So by 2pm I was already feeling very tired and sleepy.

I got to meet a lot of new people and some not new but met them for my first in person time like my mentor. I also met with a past GSoCer from India Vishwajeet Srivastava

Me and Vishwajeet

I had a great time at the sponsors showcase too. Found out about a lot of cool technologies that these tech companies are using. Participated in a couple jackpots though I didn’t win any :(. I also got a lot of swag from the booths.

It was great watching the interview of Linus Tovalds by Jim Zemlin. What was even cooler was taking a picture with him 😀

Me and Tovalds

Also met with some 2 Kenyan guys and a Cameroon based in boston

Part of the African crew at OSSNA

One of the other activities I really enjoyed too was the 5k fun run. Though I got tired quickly and ended up been in the last group.

morning before 5k fun run


We also had a bus tour which was short but fun.

Getting ready for the tour

I got to take a picture at the Walt Disney Concert Hall

Photo taken at the Walt Disney Concert Hall

The reception at Paramount Studios was one of the best. The choice of the venue couldn’t have been better. I saw a lot of movie artifacts. I even took a picture close to the famous star trek suit.

Me at Paramount Studios

And at the end of the conference even though I didn’t get much from the technical sessions because they needed some exposure I lacked and also because they were mostly centered around sysadmins, at least I now know what I should be learning and the next time I come for a conference like this I’ll benefit more from the technical sessions. I also learned a lot from the leadership tracks and I’m now so much involved into mentoring. I’m mentoring 2 of my juniors from university to code on the LibreHealth Radiology project. I also volunteered to be Google Code-in Org Admin for OpenMRS and a Google Code-in mentor at LibreHealth.

This was a great conference. It broadened my perspective about tech and pointed to the direction I should be going and also made me understand that, there is a lot I still need to learn. I wish a lot of people from my community will get a chance like this. Attending events like this does not only motivate you to work harder but also builds new skills in you. I can’t thank Linux Foundation enough for this.


Setting up a development environment for LibreHealth Radiology without Docker

The recommended way of setting up development environment for LibreHealth Radiology  is using Docker. See this blog posts for instructions on how to use docker for your development environment. See blog post here Development environment with Docker.

But some people have been having some timeout issues with mysql using the docker setup. So this is an alternative way to setup your environment. But I’d recommend you try with the docker setup first.


  • Java 8
  • Tomcat
  • mysql
  • git
  • maven
  • IDE

Please see their respective documentations for instructions on how to install them.


Setup Toolkit

LibreHealth Radiology is just a module that runs on a LibreHealth Toolkit server. So to setup radiology you need to first setup a toolkit server.

Clone the toolkit code from GitLab

git clone

Now build the code

cd lh-toolkit

mvn clean package

You might encounter a test failure during the build. I did. You should skip the tests using

mvn clean package -DskipTests

Now you need to deploy the generated .war file to tomcat. But the build generated an openmrs.war file instead of lh-toolkit.war. This is because toolkit is a fork from openmrs and the build still generates an openmrs.war instead. That is easy to fix. We’ll just rename the file to lh-toolkit.war. For that run the following code

cd /webapp/target/

mv openmrs.war lh-toolkit.war

Now you need to copy this .war file to the tomcat webapps folder. My tomcat installation directory is /Library/Tomcat. You need to replace that in the command below with your actual tomcat directory

mv lh-toolkit /Library/Tomcat/webapps/

Now you restart tomcat and open your browser to http://localhost:8080/lh-toolkit/

You’ll be presented with an installation wizard to complete the installation of toolkit.


Screen Shot 2017-09-27 at 9.55.04 PM.png

Select your language and take next

Screen Shot 2017-09-27 at 9.56.10 PM.png

Make sure simple install is selected and move forward

Screen Shot 2017-09-27 at 9.57.04 PM.png

Enter your mysql root password and move forward.

Screen Shot 2017-09-27 at 9.58.43 PM

Scroll to the bottom of this page and take note of the directory where the file is kept.

Screen Shot 2017-09-27 at 10.01.10 PM.png

For me it’s in /Users/larry/.OpenMRS/lh-toolkit/ it might be different for you. Take note of it and move forward.

Screen Shot 2017-09-27 at 10.02.10 PM.png

Wait for installation to complete.

Screen Shot 2017-09-27 at 10.03.29 PM.png

If your output is like mine above that means you have successfully installed toolkit. The OpenMRS name there is a bug. I’ll create an issue for it. Now you need to install a user interface since as from 2.0 of toolkit the user interface was removed and it’s just an api server now. You are free to build which ever user interface you want to work interact with it.

For Radiology, we’ll be using the legacyui module. You have to clone and build it too then install the module. For that Follow the instructions below.

Install a User Interface

We’ll first clone the legacyui module from gitlab using

git clone

Now build a .omod file

cd lh-toolkit-legacyui/

mvn clean package

Once the build is done and successful, do

ls omod/target

And you’ll see a file called legacyui-1.2-SNAPSHOT.omod the version number may differ from this depending on when you doing the setup.

Remember the directory I told you to take note of, the directory containing the file?

Yes. That one. For me it was /Users/larry/.OpenMRS/lh-toolkit. There is a  subdirectory called modules. You have to copy the .omod file to that directory. For that do

cp omod/target/legacyui-1.2-SNAPSHOT.omod  /Users/larry/.OpenMRS/lh-toolkit/modules

Don’t forget to replace this /Users/larry/.OpenMRS/lh-toolkit/modules with the equivalent on your machine

Now restart tomcat and visit http://localhost:8080/lh-toolkit/

You should see this

Screen Shot 2017-09-27 at 10.58.38 PM.png

Instead of the page above you may see the error below

Screen Shot 2017-09-27 at 10.47.51 PM.png

Try restarting tomcat one or two times again and see.

You may notice that home page is a little different from the demo website. In the demo website the green bar is orange. That is easy to fit

Go to Administration under the maintenance section, click on settings

Screen Shot 2017-09-26 at 10.50.03 AM.png

You’ll see a setting for theme. Enter orange and safe.

Screen Shot 2017-09-26 at 10.51.38 AM.png

Your application should now look like below

Screen Shot 2017-09-26 at 10.52.18 AM

Now we are going to deploy the radiology module.

Deploy Radiology Module

The radiology module has dependencies on OpenMRS REST module and Open Web Apps module. You have to download those and install first before proceeding with deploying radiology. To get these modules visit and search for open web apps to download the open web apps module. You should endup with a file named owa-1.7.0.omod. The version may differ depending on the time you do the download.

Search `rest webservices` to get the webservices module. You may see to versions like below. Don’t take the extension. See the screenshot below, the second one is the right one

Screen Shot 2017-09-28 at 12.57.04 AM.png

You’ll end up with a file like and you can now install these omods just like you installed the legacyui module. But I’ll show you another method below how to do it graphically. This just so you know that this method is also available. In the future you are free to either us command line or this method.

While logged in to toolkit, go to Administration

Screen Shot 2017-09-28 at 1.01.59 AM.png

Click on manage modules

Screen Shot 2017-09-28 at 1.04.34 AM.png

Click on the Add or Upgrade Module button

Screen Shot 2017-09-28 at 1.05.44 AM.png

Now choose the omod files of the module you want to install and click upload

Screen Shot 2017-09-28 at 1.07.41 AM.png

Now proceed with radiology

Since you’ll be contributing to the radiology module, you should fork the repo.

Clone your fork

git clone

cd lh-radiology

Add a remote pointing to the original repo

git remote add upstream

Fetch all branches

git fetch --all

Pull latest changes

git pull --rebase upstream master

Then build code

mvn clean package

That will generate a .omod file and you are free to deploy it using any of the methods see fit. You final home page should look like this, note the link to Radiology on the navbar

Screen Shot 2017-09-28 at 1.12.31 AM.png

Please leave feedback in the comment sections below.









Setting up development environment for LibreHealth Radiology using Docker


The LibreHealth Radiology Module provides features of a Radiology Information System powered by LibreHealth Toolkit. It’s a spring framework application that uses JSP for it’s UI. There is a new UI in development that uses Angular 2/4 and communicates with the backend via REST but that UI is not production ready yet. To develop on the module you need a server running LibreHealth Toolkit(lh-toolkit). But good for you that has been dockerized.

We have a demo website you can visit if you just want to have a feel of the features. The link to the demo is and username and password is admin/Admin123

This tutorial is for those wanting to develop the backend. So it does not demonstrate setting up development environment for the Angular 2/4 UI. That will be in another blog post.


To complete this tutorial, you need the following installed. Please see their respective documentations on how to install these on your platform.

  • Java 8
  • Maven
  • Git
  • IDE of your choice. I use Idea
  • Docker

LibreHealth Radiology runs on Java8 and uses Maven to build. Git is used to get the code and Docker packages the module in a docker image making deployment easy.


Get the code

If you plan to make contributions to this module, you’d need to fork the repo on GitLab

Go to and fork the repo.

Clone your fork

git clone

Add a remote repository pointing to the original repo on LibreHealth

cd lh-radiology

git remote add upstream

Fetch all branches

git fetch --all

Build your code

Make sure you are in the root directory of the project (lh-radiology)

mvn clean package docker:build

mvn clean package will compile your code to a .omod file which is just a custom file extension designed by OpenMRS for it’s modules. That is the file you’d have to deploy to a running toolkit server. But with introduction of docker you don’t have to worry about that.

docker:build builds a docker image from the contents of the compiled module. This docker image contains a Toolkit server, REST webservices, legacyui and your newly built radiology module all installed.

Run your application

mvn docker:start

Your application will be running on http://localhost:8080/lh-toolkit, default username and password is admin/Admin123

You should see this

Screen Shot 2017-09-26 at 10.43.27 AM

You may notice that this a little different from the demo website. In the demo website the green bar is orange. That is easy to fit

Go to Administration under the maintenance section, click on settings

Screen Shot 2017-09-26 at 10.50.03 AM.png

You’ll see a setting for theme. Enter orange and safe.

Screen Shot 2017-09-26 at 10.51.38 AM.png

Your application should now look like below

Screen Shot 2017-09-26 at 10.52.18 AM


Import your code into an IDE(Optional)

This step is optional and can be done at any point after getting the code. Must not be done after deploying the application. But I always chose to do it last or at least after building the code with mvn. This is because depending on your IDE, it maybe intelligent enough to identify this project as a maven project during import and while importing the module, your IDE may try to download all dependencies specified in the pom.xml of the project. This tends to take a while with some IDEs and sometimes fail even if it’s the first time these dependencies are been fetched. That is why I like building first because all the dependencies will now be cashed in your local maven repo and when importing into an IDE it won’t take much time.



There are a number of IDEs you can choose from. You may already have one you are using that like and that’s ok. I will not be showing how to do this with every possible IDE but with just the one I’m using InteliJ IDEA. If you use something else, please see it’s documentation on how to import maven projects.

Launch IDEA and select import project

Screen Shot 2017-09-26 at 11.00.24 AM.png

Select your project directory and hit next. Now select import from external model and make sure it is set to Maven

Screen Shot 2017-09-26 at 11.07.54 AM.png

Take next, next, next

When you asked to select and SDK, use Java 8. If you have not already setup an SDK, click on the plus sign to add and SDK then look for your java8 installation folder.

Click finish and your code will be imported by IDEA

Screen Shot 2017-09-26 at 11.11.12 AM.png


You can now make changes to the module. Every time you make a change, you have to redeploy the module but that is every easy. From the terminal, execute the following commands in the project folder

# first stop the already running application

mvn docker:stop

# then build again

mvn clean package docker:build

# and deploy

mvn docker:start

GSoC 2017 Final Report

It’s the end of the GSoC 2017 and here is my final report.

The photo below is from my colleague Ujjwal Arora‘s blog. I hope he doesn’t sue me :D.



Project Title

Radiology Reporting Enhancements Continuation


The LibreHealth Radiology Module provides features of a Radiology Information System powered by LibreHealth Toolkit. In the past the module could only create free text reports. To report a completed radiology order such as an x-ray examination, users of the module were 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 These templates are in HTML 5 format.

Note support for MRRT report templates was provided last year during GSoC 2016. After GSoC 2016 the module was able to import MRRT report templates but it did not use these templates in the creation of reports yet.


  • Student (me)
  • Mentors
    • Judy Gichoya (Radiologist, US)
    • Ankit Rastogi (Medical Doctor, Canada)

I’d also like to acknowledge the org admin for  LibreHealth Robert (Robby) O’Connor for the smooth running of the programming and always making sure we don’t miss any GSoC deadline. Thank you.

Both LibreHealth and the OpenMRS community helped me a lot with my queries. At OpenMRS Daniel Kayiwa was always there to answer my questions on IRC and A lot of other community members in OpenMRS also responded to my queries.

Work Done

Backend work

None of my code has been merged and hardly reviewed. I communicated my progress to my mentors using screenshots of the working software and documentations on my weekly blogs. All the work that was done for the backend can be found in the gsoc2017 branch on my fork of LibreHealth Radiology.

I started the coding phase by trying to make the radiology module a fhir server. I thought it was theoretically impossible as the docs on implementing a fhir server talked of java web applications with their own web.xml deployment descriptor while the radiology module was not a web application on it’s own but need a server which was the actual web application and I may be right. After spending almost half of the first coding phase working on this with no progress, my mentors decided I continue with the primary goals of my GSoC project which was to use MRRT report templates in the creation of reports and also build a new UI for the radiology module. For more information on this, visit the links below

The two major changes to the backend was the creation of radiology reports using MRRT report templates and storing them as Complex Obs and refining of the REST API.

Create reports using MRRT templates

Modified the claim report section of the radiology order details page to provide option for creating MRRT reports

Screen Shot 2017-08-26 at 11.54.44 PM

Author report using an imported MRRT report template

Screen Shot 2017-08-27 at 12.07.58 AM

Once your report is saved, you can view it in the editor and can also download a copy of it as html since it’s been stored as Complex Obs and complex obs handles the saving of the report as a file.

I turned off template validation. It was decided that the module will not validate these templates. That validation will be left for

Commit Save radiology reports as complex obs. This commit actually holds a lot more than it’s title suggest. Since my code was not been reviewed and merged during the program, I found my self pushing to this branch and having too many unmerged commits to follow up at once so I had to squash all in one commit.

For documentation on how to use this feature, visit


I also worked on the REST API for the radiology module. I faced a lot of difficulties here as the REST module was not properly documented and it was kind of hard to figure things out on my own. I sometimes had to place breakpoints in the code and run it in debug mode and followed the workflow just to understand how things work and how to make modifications. Sometimes I figured things out by a lot of tries and errors.

I implemented the REST endpoint for /radiologyorder to GET/POST/DELETE radiologyorders

Screen Shot 2017-08-27 at 1.27.08 AM

Commit Implement the newDelegate and save methos to create radiology order


After research and discussions with my mentors we decided to use Angular 4 for our frontend. Angular 4 is component based and really easy to work with.

I had to pick up Angular on the fly. I had no previous experience working with Angular so I started with a course on Udemy. But I didn’t finish the course. Was going to take a while to finish it so I just used the Angular docs.

The code for the new UI is hosted on my github repo


Screen Shot 2017-08-27 at 1.37.03 AM

Add order

Screen Shot 2017-08-27 at 1.38.43 AM

Order detail

Screen Shot 2017-08-27 at 1.40.28 AM

Edit report

Screen Shot 2017-08-27 at 1.41.43 AM.png

Report templates

Screen Shot 2017-08-27 at 1.42.42 AM.png

The above screenshot show some components of the UI.

The UI is simple, user friendly and responsive. And at the back it’s built with reusability in mind.

My next plans

  • code, code, code
  • Run my Java User Group
  • Have fun
  • continue working on LibreHealth Radiology
  • Travel for Open Source Summit North America
  • Travel for QCon San Francisco
  • Mentor Google Code-in 2017
  • Mentor Google Summer of Code 2018

I’m currently the only one contributing code to the radiology module. There’s a lot of work left to make the radiology module ready for it’s first release. I plan to form a team to work on the radiology module. I run a Java User Group in my community and I’ll be bringing in two enthusiastic members from the group to join me work on the module. This will be great a experience for us. For me I’ll be gaining experience running a team and for them it’ll be good learning experience and first time exposure to open source.

Together we’ll

  • Remove the legacyui from the radiology module so the module is left only with the Java API and REST API. We’ll be using the new UI moving forward.
  • Implement REST endpoints for the other radiology resources /radiologyreport, /mrrtreporttemplate and /radiologymodality
  • Clean up the UI code and move it to LibreHealth GitLab repo.
  • Work on packs server integration
  • Design and implement a more feasible solution for FHIR integration with radiology


Save radiology reports as complex obs

Implement the newDelegate and save methos to create radiology order

Skills Acquired

I picked up Angular 4 on the fly

Learned how to work with minimal supervision

Understood more about the codebase and what improvements are needed.


Since LibreHealth Radiology is a fork of the OpenMRS Radiology module. I made use of the OpenMRS forums to get a wider audience to my problems. Below is a list threads I opened in OpenMRS


Creating a Radiology Report using MRRT Report template LibreHealth Radiology


As of last year the LibreHealth Radiology module which was at that time under OpenMRS supported MRRT report templates. But these templates where not used in the creation of reports yet. This year during GSoC coding phase one, the MRRT templates are been used in creation of radiology reports.

This feature is not stable yet but for the purpose of GSoC evaluations I’m documenting it though a lot will change after GSoC evaluations are over. But the workflow will stay the same. The changes to be made about this feature will not be visible to end users but developers. The current way the report templates are been stored adds unnecessary complexity to the codebase and I already made a proposal to my mentors about refactoring and it was approved.


Get the module

This code is not yet merged into LibreHealth so you’d have to clone of my own version of the code from and checkout the gsoc2017 branch and build then deploy to a running LibreHealth Toolkit 2.0 server. Also install the Open Web Apps Module and the Webservices module.


Before you can go ahead and use the module to create orders and reports there are some configurations that need to be made before you can create orders and reports.

You need to set your orderable concepts before you can create an order.

Also you need to set a complex concept for the reporting tool to use when creating radiology reports. Radiology reports are saved as complex obs. To create complex obs you need to have at least one complex concept in your system. With my new proposal to change how the reports and templates are been stored, you won’t need to configure this. It will be removed but for now just bare with it.

Set Orderable Concepts

The screenshot below shows the property you need to set.

Screen Shot 2017-08-19 at 9.55.46 PM

You need to set the UUID of all concept classes you’ll want to be orderable. For this tutorial we are going to use the concept class Test


Go to Administration/Manage Concept Classes and click on the Test concept class then copy the UUID.

Go to Administration/Settings/Radiology and paste the UUID in the Radiology Concept Classes box as shown above.

Set Complex Obs for Reports

As mentioned above, reports are saved as complex obs. For this there needs to be at least one complex concept in the system. You normally add concepts via a concept dictionary but for this we’ll go ahead and create one just for testing purposes.

Create a complex concept

Go to Dictionary and click add new concept. For testing purposes you can name your concept anything. The most important thing is to make sure it’s datatype is set to Complex and the handler is set to TextHandler

Screen Shot 2017-08-21 at 12.06.57 PM

Save your concept and copy it’s UUID

Screen Shot 2017-08-21 at 12.09.53 PM.png

Go to Administration/Settings/Radiology and paste the UUID to the complex class box

Screen Shot 2017-08-21 at 12.12.10 PM

You are now set up to create Orders and Reports.

Create an Order

In the Radiology dashboard under the Orders tab

Screen Shot 2017-08-21 at 12.22.41 PM

Click on Add Radiology Order to add a new order. To be able to report this order you must set it’s status to Completed.

Screen Shot 2017-08-21 at 12.32.59 PM.png

Under the report section you’ll notice a dropdown with a default of Free Text Report. We are going to create an MRRT report and for that you need to have an MRRT Report template.

You can add an MRRT template by importing it from the Report Templates Tab on the Radiology dashboard

Screen Shot 2017-08-21 at 12.35.36 PM

When creating a report select MRRT Report and search for a template to use for your report. I have one template in my system so I’ll search of Cardiac MRI

Screen Shot 2017-08-21 at 12.39.09 PM

Select your template and click claim report. You’ll be presented with a template editor that uses the template you selected.

Screen Shot 2017-08-21 at 12.40.21 PM

Enter principal results interpreter/Provider and complete your report.

GSoC Final Coding Phase Week 1

The first week of the final coding phase just concluded and for this phase my job was to fetch actual data from the backend via REST.

The screenshot below shows actual orders that are fetched from the backend via REST

Screen Shot 2017-08-06 at 2.51.27 PM

And below are reports fetched from the backend

Screen Shot 2017-08-06 at 2.51.41 PM

More work still needs to be done on how the data is displayed on the tables. I intend to make the table paginated so that it will reduce the load time when reports are been fetched. There are some angular components for data tables that implement pagination but I’ll implement mine. I’ve tried a couple that didn’t work and were not very user friendly.

The app currently only interacts with the backend by fetching data. The next step is adding data. The starting point is radiology orders. And that is the complicated one as during the order creation process a lot of REST calls have to be made to the backend.

When creating an order, you need a patient, provider, imaging procedure, etch and all have these have to be obtained via REST search. See order dialog below

Screen Shot 2017-08-06 at 2.51.59 PM

Once we are able to add orders via REST, the next hard part to implement via REST is Report Template import.

Commits this week



GSoC Coding Phase 2 Week 3 & 4

Second Evaluation for GSoC just ended and for this coding phase I have bootstrap the new UI for radiology and fix all bugs I was having with the UI and now ready to use real data from the database with the Angular HTTPModule.

I was also able to deploy my app as an Open Web Apps. In the another blog post, I’ll give a tutorial for creating an Open Web App with Angular 2 and successfully deploy it.

This session was the most interesting one. I was able to pickup Angular 2 on the fly and build my UI.

You can access the code of my work so far from

Below is a screencast of the new UI

GSoC Coding Phase 2 Week 2

The second week of GSoC coding phase 2 just ended. This week has mostly been about learning Angular 2.

I also took some time out to follow up on my US nonimmigrant visa to attend the Open Source Summit North America. I traveled to the capital city for my visa interview on Friday July 7th as I had my interview on Monday the 10th of July. It was an 8 hours bus ride. My visa interview was successful and on I collected my visa the next day July 11 and since it was already late to return home, I traveled back to my city the next day July 12.

During this time I was also learning angular from the At the same time working on the UI. Built some components already.

New Radiology dashboard built with Angular 2. The header and the footer are separate reusable components and the dashboard itself is another component. It’s still not complete though.

Screen Shot 2017-07-17 at 10.31.20 AM



New report authoring.

Screen Shot 2017-07-17 at 10.32.09 AM

GSoC Coding Phase 2 Week 1

It’s a little over a week since the GSoC first evaluation ended on June 30th, 2017. Glad to say I passed the first evaluation with good remarks from my mentors. The radiology back end code can now save radiology reports using MRRT templates. That’s a great achievement.

For the phase 2 of the program I’ll be working on a new UI for radiology. We’ll be leaving the legacy OpenMRS UI and build a new user interface based on web components. The initial idea was to use Polymer for this but Angular 2 changed the story. Angular 2 is component based and perfect fit for out goals.

The front end will be an Open Web App which is supported by the LH Toolkit thanks to the OpenMRS Open Web Apps module. The web app will be an Angular 4 + Twitter bootstrap project. And it will communicate with Toolkit via REST.

I’m fairly new to all the technologies to be used for the front end so I started off by enrolling to an Angular 4 course on Udemy using my GSoC stipend. I also watched some videos about twitter bootstrap. I’m also learning Angular 2 from the tutorials. I’ve still not covered enough angular to complete the front end but I’m making much progress with angular and I’m confident to meet my 2nd evaluation goals.

I’ve setup an Angular project for LibreHealth Radiology and hosted it on GitHub. I’ll be updating the app as I get more understanding of Angular while moving on with the course.

GSoC First Evaluation Report


The first coding phase of GSoC just ended and here is my report.

The milestone for this phase was to make it possible to create radiology reports using MRRT report templates. And I’m happy to say the milestone was achieved and it’s now possible to create MRRT reports instead of the traditional free text reports. First I’ll demonstrate how to use it then I’ll go throw my implementation details.

Create an MRRT Report

This still in development so you’ll have to build the radiology module to test this. To build it clone my repo on gitlab

git clone

Then checkout the gsoc2017 branch

cd lh-radiology

git checkout gsoc2017

Now build a the .omod file

mvn clean install

You can now deploy your module to toolkit/core server. To setup a server see standard OpenMRS or LibreHealth Toolkit documentation for instructions. The following instructions assume you already have a server running OpenMRS 2.0.5. For rapid development I setup my server using the OpenMRS SDK. The server runs openmrs version 2.0.5. But any 2.x version should work fine.

To create a radiology report using an MRRT template, first you have to make sure you have at least one MRRT template imported into the system. To import a template, visit the Report Templates Tab on the radiology dashboard. And click on upload new template and select your template file.

Screen Shot 2017-06-28 at 9.13.37 PM

Now if template import is successful then you are one step closer to been ready to use these templates to create a radiology report.

These reports are saved as html files on the file system. We needed to make it possible to query these reports when querying observations for a patient. So instead of the radiology module taking care of saving the file, it’s uses an OpenMRS API Complex Obs. All the radiology module has to do is create a complex obs and set it’s complex data to the contents of the report and hand it over to the openmrs api to save the complex obs with the report. To use complex obs you must have at least one complex concept in the system. Concepts are normally added via a standard concept dictionary or via metadata sharing module. But for development and testing you can go ahead and manually create a complex concept. For that click on the ‘Dictionary’ link on the home page and click add new concept.

Screen Shot 2017-06-28 at 9.29.35 PM

The concept data type must be complex and handler TextHandler

Screen Shot 2017-06-28 at 9.32.16 PM

Save the concept and proceed to creating your report.

To create a report you need a completed radiology order obviously. We are reporting the findings of performing a radiology procedure after all.

Screen Shot 2017-06-28 at 9.35.24 PM

Save your order and you can now claim your report. If you you used the old version of the module you’ll release a drop down that specifies the kind of report you want to create. If you select Free text then you’ll proceed with creating a normal radiology report with using a template file. But if you select MRRT, you’ll be presented with a search box to search a template to use.

Screen Shot 2017-06-28 at 9.39.59 PM

Click on a template from the suggestions

Screen Shot 2017-06-28 at 9.41.23 PM

Click on claim report and you’ll be presented with a report editor that uses the MRRT template as a starting point.

Screen Shot 2017-06-28 at 9.47.16 PM

Fill your report and save it by hitting Complete.

See my next blog post about my implementation of the above feature.