# What is Simple?

Simple is the fast, free app for clinicians to manage their patients with high blood pressure and diabetes. More details at Simple.org

This is a truly free, [open source project](https://www.simple.org/license/). [Simple](http://simple.org) has two main components: a mobile app for Android and a secure web-based Dashboard.

{% tabs %}
{% tab title="📱 Simple Android App" %}
The Simple Android app that is used by healthcare workers to:

1. Enroll patients in a hypertension and diabetes control program
2. Record patients' BPs, blood sugars, and current medicines
3. Set future appointments for patients
4. Contact overdue patients to return them to care
5. Track an individual facility's performance at controlling patients' BPs<br>

{% content-ref url="/pages/ZY6ZDf8mPemVsBqzEKm2" %}
[Simple app features](/readme/simple-app-features)
{% endcontent-ref %}

![Screenshots of the Simple Android app (fake data)](/files/-MB0SdbxhF6ZIN9Xixx-)

#### **Technology**

Github: [simpledotorg/simple-android](https://github.com/simpledotorg/simple-android)

The Android app is primarily written in Kotlin
{% endtab %}

{% tab title="🖥️ Simple Dashboard" %}
A web-based tool that allows managers to:

1. Track facility, district, and state-level performance in real-time reports
2. Manage users, facilities, and more
3. Overdue patient line lists
4. Deduplicate patients
5. Automatically send text messages to patients to return them to care
6. API to manage data across mobile devices and to integrate with DHIS2 and other applications<br>

{% content-ref url="/pages/F9gAl8CkwDsE9HBmuLFh" %}
[Dashboard features](/readme/dashboard-features)
{% endcontent-ref %}

![Screenshot of the Simple Dashboard (fake data)](/files/x2z8yZ81to8n2z09qavx)

#### Technology

Github: [simpledotorg/simple-server](https://github.com/simpledotorg/simple-server) repository

👩‍💻 The dashboard is primarily written in Ruby on Rails and PostgreSQL
{% endtab %}
{% endtabs %}

## One-pager

#### International version

{% embed url="<https://drive.google.com/file/d/1-EIF1PjoD1nqLDyL34ia0OODDjcEod_V/view?usp=sharing>" %}

## Want to try it out?

{% content-ref url="/pages/-Ldqf0C0mJjhMARq31eP" %}
[Try it out](/how-to-test-the-simple-app)
{% endcontent-ref %}


# Background

Why did we develop Simple? How can a data system benefit a hypertension control program?

![A healthcare worker using Simple at an early Simple facility in Hoshiarpur, Punjab, India](/files/1OgzpAzVZCsqH5DAgvOK)

## Overview

Hypertension is the leading preventable cause of premature death worldwide, accounting for 10.7 million deaths per year, with most deaths occurring in low- and middle-income countries.

Large-scale hypertension control programs in low-resource settings face many challenges, including understaffed health systems with overworked staff often too busy to document detailed clinical data during patient encounters.

A strong public health program backed by a well-designed digital health information system has immense potential to save lives. An effective digital system must accommodate healthcare worker time constraints so the program can focus on providing high-quality clinical care.

A practical digital system is most likely to succeed if it: 1) is very fast and easy to use, 2) includes only a few key indicators, 3) requires minimal data entry, and 4) is designed with offline-first capability.

The best system is ultimately one that helps the most patients reduce their blood pressure.

### Hypertension is public enemy #1

Hypertension kills more people than all infectious diseases combined. Hypertension is also very common, affecting 20-35% of adults in most communities. That means that about 1/5 of adult patients in a hospital's outpatient department will present with hypertension. Practically, this means that enormous numbers of patients require counseling, measurement, and treatment — and those patients need to be monitored over time to ensure that their hypertension is controlled successfully.

As you can imagine, this volume of patient management is challenging in busy hospitals in places like India, Bangladesh, Sri Lanka, and Ethiopia.

### The statistics

