Introduction:
OpenMRS already has a great app on the iOS platform and Parker Erway already made a fantastic job with the UI and the functionality of the app, And with the OpenMRS users on iOS increasing, It is time to take the app to the next step. v2.0.
About Me:
I’m a 4th year student at the department of Computer Engineering and Software Systems at Faculty of Engineering Ain-Shams University, I’m from Cairo, Egypt.
I'm a self taught programmer, I do my programming now in Python for applying machine learning algorithms that I'm currently studying and web development in Django, and contributing to C++/C projects, and most of my education at college was in java, But my favourite programming language by far is Objective-C.
My Github: https://github.com/yousefhamza
I have contributed to many Open source projects including OpenMRS and other iOS app, and other projects in different domains.
I also love problem solving on online Judges like SPOJ, CF and TC.
Roadmap:
v1.2 (Stepping up the code) --pre-GSOC--
Add User experience enhancements.
Finish Already existing TODOs in the codebase.
Fixing JIRA tickets.
Refactoring the code.
Put a “CodingStyle” file for future contributors.
Integrate the code base with Travis CI.
Update the OpenMRS-iOS Development Guide.
v1.3 (Stepping up the app)
Make the app universal so iPad users *for now* can get an iPad sized app.
View current active visits.
Edit patients’ information from the app.
View offline saved patients with indicator are they synced with their online profiles or not.
Better patient view.
Implement synchronisation technique between offline saved data and their corresponding profiles on the server.
with option to disable it always, or just on WiFi.
Add support for other languages.
Add support for state restoration.
Add support for dynamic type.
UI Adapting to changes in device settings like font size.
Update OpenMRS-iOS User Guide.
v1.4 (iPad version)
Optimizing the app UI to the make better use of the iPad.
v2.0 (Filling forms capabilities)
Users can download, fill and upload forms from within the app.
Update the OpenMRS-iOS Development Guide.
Update OpenMRS-iOS User Guide.
Toward v1.2:
I already started working on the tasks I just mentioned in v1.2, I made several pull requests to the app repo that has been merged.
here’s a taste of the user enhancement tweak that make it easier for the user and contribute to the data integrity:
Before | After |
|
|
Also there’s already some TODOs put by Parker that I found during working on the codebase like better handling for errors like for saving to CoreData.
And also re-orgnaizing the code from a single folder containing all the code to separate several files by functionality in the app, View controllers, Models, Services.. etc
Stepping up the app v1.3:
I have this idea that we can start by making the app available on the iPad instead of using the iPhone version on the iPad.
Making that real can’t be any easier with 0 code modification thanks to Parker Erway job with UI, Just Setting: Deployment info>Devices to “Universal” instead of only iPhone.
Mockups for demonstrating the changes in v1.3:
Before | After |
|
|
| |
| |
| |
|
|
New REST APIs utilized in v1.3:
REST API | Functionality |
GET: http://server:8080/openmrs/ws/rest/v1/visit?includeInactive=false | Get all the active visits. |
POST: http://server:8080/openmrs/ws/rest/v1/patient/{uuid} | To edit patients info. |
iPad Version v1.4:
iPads are quite often used in the health industry and that raises the need to deliver a better experience for the iPad, my optimisations for the iPad design is derived by mainly 2 principles:
Make more use of the iPad specific UI elements
Bigger UI elements specifically the ones tabbed on by the user.
Next you will see a mockups to demonstrate the kind of optimisations made to the UI.
Mockups:
Filling forms capabilities v2.0:
The Big Picture:
The app will send request to get the xforms from an OpenMRS server with xforms module installed, the user chooses a form to fill, The form is downloaded to the App as XML, then parsed and a corresponding GUI objects will be generated that’s displayed to the user to fill the form. Check the sequence diagram below.
Implementing OpenMRS specs “Mobile Data Collection Project”:
The main parts to be created in the mobile application to comply to the project is:
Presentation Layer.
XForm Controller.
XForm Model.
Application Shell.
Presentation Layer -XForm View-:
The presentation layer requirements is “1 question per screen interface”, And that’s what I’m going to implement here, some examples of the UI is shown in the mockups below -The example of the UI shown below is based on the demo of ODKClinic on youtube and to give an idea of how it’s going to look on iOS:
|
| |
|
|
For audio Input I will be using an external library, right now I found EZAudio to be the most popular one, but that’s subject to change in the future, example of the UI below:
XForm Controller and XForm Model:
Under Mobile Data Collection Project, there’s a listed description and diagrams describing the structure of of the module to be implemented in the mobile application, So I’m going to use that. And my XML Library of choice to be used in parsing will be NSXMLParser and here’s why:
It’s the default one in the iOS SDK so no overhead of using external library and reducing the application dependency.
It’s a SAX parser which is required to achieve the sequence diagram of the Mobile XForm module.
It supports XPath and Event-Driven XML.
*The sequence diagram below is from Mobile XForm Module Documentation.
The Application Shell:
Already exists.
New REST APIs utilized in v2.0:
REST API | Functionality |
http://server:8080/openmrs/moduleServlet/xforms/xformDownload?target=xformslist&uname=name&pw=password | Get all xforms available. |
http://server:8080/openmrs/moduleServlet/xforms/xformDownload?target=xforms&uname=name&pw=password | Get the Forms. |
http://server:8080/openmrs/moduleServlet/xforms/xformDataUpload?uname=name&pw=password | Upload filled forms. *with property xforms.useEncounterXform to True on the server to enable editing existing encounters. |
Diagrams for final output:
These diagrams demonstrate the final state of the whole iOS app.
Use-Case Diagram:
High-Level Diagram:
My time allocation for the project:
May 2015
June 2015
July 2015
August 2015
Red: working 15 hours/week -Final exams-
Yellow: working 25 hours/week
Green: working 40 hours/day
Deliverables:
Goals:
Every deliverable has been debugged extensively on different scenarios.
Every deliverable is 100% done and has 0 TODOs.
Every deliverable is well documented on the OpenMRS website for the community.
Every deliverable can be submitted to the public on the App Store.
Dates:
Date | Deliverable |
27 / 4 / 2015 - 7 / 5 / 2015 | v1.2 (Stepping Up The Code) |
Week 1 |
|
Week 2 |
|
Week 3 |
|
Week 4 |
|
Week 5 |
|
Week 6 |
|
Week 7 - Week 9 *Work on the 8th week will be lighter |
|
Week 10 |
|
Week 11 |
|
Week 12 - August 17th |
|