Support for Structured Numerics

Background

A lot of discussion and work has gone into considering how structured numerics could be supported within OpenMRS.  Structured numerics come from the HL7 notion of structure numeric data type: ranges, boundaries (like < 50), titers, etc.  There is a ticket (TRUNK-413) for work that has already been done.

Design Ideas

New datatype: UNBOUNDED NUMERIC
value_modifier can be <, ?, >, ?, or null (for =)
ConceptDatatype.isNumeric() returns false
ConceptDatatype.isUnboundedNumeric() returns true
Obs.getVAlueUnboundedNumeric() returns an UnboundedNumber

class UnboundedNumber extends NumericInterval {
  public String getModifier();
  public Double getValue();
}

class NumericInterval {
  double getUpperBound();
  double getLowerBound();
  boolean isIncludesUpperBound();
  boolean isIncludesLowerBound();
  String toString();
}

API Changes

  • + Obs.getValueUnboundedNumeric();
  • * Obs.getValueAsString() needs to handle this (duh)
  • + ConceptDatatype of unbounded numeric
    • put this in the core liquibase dataset and put the uuid value in the Conceptatatype class
  • Cohort Builder needs to handle queries for these
  • Add tool to upgrade an existing numeric obs that may have proxy value(s) (e.g., 0, 39, and 39.9 all mean < 40) to an undounded numeric
  • Make HL7 hander(s) aware and able to accept SN OBXs (it would have to be backward-compatiable – ie.., accept a NM for an UnboundedNumberic concept)

Also

  • Propose a way for InfoPath form entry to handle these
  • Propose a way for HTML Form Entry to handle these
  • Need to research a better name then Unbounded Numeric

See also