Design of Dispensible
Background
A Dispensable is the atomic thing that is given/dispensed to a patient. How we describe that Dispensable depends on the thing:
- Drug (pain killers, antibiotics, etc)
- Dispensing Unit (e.g. each, 10 tab strip)
- Form (e.g. pill, tablet, capsule)
- Strength and Dosage Unit (e.g. 500mg, 5ml)
- Vaccine (e.g. Oral Polio, PCV13, etc)
- Dispensing Unit (e.g. each, 10 tab strip)
- Form (e.g. pill, drops, injection)
- Dosage Unit (e.g. ml)
- Device
- Dispensing Unit (e.g. each, 10 tab strip)
- Form (e.g. Device)
Some examples of Dispensable:
- Pills that are taken out of their bottle (a primary package) to be dispensed at the pharmacy to a patient (perhaps in other bottles)
- An injection of a Vaccine that's taken from a vial (a primary package), into a syringe (a device for helping administer the dose), and injected into a patient.
- A syringe (that if individually wrapped and shipped may also be the primary package), that's used to administer a substance
- A test (e.g. Malaria rapid test), that a patient may self-administer
It's important to note that not all Dispensables are actually dispensed to a patient, some may be to help treat a patient (e.g. supplies for tests, syringes, etc). This still draws a distinction between medical commodities and say equipment (microscopes, cold storage, etc) as the number of patients treatable with a Dispensable is more definitively understood.
Design Diagrams
Basic Structure
Global Product and Trade Item
A part of the design contract of OrderableProduct.canFulfil(OrderableProduct) is that the Dispensable between both OrderableProduct's is the same. In fulfilling this contract, when a TradeItem is associated to a GlobalProduct, that contract must enforce that the Dispensable between the two is the same. e.g. if a GlobalProduct Ibuprofen has Dispensable A, and its TradeItem Advil has Dispensable B, then logically A.equals(B) is true.
OpenLMIS: the global initiative for powerful LMIS software