Indicators

This page documents a feature found in SanteDB v3.0

Introduction

SanteDB's business intelligence system allows for developers to define key performance indicators which are captured and executed on defined periods. Over time, these indicators allow data analysts to determine improvement or deterioration of a KPI over time.

Indicators differ from a Reportsin that an indicator allows for more granular investigation of the change of a population or indicator score over time. Examples of indicators are:

  • The number of patients who present a certain symptom compared to the total patient population

  • The number of children who received a vaccination compared to the total population of children

  • The number of abnormal temperature events detected in a facility as a proportion of all temperature readings

In SanteDB's BI implementation, and indicator is comprised of:

  • Metadata about the indicator (such as authorship, identification, status, etc.)

  • A query definition - the source of data which is used to populate the indicator

  • A period definition - the recurrence of measure for the indicator (example: monthly, weekly, etc.)

  • A subject definition - the person/place/organization against which the indicator is measured

  • Measurements - the computed measurements for the indicator

    • Stratifiers - if the measurements are dis-aggregated (for example: by age, by gender, etc.)

The output of an indicator is a structured result containing discrete data values for numerators, denominators, exclusions to the denominator, etc.

Defining an Indicator

An indicator is defined by creating a new .xml file in the bi/directory of your applet. This file starts with the BiIndicatorDefinition element and the standard BI metadata.

The annotations, policies, and identifier elements defined on the indicator appear on the FHIR resource Measure exposed from the SanteDB server on which the indicator is installed.

Defining a Query

An indicator must be derived form a Query. This query can be referenced from a shared query (see: Queries) or can be an inline query. If your indicator shares information with a report which is generated in SnateDB, you can reference the query directly:

If, however, our indicator extends the query org.example.bi.queries.someReportSourcewe would reference this query and extend it. In the example below, we normalize someReportSourceby preparing our stratifier columns to their display names:

Defining a Period

Your indicator definition should define a period (how often the indicator is computed) and a subject (the place, organization, or other entity against which the indicator is being measured).

SanteDB provides four standard period definitions:

Period
Frequency

org.santedb.bi.core.period.yearly

Every year (Jan 1 - Dec 31)

org.santedb.bi.core.period.monthly

Every month (first of month to last day of month)

org.santedb.bi.core.period.weekly

Every week (monday - sunday)

org.santedb.bi.core.period.daily

Every day (00:00 - 23:59)

The period is defined using the <period> element, to reuse an existing period definition you merely need to express the parameters in your query to which the period bounds apply:

To define a custom period, you will need to define a few additional elements:

Defining a Subject

The subject defines the objects against which the indicator is being measured. A subject is defined using the <subject> element:

Defining Measures

Finally, an indicator must contain one or more measure definitions. A measure definition instructs the BI layer how to compute the indicator for each of the periods and subjects identified. Each measure is contained as an <add>element in the <measures>.

The example above would result in an indicator which may be represented for each facility as:

Indicator ID
Numerator
Denominator

bcg

100

110

bcg:under_24h

80

90

bcg:over_24h

20

20

bcg:under_24h:Male

45

50

bcg:under_24h:Female

35

40

bcg:over_24h:Male

15

15

bcg:over_24h:Female

5

5

In HL7 FHIR the indicator computation is represented by MeasureReport which can be computed in real time using Measure/$evaluate-measure specifying the periodStart, the subjectand the measureto be performed.

Last updated

Was this helpful?