Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

 

Introduction:

...

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.

...

             


 

Before

After

Image RemovedImage Added 

 Image RemovedImage Added

 

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.

...

Mockups for demonstrating the changes in v1.3:



 

Before

After

Image Removed Image Added

 Image RemovedImage Added

Image RemovedImage Added

 Image Removed Image Added

Image RemovedImage Added

 Image Removed Image Added

Image RemovedImage Added

 Image RemovedImage Added 

Image Removed Image Added

 Image RemovedImage Added

 



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.

 

...

Next you will see a mockups to demonstrate the kind of optimisations made to the UI.

 

Mockups:

Image RemovedImage Added

  

Image Added

Image RemovedImage Added

Image Removed

 

Image Removed

 

Image RemovedImage Added

Image Added

Filling forms capabilities v2.0:

...

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.


Image RemovedImage Added

Implementing OpenMRS specs “Mobile Data Collection Project”:

...

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:

 

 

Image Removed Image Added

Image RemovedImage Added 

Image RemovedImage Added

Image RemovedImage Added

Image RemovedImage Added 

Image RemovedImage Added 

 

 

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:

Image RemovedImage Added

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.

Image RemovedImage Added



The Application Shell:

...

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.

 

...

These diagrams demonstrate the final state of the whole iOS app.

Use-Case Diagram:

Image RemovedImage Added

 

High-Level Diagram:

Image RemovedImage Added

My time allocation for the project:

Image RemovedImage Added

May 2015

Image RemovedImage Added

June 2015

Image RemovedImage Added

July 2015

Image RemovedImage Added

August 2015

  • Red: working 15 hours/week -Final exams-

  • Yellow: working 25 hours/week

  • Green: working 40 hours/day

...

 

Date

Deliverable

27 / 4 / 2015 - 7 / 5 / 2015

   v1.2 (Stepping Up The Code)

Week 1

  • Make the app universal so iPad users *for now* can get an iPad sized app.

  • View current active visits.

Week 2

  • Better patient view

Week 3

  • Edit patients’ information from the app.

  • View offline saved patients with indicator are they synced with their online profiles or not.

  • Implement synchronisation technique between offline saved data and their corresponding profiles on the server.

Week 4

  • Add support for other languages.

  • Add support for state restoration.

  • Add support for dynamic type.

  • Update OpenMRS-iOS User Guide.

Week 5

  • Implementing SplitView for search

  • Applying some iPad specific views

Week 6

  • Apply iPad specific views to the rest of the app

  • Update OpenMRS-iOS User Guide

Week 7 - Week 9

*Work on the 8th week will be lighter

  • Implementing the chooser part of the XForm Chooser

  • Implementing the UI related for List of XForms and downloading the XForms

  • Start working on the XForm parsing engine

  • Continue implementing XForm parsing engine

  • Testing XForms parsing engine

Week 10

  • Implementing XForms controller

  • Starting implementing the presentation layer (Text, Numerical)

Week 11

  • Continue working on presentation layer (Complex [audio, video], concept sets)

Week 12 - August 17th

  • Release it as beta to be tested by the community

  • Continue testing the app XForms part specifically

  • Responding to Community feedback

  • Update the OpenMRS-iOS User/Developer manual

 

...