# Overview

It may be useful to increment counters in a case values, the typical example being the number of visits or consultations a patient received. The case stores the number of consultations received and each form stores a number of the consultation received at that time. Such counters are implemented with a couple of hidden values in the form and a single case value.

## General Approach

We will walk through a very simple example where we count the number of times that a home visit form has been completed.

### Set up the Form

The visit form will need to have two **hidden values**. You can call them whatever you want, but here is one simple approach:

Hidden value name | Description | Calculate Condition | Explanation of Calculation Condition |
---|---|---|---|

previous_visit_count | Each time the form is opened, this hidden value will pull in the value of visit_count that was calculated last time the form was filled out | (empty) | This hidden value will hold the value of visit_count from the case, so there will not be a calculate condition |

visit_count | Each time the form is opened, this hidden value will calculate how many times the form has been filled out | coalesce(/data/previous_visit_count, 0) + 1 | This hidden value will use coalesce to determine whether previous_visit_count has any value. If it does, it will add 1 to it, if it does not then it will take 0 and add 1 to that. You can imagine the first time the form is completed it will add 1 to 0 = 1 The second time it will take the previous value (1) and add 1 = 2 And so on... |

Your form should have these hidden values:

CommCare Functions: Coalesce

This example uses a function called **coalesce**. You can read more about CommCare Functions but here is the basic information about how this function works:

### coalesce

Useful for choosing which of two values to return. Will return the non-empty value. If both are not null, will return the first argument.**Behavior**:**Return**: One of the values**Arguments:**The two values to be coalesced**Syntax**: coalesce(value_1, value_2).**Example:**This is useful if you want to use a default value when referring to a question which may or may not have been answered. Ex. coalesce(/data/my_question, "my default value").

**Set up the Case Management**

After you form is set up you will need to link your case properties. You will want to take the value of home_visits each time, save it to the case, and then when you fill out the form again use home_visits as the value for previous_home_visit.

You can think of it like this:

When you set up your case management it will look like this:

## Example: Counting ANC Visits

Let's take an example of Ante Natal Care (ANC) visits. In this example the form has these hidden values:

- Use a hidden value called
`/data/previous_anc_number`

to get the number of ANC already received by the patient. If the patient is experiencing her third ANC, this value is 2. Load this hidden value from the case property called`anc_number`

- Use another hidden value (
`/data/anc_number)`

to compute the current ANC number`by`

adding 1 to`/data/previous_anc_number`

- Since data
`/previous_anc_number`

can be blank in the case of a first ANC, we need a more complicated Calculate Condition of`coalesce(/data/previous_anc_number, 0) + 1`

- We then save /data
`/anc_number`

to the case, using the case property name`/data/anc_number`

`Explained Step by Step`

To count or keep track of ANC visits in follow-up forms, do this…

- Create Hidden Value
**/data/previous_anc_number** - Create Hidden Value
**data/anc_number** - In
**/data/anc_number**, in the display condition, type: coalesce(/data/previous_anc_number,0)+1 - Go to the Case Management tab for this form
- Under
*Save data to the following case properties,*save both**/data/previous_anc_number****/data/anc_number** - Under
*Load the following case properties into the form,*load**/data/anc_number**as the Case Property and**/data/previous_anc_number**

Why do it like this?

- The hidden value,
**/data/previous_anc_number** - The hidden value (/data/anc_number) is used to compute the current ANC number by adding 1 to/data/previous_anc_number
- Since data/previous_anc_number can be blank in the case of a first ANC, we need a more complicated Calculate Condition of coalesce(/data/previous_anc_number, 0) + 1. Therefore, during the first visit, when previous_and_number does not have a value, it will be replaced by 0.
- We then save
**/data****/anc_number****/data/anc_number**