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 6 Next »

Introduction

This is a technical documentation for “factor-based” concept ranges. For the background of these ranges, refer to the main documentation.

The criteria field in the concept_reference_range table allows for the dynamic and flexible validation of observations based on various patient attributes.

Architecture

The key challenge in implementing this feature was to design a system that does not require extensive changes to the existing database structure while still being robust and flexible enough to handle a variety of criteria based on different patient factors.

The solution involves introducing two new tables:

  • concept_reference_range: This table holds the absolute, critical, and normal ranges along with a criteria column. The criteria column contains a coded function that performs validation checks, such as those based on age or gender, using the Velocity engine for evaluation.

  • obs_reference_range: This table stores the validated reference ranges for observation numeric values after the criteria have been applied.

These tables allow for storage of different ranges. However, concept_reference_range includes criteria expressions for factors - which can be combinations for different factors like age and gender. For example:

  • concept_numeric able:

    • concept_id: 1, name: “Systolic blood pressure”, hi_critical: 130.0, hi_normal: 120.0, hi_absolute: 120.0, low_critical: 100.0, low_normal: 150.0, low_absolute: 120.0

    • concept_id: 2, name: “Temperature”, hi_critical: 40.0, hi_normal: 37.0, hi_absolute: 37.0, low_critical: 35.0, low_normal: 36.5, low_absolute: 36.8

  • concept_reference_range Table:

    • concept_reference_range_id: 1, concept_id: 1, criteria: ”$patient.getAgeInMonths() > 1 && $patient.getAgeInMonths() < 3”, hi_critical: 100.0, hi_normal: 80.0, hi_absolute: 80.0, low_critical: 50.0, low_normal: 64.0, low_absolute: 60.0

    • concept_reference_range_id: 2, concept_id: 1, criteria: ”$patient.getAge() > 18 && $patient.getAge() < 70”, hi_critical: 130.0, hi_normal: 120.0, hi_absolute: 120.0, low_critical: 60.0, low_normal: 80.0, low_absolute: 90.0

This design allows for easy updates and expansions of criteria without requiring changes to the underlying database schema.

Business Logic Flow

 

Screenshot 2024-08-19 at 17.59.53.png

Strict Ranges

When multiple reference ranges, of one concept numeric, are evaluated to true, then we use the strictest range.

  • For instance:-
    ConceptReferenceRange1 has ranges 60-140.
    ConceptReferenceRange2 has ranges 80-150
    -> The ObsReferenceRange will have range 80-140. In other words, the highest lower bound and lowest higher bound is picked.

Schema changes

This section details the new tables and relationships added to the OpenMRS data model to support factor-based concept ranges.

Note: The complete data model is documented here. This document only highlights the new schema additions relevant to factor-based concept ranges.


1. concept_reference_range Table

The concept_reference_range table is designed to store detailed reference ranges for concepts, along with criteria that determine when these ranges apply.

Table Structure:

Column Name

Data Type

Description

concept_reference_range_id

INT

Primary key. Unique identifier for each concept reference range.

concept_id

INT

Foreign key linking to concept_numeric.

criteria

VARCHAR

An expression that specifies conditions for when the reference range is applicable.

hi_critical

DOUBLE

The high critical for the concept.

hi_normal

DOUBLE

The high normal for the concept.

hi_absolute

DOUBLE

The high absolute for the concept.

low_critical

DOUBLE

The low critical for the concept.

low_normal

DOUBLE

The low normal for the concept.

low_absolute

DOUBLE

The low absolute for the concept.

Relationship:

1:N relationship with concept_numeric: A single concept can have multiple reference ranges based on different criteria.


2. obs_reference_range Table

The obs_reference_range table records the validated reference range for a specific observation (Obs).

Table Structure:

Column Name

Data Type

Description

obs_reference_range_id

INT

Primary key. Unique identifier for each observation reference range.

obs_id

INT

Foreign key linking to the obs table.

hi_critical

DOUBLE

The high critical limit for the observation.

hi_normal

DOUBLE

The high normal limit for the observation.

hi_absolute

DOUBLE

The high absolute limit for the observation.

low_critical

DOUBLE

The low critical limit for the observation.

low_normal

DOUBLE

The low normal limit for the observation.

low_absolute

DOUBLE

The low absolute limit for the observation.

Relationship:

Has 1:1 relationship with obs: Each observation has one associated reference range.

  • No labels