DHIS2 Z-Score Functions Capped at -3.5 How to Monitor Improvement in Severe Malnutrition Cases?

Hi everyone,

I’m currently implementing malnutrition indicators in a DHIS2 Tracker program and using the program rule functions based on the WHO growth standards:

  • d2:zScoreWFA (Weight-for-Age)
  • d2:zScoreHFA (Height-for-Age)
  • d2:zScoreWFH (Weight-for-Height)

From the documentation, these functions return values between -3.5 and 3.5, meaning -3.5 is used as the floor value.

In our setting we work in remote clinics, and we use the Z-scores to monitor severe malnutrition cases. Sometimes children present with Z-scores well below -3.5, and we provide nutritional support (e.g., rice or other food support).

For clinical monitoring it would be very helpful to see how the Z-score changes over time, even when it is below -3.5, to determine whether the child’s condition is actually improving.

At the moment, if the value stays at -3.5, it is difficult to distinguish whether the child is:

  • still extremely malnourished, or
  • improving but still below the threshold.

So I was wondering:

  1. Is there a way in DHIS2 to display Z-scores below -3.5, or are the functions intentionally capped at this value?
  2. Has anyone implemented a workaround to capture the full Z-score range?
  3. Are there recommended approaches in DHIS2 to monitor improvement in severe malnutrition cases when values are below the threshold?

For context, we are using the Android Capture App and are aware of the earlier bug (ANDROAPP-5063), which appears to be fixed in newer versions.

Any guidance or examples would be greatly appreciated.

Thanks!

Hi @hannahchek

Functions are intentionally capped, and you cannot get values below −3.5 from them. This behavior comes from the way DHIS2 implements the WHO growth standard algorithm, not from Android or Tracker limitations.

Recent versions fixed several anthropometry bugs including ANDROAPP-5063, but the −3.5 cap is not a bug. It is part of the function logic shared with the server.

So large DHIS2 nutrition implementations e.g., CMAM trackers typically monitor:

  • Admission criteria
    MUAC
    WFH Z-score < -3
  • Follow-up indicators
    Weight gain (g/kg/day)
    MUAC improvement
    Edema resolution
    % target weight

Not extreme Z-score movement.

Some nutrition programs compute Z-scores using the official WHO software:

  • WHO Anthro
  • ENA for SMART
  • R package zscorer

Then push the full Z-score value into DHIS2 as a data element.

I’m sure you can do it :clap:

Hello @hannahchek ,

we are analysing the support for z-score byond +/- 3.5.

We understnad the need, but are interested in understanding how do you follow up the evolution of the z-score. Are you representing it in tables or charts that flatten once they reach the limit? Are you using the nutrituion charts either in android or web?

Any detail about your configuration or vsualizations is very interesting for us.

thanks!

Hi @hannahchek,

While the standard z-score formula values are limited to the range of [-3.5, 3.5], we have an instance where we re-implement the formulas in a way that allows them to have unlimited range. Within [-3.5, 3.5], our formulas match the standard ones, and so are compatible.

The implementation is available at github.com/Simprints/DHIS2-Z-score-uncapped-formulas. The program rule variable names may need to be changed before using this solution, if they are different in your instance. That may require some technical skill, especially if you run the script that makes the formula. Still, this solution may be useful while the standard formulas have a limited range.