We need a way to dynamically load the panels and tests that appear on the Lab Orders page, broken up into implementation-defined categories.
We also need a way to specify whether or not the certain tests can be ordered individually or not.
We will determine this by loading a single “Lab Orderables" concept that is a set and has member concepts as follows:
“Lab Orderables” convenience set with the the top-level categories as members, ie:
- “Hemotology” convenience set
- “Biochemistry” convenience set,
Then each category convenience set would have the following concepts:
- 0 to N concepts of type “LabSet”
- 0 to N concepts of type “Test”
Nested in that, each “LabSet” would have:
- 1 to N concepts of type “Test”
This set would be used to render the Lab Orders page as follows:
- Each category would result in a left-hand tab
- The Panels box would include all the concepts in that set of type "LabSet"
- The Tests box would contain the union of 1) all the concepts in that set of type "Test" and 2) all the set members of all the LabSet tests... however only the tests that are top-level concepts would be clickable
For instance, say there was the following hierarchy within a "Biochemistry" convenience set:
Biochemistry Order Set
- Lipid Panel
- Total cholesterol
- Renal Panel
- Urine microscopy
- Total Cholesterol
- Total Bilirubin
... this should result in a Panels section with two buttons, "Lipids" and "Renals", and a Tests section with Total cholesterol, HDL, LDL, VLDL, Triglycerides, Urea Creatitine, Urine Microscopy, Glucose, Urea and Total Bilrubin
Clicking on Lipid Panel or Renal Panel should select the relevant tests, but only Total Cholesterol and Total Bilirubin should be independently selectable.
To provide some test data I have created from test concepts in a local instance and attached files that are the results of REST calls to the /concept endpoint.
One is default request for the "Lab Orderables" concept, another request for the "Hematology" concept, and the final one is a request for the "Biochemistry" concept that I've significantly trimmed down to what I think are the key concepts. Hopefully these will be helpful as some sample test data for creating this functionality.
I also have created a metadata sharing package of all these concepts that could be installed into an existing implementation.
Note that in the short-term we should just use the "display" field to determine the name to display in the Panel and Test buttons, but I think we may need to tweak this (can handle this in a second ticket).