Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

The following describes how to set up a measurement range on a single ServiceRequest. In case the CarePlan contains multiple ServiceRequest for the same activity code, copying of changes to measurement ranges can be relevant. Multiple ServiceRequest in the same CarePlan or sub-CarePlan can refer to the same ActivityDefinition (through ServiceRequest.definition) and/or each refer to an individual ActivityDefinition with the same ActivityDefinition.code.

...

Note

If the used measurement unit in existing measurement ranges expressed in the same measurement unit differ differs from what can be determined with the approach referenced above, the measurement unit of existing measurement ranges should be used. There is little sense in expressing, say, an absolute red alarm type (see below) measurement range in multiple measurement units.

...

An absolute measurement range is set up by adding a an ehealth-referenceRange structure to ServiceRequest.ehealth-referenceRange where:

  • ehealth-referenceRange.type is a Coding with:

    • system: http://ehealth.sundhed.dk/cs/reference-range-type

    • code: RAL or GAL, for red alarm absolute measurement range and yellow alarm absolute measurement range, respectively.

  • ehealth-referenceRange.low and/or .high is a:

    • a SimpleQuantity where:

      • value: the integer or decimal value for the low/high boundary

      • unit: <same unit as measured value is expressed with>

      • system: <same system as measured value is expressed with>

      • code: <same code as measured value is expressed with>

Setting up Component-based Measurement Ranges

For component-based measurements (e.g. systolic/diastolic blood pressure) it is necessary to specify which component a reference range belongs to. This is done by adding an additional Coding to ehealth-referenceRange.type from https://docs.ehealth.sundhed.dk/latest/igfhir/ValueSet-ehealth-observation-codes.html

Setting up Relative Measurement Ranges and a Reference Base

A relative measurement range is set up by adding a an ehealth-referenceRange structure to ServiceRequest.ehealth-referenceRange where:

...

Info

A relative measurement range states a change relative to some reference base. This way, a measured value can be compared to a reference base taking the relative measurement range into account.

There are several ways to find a reference base:

  • searching for a prior, measured value, say, the highest/lowest/most recent/oldest value in some given period of time

  • a derivate, say, an average of measured values in some given period of time

  • a designated value, either copied from and/or referencing a measured value

To add a designated reference base, create a FHIR Goal resource with:

  • status: accepted

  • description: A Coding with:

    • code: reference-value

    • system: http://ehealth.sundhed.dk/cs/goal-description

  • subject: Reference to Patient

  • startDate: A datetime representing the starting point at which this reference base is applicable.

  • target.measure: Coding (the same as code in the ServiceRequest as the relative measurement range is defined in)

  • target.detailQuantity: A Quantity containing the reference base value

  • addresses: Reference to ServiceRequest (the same ServiceRequest as the relative measurement range is defined in)

  • addresses: Reference to the Observation from which the value in target.detailQuantity has been copied (if that is the case)

...

The Common workplace UI solution supports inclusive (>=, <=) and exclusive (<, >) ranges range even though the underlying FHIR model only supports inclusive representation.

The exclusive ranges are handled by having seven decimals in the FHIR model. This is done by adding or subtracting 0,0000001 depending on <, > and sign (+, -).

As a result, the UI solutions must implement logic for transforming in both directions (read and write).

Info

The FHIR model only supports inclusive representation. To support exclusive exclusivity it has been decided to use the seventh decimal for determining exclusiveness. Precision is supported up to 6 decimals as the seventh is used for comparator logic.

Note

It is recommended for that UI solutions to implement the same solution for consistency.

...

  • If upper bound

    • and a positive number then add 0,0000001 if the seventh decimal is 9. Comparator type is < less than.

    • and a negative number then add 0,0000001 if the seventh decimal is 1. Comparator type is < less than.

    • if not matching the above scenarios then use the original value. Comparator type is <= less than Or Equal.

  • if lower bound

    • and a positive number then subtract 0,0000001 if the seventh decimal is 1. Comparator type is > larger than.

    • and a negative number then subtract 0,0000001 if the seventh decimal is 9. Comparator type is > larger than.

    • if not matching the above scenarios then use the original value. Comparator type is >= larger than Or Equal.

Write scenario:

  • if the comparator type is < less than, then subtract 0,0000001.

  • if the comparator type is > larger than, then add 0,0000001.

Info

Algorithm example 1: Positive range

Range UI: > 1,4578 to < 2,7858

Write range:

lower bound: 1,4578 + 0,0000001 = 1,4578001 (when comparator type is > larger than, then add 0,0000001)

Upper bound: 2,7858 - 0,0000001 = 2,7857999 (when comparator type is < less than, then subtract 0,0000001)

Read range from FHIR:

lower bound: 1,4578001 - 0,0000001 = 1,4578 and comparator type > larger than. (When lower bound and a positive number then substract subtract 0,0000001 if the seventh decimal is 1)

Upper bound: 2,7857999 + 0,0000001 = 2,7858 and comparator type < less than. (When the upper bound and a positive number then add 0,0000001 if the seventh decimal is 9)

Info

Algorithm example 2: Positive range

Range UI: >= 1,4578 to <= 2,7858

Write range:

lower bound: 1,4578 (when comparator type is not < less or > larger than, then use value as is)

Upper bound: 2,7858 (when comparator type is not < less or > larger than, then use value as is)

Read range from FHIR:

lower bound: 1,4578 and comparator type >= equal or larger than. (when not matching the two first scenarios for the lower bound then use the original value)

Upper bound: 2,7858 and comparator type <= equal or less than. (when not matching the two first scenarios for the upper bound then use the original value)

Info

Algorithm example 3: Negative range

Range UI: > -7,4365 to < -3,4520

Write range:

lower bound: -7,4365 + 0,0000001 = -7,4364999 (when comparator type is > larger than, then add 0,0000001)

Upper bound: -3,4520 - 0,0000001 = -3,4520001 (when comparator type is < less than, then subtract 0,0000001)

Read range from FHIR:

lower bound: -7,4364999 - 0,0000001 = -7,4365 (When lower bound and a negative number then substract subtract 0,0000001 if the seventh decimal is 9)

Upper bound: -3,4520001 + 0,0000001 = -3,4520 (When upper bound and a negative number then add 0,0000001 if the seventh decimal is 1)