* **17.9 million people die** each year - from cardiovascular diseases (CVDs), an estimated **31% of all deaths worldwide** [(Statistics from 2017)](https://www.who.int/health-topics/cardiovascular-diseases/#tab=tab_1)
* Out of 17 million premature deaths (under the age of 70) due to non-communicable diseases in 2015, 82% are in low and middle-income countries, and 37% are caused by CVDs. [(source)](https://www.who.int/en/news-room/fact-sheets/detail/cardiovascular-diseases-\(cvds\))
* 75% of CVD deaths occur in low and middle-income countries. [(Statistics from 2017)](https://www.who.int/health-topics/cardiovascular-diseases/#tab=tab_1)
* 85% of all CVD deaths are due to heart attacks and strokes. [(Statistics from 2017)](https://www.who.int/health-topics/cardiovascular-diseases/#tab=tab_1)
* People with cardiovascular disease or who are at high cardiovascular risk due to the presence of one or more risk factors (such as hypertension, diabetes, hyperlipidaemia, or already established disease) need early detection and management using counseling and medicines, as appropriate. ([source)](https://www.who.int/en/news-room/fact-sheets/detail/cardiovascular-diseases-\(cvds\))

## Feedback loops

A system for monitoring is one of the core pillars of a hypertension control program based on the World Health Organization's [HEARTS technical package](https://www.who.int/publications-detail-redirect/hearts-technical-package). By recording a high volume of follow-up visits by patients with hypertension, it's possible improve the health system more quickly. Fundamentally, Simple is a system of feedback loops to improve patient treatment and strengthen health systems.

### Minimal data generates key indicators

Just with minimal information about each patient's current BP measures, medications, a health system or hospital can monitor:

<table><thead><tr><th width="210.22982885085577">Key indicators</th><th>What it means</th></tr></thead><tbody><tr><td>BP controlled</td><td>How many patients have visited recently with their blood pressure under 140/90? This is the critical indicator to measure a successful hypertension control program.</td></tr><tr><td>BP uncontrolled</td><td>How many patients visited recently but their blood pressure is not controlled yet? These patients need to be treated successfully to bring their BP under control.</td></tr><tr><td>Missed visits</td><td>How many patients are not regularly receiving care? These patients need to be encouraged to return to care.</td></tr><tr><td>Registrations</td><td>How many patients are enrolled in the hypertension program? How much of the estimated hypertension patients in the population does this represent?</td></tr></tbody></table>

![Key indicators for monitoring a hypertension control program in a region or facility](/files/hTfzTD1iavRmN9wAYnOp)

In the graphs above, an epidemiologist or health official can read a story. BP control rates in region are increasing over the last 3 months, great! This is a result of declining "Missed visit" rates (blue chart) and also that more patients who come back have their BP controlled now (red chart). If we want to continue to increase BP control, we could focus on returning even more patients to care or we could try to reduce the red number further (e.g. by counseling patients on medication adherence, by ensuring medical officers are treating to protocol, or by sending patients home with longer prescriptions). This region has a good BP control rate (above 50% is good!), so maybe we would focus on identifying more people in the community with hypertension and start treating them — 35,525 might only represent 5% of the local population with hypertension.

Other indicators are also tracked. For instance:

* Lost to follow-up patients: How many patients have not visited in over 1 year?
* Calls made to patients: How many calls have healthcare workers made to patients?
* Medication titration rates: How often are medical officers intensifying treatment for patients with uncontrolled blood pressure?

See our [What we report](/reports/what-we-report) section for a detailed list of indicators and definitions.

### Who needs Simple?

**Patients** want to know whether treatment is succeeding. **Clinicians** strive for better management of each patient. **Health system managers** and **public health officers** are concerned with system performance and entire populations, often millions of people.

The core challenge, therefore, is to design software that meets the needs of all three of these groups while operating within severe time constraints at the point of care.

| -                            | Patients                                                   | Healthcare workers                                                                 | Public health managers                                                           |
| ---------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| **Relationship to software** | Uses individual blood pressure measurement data            | Uses software to ensure each patient receives correct treatment                    | Uses aggregate data from software to determine system performance                |
| **Ultimate goal**            | Monitor their own progress toward blood pressure control   | Monitor each patient’s progress to control blood pressure                          | Monitor blood pressure control of patient population                             |
| **Critical needs**           | Monitor progress, visit convenient clinics                 | Quick overview of patient’s recent history                                         | Big picture view of where blood pressure is controlled and where to focus effort |
| **Constraints**              | Time constraints; hypertension treatment is a low priority | Roughly 15 seconds available for data entry; high turnover so easy training is key | Manages other programs; little time                                              |

## In the field

Simple is designed to be a pragmatic tool. A typical clinical visit in India lasts 3-4 minutes. In Bangladesh it's closer to 2 minutes. A busy clinician is juggling many tasks in this tight time: taking blood pressure and blood sugar measures, diagnosising, prescribing, and counseling the patient.

Keep in mind that clinicians don't come to work to do data entry. They focus on treating patients.

If we expect thousands of overworked healthcare workers to enter a high volume of data for a large percentage of their patients, we need to make fast and easy.

### Healthcare workers need practical tools

A digital health information system that minimizes and streamlines data entry allows healthcare workers to concentrate their limited time on providing direct patient care. Registration of new patients requires entry of patient information, demographic data, and health history, which needs to be done only during initial intake. A well-designed digital system can accomplish patient registration and first clinical visit in approximately 80 seconds (exclusive of physical blood pressure measurement): scan ID card to determine whether the patient is already registered and if not decide whether to enroll as a new patient (6 seconds); verify or enter patient information and demographics and conduct brief survey of cardiovascular history and risk, including current medications (66 seconds); enter blood pressure readings (6 seconds); and schedule follow-up visit (2 seconds).

After initial registration, healthcare workers need only scan the patient ID card and verify identity, enter blood pressure readings, verify current medications, and schedule follow-up, all of which can be done reliably within about 15 seconds. Variables required for patient registration must also be kept to an absolute minimum or many patients will go unregistered and their data unrecorded. There are many important variables of interest to epidemiologists and program managers. By evaluating these additional variables in specially designed studies on specific groups rather than for every patient, more reliable data will be collected and, most importantly, front-line health workers’ time to interact with patients will be respected and protected.

Designing with the pretense that healthcare workers have more time than they do results in software that is never adopted, is used inconsistently, or collects inaccurate data. Usability by front-line staff should be prioritized over any other consideration.

### Training

A tool that is fast to use can also be fast to train; minimizing data entry minimizes what healthcare workers need to learn. Train users *in situ* at hospitals and clinics, ideally in less than 1 hour, to reduce overhead costs for conducting trainings and to enable implementation scale.

Staff turnover and task sharing are common. If the digital tool is easy to learn, trained staff can teach others.

## Conclusion

Based on metadata from more than 1.8 million patients, the Simple mobile app is widely used and performance remains very fast (approximately 80 seconds for registration and entering data from the initial clinical visit and 15 seconds to enter follow-up visit data). Data dashboards are easy to produce and disseminate and widely used by program staff. In Bangladesh, hypertension control rates more than doubled within a few months, from approximately 20% to 45%, in clinics that adopted the Simple app, although other program improvements likely also contributed to this increase.

In qualitative interviews, healthcare workers consistently rate the Simple app highly and emphasize how it reduces their burden of work and helps them to efficiently manage patients, monitor progress to improve blood pressure control, and deliver better care to patients

## More background

#### Blog articles

* [Clinical software must respect clinicians' precious time](https://www.simple.org/blog/user-centered-design-public-health/)
* [Requirements for a digital information system for hypertension control](https://www.simple.org/blog/requirements-of-a-hypertension-management-system/)
* [What we are learning by creating an ultra-thin EMR](https://www.simple.org/blog/what-we-are-learning/)

#### **Clinical workflow**

* [Key moments in the user journey](/design-1/user-studies/users-key-moments)

#### Videos

* [A day in the life of Simple](https://www.youtube.com/watch?v=G0Pj_2aFGCQ)

#### Training

* [Presentation: Training for Simple Dashboard](https://docs.google.com/presentation/d/1YKlZfXpnX0tGk6NMO6JLuZY0l9O3P3zOxKXsWNJh7W0/edit#slide=id.g7402fb462f_0_661)
* [Training video for the Simple app](https://www.youtube.com/watch?v=MC_45DoRw2g)

#### **Links**

* [The Resolve to Save Lives hypertension control program](https://resolvetosavelives.org/cardiovascular-health/hypertension)
  * See an example hypertension treatment protocol from Punjab, India
  * See "How to take a BP: BP Measurement checklist" to learn to take a BP
* Article in *The Lancet*: [Saving 100 million lives by improving global treatment of hypertension and reducing cardiovascular disease risk factors: Frieden and Jaffe](https://resolvetosavelives.org/assets/Resources/Saving-100-million-lives-by-improving-global-treatment-of-hypertension-and-reducing-CVD-risk-factors_Frieden_Jaffe.pdf)

![Dr Prabhdeep Kaur from ICMR having her blood pressure measured by an ANM (Auxilliary Nurse Midwife) at a sub-center in a village in Punjab.](/files/TVU7ZDTBhFrm8LMdpgfr)


# Simple app features

The main features of the Simple Android app, created for healthcare workers to record patient visits. The app is optimized to record a very high volume of patient follow-up visits.

![Simple being used at a health facility in India](/files/Pd9B7T6y49LNHSya1yzZ)

In many countries, patient visits are very short. In India, a typical visit with a clinician is about 3-4 minutes, in Bangladesh it's closer to 2 minutes. That's only a few minutes for an entire clinical encounter. When we ask clinicans how we can help them, the almost universal answer is: "Don't make my life harder." We take the responsibility of protecting clincians' precious time very seriously. One of core tenets of Simple is that it can be fast... really fast. The median time to record a hypertension or diabetes follow-up visit is 16 seconds.

Even in a lightning fast encounter, it's possible to record all of the necessary data to drive key feedback loops that will improve patient health. We have included the following features after ruthless consideration about how to keep Simple simple.

## Record blood pressures

The key purpose of Simple is to record BPs. Entry is simple, but manual: find the patient and add their systolic and diastolic blood pressure readings. Basic error-checking ensures BPs aren't outside normal limits.

#### Back-dating BP entries

By default, Simple records BP entries at the time of recording. However, users can change the date to any time in the past. This is useful when adding older entries that were recorded on a paper record.

#### Editing BP entries

BPs can be edited at any time on the same day that they were entered. On the next day, entries are not editable.

#### Automated BP readings (not supported)

We have considered adding measures automatically with Bluetooth connectivity to BP monitors. However, the general unreliability of Bluetooth connections, the added complexity, and the lack of many Bluetooth-enabled BP devices in the field, means that we have not built this feature.

## Record diabetes measures

Simple optionally supports recording blood sugar and HbA1c measures. This feature can be enabled for entire groups of facilities or for individual facilities. Today, most facilities in Simple record both BPs and diabetes measures.

Types of diabetes measures:

* Random (mmol/l or mg/dL)
* Postprandial (mmol/l or mg/dL)
* Fasting (mmol/l or mg/dL)
* HbA1c (%)

Diabetes measures can be back-dated and edited in the same way as BP measures.

## Record medicines

Simple records a patient's current anti-hypertensive and diabetes medications. This is used as a record for clinicians to titrate medications to protocol and also drives the titration reports in the Simple Dashboard.

{% hint style="info" %}
The "Current medicines" list in Simple *is not a prescription* — it is a record of a patient's current medications. Important features like duration, instructions, warnings, time-of-day, and signatures are excluded in order to keep Simple simple. Most health facilities already have a well-understood paper prescription system that is used well.&#x20;
{% endhint %}

#### Common medicines pick-list

To make data entry as fast as possible, Simple has a preset list of common medications and dosages. This helps healthcare workers to pick the right medicines, fast. All hypertension protocol medications are listed here. The list is driven from the [Simple Dashboard](/readme/dashboard-features#manage-pick-list-medications-in-the-simple-app) and can be customized per region.

#### Pick list for "Other medicines"

Users can enter any medication manually. A preset list of common drug names helps users to do this quickly and consistently.

## Appointments

At almost every patient visit, patients are given a follow-up appointment. Keep in mind, public hospitals in many countries don't have "appointments" at specific times — an appointment is a reminder to return-to-care on a specific day.

#### Overdue patients

Appointments are primarily used to identify patients who are overdue for a follow-up visit. These patients are added to overdue lists in the Android app *and* the Simple Dashboard. They also may receive SMS messages or phone calls encouraging them to return to care.

#### Default time period

Hypertension protocols usually have a default follow-up period of \~30 days. We can set a default follow-up period from the [Simple Dashboard](/readme/dashboard-features#manage-default-follow-up-period-in-the-simple-app) — this is usually set to 28 days so patients A) return before their medications run out and B) the day is usually one when the hospital is open (i.e. if a patient visits on Friday, they'll follow-up on a Friday).

## Automated SMS messaging to overdue patients

In countries where this is enabled, Simple sends patients reminder messages to come back to care. Message timing is based on the patient's `Appointment Date` so, for example, a patient could receive a message 3 days after their expected appointment date.

#### Variables in messages

Text messages support variables, so we can send a message like:

```
{PATIENT NAME}, you are {DAYS SINCE APPOINTMENT} late for your BP measure at {FACILITY NAME}
```

Which would be sent as:

```
John Smith, you are 2 days late for your BP measure at PHC Blueberry.
```

#### A/B testing of SMS messages

Simple has the ability to test different messages and timings to see which are most effective at returning patients to care.

For instance, we can test 4 different messages to patients:

```
{PATIENT NAME} please return soon for your free medicines.
{PATIENT NAME} please return soon for a BP measure.
{PATIENT NAME} please return soon to prevent risk of heart attack or stroke.
{PATIENT NAME} your doctor asks that you return soon for a BP measure.
```

Simple will track which patients have a visit recorded in the next 2 weeks and we can compare which messages were most effective.

## Identify patients

One of the most important functions of the Simple app is the ability to find the right patient quickly. In some places like Punjab, India, or Bangladesh, many patients share the same surnames and there are many common first names.

Very few regions have useful Patient ID cards that could be used for fast, reliable patient look-up. If we could use National IDs or drivers licenses, we would support them.&#x20;

#### Patient search

Patients can be searched by `NAME`, `PHONE`, or `HOSPITAL ID number`. The manual search is a type-ahead search and will display patients at your facility before patients registered at facilities nearby.

#### Patient IDs: BP Passports & National Health IDs

We invented a simple ID system that we call a BP Passport and Simple supports some official IDs such as the new [Ayushman Bharat Health Account](https://healthid.ndhm.gov.in/) in India. Users can scan a QR code on the ID and use that QR code data to look up patients at all follow-up visits.

The BP Passport ID is extremely basic and does not contain any PII (Personally Identifiable Information). The main function is a unique QR code on each card that contains a [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier) (i.e. a gigantic number). We also display a 7 digit hash of the UUID on the front of the card, which can be used to search for the ID manually.

![A stack of blank BP Passport IDs ready to use](/files/1V0r7adgLbU7aOAdB80a)

In the BP Passport above, the QR code and hash might be:

```
ID: 04b25d4c-cc7f-4cae-ad18-f438053acc2c
Hash: 7204949
```

A user will scan the QR code and associate it with the patient's record. Next time the patient visits, the user will scan the QR code again and immediately see the patient's record. This is a huge timesaver and reduces duplicate records.

The BP Passport card also serves a less technical purpose. The patient can see a record of when they are expected for their next follow-up visit and the inside contains information about their recent BP measures and current medicines, which can travel with the patient to any medical provider.

## Offline patient sync

The Simple app stores many patient records entirely offline. This means that a facility can treat patients for days or even weeks with limited internet access. When the user gets access to the internet, they sync their records to the centralized cloud-based server.

Please read our blog post explaining how we think about offline-first apps in the clinical environment: <https://www.simple.org/blog/offline-first-apps/>&#x20;

#### High performance, small app sizes

We optimize Simple to be able to handle many patient records on each device. Our benchmark is to support \~30,000 patients per device, even on a mediocre Android smartphone.

{% hint style="success" %}
**Important!** All patients from a district's sub-region are synced to every Android user working at facility's in a sub-region. We know that patients travel to different clinics. For example: a patient might visit a local Health & Wellness Center for regular check-ups but will have travel to the PHC 2km away if they need a medical officer to change their medications. So, a user at Facility A will sync patient data from Facilites B-to-Z in case one of those patients comes in the door.
{% endhint %}

## Overdue patients list

The Simple app automatically generates a patient line list of overdue patients which can be used to encourage patients to return to care. Patients are listed in order of cardiovascular risk and time overdue.

#### Mark result of call

When healthcare workers reach out to patients, they mark the result of each contact. Simple can track when patients transfer to private care, are unresponsive, have died, etc. When users mark results of calls, the data is displayed in the Simple Dashboard, so health officials can track the activity.

#### Download and share

In India, healthcare workers often give community health workers line lists of patients for home visits. Simple supports downloading a `CSV` or `PDF` of the overdue patients list for sharing with community health workers.

#### Secure calling

In India, Simple supports "secure callings", which masks the user's personal phone number from the patient. This is similar to how ride-sharing apps hide the driver's phone number from the passenger when calls are made.

## Progress reports

The progress tab in the Simple app gives users feedback on how their facility is progressing towards their goals for treating hypertension and diabetes.

{% hint style="info" %}
Note, the progress tab is designed to show a facility's progress, not each healthcare worker's progress. This is both simpler and reduces fear of judgement by managers.
{% endhint %}

![An example Progress Tab showing data and graphs](/files/RECn4T5kIy2X0YC1fd2x)

The progress tab is techincally generated from the Simple Dashboard and then synced as a piece of HTML to the app.

## In-app help

The app contains some basic instructions on how to use the app itself, as well as how to conduct basic activities like taking an accurate blood pressure reading.

## Drug stock reporting

Simple now supports monthly reporting of drug stock. Each month, users are reminded to submit a web form with their drug stock data. For each protocol medication, users enter the `# of tablets received`, `# of tablets in stock`, and (if the facility redistributes medicines to satellite clinics) `# of tablets sent out`.

Based on the data submitted and the number of patients assigned to the facility, Simple can calculate how many "patient days" of medicines are in stock. This data is shown in the app and in the Simple Dashboard.

{% hint style="info" %}
The drug stock feature is a web form, so it is not available when users are offline.
{% endhint %}

## Tele-consultation via Whatsapp

Simple has a very limited telemedicine feature which connects healthcare workers with a medical officer over WhatsApp. When treating a patient, users can select "Tele-consult" to auto-transmit key information about the patient to a designated medical officer, who can initiate a teleconsult to discuss the patient's treatment, send an e-prescription, and jointly update the patient's record.

The telemedicine feature is used in a set of pilot facilities in India and is designed to adhere to Indian telemedicine law.

## International support

#### Languages

The Simple app is translated into many languages. This means that the user interface is translated into the common languages understood by healthcare workers in India, Bangladesh, and Ethiopia.

{% hint style="info" %}
Note: Simple's patient search does not support multiple scripts. For instance, if a patient is registered in the Latin alphabet as **Advika** cannot be found by searching for **आद्विका.** We encourage administrators to train users to adopt a single data entry standard in a region.
{% endhint %}

#### Ethiopian calendar

The Simple app supports the [Ethiopian calendar](https://en.wikipedia.org/wiki/Ethiopian_calendar), so BP dates, appointments, and other key dates are displayed using the Ethiopian calendar conversion. Note that the Simple Dashboard and the Progress Tab in the Simple app (which is driven by the Dashboard) does not support the Ethiopian calendar yet.


# Dashboard features

The main features of the Simple web-based Dashboard, which is used by health officials, surveillance officers, and system administrators

![Reviewing a dashboard in a hospital in India](/files/gHfAtwPMtNneEcdgx4iv)

## Reports

The key reports in Simple are based on the [WHO's HEARTS Technical Package](https://www.who.int/publications-detail-redirect/hearts-technical-package) for managing a large-scale hypetension control program and most [indicators](/reports/what-we-report) closely match the HEARTS indicators.

The primary function of the dashboard is to drive feedback loops for people who oversee health programs. The primary indicator of the success of a hypertension control program is:

> How many registered hypertension patients returned to care in the last 3 months and their blood pressure was under control (<140 systolic and <90 diastolic)?

### What is the purpose of Simple's reports?

Fundamentally, many of the report graphs and tables in Simple explain why more patients aren't controlled. The reports and trends help health officials to identify questions like:

1. **Are patients returning to care?**
   * If patients aren't returning to care, are healthcare workers calling them?
   * Are we delivering text messages successfully to return patients to care?
   * How many patients are "lost to follow-up", haven't visited in >1 year?
   * Are patients being registered in large facilities and reassigned to smaller, more convenient facilities?
2. **Are enough patients being registered?**
   * Which facilities are registering patients?
   * What is the population of a region and how close are we to identifying and registering a realistic percentage of patients there?
3. **Are patients returning to care but they aren't controlled?**
   * If patients aren't controlled, are their medications intensified per protocol?
   * At what point of the hypertension protocol are the most patients being controlled?
4. **Are hospitals well-stocked with essential medicines?**
   * Are patients being given enough medications so they aren't forced to return to the pharmacy at the hospital too often?
5. **Is Simple being well-used?**
   * Are we seeing an expected number of follow-up visits recorded?
   * Which users are doing the most activity?
   * Are BPs being recorded accurately?

### Key graphs

![](/files/hTfzTD1iavRmN9wAYnOp)

The key reports shown at the national, regional, and facility levels track how many patients visit with controlled BP, visit with uncontrolled BP, miss visits, and are registered into the program.

### Cohort reports

![An example quarterly cohort report](/files/iuT7kj1ncKLIbpAaQMjQ)

Cohort reports are used to track the early progress of newly registered patients. The idea is that patients that start well in the program will succeed long term. &#x20;

### Patient line lists

Another key function of the Simple Reports is to enable health officials and epidemiologists to download key data and patient lists for surveillance and analysis. Several different `CSV` files are available to download for further analysis.

### BI tools + Simple

In several countries we integrate a business intelligence tool called Metabase, so authorized users can query the Simple "Data Pipeline" data to create custom reports. This is a powerful way for epidemiologists to find trends and ask questions of the data.

{% content-ref url="/pages/-MgJtJKvBEkUn6Sz7dWD" %}
[Building custom reports](/reports/building-custom-reports)
{% endcontent-ref %}

### Excel reports

Many surveillance officers meet with the local officials to share progress and advocate for changes within the health system. They often use Microsoft Excel to generate custom reports to illustrate their points. The Simple team has created an Excel template that can be auto-populated with downloaded data from the Dashboard. See example below:

{% file src="/files/6Uav6SAaYH0SDJazk00G" %}

Surveillance officers can download the template, then download a specially formatted data dump from the dashboard, fill out a few fields (e.g. "Recommendations for action in the field") and then use the report for their work.

### Snapshot graphics

Simple also generates little mini Reports as graphics that can be shared monthly with health officials over Whatsapp or email, which show a snapshot of a facility's or district's performance.

## Facility trends

Another section of the Dashboard is used my surveillance officers to compare all of their facilities to see which are high performing and which need assistance.

![](/files/V6tsh8QOouKS4pK9URta)

## Drug stock

Simple can also be used to track anti-hypertensive and diabetes drug stock. See [Simple app features](/readme/simple-app-features#record-diabetes-measures) for a description of how healthcare workers submit data. In the Dashboard, officials can view the current `Patient days` of drug stock based on a simple algorithm, which calculates based on a facility's registered patients.

Officials can also enter the drug stock numbers through the Dashboard for facilities that submit data using Excel, Whatsapp, or other means.

![](/files/MSs00f1DIUc0QAClrssZ)

## Overdue patients

The Dashboard has an entire section to display the overdue patients within a region or at a specific facility. The dashboard could hypothetically be used to run a centralized call center to contact patinets, but we haven't yet had the opportunity to try this anywhere at any real scale.&#x20;

**Note:** Patients in the screenshot below are all fake.

![Screenshot of the Overdue section (from the Sandbox testing version of Simple)](/files/FYHyQux5ndpT5a4meNAB)

## Merge duplicate patients

Inevitably, some patients get registered twice. With an offline-first app and with millions of patients enrolled, this is impossible to avoid. Simple has a rudimentary deduplication service that identifies very likely matches based on `Patient IDs`, `Names`, `Phone numbers`, and similar `Addresses`. Dashboard admins can merge patient records, into a single record.

## Resources & training materials

The Dashboard is a convenient one-stop-shop for program managers. We include common materials such as:

* Training videos
* Training presentations
* Deployment checklists
* FAQs

## Administrative tools

### Approve Simple app users

Simple has an unusual method of enrolling new Simple Android app users. Android app users self-enroll by doing the following :

1. Download the app from the Play Store
2. Enter their own name, mobile, and choose a PIN
3. Choose their work facility from a list of all Simple facilities
4. User is now in a `temporary status`
5. A Dashboard admin needs to call the user, verify they're permitted to manage patients, then they are approved.
6. Once approved, the user is in `approved status` and Simple starts syncing data to-and-from the cloud.

This system makes training large groups much faster, since a trainer doesn't need to pre-approve users. It also means that a busy clinician can start recording patients at her facility even before being approved — but she can't see any previous patient data nor sync to the cloud before she's approved.

### Telemedicine users

Admins can select which Android users are qualified medical officers who can be linked to telemedicine sites.

### Manage pick-list medications in the Simple app

The pick list of medications in the Simple app is different in every region (each region has a different set of commonly prescribed medications). This list is managed through the Dashboard and synced to the device based on the facility's region.

### Manage default follow-up period in the Simple app

Typically follow-up appointments are 28 days. This time period can be easily managed from the Dashboard per region.

### Facilities, districts, and blocks

Facilities can be added through the Dashboard.

![](/files/cvacXm0gbO4zCzkJ6zQH)

Regions are important both for reporting and for data sync to Android devices.

#### Bulk add facilities

Allows Admins to upload a spreadsheet and add many facilities at once.

### Organizations

Organizations are the top level structure for facilities — and are rarely used. All facilities in India are currently under the IHCI (India Hypertension Control Initiative) organization. In the future, a private hospital chain could theoretically use Simple on the same infrastructure but as a separate organization.

### Dashboard admins & permissions

Dashboard admins can have different levels of permissions. Admins can add new admins. New admins are given permission to view or manage a set of facilities and can have permissions such as:

* **Manager.** Can manage regions, facilities, admins, users, and view everything
* **View: Reports only.** Can only view reports
* **View: Everything.** Can view patient data and all facility data.
* **Call center staff**. Can only manage overdue patients list.
* **Power user**. Can manage the entire deployment.

### Bulk import patients

Many places have used paper records to manage patients. The bulk import function allows data entry operators to fill out a spreadsheet with thousands of patient records and import that historical data into Simple.

### Feature toggles (Flipper)

Power users can manage specific features by country or even by Dashboard admin. This allows the Simple team to test new features only flagged on for specific Dashboard admins or to enable features only in some regions.


# Who uses Simple?

This is a deceptively difficult question: Simple is used by thousands of healthcare workers and health systems managers.

## Staff at hospitals and clinics

Healthcare workers are the main users of the [Simple Android app](/readme/simple-app-features). They register patients into the hypertension/diabetes control program and then monitor each patient's health over time. But there are key differences.

#### Medical officers

Medical officers (MO) are empowered to treat patients, which in the context of hypertension and diabetes care means that they can titrate (i.e. intensify) a patient's medications if appropriate. In a small hospital (PHC), medical officers might be the primary users of Simple. In a larger hospital (CHC, SDH, DH), many medical officers are too busy to enter data and more junior staff will manage Simple.

#### Staff nurses, junior staff nurses, etc

In many facilities, nurses manage the use of Simple. Particularly in large facilities, a [Non-Communicable Diseases (NCD) Corner](/readme/clinic-workflows#ncd-corner) is likely staffed by nurses who take BPs and manages Simple. Patients with high BP measures should be referred to a medical officer, who will manage treatment. Often patients return to the nurse after seeing the medical officer, so their data can be entered. They are ***the primary users*** of the [Simple Android App](/readme/simple-app-features).

#### Community health officers

Community health officers (CHO) are mid-level health staff who can treat some non-complex conditions and are primarily the senior staff at Health & Wellness Centers (HWC) in India. In some contexts, the CHOs treat patients and record their details in Simple. Note: There are *many* HWCs in India, so there are many CHOs.

#### Data entry officer

Some hospitals have dedicated staff for data entry. They are responsible for submitting monthly data (usually in spreadsheets or paper forms) to local government officials. They might correlate data from the paper registers with records in Simple and they might compile totals from the Simple's Progress Tab to submit as part of their process.

#### Chief medical officer

The chief medical officer manages the hospital and is usually the most senior doctor. The chief medical officer might use the Progress Tab in the Simple Android app to monitor the facility's progress towards controlling patients' blood pressures.

## Managers

Health system managers represent a wide group of people who are responsible for optimizing the health system to help more patients to control their blood pressure and reduce deaths.

#### State or national officials

At the Ministry of Health in a state or country, officials are responsible for tracking many programs, including hypertension and diabetes. They *might* use the Simple Dashboard to track progress in their region, but more likely they see charts when a nodal officer or cardiovascular health officer visits with them once-per-month to advise on how to strengthen the program.

#### State of district nodal officers&#x20;

A nodal officer is a government official with a particular focus area — there are NCD nodal officers in many Indian states or districts. In some states (e.g. West Bengal), the district nodal officer has a similar function to the cardiovascular health officer. The nodal officer might monitor the Simple Dashboard or (like the state officials) they might only see the data when a cardiovascular health officer shows them charts.

**Cardiovascular health officers**

CVHOs are surveillance officers hired specifically to manage 1-2 districts of a hypertension program. The India Hypertension Control Initiative has many CVHOs across India, primarily focused on improving the program. The same people are called different things in other countries. They are ***the primary*** ***users*** of the [Simple Dashboard](/readme/dashboard-features).


# Clinic workflows

Clinics can be very different, but we will describe some typical workflows for data entry into the Simple Android app for clinicians.

{% hint style="warning" %}
**Important**: Clinic workflows can be very different. As of April 2022, Simple is used in >7,000 facilities, from small community clinics all the way up to large district hospitals. We do not design for a specific workflow, we design for Simple to be adaptable in many situations.
{% endhint %}

## District Hospital (DH)

![The line outside an NCD Corner in a district hospital in Bangladesh](/files/HoNEFdPsDFJBYOiNUeiJ)

A district hospital is the largest public hospital in a region. There is generally only 1 or 2 district hospitals per district.

A typical district hospital will have a large outpatient department (OPD) with long lines of patients queued from 8am in the morning until about 2pm. Most patients did not come to the hospital for hypertension — they likely came for an acute issue — but because of the high footfall at the clinic, it's an excellent place to opportunistically identify many people with hypertension.

#### Non-Communicable Diseases **Corner**

A district hospital likely has a dedicated Non-Communicable Diseases Corner (NCD Corner) where patients are tested for blood pressure (BP) and blood sugar readings. The NCD Corner is often located near the OPD intake desk. A NCD Corner might be staffed by a small team of junior nurses and a staff nurse overseeing it. The NCD Corner staff will maintain the hypertension registers and will be the primary users of Simple through the [Simple Android app](/readme/simple-app-features).

#### Medical officers

A large facility like a district hospital will have many medical officers and will often have specialists on staff. This means that patients can be diagnosed here and medication can be prescribed and supplied.

#### Pharmacy

A district hospital will have a dedicated pharmacy, with hypertension protocol medications and other medications from the "essential drugs list" in stock.

### **Typical flow**

1. **OPD intake:** Patient waits at OPD in-take counter. At the counter, a clerk gives each patient an OPD slip (a single piece of paper) and records their basic demographics into a register. Adult patients are redirected to the NCD Corner.
2. **NCD Corner:** Patients queue at the NCD Corner for 10-30 min. They then have a BP measure and sometimes a blood sugar measure. The patient's BP reading is written on their OPD slip. If the patient has not yet been diagnosed with hypertension and their BP is ≥140/90, they are redirected to a medical officer who is stationed in a room nearby.
3. **Medical officer's office:** Patients queue to enter the medical officer's room. When they reach the front of the queue, the doctor will give them about 2-3 minutes to explain their symptoms, glances at notes on the patient's OPD slip, takes their BP, diagnoses them (if BP is high), and prescribes medications if diagnosed. Any patient who is diagnosed should be redirected to the NCD Corner to be enrolled in the hypertension program. Note: In many large hospitals, medical officers are too busy to use Simple.
4. **NCD Corner:** Diagnosed patients come back to the NCD Corner. Each patient's details are recorded into Simple and the doctor's diagnosis, prescription, and BP reading are entered for this visit. The staff will ask where patients would prefer to receive follow-up care and will change the "assigned facility" to a local facility (see note below). Patients are counselled to return for care in 30 days.
5. **Pharmacy:** Patients are then directed to the pharmacy to pick up \~30 days of medications. In India or Bangladesh, these medicines are free, but in other countries like Ethiopia there is often a fee.

{% hint style="info" %}
**Note!** A good hypertension program often dissuades diagnosed patients from taking their follow-up visits at a large hospital. Patients are "assigned" in Simple to a PHC or community facility closer to their home and with shorter waiting times.
{% endhint %}

![The general structure of the public hospital system in India](/files/yaIhMByDgyxJ2dXFnonZ)

## Primary care hospital (PHC)

![A typical PHC in India](/files/iwbzOOEJdFGe5L9PBfpN)

A primary care hospital can take many forms. A typical PHC might have 2-3 medical officers but they may not always be present. A PHC is the local hosptal where patients can be diagnosed and where new prescriptions can be written. A PHC might have 3 or 4 rooms but usually doesn't have inpatient care.

In some PHCs there will be a specific day of the week for hypertension and diabetes follow-up care, so patients will be encouraged to come on that day. In other PHCs, hypertension patients are treated whenever they come in.

### Typical flow

1. **A small intake desk** (often also the pharmacy) will take the patient's demographics and will give them an outpatient paper slip (OPD slip). Patient then queues to see the medical officer.
2. **Medical officer:** The MO will typically take the patient's BP and may diagnose the patient if their BP is ≥140/90. They will write a prescription and counsel the patient to return in 30 days. They may reassign the patient to a local community facility if it's more convenient for the patient for follow-up visits. The medical officer might be the primary user of Simple in this facility — they'll record the patient visit into Simple.
3. Patient leaves and picks up medications from the front desk on the way out.

{% hint style="info" %}
**Note:** A PHC may be the parent facility for community facilities nearby. They may distribute medications to community facilities, direct activities like following-up with patients, etc. The group of facilities may track their performance as a group.
{% endhint %}

## Community facility (HWC, SC, CC)

![A simple community clinic (CC) in Bangladesh](/files/oCDNzxFAwhgM90otl8d6)

A community facility is a local 1-2 room facility in a village and likely does not have a medical officer.  A community facility traditionally was focused on maternal and child health, but likely now is treating chronic and simple diseases. If there is no medical officer, the facility can likely only refill medications for patients with controlled BP and refer patients in need of diagnosis or treatment intensification to a PHC or larger hospital.

Some Health & Wellness Centers in India (HWC) have a Community Health Officer (CHO) who is empowered to treat simple conditions. In some instances, they can treat uncomplicated cases of hypertension.

### Typical flow

1. The CHO, Auxiliary Nurse-midwife (ANM), or next most senior staff will greet and treat patients. Lines are typically short.
2. The same person who is treating patients typically records BP measurements, medication refills, and other details into Simple.

{% hint style="info" %}
**Note:** A HWC or sub-center is the hub for community health workers who do home visits. HWC staff might print a list of overdue patients or high risk patients and send community health workers to find patients in the community.
{% endhint %}


# Try it out

We welcome anyone to kick the tires of Simple. If you are a health systems manager and would like a hands-on demo, please get in contact with us.

## **Android: Demo app**

{% hint style="success" %}
Demo is publicly accessible to anyone and everyone. It is nearly identical to the production app, but with fake data.
{% endhint %}

1. Install Simple Demo from [the Android Play Store](https://play.google.com/store/apps/details?id=org.simple.clinic.staging).
2. While making a new account in the app, enter a 10-digit phone number. If you don't have an Indian number (starting in +91) just use a fake 10-digit number.
3. Create any 4-digit PIN code.
4. When choosing facilities, pick any of the "Demo" facilities (e.g.: Demo Facility A, Demo Facility B etc.)

## Android: Sandbox app

{% hint style="info" %}
Sandbox app is only accessible to the Contributors team, and you have to be invited to see it on the Play Store. We deploy a new version of Sandbox to the Play Store every night, automatically.&#x20;
{% endhint %}

* Ask someone from the Contributors team to give your Play Store email address access to the app. Unless this happens, you will not be able to find the app on the Store.
* Once given access, you should be able to join the [Sandbox app access program](https://play.google.com/apps/internaltest/4699036784677958916).
* After you've joined, you should be able to see the app [on the Play Store](https://play.google.com/store/apps/details?id=org.simple.clinic.sandbox).
* While making a new account in the app, provide a correct phone number: you will receive a verification OTP SMS on it.
* When choosing facilities, pick any facility. It doesn't really matter.
* Tell someone from the Contributors team to *approve* your account. Unless you get approved, no data will sync to your phone.

## Web: Demo Simple dashboard

{% hint style="success" %}
Demo is publicly accessible to anyone and everyone. It is nearly identical to the production dashboard, but with fake data.
{% endhint %}

1. Go to <https://dashboard-demo.simple.org/>
2. Login using `sts@simple.org` and `Resolve2SaveLives`
3. Note that this user only has "View" access to the dashboard and can only see Reports for one region

Read [this Google Doc](https://docs.google.com/document/d/1QC5_bWYeKAlFFbzTsLozUiq8Vuk1-3s4s3Ixzz3LcLw/edit) for testing instructions for specific features of the Simple Dashboard


# Training materials

Training presentations and videos for trainers and Simple users

### Training presentations

{% embed url="<https://docs.google.com/presentation/d/1y4tEmm6ZaIphf48s8NNr6LjQt7pV8m_2AAubovGGVO8/edit#slide=id.g625ae98c28_1_21>" %}

[Link to Google Slides presentation](https://docs.google.com/presentation/d/1y4tEmm6ZaIphf48s8NNr6LjQt7pV8m_2AAubovGGVO8/edit) for "Training for the Simple Android app"

{% embed url="<https://docs.google.com/presentation/d/1sna087oQH6NbMk28pwmvvLvvAV4xyB0hHBACLP4iU1E/edit#slide=id.g7402fb462f_0_836>" %}
Guide for trainers
{% endembed %}

### Training videos&#x20;

Our training videos are now available in several languages. Please see [our Youtube page](https://youtube.com/simpleorg) for all training videos.

{% embed url="<https://www.youtube.com/watch?v=MC_45DoRw2g&t=10s>" %}
Individual chapters available on our Youtube channel
{% endembed %}

{% embed url="<https://www.youtube.com/watch?v=YjfPCUtZHlI&t=4s>" %}
Short introductory video
{% endembed %}

{% embed url="<https://www.youtube.com/watch?v=wfrMbvTXn38&feature=youtu.be>" %}
Video training for trainers
{% endembed %}

### Other training resources

✅ [Deployment checklist](https://docs.google.com/document/d/1cleJkm09VRGUAafkpzC9U2ao9r4r8ewZjLPwfTTj57Q/edit): A checklist for teams deploying Simple in a district

📖 [Handbook for Simple users](https://drive.google.com/file/d/1MM2dEpUBgE3EyZS9CrzuxgjHqIQa3eb1/view): Detail explaining how to use Simple


# Contact us

Please feel free to reach out if you would like to contribute to Simple or if you're interested in using Simple in your area.

### Slack

Most discussion happens on Slack — just ask [team@simple.org](#email) and we'll add you to the team Slack, which is at <https://simpledotorg.slack.com/>

### Email

General information\
<team@simple.org>

Daniel Burka, Director of Product and Design\
<daniel@simple.org>


# Customer support

We appreciate your help in making Simple better for everyone!

## How to handle common issues

Praveen Kumar at WHO India has compiled an excellent guide on what program officers should do when healthcare workers encounter issues using Simple:

✋🏽​ [What surveillance officers should do when they encounter a bug or issue with the Simple app](https://docs.google.com/document/d/1RgWCn-gcXvEbnozAZPIqmVpdQrd_INYFNOKB0NBGpII/edit#heading=h.jymexnipl7j2)

## How to report an issue

If you use Simple in the field and want to help the tech teams behind Simple with useful bug reports, please reference this helpful guide on how to triage and document issues:

🐞 [How to file a bug report or raise an issue](https://docs.google.com/document/d/1bJniRgJL8ef_SWWcwdLi1WASlez0ZHLH556YRDA9mDE/edit#heading=h.hucspecdvz3q)

## File an "Issue" on Github

{% hint style="info" %}
To report a bug, please create an "Issue" on Github. If you don't know what that means, please just email a bug report to <team@simple.org> with as much information as you can, so we can understand what's happening. Thank you.
{% endhint %}

📱 File a bug about [the Android app](https://github.com/simpledotorg/simple-android/issues)

🖥️ File a bug about [the web-based Dashboard](https://github.com/simpledotorg/simple-server/issues)

## Filing a useful bug report on Github

1. Click on *New issue*
2. Define the bug succinctly in the title.\
   For example: *App freezes when user clicks 'Register as new patient'*
3. In the description, record steps to reproduce the bug.
   1. On the home page, add patient's name, click "Next"
   2. On the next screen, click "Register as new patient"
   3. Behaviour: App freezes
   4. Expected behaviour: Redirect to page where other patient details are requested
4. Don't forget to label your issue `Bug`

### Additional information, if possible

* Attach screenshots as supporting documentation
* Include the app version, device model and Android version in the description
* For bugs on the Simple Dashboard, include browser and version


# Bug priority definitions

We mark priorities using these labels on Github and Clubhouse.

## p0 bug

{% hint style="info" %}
Ideal time to deploy fix: within 24 hours
{% endhint %}

* App is crashing / none of the users can use the app (e.g.: enroll a new patient, or record a patient's blood pressure)
* Loss of data anywhere in the system
* Fix immediately, all hands on deck!

## p1 bug&#x20;

{% hint style="info" %}
Ideal time to deploy fix: within 48 hours
{% endhint %}

* Some nurses are facing severe issues with the app
* Nurses can't use other features of the app (e.g.: view the Progress tab)
* Admins cannot use the dashboard
* Incorrect data being displayed in reports (in the app or on the dashboard)
* Fix urgently!

## p2 bug&#x20;

{% hint style="info" %}
Ideal time to deploy fix: within 2 weeks
{% endhint %}

* Bug makes app or Dashboard difficult to use
* Bug may cause errors in analysis in the Dashboard
* Will likely annoy a large group of users
* Fix quickly, but not urgent

## p3 bug&#x20;

{% hint style="info" %}
Ideal time to deploy fix: within 2 months
{% endhint %}

* Bug does not affect regular use
* Bug is more of an annoyance than a critical issue
* Bug is a polish issue


# What we report

This document lists and defines the key indicators program managers use to track the hypertension and diabetes control programs with Simple.

## Region reports

To improve hypertension and diabetes treatment for a clinic or even an entire population, you have to understand how the system is performing. You need to see if patients are getting healthy, if they’re being treated, if they’re coming back for follow-up visits, and if they’re being registered into the system.

Simple collects the bare minimum of information necessary to identify a patient, treat the patient for hypertension and diabetes, and schedule a follow-up. We aggregate this information generate reports at 5 region levels, from an organization to a facility.\
Region names are unique for each country:

| **Country**     | **Region 1** | **Region 2** | **Region 3** | **Region 4** | **Region 5** |
| --------------- | ------------ | ------------ | ------------ | ------------ | ------------ |
| 🇮🇳 India      | Organization | State        | District     | Block        | Facility     |
| 🇧🇩 Bangladesh | Organization | Division     | District     | Upazila      | Facility     |
| 🇪🇹 Ethiopia   | Organization | Region       | Zone         | Woreda       | Facility     |
| 🇱🇰 Sri Lanka  | Organization | Province     | District     | Town         | Facility     |

## Hypertension indicators

### Registrations

* **Monthly registrations:** The number of patients registered at a facility during a month where the patient is hypertensive and is not deleted.
* **Total registrations:** The total number of patients registered at a facility. *Note: This is calculated by adding monthly registered patients at a facility over time.*
* **Why is this important?** Program managers monitor registration numbers to ensure healthcare workers are entering patients into the system.

### Assigned patients

The number of patients that a facility is responsible for where a patient is hypertensive, not deleted, and not dead.

* **Why is this important?** This indicator is the population base used to calculate indicators like BP controlled and Missed visits.

### Patients under care

The number of patients assigned to a facility where the patient is hypertensive, is not deleted, is not dead, and had at least one of the following within the last 12 months: an appointment scheduled, their drugs refilled, a BP taken, or a BS taken.

* **Why is this important?** It represents the number of “active” patients.

### Lost to follow-up

The number of patients assigned to a facility where the patient is hypertensive, is not deleted, is not dead, was registered >12 months ago, and hasn’t had at least one of the following within the last 12 months: an appointment scheduled, their drugs refilled, a BP taken, or a BS taken.

* **Why is this important?** The main key indicators exclude lost to follow-up patients to allow program managers to only assess the health of active patients.

### Follow-up patients

* **Follow-up patients per user:** For a given period, the number of patients attended by a user where the patient is hypertensive, is not deleted, was registered before that period, and had at least one of the following during that period: an appointment scheduled, their drugs refilled, a BP taken, or a BS taken.
* **Follow-up patients per facility:** For a given period, the number of patients that visited a facility where the patient is hypertensive, is not deleted, was registered before that period, and had at least one of the following during that period: an appointment scheduled, their drugs refilled, a BP taken, or a BS taken.
* **Follow-up patients per region:** For a given period, the sum of follow-up patients across all facilities in the region.
* **Why is this important?** This indicator is used to monitor the facility’s activity. Follow-up patients per facility are often compared with total assigned patients because they show what proportion of patients are coming back to care.

### BP controlled

The number of patients assigned to a facility registered before the last 3 months where the patient is hypertensive, not deleted, not dead, and has a BP measure <140/90 taken within the last 3 months.

* **Why are patients registered within the last 3 months excluded?** Three months gives patients time to take their hypertension medication and to get their BP controlled. Most newly registered patients have uncontrolled blood pressure and including them would not reflect an accurate picture of actual controlled patients.
* **Why is this important?** BP controlled reflects the overall health of a hypertension control program and is the most important indicator our system tracks.

### BP not controlled

The number of patients assigned to a facility registered before the last 3 months where the patient is hypertensive, not deleted, not dead, and has a BP measure ≥140/90 taken within the last 3 months.

* **Why is this important?** BP not controlled shows which patients are coming back to care, but require continued hypertension treatment to control their blood pressure.

### Visited but no BP taken

The number of patients assigned to a facility registered before the last 3 months where the patient is hypertensive, not deleted, not dead, and did not have a BP taken but had at least one of the following within the last 3 months: an appointment scheduled, a drug refilled, or a blood sugar taken.

* **Why is this important?** We started tracking this indicator more closely during COVID-19 because patients were visiting facilities to pick up medications but didn’t have their BP taken to avoid contact with healthcare workers and prevent COVID infection. This is not very common, but helps capture the entire patient base.

### Missed visits

The number of patients assigned to a facility registered before the last 3 months where the patient is hypertensive, not deleted, not dead, and did not have a visit within the last 3 months.

* **Why is this important?** This number reflects how good facilities are at reminding patients to come back to care in the 3-month period we’re tracking controlled and uncontrolled patients.

### Patient coverage

Total registered patients divided by the region’s total estimated hypertensive population.

### Cohort reports

Cohorts allow program managers to track a set of patients receiving treatment over time. We take all the patients registered during a quarter and see the outcome of their visit in the following quarter.

\
**Quarterly cohort reports**

* **BP controlled numerator:** The number of patients with a BP <140/90 at their last visit in the quarter after the quarter when they were registered.
* **BP not controlled numerator:** The number of patients with a BP ≥140/90 at their last visit in the quarter after the quarter when they were registered.
* **Visited but no BP taken numerator:** The number of patients with no BP taken but at least one of the following in the quarter after registration: an appointment scheduled, their drugs refilled, or a blood sugar taken.
* **Missed visits numerator:** The number of patients with no visit in the quarter after the quarter when they were registered.
* **Denominator:** The number of patients assigned to a facility where the patient is hypertensive, is not deleted, is not dead, and was registered during a quarter.

![An example cohort report bar chart](/files/ZwpTr2XGV1SiOQ7hNiem)

## Diabetes indicators

#### Registrations

* **Monthly registrations:** the number of patients registered at a facility during a month where the patient is diabetic and is not deleted.
* **Total registrations:** the total number of patients registered at a facility where the patient is diabetic and is not deleted.
* *Note: This is calculated by adding monthly registered patients at a facility over time.*

### Assigned patients

* The number of patients a facility is responsible for where a patient is diabetic, not deleted, and not dead.
* **Why is this important?** This indicator is the population base used to calculate indicators like BP controlled and Missed visits.

### Patients under care

* The number of patients assigned to a facility where the patient is diabetic, is not deleted, is not dead, and had at least one of the following within the last 12 months: an appointment scheduled, a their drugs refilled, a BP taken, or a BS taken.
* **Why is this important?** It represents the number of “active” patients.

### Lost to follow-up

* The number of patients assigned to a facility where the patient is diabetic, is not deleted, is not dead, was registered >12 months ago, and hasn’t had at least one of the following within the last 12 months: an appointment scheduled, their drugs refilled, a BP taken, or a BS taken.
* **Why is this important?** The main key indicators exclude lost to follow-up patients to allow program managers to only assess the health of active patients.

### Follow-up patients

* **Follow-up patients per user:** For a given period, the number of patients attended by a user where the patient is diabetic, is not deleted, was registered before that period, and had at least one of the following during that period: an appointment scheduled, their drugs refilled, a BP taken, or a BS taken.
* **Follow-up patients per facility:** For a given period, the number of patients that visited a facility where the patient is diabetic, is not deleted, was registered before that period, and had at least one of the following during that period: an appointment scheduled, their drugs refilled, a BP taken, or a BS taken.
* **Follow-up patients per region:** For a given period, the sum of follow-up patients across all facilities in the region.
* **Why is this important?** This indicator is used to monitor the facility’s activity. Follow-up patients per facility are often compared with total assigned patients because they show what proportion of patients are coming back to care.

### BS <200

* The number of patients assigned to a facility registered before the last 3 months where the patient is diabetic, not deleted, not dead, and has an RBS/PPBS <200, FBS <126, or HbA1c <7.0 within the last 3 months.
* **Why are patients registered within the last 3 months excluded?** Three months gives patients time to take their diabetic medication. Newly registered patients have uncontrolled blood sugar and including them would not reflect an accurate picture of actual controlled patients.
* **Why is this important?** BS <200 reflects the overall health of a diabetes control program and is the most important indicator our system tracks.

### BS 200-299

* The number of patients assigned to a facility registered before the last 3 months where the patient is diabetic, not deleted, not dead, and has an RBS/PPBS 200-299, FBS 126-199, or HbA1c 7.0-8.9 within the last 3 months.
* **Why is this important?** BS 200-299 shows how many patients are coming back to care, but require continued diabetic treatment to control their blood sugar.

### BS ≥300

* The number of patients assigned to a facility registered before the last 3 months where the patient is diabetic, not deleted, not dead, and has an RBS/PPBS ≥300, FBS ≥200, or HbA1c ≥9.0 within the last 3 months.
* **Why is this important?** BS ≥300 shows how many patients are coming back to care, but require continued diabetic treatment to control their high blood sugar.

### Visited but no BS taken

* The number of patients assigned to a facility registered before the last 3 months where the patient is diabetic, not deleted, not dead, and did not have a BS taken but had at least one of the following within the last 3 months: an appointment scheduled, a drug refilled, or a blood pressure taken.
* **Why is this important?** We started tracking this indicator more closely during COVID-19 because patients were visiting facilities to pick up medications but didn’t have their BS taken to avoid contact with healthcare workers and prevent COVID infection. This is not very common, but helps capture the entire patient base.

### Missed visits

* The number of patients assigned to a facility registered before the last 3 months where the patient is diabetic, not deleted, not dead, and did not have a visit within the last 3 months.
* **Why is this important?** This number reflects how good facilities are at reminding patients to come back to care in the 3-month period we’re tracking controlled and uncontrolled patients.

### Patient coverage

* Total registered patients divided by the region’s total estimated diabetic population. We currently show the patient coverage for “Region 2” and “Region 3” (see region table above for reference). A “Region 2”s patient coverage value is displayed *only* if all of its child regions have an estimated population value entered on the Dashboard.

## Other data we report

### Overdue patients

The Simple App and Dashboard show lists of overdue patients. A patient is considered overdue if their latest appointment's scheduled date has passed, the appointment is unvisited, and the patient is not dead or marked "already visited".

All overdue patients (and no other patients) are shown in the overdue list and download in the Simple app, as well as the overdue list and download in the Simple Dashboard.

### Overdue patients list in Simple Dashboard

The Simple Dashboard "Overdue patients" list shows all overdue patients, according to [the definition above](#undefined).

* **Why is this important?** It’s important for patients to come back to care to continue with their treatment and get their hypertension and diabetes under control. Healthcare workers are crucial at calling patients to remind them to attend their appointments.
* **How the overdue list is sorted:** The overdue list orders patients by the number of days overdue — most recent to oldest.

### Overdue patients list in Simple App

The Simple App "Overdue patients" list shows all overdue patients, according to [the definition above](#undefined). Once a patient has a visit to any health facility, they are removed from the Overdue patients list.

Patients are sorted into categories:

* `PENDING TO CALL`\
  Overdue patients who have not been called already (i.e. a user has not yet marked a "Result of call" after contacting the patient). Patients with no visit in >1 year are excluded.
* `AGREED TO VISIT`\
  Overdue patients who have been marked as "Agreed to visit" in the past. The date when this status was changed is shown in the app when you tap on the phone icon.
* `REMIND TO CALL LATER`\
  Overdue patients who have been marked as "Remind to call later" in the past. The date when this status was changed is shown in the app when you tap on the phone icon.&#x20;
* `REMOVED FROM LIST`\
  Overdue patients who have been marked as "Removed from overdue list" in the past. Reasons can be "Patient is not responding", "Phone number does not work", "Transferred to another public health facility", "Moved to private practicioner", or "Other reason". If a patient is marked as "Patient has already visited" or "Died", they are no longer shown in the overdue list and are not counted.
* `NO VISIT IN 1 YEAR`\
  \&#xNAN;*All overdue patients* who have not visited in >1 year are excluded from other sections and are filed in this section. Dead patients are excluded.

{% hint style="info" %}
**Note:** If a patient was never given a follow-up appointment date, they will not be included in the Overdue list in the Simple app.
{% endhint %}

### Overdue patients contacted

All patients called during a month by healthcare workers in a facility or region. These patients appear in the “Overdue” tab in the Simple App and Dashboard. A patient is marked as “contacted” whenever a healthcare worker or Dashboard admin marks an overdue patient with one of the following results on the Simple App: (1) Agreed to visit (2) Remind to call later (3) Remove from the overdue list.

* **Why is this important?** It’s helpful for program managers to know how much calling activity is happening at facilities.

### Inactive facilities

* Facilities registered in Simple where the current user can view reports and where <10 patients had a BP recorded in the last 7 days.
* **How is it calculated?** First we calculate total active facilities (facilities where >10 patients had any BPs recorded in the last 7 days). Then we grab all facilities the admin has access to, count the total number of patients with a BP taken in a day for the last 7 days at each facility, and return the number of facilities where the facility has had more than 10 patients with a BP taken in the last week.
* **Why is this important?** It allows program managers to see which facilities may be facing technical issues with the system or healthcare workers that are forgetting to record BP measures into the system.

### Patients with a BP measure taken

* Counts all BPs recorded by each healthcare worker at a facility where the patient is hypertensive and not deleted.
* **Why is this important?** Similar to inactive facilities, it allows program managers to see which facilities are facing technical issues or facilities with healthcare workers that aren’t recording BP measures into the system.

### BP log

* All blood pressures recorded at a facility.
* **Why is this important?** This allows program managers to see if healthcare workers are inputting accurate BP readings into the system. It’s common for healthcare workers to round systolic and diastolic numbers or to enter BPs that are just one point below the threshold (e.g. 139/89).


# Building custom reports

Details on how to creating your own reports using Metabase, and the reporting tables.

## Metabase

Metabase is a tool that allows us to explore the data in Simple, and build reports without engineering support. If you are new to Metabase, you can start with one of our [predefined templates](https://metabase.simple.org/collection/38), and explore further from there.

Alternatively, you can just click on "[Ask a new Question](https://metabase.simple.org/question/new)", and choose "Custom Question". You can refer to [Metabase's own documentation](https://www.metabase.com/docs/latest/users-guide/custom-questions.html) for a better understanding of how to use the query building interface.

Once you have generated a report, you can save it, share it with others, or even download the data to further analyse as spreadsheets or in other contexts.

Metabase is available for the following Simple environments.

| **Environment**                                              | **URL**                                                           | **Purpose**                                        |
| ------------------------------------------------------------ | ----------------------------------------------------------------- | -------------------------------------------------- |
| <p><strong>Production</strong></p><p><em>India</em></p>      | <https://metabase.simple.org>                                     | India’s IHCI program                               |
| <p><strong>Production</strong></p><p><em>Bangladesh</em></p> | <https://metabase.bd.simple.org>                                  | Bangladesh’s NHF hypertension control program      |
| <p><strong>Production</strong></p><p><em>Ethiopia</em></p>   | <https://simple.moh.gov.et/metabase/>                             | Ethiopia's MOH hypertension control program        |
| <p><strong>Production</strong></p><p><em>Sri Lanka</em></p>  | [https://metabase.lk.simple.org](https://metabase.lk.simple.org/) | Sri Lanka's MOH hypertension control program       |
| **Sandbox**                                                  | <https://metabase-sandbox.simple.org>                             | A stable playground for the Simple team to work in |

## Quickstart

If you're already familiar with Simple's data model and Metabase, you can get started with this quick demo.

{% embed url="<https://youtu.be/ooyUfKSJlXU>" %}

## **Getting Started**

To get started, open up the custom report template. Template links are provided below.

* India: <https://metabase.simple.org/question/343>
* Bangladesh: <https://metabase.bd.simple.org/question/46>&#x20;
* Sandbox: <https://metabase-sandbox.simple.org/question/86> &#x20;

### 1. Open the template

To start writing your custom report, click on the “Show Editor” button shown below.<br>

![](https://lh4.googleusercontent.com/1nata6tVwUR28OgMikCAoN0iHxLYJAB-CTmDnpugo-f57fSUqkbYDJSb6Jg2tsGmV8qWVX47gXC0O3pztyAYPA9INpX_4Oi5ZZbEwMCRE0Cdsej_Cv5cSas7eXwFIx-ro6tZHOC9=s0)

This will open the report editor. It will look something like this. The key features are labeled in the image below.

![](https://lh6.googleusercontent.com/gDtn93HD3rcZOS_XdpcnVn_f1V3N1zTT4i_GS970bFMU5lquNoRYaXILtmzvq4e6HV5GbKkpC3l_d9OJNIoC4vzDmmn1iD_qkpdxn9mzH6QReSAKihK4o6CcH6P4URTg1hL4nn2K=s0)

As is, this template generates a monthly report of cumulative hypertensive patients assigned per district in a single state over the last 24 months.

### 2. Filter the results

Add filters to the purple “Filter” section to limit the report to what you care about. For example, if you want a monthly cumulative report of controlled patients in this state, add the following filter:&#x20;

`Htn Treatment Outcome in Last 3 Months = controlled`

![](https://lh5.googleusercontent.com/9BJ7aQLBameBLZfzOuQAvhhOwhTwbakAFEqDTtgsJs8Qnvxr7awQRG9Tb36BRYIkeIuSvR30vkoqP_gtK8SghXI4peosFf0sLBfzzsCS8Nh4RX5o8Teji9UBPBnRmVO-o6Vvl3dG=s0)

See the Reference at the end of this document for a full list of options.

### 3. Group the results

You can modify the green “Summarize” section on the right to add more facets to segment the results. For example, you can break down the results by facility by adding the following grouping:

`Assigned Facility Slug`

![](https://lh3.googleusercontent.com/-vGZxIolWAy6bVzWL6SX-eVykZQRmMPtIxcQY8w7hkn_742cOB_4HJ7Ygq9D3SIyHe4Sh9zTairiZBzzT08trntJPy-DuAJcXHygBLApHWlXil9sBZ4GQNC2_DOBK2vm29PXSe9E=s0)

See the Reference below for a full list of grouping options.<br>

Read on further to understand the data in each of the reporting tables you can access in the questions on Metabase.

## **Key Reference**

The following are the key properties that can be used to filter and group the report’s results in the purple “Filter” section.

| **Field name**                                                                                                                                                                                                                                                                                                            | **Field description**                                                                                                                                                             |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`Month date`**                                                                                                                                                                                                                                                                                                          | The reporting month                                                                                                                                                               |
| <p><strong><code>Assigned organization slug</code></strong></p><p><strong><code>Assigned state slug</code></strong></p><p><strong><code>Assigned district slug</code></strong></p><p><strong><code>Assigned block slug</code></strong></p><p><strong><code>Assigned facility slug</code></strong></p>                     | The organization, state, district, block, or facility that the patients are assigned to.                                                                                          |
| <p><strong><code>Registration organization slug</code></strong></p><p><strong><code>Registration state slug</code></strong></p><p><strong><code>Registration district slug</code></strong></p><p><strong><code>Registration block slug</code></strong></p><p><strong><code>Registration facility slug</code></strong></p> | The organization, state, district, block, or facility that the patients were registered in.                                                                                       |
| **`Hypertension`**                                                                                                                                                                                                                                                                                                        | Is the patient diagnosed with hypertension? (yes/no)                                                                                                                              |
| **`Diabetes`**                                                                                                                                                                                                                                                                                                            | Is the patient diagnosed with diabetes? (yes/no)                                                                                                                                  |
| **`Htn Care State`**                                                                                                                                                                                                                                                                                                      | Is the patient under care, lost to follow-up, or dead                                                                                                                             |
| **`Treatment Outcome In Last 3 Months`**                                                                                                                                                                                                                                                                                  | <p>Patient’s controlled status based on the last 3 months. Possible values are:</p><ul><li>controlled</li><li>uncontrolled</li><li>visit but no BP</li><li>missed visit</li></ul> |
| **`Months since registration`**                                                                                                                                                                                                                                                                                           | Months since the patient’s registration, as of the reporting month                                                                                                                |
| **`Months since visit`**                                                                                                                                                                                                                                                                                                  | Months since the patient’s last visit (with or without a BP), as of the reporting month                                                                                           |
| **`Months since BP`**                                                                                                                                                                                                                                                                                                     | Months since the patient’s last BP measure, as of the reporting month                                                                                                             |

## **Tips & Tricks**

### **Registrations**

To run a report on registrations, add the following filter to the purple “Filter” section.

`Months since registration = 0`

![](https://lh6.googleusercontent.com/cPRpJc7V64Egd6_g_ekw6Nl1yQZFvcl-kZVnsxZAwPE2kfG-BUABCJMicpH0JE_nff9JO-eNnnWIj0eS6BrbdsDjEhBq7pBIcCpjVAUETZnEhVWvGDJPNiowdNgbdSQzLj2bHAvl=s0)

### **Multiple filters**

If you want to run a report that includes multiple filters such as controlled patients, uncontrolled patients, missed visit patients, in a single report, you can use a grouping instead of a filter. Group by the appropriate property in the green “Summarize” section.

For example, to generate a report of controlled, uncontrolled, visit-but-no-bp, and missed-visit patients, add the following grouping:

`Treatment Outcome In Last 3 Months`

![](https://lh3.googleusercontent.com/F2kDjhhdTPZRHMPvaMWaeYvK2TYQEU5HzmgRjRsGZfNmFErOdYiNl_OoIZYHnUrWfp2ZfAJWM62cj91wr4J7MPbBndwVnz7hzP_9EZX1ekwj1U49GaBHu8ajixro6TUGnwL1ETm7=s0)

### **Enriching results**

Sometimes, you want to run a report where results are grouped by facility, but you also want block and district information next to each facility. In order to do so, simply add block and district as additional groupings in the green “Summarize” section, and they will be shown in the results.

![](https://lh5.googleusercontent.com/Dq215fW2Hjz9V3rD4RrzkeO8rQyV43uNe5YqsWqGtXxruPcSvsis4y8yXkXsDJszHIvvm-t5VP8WcsZcM2AcuLCHK0nPzJ1FldQxOo4Ft6Ws0cpsnnAH0RR4iXPtKH8tr7yC9jey=s0)

The results will have block and district information next to each facility.

![](https://lh4.googleusercontent.com/nJakfzN610UrdG1uKYxPIbApyVV_bUgMeXz_pRXm45pwCncUqZf_0PUsfhHLrSDN9QnXNOwCUhfjPx4Kz5TEQrdQInKf_9qgxHWNHvHi1IO1sJpv_lULZV5k5qmtVh53RNDGojGE=s0)

## Detailed Reference

### Overview of the reporting tables

The following table is a summary of each of the reporting tables, and what they contain. Please refer to the sections below for details of the columns in each of these tables.

| Table Name                                                                         | Description                                                                                                              | Contents                                                                      |
| ---------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------- |
| **`reporting_patient_blood_pressures`**                                            | Summary of a patient’s latest blood pressure                                                                             | One row per patient, per month, from the month of the patient's registration. |
| **`reporting_patient_visits`**                                                     | Summary of a patient's latest visit where they had a BP/Sugar recording, an appointment, or a prescription drug refilled | One row per patient, per month, from the month of the patient's registration  |
| <p></p><p><strong><code>reporting\_patient\_states</code></strong></p>             | Summary of a patient's health information and computed hypertension indicators.                                          | One row per patient, per month, from the month of the patient's registration. |
| <p></p><p><strong><code>reporting\_facility\_states</code></strong></p>            | Summary of a facility’s registrations, treatment outcomes, and patients under care                                       | One row per facility, per month, for all months since 2018                    |
| <p></p><p><strong><code>reporting\_quarterly\_facility\_states</code></strong></p> | A facility’s quarterly treatment outcomes                                                                                | One row per facility, per quarter, for all months since 2018                  |

### How the reporting tables are created

The reporting tables are building blocks that are built on top of raw data. The following diagram illustrates which raw tables they are based on, and how we build larger even building blocks from these tables.

![Derivation of the reporting tables from raw data](/files/-MgeulRTv9qMEVys5uIV)

* **Raw data tables:** Data as recorded in the app goes into the transactional, or raw tables as seen in the first section of the diagram. These rows have all the detailed information collected as and when the nurse syncs the data via the Simple app. These tables have billions of rows, and are not well suited for querying reports.
* **Reporting tables:** These are summarised tables created from the raw data tables for ease of creating reports. The summaries can be per-patient-per-month, or per-facility-per-month. Please refer to the above diagram for the description of each table.
* **Dimension tables:** We can use these tables along with other reporting tables to filter and disaggregate data across time and geographical regions.

### Description of the data

{% tabs %}
{% tab title="reporting\_patient\_states" %}

```
|----------------------------------------+-------------------+---------------------------------------------------------------------------------------------------------------------------------------------------|
| column_name                            | data_type         | description                                                                                                                                       |
|----------------------------------------+-------------------+---------------------------------------------------------------------------------------------------------------------------------------------------|
| patient_id                             | uuid              | ID of the patient                                                                                                                                 |
| gender                                 | character varying | Gender of the patient                                                                                                                             |
| current_age                            | double precision  | "Patient's age as of today, based on 'age', 'age_updated_at' and 'date_of_birth'. This will have the same value for a patient across all rows."   |
| month_string                           | text              | "String that represents a month, in YYYY-MM format"                                                                                               |
| hypertension                           | text              | "Has the patient been diagnosed with hypertension? Values can be yes, no, unknown, or null if the data is unavailable."                           |
| assigned_facility_id                   | uuid              | ID of the patient's assigned facility                                                                                                             |
| assigned_state_slug                    | character varying | Human readable ID of the patient's assigned facility's state                                                                                      |
| registration_facility_id               | uuid              | ID of the patient's registration facility                                                                                                         |
| registration_state_slug                | character varying | Human readable ID of the patient's registration facility's state                                                                                  |
| months_since_registration              | double precision  | "Number of months since registration. If a patient was registered on 31st Jan, it would be 1 month since registration on 1st Feb."                |
| quarters_since_registration            | double precision  | "Number of quarters since registration. If a patient was registered on 31st Dec, it would be 1 quarter since registration on 1st Jan."            |
| months_since_visit                     | double precision  | "Number of months since the patient's last visit. If a patient visited on 31st Jan, it would be 1 month since the visit on 1st Feb."              |
| quarters_since_visit                   | double precision  | "Number of quarters since the patient's last visit. If a patient visited on 31st Jan, it would be 1 quarter since the visit on 1st Jan."          |
| months_since_bp                        | double precision  | "Number of months since the patient's last BP recording. If a patient had a BP reading on 31st Jan, it would be 1 month since BP on 1st Feb."     |
| quarters_since_bp                      | double precision  | "Number of quarters since the patient's last BP recording. If a patient had a BP reading on 31st Jan, it would be 1 quarter since BP on 1st Jan." |
| htn_care_state                         | text              | "Is the patient under_care, lost_to_follow_up, or dead as of this month?"                                                                         |
| htn_treatment_outcome_in_last_3_months | text              | "For the visiting period of the last 3 months, is this patient's treatment outcome controlled, uncontrolled, missed_visit, or visited_no_bp?"     |
| htn_treatment_outcome_in_last_2_months | text              | "For the visiting period of the last 2 months, is this patient's treatment outcome controlled, uncontrolled, missed_visit, or visited_no_bp?"     |
| htn_treatment_outcome_in_quarter       | text              | "For the visiting period of the current quarter, is this patient's treatment outcome controlled, uncontrolled, missed_visit, or visited_no_bp?"   |
|----------------------------------------+-------------------+---------------------------------------------------------------------------------------------------------------------------------------------------|
```

{% endtab %}

{% tab title="reporting\_facility\_states" %}

```
             Column              |       Type        | Collation | Nullable | Default
---------------------------------+-------------------+-----------+----------+---------
 month_date                      | date              |           |          |
 month_string                    | text              |           |          |
 quarter_string                  | text              |           |          |
 facility_id                     | uuid              |           |          |
 facility_name                   | character varying |           |          |
 facility_type                   | character varying |           |          |
 facility_size                   | character varying |           |          |
 state_slug                      | character varying |           |          |
 cumulative_registrations        | bigint            |           |          |
 monthly_registrations           | bigint            |           |          |
 under_care                      | bigint            |           |          |
 lost_to_follow_up               | bigint            |           |          |
 dead                            | bigint            |           |          |
 cumulative_assigned_patients    | bigint            |           |          |
 controlled_under_care           | bigint            |           |          |
 uncontrolled_under_care         | bigint            |           |          |
 missed_visit_under_care         | bigint            |           |          |
 visited_no_bp_under_care        | bigint            |           |          |
 missed_visit_lost_to_follow_up  | bigint            |           |          |
 visited_no_bp_lost_to_follow_up | bigint            |           |          |
 patients_under_care             | bigint            |           |          |
 patients_lost_to_follow_up      | bigint            |           |          |
```

{% endtab %}
{% endtabs %}

### Detailed schema of the reporting tables

You can browse through the detailed schema on [github](https://github.com/simpledotorg/simple-server/tree/20104091caa3687f4aa988e5a6dc70a9a8bfff5d/public/documents), or on [metabase](https://metabase.simple.org/reference/databases/2/tables).


# Data dictionary & API

### Complete data dictionary

This sheet enumerates the tables of Simple Server's data model. It lists each meaning, type, possible values, and other useful information. These data attributes are the building blocks that power Simple's dashboard and reporting capabilities.

Browse our Complete Data Dictionary:&#x20;

* :page\_facing\_up: on [SchemaSpy](https://simpledotorg.github.io/docs.simple/dbschema/public/index.html)
* 📖 on [Google Sheets](https://docs.google.com/spreadsheets/d/1LOn9IzfuQXog2agGbNphweMNTV27K84yctjPs6b7USI/edit#gid=0)&#x20;

### Minimal data dictionary

Want to move existing data to Simple or a HEARTS-based monitoring dashboard? Here's the minimal set of data attributes needed to generate our most important indicators.

Browse our [Minimal Data Dictionary](https://docs.google.com/spreadsheets/d/14FKfTxomBd8MPXVgXeNY3sPu77SzqfGjHV8Nro6t-js/edit?usp=sharing) 📖 on Google Sheets.

### API documentation

Our API docs can be found for each country:

**🇧🇩 Bangladesh:** <https://dashboard.bd.simple.org/api-docs>

🇪🇹 **Ethiopia:** <https://simple.moh.gov.et/api-docs>

🇮🇳 **India:** <https://dashboard.in.simple.org/api-docs>

*Note: API documentation is automatically generated. While the API is consistent, each country has its own documentation to ensure that it matches the current version in production in that country.*


# Android


# Conventions

We try to stick to these conventions as much as possible. Think of them as strong guidelines!

## Naming branches in git

Since we using [trunk based development](https://trunkbaseddevelopment.com/) as our workflow, we try to merge code daily and not have any long running "feature branches".

### Daily branches

Daily branches have the developer's initials, the date, and a small title. For e.g.: Asha Kumari making a branch on 12th April to work on "updated search algorithm", should name the branch something like `ak/12apr/update-search-algo`. This gently nudges the developer to merge the branch in a day or two, since this is just a convention and not enforced in any manner.

### Release branches

Release branches are automatically cut when we create a new release from Tramline, new branch will be named `r/release` followed by the date on which the release is triggered. For example, the release branch cut on 10th December 2018 will be named `r/release/2018-12-10` .


# Deploying to Play Store

The variants of the app have slightly different ways they get deployed to the Store.

## Sandbox app

* The Sandbox app is automatically deployed to the Play Store, every night at 10pm IST.
* We do this using [Tramline](https://www.tramline.app/) and GitHub Actions
* There is a "Scheduled Build" that runs every night at 10pm on the `master` branch
* No other manual intervention is required.

<figure><img src="/files/gNQ3xxONMjFnggvBNpBp" alt=""><figcaption></figcaption></figure>

## Staging / Demo

* The staging/demo app is automatically deployed to the Play Store, every 2 weeks at 9am IST.
* We do this using [Tramline](https://www.tramline.app/) and GitHub Actions
* There is a "Scheduled Build" that runs every 2 weeks at 9am on the `master` branch
* No other manual intervention is required.

<figure><img src="/files/NVFy14XS3r0tlW2V9NlO" alt=""><figcaption></figcaption></figure>

## Production

Our releases happens at regular intervals. For now, this interval is one (sometimes two) week, and Monday is release day.

Our integration branch is `master`: this is where PRs are merged, and release branches are made from. All release branches have a one-week holding period, during which we manually verify the app (using [Simple Demo](https://play.google.com/store/apps/details?id=org.simple.clinic.staging)) before it goes live on the [production app](https://play.google.com/store/apps/details?id=org.simple.clinic).

### Step 1: Production release

1. On release day (currently Monday), go to Simple (Production) app on Tramline.
2. Click on "Prepare new release" and select "New calendar version". This will create the appropriate release branch on the repository.
3. While the release build is being generated update the changelog on Tramline that will be passed to Google Play.
4. Once release build is available, submit the app for approval from "Approval" section on Tramline, and then start the rollout at 25%.
5. The CHANGELOG.md file must also be updated [on master](https://github.com/simpledotorg/simple-android/blob/master/CHANGELOG.md) itself. This keeps the entire team informed about which changes are already present on Demo.
6. Post the details of this release to the `#releases` Slack channel to inform the rest of the organisation.

### Step 2: Fix issues, if any

* If someone discovers a problem in the Demo/Production release, it must be fixed and merged into the appropriate release branch. Tramline will automatically create a new release based on the fix.
* Only a few categories of issues are eligible for cherry-picking: bug fixes and language/text changes. All other types of issues will have to wait till the next release goes out.
* Once the release is marked as finished, Tramline will automatically merge the fix back to the main branch.


# Bitrise Workflow Quirks

We currently have four workflows which generate builds:

* `build-demo-sand-prod-apks`: This workflow **builds** the APKs for all environments (`SANDBOX`, `DEMO`, `PRODUCTION`) and makes them available for download.
* `deploy-sandbox-to-play-store`: This workflow **builds** the `SANDBOX` APK **and** deploys it to the Play Store.
* `deploy-demo-to-play-store`: This workflow **builds** the `DEMO` APK **and** deploys it to the Play Store.
* `deploy-prod-to-play-store`: This workflow **builds** the `PRODUCTION` APK **and** deploys it to the Play Store.

The quirk here to note is that the gradle build command is duplicated across all of these builds. The gradle config for `build-demo-sand-prod-apks` is hardcoded as part of the workflow, whereas for the others, there are sub-workflows named `_gradle-sandbox-build`, `_gradle-sandbox-build`, and `_gradle-prod-build` respectively.

Currently, if you need to make a change to the gradle build command, you need to make the change in **ALL** of these workflows.


# Headers sent from the app

This lists out all the headers which the app sends to the Simple server in all the requests

| Key                 | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | Example Value                          |
| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- |
| `X-APP-VERSION`     | The build version string of the Android client. This is generally auto-generated for every build by the continuous deployment service.                                                                                                                                                                                                                                                                                                                                                                                                        | `2019-08-26-5229`                      |
| `Accept-Language`   | <p>The current language selected by the user. Currently, this is the device language. In the future, when we build out the in-app language switcher, will be the language selected by the user. See the official <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language">docs</a> for more information.</p><p></p><p>Note: this is only a hint to the server so that they can select strings and set the response language correctly. The response is not verified by the app to be in the selected language.</p> | `en-US`, `hi-IN`                       |
| `X-TIMEZONE-ID`     | The timezone set by the user on the device. Will be a standard timezone ID.                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | `Asia/Kolkata`,`Etc/GMT-14`            |
| `X-TIMEZONE-OFFSET` | <p>This will be the raw offset (in seconds) that the current user is from UTC. This value will be <strong>inclusive</strong> of adjustments like <a href="https://en.wikipedia.org/wiki/Daylight_saving_time">DST</a>.</p><p></p><p>This is what the server should use if the server needs to find the calendar date a request is being sent from from UTC timestamps. </p>                                                                                                                                                                   | `3600`,`-3600`                         |
| `X-USER-ID`         | This is the ID of the logged in user. This field will be absent if the user has not logged in yet.                                                                                                                                                                                                                                                                                                                                                                                                                                            | `30b9c537-4a53-4d92-bf0f-cefed3f5e63e` |
| `X-FACILITY-ID`     | This is the facility ID which is selected by the current logged in user. This field will be absent if the user has not logged in yet.                                                                                                                                                                                                                                                                                                                                                                                                         | `7fc136a1-5ea7-40c7-8154-452a35481340` |


# Backend


# Audit logs

How to audit access to patient data in the logs

{% hint style="info" %}
Using the Audit Logs requires access to [Heap Analytics](https://heapanalytics.com/app/) 🔒, which has restricted access.
{% endhint %}

## How to answer "What users accessed Patient X?"

#### Required Information

* The patient UUID

#### **Define an event for viewing the specific patient**

In the Heap UI, go to `Events` and in the list of custom events, select `Viewed Patient X`.

![Select Viewed Patient Event](https://github.com/simpledotorg/documentation/raw/master/assets/img_1.png)

In the event definition section, scroll down to the `Edit Event Criteria` section, update the `patientId` filter with the patient ID and click on "UPDATE EVENT".

![Update Event Criteria](https://github.com/simpledotorg/documentation/raw/master/assets/img_2.png)

#### **Query the reports for users who viewed this specific patient**

In the `Reports/Auditing` section, select the `Users who have viewed patient X in last three months` report.

![Select report](https://github.com/simpledotorg/documentation/raw/master/assets/img_3.png)

In the report page that opens up, click on "RUN QUERY" to generate the report and get all the User IDs that have viewed a particular patient.

![Run Query](https://github.com/simpledotorg/documentation/raw/master/assets/img_4.png)

## How to answer "What patients did User Y access?"

#### Required Information

* The user UUID

#### **Select the report**

In the Heap UI, go to the `Reports/Auditing` section, and select the `All patients viewed by user Y in 3 months` report.

![Select Report](https://github.com/simpledotorg/documentation/raw/master/assets/img_5.png)

#### **Update the User ID**

In the report detail page, update the `userId` filter with the UUID of the user to search for and click on "RUN QUERY".

![Select Viewed Patient Event](https://github.com/simpledotorg/documentation/raw/master/assets/img_6.png)

Click on the "SHOW RAW EVENTS" button to view the detailed list of events.

![Show Raw Events](https://github.com/simpledotorg/documentation/raw/master/assets/img_7.png)

#### **Get Patient IDs**

In the list of raw events that shows up, look for the event `ViewedPatient`. Clicking on it will show detailed properties of that particular event. It should contain a property `patientId` which indicates the patient whose details this user looked at. Looking over all the events (Don't forget to click on "Show More" to load pages of raw events), the patient IDs viewed by this user can be extracted.

![Find Patient ID](https://github.com/simpledotorg/documentation/raw/master/assets/img_8.png)&#x20;


# Major flows

### Self-registration&#x20;

![](/files/-LdtRhGsIHDIkOP9tt1j)

### Lock and Unlock the Android app

![](/files/-LdtRtKVI5LPOxruYTSJ)

### Recent Patients List on home screen of Android app

![](/files/-LjQQNc3P0wpKtLXqbcE)

### Login on a new device

![](/files/-LdtS9tHQTvguFiyR6fK)

### Forgot PIN&#x20;

![](/files/-LdtSGJCqQq3vgJ5P0ea)

### Overdue Patients List

![](/files/-LuH6-jQjN97ipgWX2Gv)

### "High risk" label in the Overdue Patients List

![High risk label in the Overdue list](/files/-M0Y1gULp9UmzbwrDqjy)

### Schedule next visit

![](/files/-LdtSZNRHmF0pYskxiPn)

### Dashboard reports

![](/files/-LjUZFaM46Li-eDPRWqc)


# Localization

How we localize the Simple apps (mobile and backend) and other projects.

## Projects that need localization

Currently, there are four separate projects that are localized, along with the resources on each project:

* The Android application ([LINK](https://github.com/simpledotorg/simple-android))
  * Strings displayed in the user interface
* The server application ([LINK](https://github.com/simpledotorg/simple-server))
  * HTML for the progress tab in the app
  * HTML for the help section in the app
  * Strings returned in API responses that are displayed to the end user
    * Login
  * WhatsApp graphic
  * SMS reminders
* The YouTube training video ([LINK](https://youtu.be/Gm_Fnp6ffaM))
  * Subtitle files
* The printed material that is delivered to the health centres Simple operates in
  * BP Passports
  * SOP training manual

## Translation process

We started by using Google Sheets to manage translations for the projects. This quickly got problematic since syncing the source strings with the projects got cumbersome and started requiring a lot of manual effort to manage. In addition, this process was also error-prone.

We evaluated and decided on a platform called [Transifex](https://www.transifex.com/) to manage translations across the board for all the projects. This platform has many benefits, primarily that it integrates with our project version control to automatically keep the source strings and translations in sync.

### Workflow

#### For a new language

1. Add the language to the project on Transifex.
2. Invite translators from the translation service for the language on the project.
3. The translator begins translations.
4. The turnaround time is 6-7 business days from the date of approval of the quotation.
5. Invite the reviewer(s) to Transifex.
6. Share the instructions on how to use Transifex (screen recording + guidelines below).
7. The reviewer will go through the translations for the app and the BP passport
   1. When there are proposed changes, the reviewer can propose a change for translator by clicking on **Add issue** and leaving a note.
   2. If the overall quality of the translation is poor, Kate will set up a call between the reviewer and the translation service.
8. We will email the translation service to let them know that the review is complete. They will address any issues that have been added by the reviewer by either
   1. Accepting the change by editing the translation.
   2. Leaving a comment to explain why the recommendation has not been accepted.
9. Translation service completes all the translations for all projects on Transifex and the design files.
10. Once >95% of the strings have been translated for a particular language, they will be pulled back into the app and the server.

#### Ongoing translations

1. The translation service will work on any new strings in existing languages on an ongoing basis, and will send Kate a weekly quote every Monday. Kate will approve amount as needed.&#x20;
2. The turnaround time for new strings is 2-3 working days i.e. any new strings added on Monday will be ready latest by Thursday the same week.
3. The translation service will also address any issues that have been raised weekly, and incorporate them in future translations.
4. Once >95% of the strings have been translated for a particular language, they will be pulled back into the app and the server.
5. Every month, the reviewer can look at the strings that were translated in the last month using the date filter (we can send an email to remind the reviewer to do this?). The reviewer can propose changes by adding an issue.

### Special cases

#### Print materials

1. RTSL will send GP the print materials as InDesign files, and also upload all the text into Transifex for all languages
2. GP will translate in Transifex
3. RTSL reviewers will review in Transifex
4. Once the translation has been approved in Transifex, GP will import the translation into the InDesign file/do any necessary layout adjustment
5. GP will post the InDesign file with the approved translation to Transifex


# Android

Specific information related to localizing the Simple Android app

## GitHub Integration

The Simple Android app is connected to Transifex via the [GitHub Integration](https://docs.transifex.com/transifex-github-integrations/github-tx-ui). What this enables us to do is:

* Define a source locale (default: `en`) which Transifex will automatically read whenever changes are pushed to a specific branch on the project (currently `master`).
* Whenever translations for a specific locale are done, Transifex will automatically raise a pull request, which a maintainer can merge (See [#965](https://github.com/simpledotorg/simple-android/pull/965) for an example).

### Settings

The Transifex GitHub integration settings can be found on the project settings page under the **Integrations** section.

![](/files/-LveMv8UBNx1BgDoAcdn)

Clicking on **Edit Settings** opens a page with multiple sections. The sections and their configuration are described at [this LINK](https://docs.transifex.com/transifex-github-integrations/github-tx-ui#linking-a-specific-project-with-a-github-repository).

### Language mappings

In the GitHub integration settings, there is a language mapping section that tells Transifex how to convert from the locale conventions that it uses to the locale conventions that the Android app uses. This will be used by Transifex when raising pull requests to merge new translations into the app.

The current mapping (at the time this article was written) looks something like this:

```yaml
hi_IN: hi-rIN
bn_IN: bn-rIN
bn_BD: bn-rBD
pa: pa-rIN
ta_IN: ta-rIN
te_IN: te-rIN
kn_IN: kn-rIN
mr: mr-rIN
om: om-rET
ti: ti-rET
```

On the left are locale codes in the Transifex convention, while on the right are the locales in the convention that the Android app expects. Whenever a new language is added to the app, this mapping table also needs to be updated.

### Manually pulling strings from Transifex

The Transifex integration has currently been setup to automatically raise pull requests whenever a language is 100% translated. Sometimes, however, we might need to pull partially translated languages manually and put them in the app. Transifex supports this use case as well.

#### Process

* Login to the [Transifex](https://www.transifex.com/) platform.
* Once logged in, on the **Dashboard tab**, with All projects selected on the left navigation bar.

![](/files/-LveRatDb1Y9iqk9VaYv)

* Click on the **simple-android** project, and then click on **Languages** in the sidebar.
* The list of languages appears. Click on the language you manually want to download translations for.
* The list of source files in that language appears. Currently, the Android app has only one source file, `strings.xml`. Click on it, and the following view opens. Click on **Download for use** to download an Android string resource file that can be dropped into the project.

![](/files/-LveSH6E6daC55Hnsvtn)

* The name of the file does not match the Android conventions when downloaded manually. You should rename the file to `strings.xml` to match the conventions.
* Place the strings into the appropriate resource directly and raise a pull request with the new strings.

### Notes

Regardless of whether the string resources are raised automatically via Transifex, or manually added, a new language does not automatically show up in the list of languages the user can select via the Settings screen. In order to add a new language to the screen, add an entry to the `SettingsModule` class ([LINK](https://github.com/simpledotorg/simple-android/blob/master/app/src/main/java/org/simple/clinic/settings/SettingsModule.kt)).


# Server

Specific information related to localizing the Rails app

The backend uses Transifex to manage translations, similar to the [Android workflow](/engineering/localization/android). The locale files sit in [`config/locales`](https://github.com/simpledotorg/simple-server/tree/master/config/locales).

On the transifex dashboard, click on `simple-server` > `Resources` to look at the source files.

## Language mappings

In the GitHub integration settings (`Settings` > `Integrations`), there is a language mapping section that tells Transifex how to convert from the locale conventions it uses to the locale conventions supported by Rails. This will be used by Transifex when raising pull requests to merge new translations into the app.

The current mapping (at the time this was written) looks something like this:

```yaml
settings:
  language_mapping:
    pa: pa_Guru_IN
    mr: mr_IN
    om: om_ET
    ti: ti_ET
```

On the left are locale codes in the Transifex convention, on the right are locales in the convention that Rails expects. Whenever a new language is added to the app, this mapping table also needs to be updated.

## Notes

Once a new locale file has been added to the project, it needs to be added to the list of [available locales](https://github.com/simpledotorg/simple-server/blob/9894516eec914397569af15b9964ec9bb1f20879/config/application.rb#L37) to be accepted by Rails.


# Adding/Editing translations for a project

* Login to the [Transifex](https://www.transifex.com/) platform.
* Once logged in, on the **Dashboard tab**, with All projects selected on the left navigation bar.

![](/files/-LvdkGOLQsr4ArRZCzG5)

* Hover over the language that you would like to translate under project languages, and click on the View projects button that appears.
* The list of projects that are available for translation in that language appears.

![](/files/-LvdknZiVoKWL94oCath)

* Click on the project that you would like to translate.
* The list of files in that project that need to be translated appears. The files will be named slightly differently based on the type of project, but the translation process will not change.
* Click on any of the files.

![](/files/-LvdlXcVDb4yZC_EYXW9)

* In the pop-up that opens, click on the **Translate** button.

![](/files/-LveAEulILun7lZlD-QD)

* A list of all strings and their translations (where available) are displayed

![](/files/-LvdmR4gdYfulP5WQy6b)

* Click on the string that needs translating and translate it. After the translation is done, click on the blue **Save Translation** button.

![](/files/-LvdnKDSX5Yvk7Lv8UQS)


# Reviewing a translation

* Login to the [Transifex](https://www.transifex.com/) platform.
* Once logged in, on the **Dashboard tab**, with All projects selected on the left navigation bar.

![](/files/-LvdkGOLQsr4ArRZCzG5)

* Hover over the language that you would like to translate under project languages, and click on the View projects button that appears.
* The list of projects that are available for translation in that language appears.

![](/files/-LvdknZiVoKWL94oCath)

* Click on the project that you would like to translate.
* The list of files in that project that need to be translated appears. The files will be named slightly differently based on the type of project, but the translation process will not change.
* Click on any of the files.

![](/files/-LvdlXcVDb4yZC_EYXW9)

* In the pop-up that opens, click on the **Translate** button.

![](/files/-LveAEulILun7lZlD-QD)

* A list of all strings and their translations (where available) are displayed

![](/files/-LvdmR4gdYfulP5WQy6b)

* You can also look at all the strings that have not yet been reviewed by clicking on the **Unreviewed** section on the top right

![](/files/-LveDOEMoWamf4rWo6ld)

* If a string does not have a translation, please ignore and move on to the next one. It will be translated in the future.&#x20;
* If the translation you see is correct, click on the blue **Review** button at the bottom of the text box on the right.

![](/files/-LveBEa7Cxo_aVlTWceI)

* If not, scroll down in the window on the right, and click on **Comments** > **Add Issue** below the Review button, and then add the proposed edit. Do **NOT** click “Add Comment”

![](/files/-LveBbRnFWd5NT3L3GtP)

* If there are no suggestions,  you can review all the strings and then use the Select all checkbox to mark all the strings are reviewed.

<div align="center"><img src="/files/-LveC2e2lYn_xVrKmBr7" alt=""></div>

![](/files/-LveCMzwoMZBmA7VNQoY)


# Technical Hiring Process

Technical hiring is an investment for all parties involved. At Simple.org, we pledge to iterate and improve the process for a positive applicant experience.

### Stage 1 - Online Application <a href="#h.goehqyjpa622" id="h.goehqyjpa622"></a>

#### Resume Evaluation <a href="#h.b3w2wx1flm9g" id="h.b3w2wx1flm9g"></a>

Resumes should be a snapshot of the work YOU contributed to a project.  This is your chance to brag about your work, not just the project.

Keep it short - 2 pages maximum.

Keep it simple - photos, family, or demographic information is neither necessary nor encouraged.

We don’t use keyword matching software. Simply mention technologies relevant to the position you’re applying for.

| <p><strong>Tips</strong></p><ul><li>Instead of “Worked on food delivery app using Kotlin”, say “Architected and implemented the delivery tracking feature for a food delivery application using Kotlin”.  </li><li>There’s no need to list every technology you’re familiar with as long as you can demonstrate familiarity with the ones relevant to the position you’re applying for.</li></ul> |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong>Evaluation Criteria</strong></p><ul><li>Clearly communicates your contributions on past projects</li><li>Demonstrates ability to learn on the job</li></ul>                                                                                                                                                                                                                            |

#### Questionnaire Submission <a href="#h.je7pkzoyv7jv" id="h.je7pkzoyv7jv"></a>

User-centricity is a core value of our tech team - which is why Simple.org follows an offline-first architecture.  Adopting this philosophy requires commitment and close collaboration from both our frontend and backend teams.

The questionnaire is a way for you to tell us more about your approach to delivering software that’s both reliable and easy to use. &#x20;

Your responses to the questions will help us determine whether to move forward with the next stage. &#x20;

| <p><strong>Tips</strong></p><ul><li>Answers should be 3-4 sentences each</li><li>Give examples from prior experience, when possible</li></ul> |
| --------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong>Evaluation Criteria</strong></p><ul><li>Clear communication style</li><li>Mission-driven</li></ul>                                 |

### Stage 2 - Alignment <a href="#h.hxm501609fm2" id="h.hxm501609fm2"></a>

#### Call with Talent Team  <a href="#h.py5ufo8w1hr1" id="h.py5ufo8w1hr1"></a>

*30min*

Once the hiring manager reviews the resumes and questionnaires, passing candidates will be referred to the Talent Team to schedule a phone conversation.  We want to make sure we’re having a conversation about role, compensation, schedule and any other expectations sooner than later.  This is your chance to ask any questions about the organization, our values, way of working, etc.

### Stage 3 - Assessment <a href="#h.eq4mcj4s9f16" id="h.eq4mcj4s9f16"></a>

#### Technical Assessment  <a href="#h.k0qabfvvmlqi" id="h.k0qabfvvmlqi"></a>

*Take home + 90 minutes*

This stage will consist of testing your skills as a developer.  The exercise will be tailored to the skills needed for the job - not theoretical questions about computer science.

1. Take home exercise.  This will be tailored to the position and level being considered.  We recommend giving yourself no more than 2 hours to complete the exercise. Remember, we don’t expect this to be perfect.  This exercise helps start the technical discussion and gives you a flavor of the types of problems we work on solving.
2. Technical discussion. Use this time to tell us more about your approach to the take-home exercise, what assumptions you made, and anything you would have done differently if you had more time.  This is also the time to have a conversation and tell us about past projects and accomplishments you’re most proud of. &#x20;

| <p><strong>Tips</strong></p><ul><li>We recommend taking some time preparing for the interview by reading about <a href="https://www.google.com/url?q=https://docs.simple.org/readme/who-uses-simple&#x26;sa=D&#x26;source=editors&#x26;ust=1664322981960366&#x26;usg=AOvVaw3WqIzsU0c4GG9Ez8ygpC7I">our users</a> and associated <a href="https://www.google.com/url?q=https://docs.simple.org/readme/clinic-workflows&#x26;sa=D&#x26;source=editors&#x26;ust=1664322981960635&#x26;usg=AOvVaw3j_n03nTFyzCuj9pvTl6mi">workflows</a>.  </li><li>Details about our tech stack can be found <a href="https://www.google.com/url?q=https://docs.simple.org/engineering/backend/major-flows&#x26;sa=D&#x26;source=editors&#x26;ust=1664322981960915&#x26;usg=AOvVaw3Bhtuneg4GTuVzv7zU6lf4">here</a> and will be helpful to understand the types of technology solutions we are working on</li></ul> |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong>Evaluation Criteria</strong></p><ul><li>Code quality</li><li>Attention to quality of software</li><li>Focus on end users  </li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |

#### Final Interview  <a href="#h.f4tjn365p817" id="h.f4tjn365p817"></a>

*30 minutes*

Frontline workers are the most critical part of the healthcare delivery system.  Our product features are designed to keep their focus on patient care, not on their smartphones.  This obsession with building the most user-friendly and offline application runs through every member of the team, whether you’re a designer, frontend developer, or backend engineer. &#x20;

The final stage of the interview is your chance to demonstrate user-centricity in your craft. This stage will also be a place to ask questions about the project, work culture, etc.

The final interview will be a casual conversation with the hiring manager, an engineer, and schedule-permitting a designer.  Cross-team collaboration is very important to our culture, so we want to give you a chance to meet a cross-section of the team and ask questions about how we work across disciplines. &#x20;

&#x20;


# Design

There are several full-time designers and UX researchers on the Simple project. Please join us on Slack if you would like to contribute.

### Design principles and patterns

The design principles listed [here](https://docs.google.com/document/d/1SOfxi4KZZ0QuyJV6Wv6A6fCjRjza9DlaBb-_wg2WON8/edit#bookmark=kix.lm0fs2d9h01n) are a result of many research findings overtime and they continue to evolve as we design for new use cases and learn more about our users.

### Figma files

All of the user interface elements for the Android app and some of the Simple dashboard are now on Figma. Please feel free to 'borrow' or 'steal' anything from our public Figma project. We consider it to be public domain or CC0:\
Designs for app in use - [Here](https://www.figma.com/file/vmZlmlFSCOrEYzTMkqsNB8/Simple-Production?node-id=2206%3A155)\
Designs in exploration - [Here](< https://www.figma.com/file/kONxBLSXwcQDnV7ya4hIXA/Simple(Exploration)?node-id=3686%3A36070 >)

### Android app

* [Screenshots on our website](https://simple.org/screens) for a curated list of screens with brief explanations
* [Figma document](https://www.figma.com/file/vmZlmlFSCOrEYzTMkqsNB8/Simple-Production) of most screens in the Android application

### Web-based Dashboard

* [Figma document ](https://www.figma.com/file/9inSvRD4dXcMfXchlyDZVV/Dashboard-Production)of most screens in the Simple Dashboard

### Print materials

* [BP Passports](https://www.dropbox.com/s/k95pspwvh8vikx4/BP%20Passport%20Punjabi%20v10%20%E2%80%94%20Sample.pdf?dl=0) that are given to patients as an ID and a record of recent BPs and medicines. \
  Here are the [printing requirements](https://docs.google.com/document/d/19YPdPkMGppi7046uuNlxMCKrLaNiZRGTpiOgMHTSWFM/edit#) once you have all BP passports with unique QR codes in a sharable PDF format.  \ <img src="/files/-LvFwZkqL01HZenwn3Uh" alt="" data-size="original"> <img src="/files/-LvFwdfVAicJ1X_uy-l4" alt="" data-size="original"><img src="/files/-LvFwidJdJieKcajLB-O" alt="" data-size="original"> &#x20;
* QR code booklets are provided to the facilities that already maintain a booklet for each patients\ <img src="/files/-LvdLGAEFspgse8JFyEc" alt="" data-size="original"> <img src="/files/-LvdLLtdzTAGLQ2Ddfcp" alt="" data-size="original">&#x20;
* [App usage guidebook](https://drive.google.com/a/resolvetosavelives.org/file/d/1MM2dEpUBgE3EyZS9CrzuxgjHqIQa3eb1/view?usp=sharing) given to new users\ <img src="/files/-LvFrT5sEiYaxtgeWQKA" alt="" data-size="original"> <img src="/files/-LvFrWXCy9V43JGbPIUr" alt="" data-size="original">&#x20;
* **Blood Pressure Checklist**
  * [PDF](https://drive.google.com/a/resolvetosavelives.org/file/d/10stzyT8OM3BxpeX2qAJLjhrGF6jkqu_C/view?usp=sharing) for editing in Adobe Illustrator, Sketch (979kb)
  * [Google Slides](https://docs.google.com/presentation/d/1xIZoc5J_ouOHqPZToDq1UIEwyWBO85rjIELM6QO1nes/edit?usp=sharing) version
  * [Powerpoint](https://www.dropbox.com/s/mxpxgtkw5l5uq9j/Blood-Pressure-Measurement-Checklist-012-CC0.pptx?dl=0) (1.6 MB)&#x20;
  * [Affinity Designer](https://www.dropbox.com/s/qdbv9jg6d6fe8r9/BP%20checklist%20illustration.afdesign?dl=0) (173 KB version 1.7)


# User testing

{% hint style="info" %}
All documents marked with [🔒](https://drive.google.com/open?id=16-h9YaZf0rFZXbrGHll2ouWXNUiRzwFytuFZwh4Dvks)are private and for team members of Simple.
{% endhint %}

## Users of Simple

We document most user studies on a private Notion. If you would like us to share insights into workflows in NCD clinics in public hospitals in India or Ethiopia, please get in touch.

[Key moments in the user journey of a nurse](/design-1/user-studies/users-key-moments) \
An illustrated sequence that depicts the end-to-end experience of a staff nurse.&#x20;

[Journey map: Staff nurses](https://drive.google.com/open?id=16VpzOyG5R7o7UwsIA_RiGSHQeaDS38rMw3Xi5Rn0XwQ)\
A mapping of a staff nurse's first-time experience with Simple and her typical work day.

[Journey map: Patients](https://drive.google.com/open?id=1mploce9-G8PSd-oabUqrA0ieIGL7oacO)\
Some of the patient workflows as observed at public health clinics.

[🔒](https://drive.google.com/open?id=16-h9YaZf0rFZXbrGHll2ouWXNUiRzwFytuFZwh4Dvks)[Persona: Community Health Officer<br>](https://docs.google.com/document/d/1JD-SdzRyg75-qW-5WBSVLbdnzfkAgryYEQPIbv8bY_I/edit)Persona of a Community Health Officer, who manages a Health and Wellness Centre.&#x20;

[Common user types of Simple](https://drive.google.com/open?id=1Z33sTuCUU2AQ0CNvuy7aWJAIYDOLWfwXljhMCoEP_Jo)\
A list of the various users of Simple. These range from the patient, and staff nurse, to the Senior Medical Officer, and health minister.\
\
[🔒 Stories from the field<br>](https://drive.google.com/open?id=16-h9YaZf0rFZXbrGHll2ouWXNUiRzwFytuFZwh4Dvks)Meet some of the actual users of Simple.


# Key moments in the user journey

This document is an illustrated sequence that depicts the end-to-end experience of Simple’s primary users: the nurses.

Depicted here is the story of Manjeet, a fictional staff nurse at a public PHC (Primary Health Centre) in Punjab, India. Manjeet is fairly new to using a smartphone.

After each scenario, are common concerns that we hear from users.

## 1: Manjeet hears about Simple for the first time

*Manjeet’s supervisor hands her a memo about using Simple. She is asked to download it from the Google Play Store and record patients with hypertension on it.*

<div align="left"><img src="/files/-LhtEyFbIyg6PWLcPHEq" alt=""></div>

#### **Concerns**

* Is this yet another government program that will not last?
* I have never installed an app… how do I do it?
* Will this be a lot of extra work?
* Will this cost me money?
* How do I learn how to use this app? Will the memo contain instructions?
* I have to learn this new thing now?
* Should I do both paper and app work now?
* I don’t understand English that well. Who will help me?
* I don’t have an Android, what should I do?

## 2: Manjeet's first interaction with Simple

*During her free time, Manjeet downloads Simple. She starts understanding how to use the app.*

<div align="left"><img src="/files/-LhePpz1g2Qpgdy-1rg0" alt=""></div>

#### **Concerns**&#x20;

* Will this consume a lot of space on my phone? &#x20;
* Will I have to delete my personal files for it?
* Will this slow my phone down?
* Will I have to pay for the mobile data?
* Will this eat up my data pack?
* I’m comfortable making entries on a physical register… do I really need to use an app?
* Patient data is critical. What if I make a mistake while entering it?
* This app looks complicated. How long will I take to learn and understand everything?
* What is a PIN? What if I forget the pin? What pin should I enter?

## 3: Manjeet has to juggle several things at once

*A normal day in Manjeet’s life. She handles two or more patients at a time - checking BP, giving instructions, and entering patient data simultaneously. Patients travel back and forth the doctor and nurse’s room before exiting the clinic. Thus, the app is also not used in a linear fashion per patient. Patient data is revisited back and forth as well.*

<div align="left"><img src="/files/-LhxTK40GAIH6CPYAheQ" alt=""></div>

#### **Concerns**&#x20;

* I must hurry! The other patients are waiting.
* Will this patient come back to me after seeing the doctor?
* The doctor has asked the patient to come back after 15 days, but I can’t find an option to schedule for 15 days in the app.
* Is it okay if I write down details in the register and enter them in the app later? Manually writing them down is easier.
* Patients think that I am using Facebook at work?!

## 4: Registering a patient for the first time

*Manjeet registers a patient for the first time by filling out a BP passport. She reminds the patient to bring the passport the next time the patient is visiting the clinic.*

<div align="left"><img src="/files/-Lhe6jwsMZk9F2ajGt1f" alt=""></div>

#### **Concerns**

* I have never used anything like this (QR code) before. What does it do?
* Am I doing this right?
* What will happen if patients do not bring these cards?
* I don’t have internet connectivity. Will the patient details be saved?
* My camera is not working. What should I do?
* It is a hassle to write this on a register and record it on the app as well.
* Patient: “Is this nurse playing on her phone or what? What’s happening?”
* What if someone else has recorded this patient’s data previously? How will I get it?
* Why should I enter patient details? It is not my job to do this. Just like the receptionist enters details on the OPD slip, they should do this too.
* This is cool and high-tech!

## 5: Manjeet gets called in for an emergency&#x20;

*Manjeet is called for an emergency. She had to stop attending the patients and be present at the ICU.*

<div align="left"><img src="/files/-Lhe8tWtWRuTEqVZifU_" alt=""></div>

#### **Concerns**

* I wish someone could fill in for me while I’m at this emergency. My patients are waiting.
* Who will note down patient details in my absence?
* Who will enter data into Simple in my absence?
* Will I have to give my phone to someone else to enter patient data?
* Will I have to enter all the data from paper to app when I go back?
* I am overworked and I don’t even get paid enough!

## 6: Finding a patient through BP passport

*Manjeet looks up a patient using BP passport.*

<div align="left"><img src="/files/-LheKNJDUFHJEabCRD1g" alt=""></div>

#### **Concerns**

* Scanning is not working because the card is torn. I’m stuck!
* I scanned the card but there is no patient. What do I do?
* The patient brings another family member’s card. What should I say to him?
* The patient brings a card which he lost during his previous visit. He was assigned a new card. He lost the new card and got the old card.  Will it work?

## 7: Reminding patients for their follow-up visits

*During her free time, Manjeet calls overdue patients. She makes a note of the patient’s responses in her notebook.*

<div align="left"><img src="/files/-LhxT5Ym_lIcp9DN_bD7" alt=""></div>

#### **Concerns**

* Will patients visit on these scheduled dates?
* I have a long list of patients to call. I feel overwhelmed.
* Who are the most important patients to call?
* Why are the patients not taking my calls?
* Will patients call me back at 2 am and interrupt my life?
* What shows on the patient screen? Is it my number? Or does it say Simple?
* I got the wrong number again. Is this even useful?
* Is my balance being used? How do I know?
* What are those beeps when I call the patient?
* Why should I have to call these patients?
* Will the patient’s son inform him/her about this? What should I mark in this case on the app? Should I mark remind me later?
* The list is way too long. I should postpone this work.
* Hard to find a patient from the overdue list. How else to check of a patient has an appointment?
* I had to hear rude comments from patients.&#x20;
* When did I last call this patient? How many times have I tried calling them already?
* We don’t have mobile reception in my facility. How do I make these calls?

## 8: Looking up patients through manual search

*A patient, Jasmeet Kaur, forgets to bring her BP passport. Manjeet has to manually search for the patient but finds multiple search results for Jasmeet Kaur. She is frustrated as the patient is old and cannot recall her husband’s phone number.*

<div align="left"><img src="/files/-Lhvewb90ZgZ6an_MYU0" alt=""></div>

#### Concerns

* Every second patient who comes here is named Jasmeet Kaur. How do I find her without her phone number?
* Did I enter her spelling wrong?
* Did I miss to register her as a patient the last time? Is that why it is not showing up?
* This is a really long list of patients… can I ever find the right person?
* I remember I entered this patient last week. Now I can’t find them!
* Arwinder had entered this patient yesterday. I am not able to find this patient on my phone. &#x20;

## 9: Accessing progress made through progress tab

*During a discussion with her supervisor, Manjeet shows him the progress tab.*

<div align="left"><img src="/files/-LhePWxZdetA8aGfh0KH" alt=""></div>

#### **Concerns**

* What is he/she going to say?
* Will it affect my work/pay?
* I have great progress. How will I be rewarded? Is it worth it?
* It doesn’t show all my patients. What should I do?

## 10: Manjeet reaches out to Whatsapp support group for help

*Manjeet cannot find a registered patient on the app. She recalls that her supervisor said that she could put her issues on the Whatsapp group of Simple users. She thinks of interacting with people on the Whatsapp support group.*

<div align="left"><img src="/files/-LheP_-nEDIdFBzAbkMV" alt=""></div>

#### Concerns

* Who are the people in this WhatsApp group? I don’t want them to be able to see my number as I post this concern.
* Is my supervisor in this group? How will he react to my complaint? Should I speak to him first instead?
* Is this a silly concern? Should I even post it?
* Is my concern a valid issue? Or is it something that I haven’t learned yet?
* Will everybody judge me?
* Should I post this question in English?
* “This week’s list of highest users of Simple is” - makes me feel overwhelmed. Is this a competition?
* I have a small facility. How can I be a part of the “highest user” reward?
* I am a woman, I can’t share my phone number publicly.

## 1**1: Manjeet hands over Simple to the next nurse**

*Manjeet is transferred to another clinic. Her supervisor asks her to brief the nurse who will be replacing her with all the roles and responsibilities. Manjeet introduces the new nurse to Simple.*

<div align="left"><img src="/files/-LheP7dyxb5_-tKLSlqz" alt=""></div>

#### Concerns

* I learned this by myself. No one helped me. Why should I do this now?
* Will he understand it easily?
* What if he asks me questions which I don’t know answers to?
* This is not part of my job. Why should I do it?
* What if I teach him something wrong?
* I know there are training documents… can I get more for my trainee?

{% hint style="info" %}
This document was inspired by the wonderful work of the Airbnb design team on their "Snow White" project. [Read about the project...](https://www.inc.com/yazin-akkawi/the-surprising-technique-airbnb-uses-to-better-sell-an-experience.html)
{% endhint %}

![Airbnb's "Snow White" project.](/files/-LhfgsA3EcwdIp9bl4oN)


# User tests

{% hint style="info" %}
All documents marked with [🔒](https://drive.google.com/open?id=16-h9YaZf0rFZXbrGHll2ouWXNUiRzwFytuFZwh4Dvks)are private and for team members of Simple.
{% endhint %}

## Telephonic interviews

Every two weeks, we conduct telephonic interviews with 5 different users of Simple. We ask them about their usage of features of the app, satisfaction rating and issues faced.

* [🔒](https://drive.google.com/open?id=16-h9YaZf0rFZXbrGHll2ouWXNUiRzwFytuFZwh4Dvks)[Individual summaries of telephonic interviews](https://docs.google.com/document/d/1QzsWinS3mK6n6V_GHB3UW_525SVfYqftLGTMk0gFMbw)
* [🔒](https://drive.google.com/open?id=16-h9YaZf0rFZXbrGHll2ouWXNUiRzwFytuFZwh4Dvks)[Notes from all telephonic interviews](https://docs.google.com/spreadsheets/d/1SiT3lR0G2MaF-P52GLMPL5pO0xTUyO_2aiQH32qEKjo/edit?usp=sharing)

## Testing and interviews with Simple users

Following are the tests that we've conducted with users who work at public health clinics where Simple is deployed.

| Date           | Topic                                                                                                                                                                                                                                                      | Location                   |
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- |
| November 2019  | [🔒](https://drive.google.com/open?id=16-h9YaZf0rFZXbrGHll2ouWXNUiRzwFytuFZwh4Dvks)[Diabetes, patient transfer and progress tab](https://docs.google.com/document/d/11ByJvMO2PYsKLfwFKIpNUlk8cwRvm8Lf288jCvG7n7o/)                                         | Bathinda, Punjab           |
| September 2019 | [🔒](https://drive.google.com/open?id=16-h9YaZf0rFZXbrGHll2ouWXNUiRzwFytuFZwh4Dvks)[Test new designs: Diabetes and visit model, patient transfer and instant search](https://docs.google.com/document/d/1UgRJ9Of4HJqzhJlBbmVLdtrW5hlej59CMpkdLf8GZEQ/edit) | Sindhudurg, Maharashtra    |
| August 2019    | [🔒](https://drive.google.com/open?id=16-h9YaZf0rFZXbrGHll2ouWXNUiRzwFytuFZwh4Dvks)[Understanding the needs of CVHOs](https://docs.google.com/document/d/1ZLiwgcjK5w7QIbqnxQsHCfJr4dsPJhEdB3-IEDgGTZU/edit?usp=sharing)                                    | Remote                     |
| July 2019      | [🔒](https://drive.google.com/open?id=16-h9YaZf0rFZXbrGHll2ouWXNUiRzwFytuFZwh4Dvks)[New features of Simple: Recent patients, Overdue patients' calling, BP passport](https://drive.google.com/open?id=1TkjRNUMxEgWYQFiLCFnydeQGQ8ZVosnbSMwP4xvPFo4)        | Gurdaspur, Punjab          |
| April 2019     | [🔒](https://drive.google.com/open?id=16-h9YaZf0rFZXbrGHll2ouWXNUiRzwFytuFZwh4Dvks)[Learning about perspectives of doctors](https://drive.google.com/open?id=1ST6LoeJbl9qnf-JRraXD4QO2nWc80rhYNcFxN_mk-lU)                                                 | Gurdaspur, Punjab          |
| March 2019     | [🔒](https://drive.google.com/open?id=16-h9YaZf0rFZXbrGHll2ouWXNUiRzwFytuFZwh4Dvks)[Pilot deployment of BP Passports](https://drive.google.com/open?id=1Yzs8LCCQbK8wGU8kD_49aKmMCmtJqkCLphhk0_gWt_c)                                                       | Bathinda, Punjab           |
| March 2019     | [🔒](https://drive.google.com/open?id=16-h9YaZf0rFZXbrGHll2ouWXNUiRzwFytuFZwh4Dvks)[PATH — Post Deployment](https://drive.google.com/open?id=1eDUc5J0rYxCeYy6TDzng2uasXx4SCXHohcgaJaOKfac)                                                                 | PATH clinics, Mumbai       |
| December 2018  | [🔒](https://drive.google.com/open?id=16-h9YaZf0rFZXbrGHll2ouWXNUiRzwFytuFZwh4Dvks)[Experiments app for BP Passport flows](https://drive.google.com/open?id=1akYhJImhrzI4si0ssSCztXWYdK5vmPvzNpp_b-r2wNE)                                                  | Bathinda and Mansa, Punjab |
| November 2018  | [🔒](https://drive.google.com/open?id=16-h9YaZf0rFZXbrGHll2ouWXNUiRzwFytuFZwh4Dvks)[Benchmarking features of the app](https://drive.google.com/open?id=1F_CqLVHZy01M_-zMaU-VgnSv1KmlsI1Sp4UzErruV9w)                                                       | Bathinda and Mansa, Punjab |
| October 2018   | [🔒](https://drive.google.com/open?id=16-h9YaZf0rFZXbrGHll2ouWXNUiRzwFytuFZwh4Dvks)[Launch at first 10 facilities](https://drive.google.com/open?id=1vUPlRlQfsWIqp9yyVHa5LP_pR7G3JYXBuLntYAgexRM)                                                          | Bathinda and Mansa, Punjab |
| October 2018   | [🔒](https://drive.google.com/open?id=16-h9YaZf0rFZXbrGHll2ouWXNUiRzwFytuFZwh4Dvks)[Launch at first 5 facilities](https://drive.google.com/open?id=1yCwbPr9PBydoar5X_jvS_zzRu7TQhTRez3I5cz73y2c)                                                           | Bathinda and Mansa, Punjab |
|                |                                                                                                                                                                                                                                                            |                            |

## Usability testing with non-IHMI nurses in Bangalore

| Date         | Topic                                                                                                                                                                                                                                                      | Location                     |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- |
| October 2019 | [🔒](https://drive.google.com/open?id=16-h9YaZf0rFZXbrGHll2ouWXNUiRzwFytuFZwh4Dvks)[Test two designs of patient summary with the visit model](https://docs.google.com/document/d/1LcyGpnpAjbJYnubey9LuXMT9iHUvQPzX7_cVI9dJ3Sw/edit#)                       | Obvious office, Bangalore    |
| June 2019    | [🔒](https://drive.google.com/open?id=16-h9YaZf0rFZXbrGHll2ouWXNUiRzwFytuFZwh4Dvks)[Onboarding prototype: tutorial video, entering trial patient and coachmarks for search](https://drive.google.com/open?id=1cKwczbw7m1cd95pGFnWAmaBASqRV06H9wjucUG6mNs0) | Obvious office, Bangalore    |
| May 2019     | [🔒](https://drive.google.com/open?id=16-h9YaZf0rFZXbrGHll2ouWXNUiRzwFytuFZwh4Dvks)[Onboarding prototype: Take a tour, and value propositions](https://drive.google.com/open?id=1wnTedcEHAyDuYAJEU6SoQHp9VTnWBdp47x1zUv7HBxY)                              | Obvious office, Bangalore    |
| April 2019   | [🔒](https://drive.google.com/open?id=16-h9YaZf0rFZXbrGHll2ouWXNUiRzwFytuFZwh4Dvks)[Onboarding prototype: Entering a trial patient, and value propositions](https://drive.google.com/open?id=1oQhTDWY3ffuKdZTYkSy4h-dG1SnmmXx8pJmw35AY0nM)                 | Various hospitals, Bangalore |

####

## Interviews with private doctors

| Date          | Topic                                                                                                                                                                                                                         | Location                               |
| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- |
| March 2019    | [🔒](https://drive.google.com/open?id=16-h9YaZf0rFZXbrGHll2ouWXNUiRzwFytuFZwh4Dvks)[Motivations for private doctors to use Simple](https://drive.google.com/open?id=14kR9d05wrSc7lVgMCdBHDORGWnjiQkCG8Sscr6ZKd9A)             | Doctors' clinics, Bangalore            |
| December 2018 | [🔒](https://drive.google.com/open?id=16-h9YaZf0rFZXbrGHll2ouWXNUiRzwFytuFZwh4Dvks)[Private doctors' workflows and motivations to use Simple ](https://drive.google.com/open?id=1PJfPoDx385L4yT2S5Jrz1Pk6D8Lpb7eqfeU20j1mEtU) | Doctor's clinics, PATH network, Mumbai |


# Conducting user tests

[Ethical guidelines for conducting tests with users](https://docs.google.com/document/d/1Q6EEH6BtMd5OOStHHqzjqaJ3pN6hTGO1degDGOffNpU/edit?usp=sharing)\
Ethical guidelines for anyone who is interviewing users of Simple.

[Known unknowns](https://drive.google.com/open?id=1zQoGdFMo12mbAc0vAZGc69520BOpHH4bW1HZ8hKQM_o)\
A list of open questions that we'd like to learn about through user tests and interviews.<br>


# Code of conduct

We take our code of conduct seriously. Please read this as a guide for being a positive contributor to this open source project.

### **Our Pledge**

In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.

### **Our Standards**

Examples of behavior that contributes to creating a positive environment include:

* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members

Examples of unacceptable behavior by participants include:

* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others’ private information, such as a physical or electronic address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting

### **Our Responsibilities**

Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.

Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.

### **Scope**

This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.

### **Enforcement**

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at <team@simple.org>. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.

Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project’s leadership.

### **Attribution**

This Code of Conduct is adapted from the Contributor Covenant, version 1.4, available [here](https://www.contributor-covenant.org/version/1/4/code-of-conduct.html). For answers to common questions about this code of conduct, see [this FAQ](https://www.contributor-covenant.org/faq).


# Acronyms

Definitions for common acronyms you'll run into on the project

{% hint style="info" %}
Please add new acronyms as you come across them. If you don't know what something means, please ask — there's no embarrassment in not knowing an acronym.
{% endhint %}

### Acronyms

| **Acronym**    | **Definition**                                                                                                         |
| -------------- | ---------------------------------------------------------------------------------------------------------------------- |
| A5/A10         | Amlodipine 5 mg, Amlodipine 10 mg                                                                                      |
| ANM            | Auxiliary Nurse Midwife (can run a subcenter)                                                                          |
| ASHA           | Accredited Social Health Activist (treats patients in rural areas)                                                     |
| CBAC           | Community-Based Assessment Checklist                                                                                   |
| CC             | Community Clinic                                                                                                       |
| CDSS or CDS    | Clinical Decision Support System                                                                                       |
| CHC            | Community Health Centre                                                                                                |
| CHEW           | Ethiopia's Community Health Extension Workers                                                                          |
| CHO            | Community Health Officer                                                                                               |
| CVHO           | Cardiovascular Health Officer                                                                                          |
| DM             | Diabetes Mellitus                                                                                                      |
| EHCI           | Ethiopia Hypertension Control Initiative                                                                               |
| FHIR           | "Fire" interoperability standard (Fast Healthcare Interoperability Resources)                                          |
| FMoH           | Federal Ministry of Health                                                                                             |
| HCD            | Human-centered design                                                                                                  |
| HCW            | Healthcare worker (e.g. nurse, doctor, pharmacist)                                                                     |
| HIT            | Health Information Technology                                                                                          |
| HTN            | Hypertension                                                                                                           |
| GoI            | Government of India                                                                                                    |
| ICMR           | Indian Council of Medical Research                                                                                     |
| IHCI           | Indian Hypertension Control Initiative (new name of IHMI)                                                              |
| IHMI           | Indian Hypertension Management Initiative                                                                              |
| IPM            | Iteration Planning Meeting                                                                                             |
| MoH            | Ministry of Health                                                                                                     |
| NCD            | Noncommunicable Disease (e.g. hypertension, diabetes, cancers)                                                         |
| NCD Corner     | A in-hospital clinic focused on hypertension and diabetes                                                              |
| NHF Bangladesh | National Heart Foundation of Bangladesh                                                                                |
| NORAD          | Norwegian Agency for Development Cooperation                                                                           |
| NPCDCS         | National Programme for Prevention & Control of Cancer, Diabetes, Cardiovascular Disease & Stroke (India-based Program) |
| PAHO           | Pan American Health Organization (WHO for Latin America)                                                               |
| PHC            | Primary Health Center                                                                                                  |
| RTSL           | Resolve To Save Lives                                                                                                  |
| SAD            | Slum Area Dispensary                                                                                                   |
| SC             | Subcentre                                                                                                              |
| SDH            | Sub-District Hospital                                                                                                  |
| STS            | Senior Treatment Supervisor                                                                                            |
| UHC            | Upazila Health Complex (Bangladesh's equivalent of an Indian District Hospital)                                        |
| UPHC           | Urban Primary Health Center                                                                                            |
| USAD           | Urban Slum Area Dispensary                                                                                             |
| VS or Vital    | Vital Strategies, previously the parent of Resolve to Save Lives                                                       |
| WHO            | World Health Organization                                                                                              |


# Glossary

Common terms you'll run into on the project.

{% hint style="info" %}
Please add new terms as you come across them. If you don't know what something means, please ask — there's no embarrassment in not knowing a term.
{% endhint %}

## Roles

**Admin:** Anyone with access to the back-end dashboard, roles and permissions are listed below.

* **Owner**: Simple tech team members.\
  Has all permissions listed below:
  * View Dashboard for all Organizations
  * View and Download the Overdue list (facility-wise)
  * View and update Adherence follow-ups
  * Manage Organizations, Facility groups and Facilities
  * Manage Admins
  * Manage Protocols
  * Manage Users and approve / deny their access to the Simple mobile app&#x20;
  * Search Audit Logs
* **Organization Owner**: Administrators for one or more Organizations, e.g. PATH admins.\
  Has the same permissions as **Owner**, but limited to the organizations they control. They also can't add organizations.
* **Supervisor**: Program supervisors, primarily CVHO and STS.\
  Permissions limited to:
  * View Dashboard for Facilities that they have access to
  * View and Download the Overdue list (facility-wise)
  * View Facilities they have access to
  * Manage Users and approve / deny their access to the Simple mobile app
* **Analyst**: People who just need dashboard data, e.g. an epidemiologist or health expert\
  Permissions are read-only, limited to:
  * View Dashboard for Facilities they have access to (District page only, not User page
  * No overdue list or management access
* **Counselor**: Call center employee or counselor who will follow up with the patient. Permissions limited to:
  * View and Update the Overdue list
  * View and Update Adherence follow-ups
  * No dashboard or management access

## Terms

* **Blood Pressure (BP):** Combination of systolic and diastolic BP readings in mm Hg

  Recorded as Systolic/Diastolic `Ex. 120/80`
* **BP medicines**: Name(s) and dosage(s) of medication currently prescribed to a patient
* **BP passport:** Physical ID provided to the patient
* **BP passport code:** UUID printed on BP passport as a QR code, which can be scanned to find the patient.
* **BP passport short code:** A 7-digit number that summarizes the UUID, which can be entered if the scanner does not work.
* **Business ID:** IDs other than BP passport that may be associated with a patient (such as Driving License, State Health ID etc.)
* **Call list:** Used interchangeably with overdue list
* **Clinic:** Used interchangeably with Facility
* **DM:** Diabetes mellitus (the clinical term for diabetes)
* **Facility:**
  * **Sub-centre**
  * **PHC** (Primary Health Centre)
  * **CHC** (Community Health Centre)
  * **District Hospital** (or)
  * Any Public or Private Healthcare Facility
  * All Facilities are identified by a Facility ID
  * Users can be linked to one or more Facilities
* **Facility group:** Group of one or more facilities
  * Users within a facility group sync patient data amongst themselves
  * Users outside a facility group do not sync data amongst themselves
* **Follow up list:** List of all patients who have missed their appointment (including ones without a phone number). Displayed on the web dashboard.
* **HTN:** Hypertension
* **ICMR:** Indian Council of Medical Research
* **IHMI/IHCI:** Indian Hypertension Management Initiative, now called India Hypertension Control Initiative
* **Overdue list:** List of patients who have a phone number and who have missed their appointment. Displayed on the nurses' phone.
* **Organization:** One or more facility groups that are part of a single administrative unit
* **Protocol:** Name(s) and dosage(s) of medication recommended to be prescribed to a patient based on their current BP and BP history.
* **Patient log:** List of all patients with a BP recorded in that facility. Displayed on the nurses' phones.
* **Result of a phone call made with the user's number masked:**
  * Completed: Connected to the patient&#x20;
  * Canceled: User cut the call before it was connected
  * Busy: Patient’s number is giving a busy tone
  * No answer: Patient did not answer
  * Failed: Call failed (likely due to bad phone number or operator-level disconnections)
  * Unknown: Result of the call is unknown&#x20;
* **Security PIN:** 4 digit PIN used by the Nurse to login to the app
* **User:** User of Simple app (i.e. a healthcare work *not* a patient)


# Recommended reading

Books and articles for people who are new to the Simple project and want to get up to speed on public health and data systems.

## Books

[Mountains Beyond Mountains](https://en.wikipedia.org/wiki/Mountains_Beyond_Mountains) about Paul Farmer (Partners in Health).

[Epic Measures](https://www.harpercollins.com/products/epic-measures-jeremy-n-smith?variant=32208098328610) about how data should inform health policy.

[Factfulness](https://www.gapminder.org/factfulness-book/), a very readable and helpful way of thinking about the world in rational terms.

## Resolve to Save Lives

Article on the [Hypertension-control program](https://drive.google.com/file/d/1m6MrA7zuKZta_zIeOIftzPwh8Ht9JPma/view?usp=sharing)

[Approach to treating hypertension](https://resolvetosavelives.org/cardiovascular-health/hypertension)

[WHO-HEARTS-technical package](https://drive.google.com/file/d/1R_HLcMNRCqBvvlSajkFCq7zLq6byx7S3/view?usp=sharing), a detailed manual that forms the basis for Resolve's hypertension program

[Hypertension treatment card](https://drive.google.com/file/d/1FN8Vullc5wJJXnh5bIUSyYSKmaQpeudN/view?usp=sharing) for areas that are using the paper system

[Patient ID card (Hindi version)](https://drive.google.com/file/d/1oKHTYTZT4zU2SlJ_xTA4de3XSFwqjsgK/view?usp=sharing) issued to patients in areas that are using the paper system


