DATASET_SPEC needs a name, or even better, description. This is especially true for REVIEW_DATASET_SPEC, as, if there are multiple REVIEW_DATASET_SPECs attached to the same task, an occurrence that we find quite common, there is no way to distinguish between them in the user interface.
Sometimes, multiple tasks construct a single EHR document (a single composition). As a result, a single CAPTURE_DATASET_SPEC fills out only a sub-section of the form (similarly, a single REVIEW_DATASET_SPEC could only display a single sub-section of the form). For that reason, we need a way to specify the form sub-section on DATASET_SPEC. I was thinking that AQL path would do here - this way, we can limit the input/display down to a single field, which is great.
We need a way to specify query to pre-fill data on a CAPTURE_DATASET_SPEC form. Suggested solution: move the populating_request attribute from REVIEW_DATASET_SPEC to DATASET_SPEC, use it to prepopulate the form values for CAPTURE_DATASET_SPECs.
Possible set of changes:
1. Make DATASET_SPEC inherit from LOCATABLE. This gives it a name and a uid, and make it easier to deal with multiples in archetypes.
2. To deal with the need to connect a Task to a subsection of a form, we could introduce a form_path - seems more obvious to me than an AQL path; or a form subsection_id?
3. The pre-fill on the capture dataset is obvious, we should have thought of this earlier. We can move populating_call to the parent DATASET_SPEC class as suggested - this is a pretty painless change.