Versions Compared

Key

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


Primary mentor

Backup mentor

Assigned to

Rohan Sharma

Abstract

Looking for a student with mobile app development knowledge to help out with a telemedicine project powered by OpenMRS. Currently, the project relies on human clerks to manually take calls and enter data. We’re looking for a mobile developer to help build an app that would allow prospective patients to automatically submit their contact information for followup with a physician.

Objectives

...

Nigeria Telemedicine App is a lightweight, easy to use telemedicine mobile app developed to make health services more accessible to the Nigerian population. Users can register themselves on the OpenMRS server providing basic details like their name, phone number. All this can be done within a minute as there is no wasting time in login and verification etc. After successful registration, the user will receive a call from a doctor as early as possible.

The project involved me developing an Android application as well as a reverse proxy for the app. Both of these tasks were successfully completed.

Objectives

1. To develop an android app from scratch that allows the user to register himself/herself on the OpenMRS server.

  • Devising suitable architecture for the app that makes it easy to maintain the app in the long run and is also easier for other contributors to understand and contribute. (COMPLETED)
  • Using the latest jetpack components with Kotlin. The app uses ViewModel, LiveData, View and Data binding. (COMPLETED)
  • Implementing the dashboard, register patient and help functionalities into the app. (COMPLETED)
  • Creating a new user role on the OpenMRS that had the minimum possible privileges required to register a patient on the server. All patient registrations via the app are made by this user. (COMPLETED)
  • Adding Firebase Crash analytics for monitoring app crashes. (COMPLETED)
  • Adding suitable Unit tests to the app. (PENDING)

2. Implementing a proxy server that serves as a mediator between our app and the OpenMRS server to improve the security of our servers.

  • Learning about python, Flask, Gunicorn, and Docker. (COMPLETED)
  • Developed the Flask app and served it using Gunicorn. (COMPLETED)
  • Created the docker image for the app. (COMPLETED)
  • Adding the docker container to the main infrastructure’s docker-compose. (COMPLETED)
  • Deploying the app on AWS (COMPLETED).

Sample Use Cases

A user enters his/her name, gender, DOB, and phone number , and chief complaint in a simple form. The user taps a "Complete" button and is then asked to verify that the information is correct. If the user information is incorrect, the user taps a "Back" button and corrects his/her information. If the information is correct, the user taps the "Request Consult" button and the information entered is sent to the OpenMRS API. In the background, the app checks if the information was successfully received by the API. If the information was not successfully received (due to network errors, etc.) the app displays an appropriate and helpful error message. If the information was successfully received, the app displays a success message, along with information about when the user can expect a call from a physician. The app also includes a help section which explains how to use the app and how the telemedicine process works.

Steps

  1. Build a "Frontend-only" version of the application
    1. Data-entry page
    2. Verification page
    3. Successful transaction page
    4. Unsuccessful transaction page
  2. Integrate the application with the OpenMRS API backend
  3. Set-Up a reverse proxy for the app.
  4. Publish app on an appropriate platform

Required Skills

  • Iphone and/or Android development experience using Kotlin.
  • Experience interacting with APIs programmatically (REST)

...

Android Development Tips

(thanks to suggestions from Fawwaz Yusran)

  • Use the new Android Jetpack architecture
  • Write in Kotlin
  • Don't reinvent the wheel (use 3rd party libraries when possible)