Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion content/en/building/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ description: >

This section provides an introduction to CHT Applications, provides some sample CHT Applications, and provides guides and reference materials for those wanting to build a CHT Application or deploy an existing one.

Community Health Toolkit (CHT) Applications are digital health tools built using the [CHT Core Framework]({{< ref "core" >}}). The Core Framework provides a foundation on which custom CHT Applications are built. Since all CHT Applications share the same foundation, they also share capabilities and attributes. For example, all CHT Applications share a similar user-interface and share the same look-and-feel. All CHT Applications can be built to scale, can run across a variety of devices, support [Offline-First]({{< ref "technical-overview/concepts/offline-first" >}}) experiences, and support most languages. These baseline capabilities are foundational across all CHT Applications. Read more about this in [Why the CHT?]({{< ref "why-the-cht" >}}).
Community Health Toolkit (CHT) Applications are digital health tools built using the [CHT Core Framework](/core). The Core Framework provides a foundation on which custom CHT Applications are built. Since all CHT Applications share the same foundation, they also share capabilities and attributes. For example, all CHT Applications share a similar user-interface and share the same look-and-feel. All CHT Applications can be built to scale, can run across a variety of devices, support [Offline-First](/technical-overview/concepts/offline-first) experiences, and support most languages. These baseline capabilities are foundational across all CHT Applications. Read more about this in [Why the CHT?](/why-the-cht).

To create a digital health tool using the Community Health Toolkit, you'll need to build a CHT Application or re-use an existing CHT Application.

