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