The goal of this issue is to add the ability to order drugs or drug formulations which are not in the system by:
- Allowing for a free text drug formulation (i.e., free text subtitute for Drug) within a drug order.
- Recognizing a special DRUG OTHER concept to be used to order a drug for which there is no concept (in which case the other drug must be specified within the free text formulation).
- Create a DRUG OTHER concept (class = Drug).
- Create a drugOrder.drugOther global property to identify a DRUG OTHER concept by UUID.
- Add a new String drugNonCoded property to DrugOrder
- Refactor API so that a DrugOrder can not have both DrugOrder.drug and DrugOrder.drugNonCoded specified at the same time.
- Any code in openmrs-core that references DrugOrder.drug should also work when this is null and use DrugOrder.drugNonCoded instead.
- If DrugOrder.concept == DRUG OTHER (matches global property), then DrugOrder.drugNonCoded must be specified (cannot be blank).
- There should be a drugOrder.drugOther global property that can point to the concept to be used for non-coded drug references.
- A client of the API should be able to create a drug order with a Drug whose concept is DRUG OTHER
- A client of the API should be able to create a drug order with drugOrder.concept set to DRUG OTHER concept with drugOrder.drug not specified and DrugOrder.drugNonCoded non-blank.
- A client of the API should be able to create a drug order with a drug concept (e.g., "AMPICILLIN") with drugOrder.drug not specified and DrugOrder.drugNonCoded non-blank.
- An attempt to create an DRUG OTHER order without specifying DrugOrder.drugNonCoded should fail (i.e., if drugNonCoded is blank or only whitespace)
- An attempt to create more than one concurrently active DRUG OTHER order with the same non-coded name (drugNonCoded values equal ignoring case) should fail as a duplicate order.
- As before, a client should be able to create a drug order with a specific drug concept (not DRUG OTHER) with both DrugOrder.drug and DrugOrder.drugNonCoded blank as long as the drugOrder.requireDrug global property is false.