Go to the main page

DHIS 2.38 Overview

DHIS2 version 2.38 is out with many new features, improvements and bug fixes. On this page you can find information on this software version, including feature descriptions, links to technical documentation, and more

Jump to a section on this page

    Feature Demo Videos

    Discover some highlights of new features in this DHIS2 release with feature demonstrations by DHIS2 experts.

    Available via Continuous Delivery

    The following are the highlight application updates that have been developed during the v2.38 release cycle, but which are not included in the bundled v2.38.0 release. You will be able install these core apps directly from the App Hub, and have the new version override the bundled version in DHIS2 using the App Management app.

    • Line Listing App
    • Capture App – Tracker functionality

    An overview of the key features in these applications is included in the relevant sections below.

    Analytics Features

    Catchment areas for org units

    DHIS v2.38 supports multiple geometries (points and shapes) for all organisation units. These can be viewed in the Maps app for any standard layer through an option in the org. unit selector. Practically this means that system administrators can upload catchment areas for their facilities, community health posts, schools, hospitals, etc. and visualize any data by catchment.

    VideoScreenshot | Docs

    Support for Google's Earth Building/Structures Layer

    In the Maps app, users can now see structure outlines as identified by Google’s Open Building dataset. This data set includes 516M buildings (64% of the African continent). It is useful for population estimation, urban planning, outreach and health programs, and humanitarian response, for example. The number of buildings can be shown by catchment or org unit boundaries.

    Screenshot 1 | Screenshot 2 | Docs

    Vector tiles support in Maps

    The Maps app now users and supports vector tiles. This should result in some performance improvements and updated underlying technology.

    Indicator aggregationType override

    An indicator may specify an aggregation type, overriding the default type assigned to a data element. For example if a data element has aggregation type SUM, an indicator may also report the value by AVERAGE, COUNT, FIRST, LAST, MIN, MAX, etc.

    Example expression in indicators: #{EX2jBdKe4Yq}.aggregationType(COUNT) Description: ER Teachers Trained.aggregationType(COUNT)


    Indicator minDate and maxDate

    A minimum and/or maximum date may be specified for fetching a data element for an indicator. This can be useful when data semantics change from time to time requiring different calculations for the same result. It allows an indicator to report consistently across these changes by changing the way the indicator is calculated through time. Don’t forget, the ‘periodOffset’ function (since 2.36) can also be used to include data from a different period in an indicator expression.

    Example minDate and maxDate expression in indicators: #{EX2jBdKe4Yq}.minDate(2021-1-1).maxDate(2021-6-30) Description: ER Teachers Trained.minDate(2021-1-1).maxDate(2021-6-30) -> Only values between Jan. 1, 2021 and June 30, 2021 for ER Teachers Trained will be used in the indicator calculation.

    Example periodOffset expression in indicators: #{EX2jBdKe4Yq} + #{EX2jBdKe4Yq}.periodOffset(-1) + #{EX2jBdKe4Yq}.periodOffset(-2) Description: ER Teachers Trained + Description: ER Teachers Trained + ER Teachers Trained.periodOffset(-1) + ER Teachers Trained.periodOffset(-2) -> Sum of the ER Teachers Trained over the last three months relative to the period selection in the analytics app being used to visualize this value.


    Indicator subexpressions (for 2.38.1)

    Indicators can count the number of organisation units where a data element compares in a specific way with a fixed value.

    Example subExpression expression in indicators: subExpression( if (#{vq2q03TrNi} > 100, 1, 0) ) Description: subExpression(if(IDSR Malaria>100,1,0)) -> Counts the number of organisation units where more than 100 Malaria cases were reported within a given period defined in the analytics app being used to visualize this value.

    Video | Docs

    New Line Listing application

    A new Line Listing application has been released via the App Hub, and will be bundled with the core release from DHIS v2.38.1 onwards. Later versions of this app will be released continuously on the App Hub. Bug fixes and new features will therefore be available to be downloaded and integrated at the time they are needed, without upgrading the rest of the DHIS2 platform. The App Hub is accessed through the App management app.

    This new application is a massive improvement for producing line lists of tracked entities in DHIS2 over the event reports application. The new line listing application replicated all of the line listing functionalities of the event reports app, and it has a completely new, much improved user experience that makes it much easier for users to make a line list of tracked entities. It also includes many new features. A list of some of the key new features is below.

    VideoScreenshot | Docs


    Visualizing multiple repeating events

    You are now able to produce a line list that can display data from multiple repeating stage for a single tracked entity. You can specify how many repeated stages you would like to see data from. This is useful for many health and education programs by enabling the visualization of data captured repeatedly over time for a single patient or student.

    Screenshot 1 | Screenshot 2

    New, Tracker-specific period dimensions

    In the new Line Listing application you can produce a linelist showing enrollment date, event date, and/or incident date. These can be each defined, sorted, and shown together in a single line list.


    Created by and Last updated by

    This allows you to see the user name of the user that has either created the enrollment or the user that has last updated the data for the tracked entity.

    Tracker program working lists improvements

    The functionality for working lists for Tracker programs has been expanded to be similar to those of Event working lists. The Capture app now allows working lists to be configured, saved, shared, deleted and updated through the user interface.

    VideoScreenshot | Docs | Jira

    Translation of Program Rule Actions in Tracker Capture and Capture app

    The content of program rule actions — the “Static text” that is being visualized to the users — can be translated and shown in Tracker programs.


    Description and URLs for data elements and tracked entity attributes

    Description and URL set on these data items are displayed in a popover. This popover can be accessed by clicking an ‘i’ icon that displays after the data element name. The description is set in the Maintenance app and can be used to give more information about what to capture for the data item.

    VideoScreenshot | Jira

    New org unit component implemented in Capture app

    The org unit component used in Capture app has been replaced with the redesigned org unit from d2-ui.


    Support for GS1 Data Matrix

    GS1 Data Matrix is used for pharmaceutical and health commodity bar coding, and will support supply chain use cases. Given a field value formatted with the GS1 data matrix standard and a string key from the GS1 application identifiers, there is now support for program rules extracting the values from this delimited text and assigning values to their designated fields. This is implemented in Tracker Capture, Capture and the Android Capture app.

    VideoDocs | Jira

    Data/Value type for Program Rule Variable

    For the program rule variables with Source Type “Calculated value,” the Maintenance app will offer the user to assign a value type. The default value type for calculated values will be text. For all other Program Rule Variable Source Types, the value type selection should not be visible, as the variable will inherit the type from the underlying data element or tracked entity attribute.


    Programs can remain open after attribute option end date

    A specified program can remain open after its related attribute option is closed.

    Docs | Jira

    Capture app continuously released

    From DHIS 2.38, the Capture app will be released continuously on the app hub. Bug fixes and new features will therefore be available to be downloaded and integrated at the time they are needed, without upgrading the rest of the application. The first updated version of the Capture app will be available on the App Hub shortly after the 2.38.0 release. The App Hub is accessed through the App management app.

    Tracker features in Capture App

    In addition to the Tracker functionality that was added in 2.37 for closed beta testing, additional functionality has been added. The new functionality can be tested by installing the updated Capture app from the App Hub, and opting in to using the Tracker features in the Capture app. Only superusers or users with access to changing the program metadata will have the opt-in functionality available. The new Tracker functionality that can be tested by opting in is listed below.


    TEI profile widget

    On the enrollment dashboard, you can view the Tracked Entity Instance profile widget. Inside the profile widget you can view the key attributes values. Click the Edit button to make changes to the Tracked Entity Instance profile. Editing the profile opens a dialog where the profile attributes can be changed.


    Scheduling event widget form

    Instead of reporting an event the user can select to schedule an event later. This is done with a scheduled date. The dialog will open with a suggested scheduled date, and this date is determined by a set of rules from program stage configuration and program configuration.

    Docs | Jira

    Quick actions in Enrollment Dashboard

    The quick actions widget offers shortcuts for frequently used actions for the current enrollment, including creating an event and scheduling an event.

    Docs | Jira

    "Add new" for Completed enrollments in Enrollment Widget

    There can only be one active enrollment at a time, but if all enrollments is completed, there will be an option to enroll the TEI in the program again in the enrollment widget, if the program allows more than one enrollment per TEI. If program does not allow more than one enrollment, the ‘add new’ button will be disabled.


    Re-enroll an existing tracked entity instance

    By having a Tracked Entity Instance selected in the locked selector and selecting a different program, you can now re-enroll existing TEIs into other programs. The registration page will be pre-filled with any overlapping tracked entity attribute values.

    Docs | Jira

    Tracker and Event Features

    Version check notifications

    A new DHIS2 version check notification service is introduced, which will send notifications in the form of DHIS2 system inbox messages when newer versions of DHIS2 has become available. This includes major and patch versions. This is useful to encourage sysadmins to upgrade DHIS2 to keep their instance secure and up to date.

    Video | Jira

    GeoJSON metadata attributes

    GeoJSON is now supported as value type for metadata attributes. This allows you to store any number of GeoJSON documents e.g. for organisation units.

    Docs | Jira

    ADX export

    The import/export app now allows data import and export using the ADX data format.

    Docs | Jira

    Configurable log level

    Logging levels can now be configured in the dhis.conf configuration file on the package level. This means that you can specify the log level to output for specific frameworks and modules within DHIS2 directly in the DHIS2 configuration file.

    Video | Docs | Jira

    Account disable notifications

    When automatically disabling users through the disable users scheduled job, an email notification can be sent to the relevant user. The number of days before the notification can be defined in the job configuration. This is useful to give users a chance to log in before their account is disabled.

    Video | Docs | Jira

    Data value set input scheme

    Input schemes is now supported for the data value sets API endpoint, allowing you to import data using the code field to reference metadata.

    Docs | Jira

    Group set short name

    The indicator group set and category option group sets now have short name properties, which allows for precise and UI-friendly rendering. The short names are now used as column names in resource tables instead of names.


    Analytics cache handling

    The cache for analytics data is now automatically flushed when the analytics database tables are updated. This ensures that analytics queries read the latest data from the analytics data and reduce the time lag between analytics tables being updated and data appearing in data visualizations.


    Platform Features

    Request logging

    Clients of the API can now submit a value with the ‘X-Request-ID’ HTTP header which is included in all log statements. This is useful when looking at DHIS2 logs and trying to understand which client/app made a request, for example when debugging an issue which applies to a specific installation of an Android app on a phone.

    Docs | Jira

    Cancel analytics table jobs

    You can now cancel (stop) analytics tables jobs while they are running. This is useful in order to stop long-running jobs without having to wait for them to complete.


    Data store improvements

    The data store API has received numerous improvements to make it a fully-fledged data store and more useful to web apps and other clients.


    Field filtering

    Allows you to return only specific keys and values of entries in the data store using the fields parameter. Works similar to fields filtering in the metadata API. The filtering takes place at the namespace level and is useful when a client needs to list many entries with specific keys/values in a single query.

    Docs | Jira


    In query responses, paging is supported and enabled by default. You can specify paging explicitly with the page and pageSize parameters. Paging is useful to work with namespaces with high numbers of entries.

    Docs | Jira

    Entry filtering

    Allows you to match and filter entries in a namespace based on a variety of operators, such as eqltlegtgelikenull, using the filter parameter. Works similar to object filtering in the metadata API. The filtering is useful when a client wants to list many entries which match one or many criteria.

    Docs | Jira


    Allows you to sort entries in a namespace ascending or descending based on a specific key/value using the order parameter. This is useful when clients have specific requirements for sorting a list of entries.

    Docs | Jira

    Release Information

    This version of the DHIS2 core software is fully compatible with the DHIS2 Android Capture App version 2.6.

    Click on the links in the table below for more information about this software release and to access an interactive demo. You can also add comments or ask questions about this release on the DHIS2 Community of Practice.

    To find more details about...Follow this link:
    Download release and sample databaseDownloads
    Documentation and JavadocsDocumentation
    Upgrade notesUpgrade notes on Github
    Full list of features and bugsRelease Note
    Source code on GithubDHIS2 source code
    Demo instanceDemos
    Docker hub imagesDocker repository
    DHIS2 communityDHIS2 Community of Practice