Module to Allow Attribute Value to Be Latest obs of a Specified Concept
Abstract
This is a module that will allow you to have an attribute write it's value to an observation
Requirements
Allow you to specify the attribute you want and connect it with any concept in the dictionary
Allow for any number of attribute/concept pairs
Whenever an attribute is changed, should create an obs for the concept with the datetime of creation and user when the attribute is modified
In the Manage Person Attribute Types page, it should create a new Format called coded-obs-generating. Then in Foreign Key, the concept id (not uuid) should be entered
Extends the restrictions for the concept answers to the attribute. If the concept is coded, it makes the response options for the attribute the concepts the concepts which are the answers.## If the concept is numeric, only numeric values are allowed and the absolute low and high are implemented
User Interface
Notes
The tribe module is a good way of showing how an attribute can have a pull down menu of options, for the case that the concept is coded
This is in shortpatient.jsp, use Concept FieldGen web-inf/view/fieldgen.jsp
<spring:bind path="value"> <openmrs:fieldGen type="${personAttribute.attributeType.format}" formFieldName="${status.expression}" val="${personAttribute.hydratedObject}" parameters="optionHeader=\[blank\]\|showAnswers=${personAttribute.attributeType.foreignKey}\|isNullable=false" /> <%-\- isNullable=false so booleans don't have 'unknown' radiobox --%></spring:bind>
Questions
Next Phases of Development
Be able to enter an obs and have that update the attribute
I wouldn't look at this as "an attribute that displays the most recent obs value"; rather, I would approach this as an obs-generating person attribute. Meaning, that each time the person attribute is created or updated, the new value is written to the obs table as well. While this wouldn't handle the case of someone generating the observations independently, I wouldn't try to cover that use case -- if you are willing to always search for the latest observation, then there's no need for the person attribute. If you only update the value through the person attribute, then an obs-generating attribute will give you a history trail in obs while remaining a simple (and quick) lookup.
A future version could allow for a timestamp ("time observed") along with the value, allowing obs to be created with an obs_datetime different from the current time (if timestamp was earlier than a current timestamp in the person attribute, then an obs would be created without changing the person attribute value).