Expand Down
12 changes: 6 additions & 6 deletions content/en/building/branding/android.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ To proceed you need to have ready the following:
- The app logo and title.
- Translations for your supported languages (most flavors don't need to customize translations though).

Also be sure to have a working **[Development Environment]({{< ref "community/contributing/code/android/development-setup" >}})**.
Also be sure to have a working **[Development Environment](/community/contributing/code/android/development-setup)**.

While you should use your own branding, the [CHT logo](./CHT.logo.512.png) is available to use if so desired.

Expand Down Expand Up @@ -233,11 +233,11 @@ Releasing a new flavor requires the following steps:
1. Make a pull request to the release branch in the CHT Android repository.
2. Once approved it's recommended to create an alpha version to do final tests.
3. Merge the pull request.
4. [Release the flavor]({{< ref "community/contributing/code/android/releasing" >}}).
4. [Release the flavor](/community/contributing/code/android/releasing).

### 6. Publish the app

The last step is to publish it in the Play Store, or whatever option best suit your needs. Checkout the [Publishing]({{< ref "building/branding/publishing" >}}) page to see all the options available and instructions.
The last step is to publish it in the Play Store, or whatever option best suit your needs. Checkout the [Publishing](/building/branding/publishing) page to see all the options available and instructions.

## Android App Links verification
*Supported for CHT Core 4.7.0+ and CHT Android 1.3.0+*
Expand All @@ -248,14 +248,14 @@ Starting with Android 12, Android supports associating an app with a domain and

Since CHT Core version 4.7.0, the CHT supports serving `assetlinks.json` by adding it to your app settings.
All you have to do to make the CHT serve your assetlinks at `/.well-known/assetlinks.json` is to:
1. Ensure your flavor of cht-android [has a valid keystore]({{< ref "#3-generate-a-new-keystore" >}}).
1. Ensure your flavor of cht-android [has a valid keystore](/#3-generate-a-new-keystore).
2. Use the `keytool` utility (included with your Java SDK) to get your app's cert fingerprint:
```shell
keytool -list -v -keystore ./path/to/release-key.keystore
# or alternatively:
keytool -printcert -jarfile ./path/to/project.apk
```
3. Set the cert fingerprint in the [`assetlinks` configuration]({{< ref "building/reference/app-settings/assetlinks" >}}) for your CHT instance and deploy it to your server with cht-conf.
3. Set the cert fingerprint in the [`assetlinks` configuration](/building/reference/app-settings/assetlinks) for your CHT instance and deploy it to your server with cht-conf.

#### Note for Apps Using Google Play Signing

Expand All @@ -277,7 +277,7 @@ There are different ways to verify your setup works and we'll go through a few o

#### Using Android Debug Bridge `adb`

1. To install the `adb` command, follow the instructions under the [Development Environment > Debug tool adb]({{< ref "community/contributing/code/android/development-setup#debug-tool-adb" >}}) section.
1. To install the `adb` command, follow the instructions under the [Development Environment > Debug tool adb](/community/contributing/code/android/development-setup#debug-tool-adb) section.
2. With the phone connected to your computer, open a command line session and write the following command: `adb shell pm get-app-links <package_name>` where `<package_name>` is your application ID.

The output of this command should look like this:
Expand Down
6 changes: 3 additions & 3 deletions content/en/building/branding/application-graphics.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ You will cover site branding, partner logos, header tab icons, and app icons (us

## Required Resources

You should have a functioning [CHT instance with `cht-conf` installed locally]({{< ref "building/local-setup" >}}) and completed a [project folder]({{< ref "building/local-setup#3-create-and-upload-a-blank-project" >}}) setup.
You should have a functioning [CHT instance with `cht-conf` installed locally](/building/local-setup) and completed a [project folder](/building/local-setup#3-create-and-upload-a-blank-project) setup.

## Implementation Steps

Expand Down Expand Up @@ -223,6 +223,6 @@ To modify the icon used in contacts, you will need to edit the icon subkey in ap

Finally run the command: `cht --local upload-app-settings`

To customise the icons used in tasks or the action bar, you will need to edit a form properties file and add an icon property as outline in [form properties]({{< ref "building/forms/form-properties" >}}) tutorial.
To customise the icons used in tasks or the action bar, you will need to edit a form properties file and add an icon property as outline in [form properties](/building/forms/form-properties) tutorial.

To customise the icons used in targets, you will need to add an icon property in a target's definition as shown in the [targets]({{< ref "building/targets/target-widgets" >}}) tutorial.
To customise the icons used in targets, you will need to add an icon property in a target's definition as shown in the [targets](/building/targets/target-widgets) tutorial.
10 changes: 5 additions & 5 deletions content/en/building/branding/publishing.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ aliases: >

## Publishing

Once the flavor is [bui````lt]({{< ref "building/branding/android" >}}) there are many different ways to publish the binaries for installation.
Once the flavor is [bui````lt](/building/branding/android) there are many different ways to publish the binaries for installation.

### Google Play Store

Expand All @@ -41,17 +41,17 @@ For a more detailed explanation, follow this [doc](https://support.google.com/go

#### New App in the Play Store

Remember that when the app is created in the Play Store, it's required to choose the way the app will be signed by Google: we upload the signed AAB files, but then Google creates optimized versions of the app in .apk format. The app has to be configured to use the same signing and upload signatures by Google. Choose to upload a "Java keystore", the Play Console will require a file encrypted with a tool named PEPK, that file is `<brand>_private_key.pepk` generated when following the instructions of [New brand]({{< ref "building/branding/android" >}}) (the button to upload the `.pepk` in the Play Console may say "Upload generated ZIP" although the PEPK file doesn't look like a .zip file).
Remember that when the app is created in the Play Store, it's required to choose the way the app will be signed by Google: we upload the signed AAB files, but then Google creates optimized versions of the app in .apk format. The app has to be configured to use the same signing and upload signatures by Google. Choose to upload a "Java keystore", the Play Console will require a file encrypted with a tool named PEPK, that file is `<brand>_private_key.pepk` generated when following the instructions of [New brand](/building/branding/android) (the button to upload the `.pepk` in the Play Console may say "Upload generated ZIP" although the PEPK file doesn't look like a .zip file).

> [!NOTE]
> New apps cannot longer be uploaded with the APK format in the Play Store. Apps created before Aug 1, 2021 can still be updated with `.apk` files, but new ones needs to be uploaded with the Android App Bundle format (`.aab`). Checkout the [Artifact formats]({{< ref "community/contributing/code/android/development-setup#artifact-formats" >}}) section.
> New apps cannot longer be uploaded with the APK format in the Play Store. Apps created before Aug 1, 2021 can still be updated with `.apk` files, but new ones needs to be uploaded with the Android App Bundle format (`.aab`). Checkout the [Artifact formats](/community/contributing/code/android/development-setup#artifact-formats) section.

### Side loading

This method gives an app developer full control over installation. It is also possible to do the installation without an internet connection which makes it ideal for remote installation, or to save bandwidth when performing multiple installs.

1. In the phone settings [select the option](https://developer.android.com/distribute/marketing-tools/alternative-distribution#unknown-sources) to "opt in for installing unknown apps".
2. Download the correct APK on to the phone. It's important to select the right APK for the instruction set and Android version, as documented [in this table]({{< ref "community/contributing/code/android/development-setup#apks" >}}). This is likely easiest done by using the phone's browser to navigate to the download page.
2. Download the correct APK on to the phone. It's important to select the right APK for the instruction set and Android version, as documented [in this table](/community/contributing/code/android/development-setup#apks). This is likely easiest done by using the phone's browser to navigate to the download page.
3. After downloading, you should be prompted to install the APK.

### F-Droid
Expand All @@ -70,4 +70,4 @@ Other MDM providers include [Headwind MDM](https://h-mdm.com/) and [Microsoft In

### Progressive Web App

Another alternative is to install the CHT Core webapp as a Progressive Web App. This avoids building an Android application altogether. Read more on the [PWA page]({{< relref "technical-overview/concepts/pwa" >}}).
Another alternative is to install the CHT Core webapp as a Progressive Web App. This avoids building an Android application altogether. Read more on the [PWA page](/technical-overview/concepts/pwa).
4 changes: 2 additions & 2 deletions content/en/building/condition-cards.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,15 @@ Condition cards have several configurable elements including:

## Required Resources

You should have a functioning [CHT instance with `cht-conf` installed locally]({{< ref "building/local-setup" >}}), completed a [project folder]({{< ref "building/local-setup#3-create-and-upload-a-blank-project" >}}) setup, and an [assessment form]({{< ref "building/tutorials/app-forms" >}}).
You should have a functioning [CHT instance with `cht-conf` installed locally](/building/local-setup), completed a [project folder](/building/local-setup#3-create-and-upload-a-blank-project) setup, and an [assessment form](/building/tutorials/app-forms).

## Implementation Steps

Create a `contact-summary.templated.js` file if it doesn't exist. (This may have already been created by the initialise-project-layout command.)

### 1. Add Dependencies and Variable Definitions

Add the following dependencies and variable definitions at the top of the file (some of them may have been added from the [contact summary tutorial]({{< ref "building/contact-summary/contact-summary-overview" >}})):
Add the following dependencies and variable definitions at the top of the file (some of them may have been added from the [contact summary tutorial](/building/contact-summary/contact-summary-overview)):

```javascript
const thisContact = contact;
Expand Down
12 changes: 6 additions & 6 deletions content/en/building/contact-management/contacts.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ aliases:

“People” is the generic name used for individuals in apps built with the Core Framework. They can be patients, family members, nurses or health workers. Anyone with a profile in your app is a person.

“Places” is the generic name that represents a level in the [hierarchy]({{< ref "building/workflows/hierarchy" >}}). “People” belong to “places”, and “places” belong to other higher level “places” in the hierarchy. A “place” could be a geographic area, like a district with the "people" associated to it being health officers. A "place" could also be a structure in the health system, such as a health facility, and the "people" associated to it being nurses. In deployments with CHWs, the lowest "place" in the hierarchy often represents individual households or families, and the individual members of that household are the "people" associated to it.
“Places” is the generic name that represents a level in the [hierarchy](/building/workflows/hierarchy). “People” belong to “places”, and “places” belong to other higher level “places” in the hierarchy. A “place” could be a geographic area, like a district with the "people" associated to it being health officers. A "place" could also be a structure in the health system, such as a health facility, and the "people" associated to it being nurses. In deployments with CHWs, the lowest "place" in the hierarchy often represents individual households or families, and the individual members of that household are the "people" associated to it.

Users can access their “people” and “places” from the **People** tab. The permissions set for your role and your placement in the hierarchy will determine which contacts you’re able to see. Advanced configuration options are available for a specific offline user role to manage what [level of contact data]({{< ref "technical-overview/data/performance/replication#contact-depth" >}}) is downloaded and stored on their device.
Users can access their “people” and “places” from the **People** tab. The permissions set for your role and your placement in the hierarchy will determine which contacts you’re able to see. Advanced configuration options are available for a specific offline user role to manage what [level of contact data](/technical-overview/data/performance/replication#contact-depth) is downloaded and stored on their device.


{{< figure src="people-desktop.png" link="people-desktop.png" class="right col-6 col-lg-8 bordered-figure" >}}
Expand All @@ -41,7 +41,7 @@ Because this list defaults to show the “places” below the user in the hierar

New “places” can be added to this level of the hierarchy by clicking on the “Add new +” button at the bottom of the screen. This allows a CHW to add a new family to their list, or a CHW supervisor to add a new Area they manage.

With the [_UHC Mode_]({{< relref "building/uhc-mode" >}}) configured, the main list of households is displayed as shown on the rightmost screenshot to help health workers ensure that all households are visited regularly.
With the [_UHC Mode_](/building/uhc-mode) configured, the main list of households is displayed as shown on the rightmost screenshot to help health workers ensure that all households are visited regularly.

## Searching

Expand Down Expand Up @@ -126,7 +126,7 @@ Health workers can use these Care Guides at any time. If the app has scheduled a

## Creating and Editing Contacts

Contacts are created/modified via [contact forms]({{< relref "building/forms/contact" >}}). These forms are highly configurable and allow for specifying detailed workflows for capturing information about contacts.
Contacts are created/modified via [contact forms](/building/forms/contact). These forms are highly configurable and allow for specifying detailed workflows for capturing information about contacts.

### Duplicate Contact Detection

Expand All @@ -136,10 +136,10 @@ _(Added in CHT `4.19.0`)_
{{< figure link="duplicate-contact-screenshot.png" src="duplicate-contact-screenshot.png" class="right col-6 col-lg-8 bordered-figure">}}
{{< /cards >}}

One major challenge when collecting contact data is ensuring users do not inadvertently enter duplicate records for the same contact. It is important to train users on the [searching]({{< ref "#searching" >}}) functionality described above as this will allow them to find the desired profile of a previously recorded contact instead of creating a duplicate record for the same person or place.
One major challenge when collecting contact data is ensuring users do not inadvertently enter duplicate records for the same contact. It is important to train users on the [searching](/#searching) functionality described above as this will allow them to find the desired profile of a previously recorded contact instead of creating a duplicate record for the same person or place.

The CHT also supports automatically detecting when a contact being created or edited by a user matches an existing contact record. If a duplicate contact is detected, the user will be given the option of proceeding to the profile of the existing contact. Alternatively, the user can choose to override the duplicate detection logic and continue creating/editing the contact as originally intended.

The matching logic for duplicate detection is [configurable]({{< relref "building/forms/contact#properties" >}}) and can be tuned to the specific needs and data structures of a particular project. The algorithm compares the created/edited contact _to its sibling contacts._ These are other contacts of the same type that share the same parent contact. By default, contacts are considered duplicates if they have very similar names AND (for persons) if they are the same age (in years). This default logic can be overridden with custom logic for each type of contact.
The matching logic for duplicate detection is [configurable](/building/forms/contact#properties) and can be tuned to the specific needs and data structures of a particular project. The algorithm compares the created/edited contact _to its sibling contacts._ These are other contacts of the same type that share the same parent contact. By default, contacts are considered duplicates if they have very similar names AND (for persons) if they are the same age (in years). This default logic can be overridden with custom logic for each type of contact.


2 changes: 1 addition & 1 deletion content/en/building/contact-management/moving-contacts.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ docDirectoryPath | This action outputs files to local disk at this destination |

Some constraints when moving contacts:

* **Allowed Parents** - When moving contacts on WebApp &gt;v3.7, your chosen parent must be listed as a valid parent for the contact as defined in the [configuration for place hierarchy]({{< ref "building/reference/app-settings/hierarchy" >}}). For WebApp &lt;v3.7, the default hierarchy is enforced.
* **Allowed Parents** - When moving contacts on WebApp &gt;v3.7, your chosen parent must be listed as a valid parent for the contact as defined in the [configuration for place hierarchy](/building/reference/app-settings/hierarchy). For WebApp &lt;v3.7, the default hierarchy is enforced.
* **Circular Hierarchy** - Nobody's parent can ever be themself or their child.
* **Primary Contacts** - Primary contacts must be a descendant of the place for which they are the primary contact. You may need to select a new primary contact for a place through the WebApp if you'd like to move a primary contact to a new place in the hierarchy.
* **Minification** - Due to contact "minification" (#2635) which was implemented in v2.13, this script should not be used for versions prior to v2.13.
Expand Down
Loading