Wiki Spaces


Get Help from Others

Q&A: Ask OpenMRS
Discussion: OpenMRS Talk
Real-Time: IRC Chat | Slack


Page tree
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Current »

This is a brief guide for developers who wish to develop reports for KenyaEMR. KenyaEMR relies on the Reporting Module to provide cohort and indicator reports. All reports are implemented in code and it is not expected that implementers will create their own reports through the web interface. In many cases, the Kenya Core module provides "wrappers" for much of the necessary functionality from the reporting module. As such, KenyaEMR report developers need to be aware of these "wrappers" in addition to familiarity with the underlying reporting framework. Reports may either be provided through the KenyaEMR module itself or through add-on modules. 

Step-by-step guide (Cohort Reports)

Cohort reports are typically patient listings containing patients with similar characteristics, for example, the list of all patients who missed their last appointment.

Step-by-step guide (Indicator Reports)

Indicator reports are lists of indicators, where the indicators are simply aggregations of cohorts. An example of an indicator could be the total number of patients who missed their appointment in a given month. Indicator reports are typically tied to a reporting period, usually one month.


  1. Create a cohort library. A cohort library is simply an ordinary Java class with methods that return CohortDefinitions. See example.
  2. Create an indicator library. And indicator library is also an ordinary Java class with methods that return CohortIndicators. Indicator libraries rely on the cohorts defined in associated cohort libraries. See example.
  3. Create a report builder. A report builder is an implementation of the ReportBuilder interface. The ReportBuilder interface has an abstract class implementation called AbstractReportBuilder and in most cases you should inherit from this rather than create a direct implementation. Report builders must be annotated with a @Builds annotation, which tells the builder which report(s) it is responsible for building. See example.
  4. Define your report in the application context by defining a ReportDescriptor object. See example.
  5. Configure your report in the application context by defining a ReportConfiguration object. See example.
  6. Include your report in the UI adding it to the page model through a controller. See example.


There is no guarantee that the example links above will always work as advertised. Please let us know whenever they are broken or happen to point to irrelevant content.

There is no content with the specified labels

  • No labels