Community:
Some of our uses cases involve drug dose, which is the amount of active ingredient per day or exposure time. But currently we have no good way to calculate this, even though we should have all information in DRUG_EXPOSURE and the corresponding references CONCEPT and DRUG_STRENGTH. Folks keep bringing this up all the time. A few of us (@tburkard, @mdewilde, @aostropolets, @Klaus, @MPhilofsky et al.) have been discussing a potential solution to this issue and would like to bring it to the community.
Read on if you are interested. If you do not care about drug dose, this is unlikely going to affect your use cases.
Problem Space
Drugs are not administered to patients as pure ingredient. Instead, they are formulated into drug products with various dose forms, such as tablets and solutions for injection. Therefore, their doses mostly do not directly occur in observational data. Instead, they can be calculated from three parameters: (i) how much drug product was provided to the patient (ii) during what exposure time and (ii) how much active ingredient is in that product. In the OMOP CDM, all this information lives in DRUG_EXPOSURE and DRUG_STRENGTH, respectively.
So, whatâs the problem?
- Drug product over time - that information is spread over three fields: quantity, days_supply and sig. You only need two out of the three as days_supply = quantity/sig. But they have problems:
- Days_supply is straightforward, except it is not defined for one-off administrations.
- Quantity is overloaded, meaning, its definition is conditional on information in another field, in this case drug_concept_id. It can mean:
- The number of fixed size elements of mostly solid drug formulations (e.g. tablets, inhaler puffs),
- The volume of a mostly liquid divisible drug formulation, or
- The weight or volume of an ingredient, depending whether it is solid or liquid.
- Quantity also collides with the quantity information (denominator_amount in DRUG_STRENGTH) for Quantified Drugs. Likewise, it collides with the box size information (only in RxNorm Extension).
- Sig is not computable. Itâs free text. We have gotten away with that only because many databases provide quantity and days_supply.
- Drug Strength is defined for all drug concept classes except Drug Forms.
- The representation of the drug forms is not explicitly defined:
- Solid fixed formulation drugs is what is implicitly assumed.
- Liquid drugs can be confusing because apart from the concentration they can have a volume of a flask and a number of flasks (e.g. Quantified Branded Box 1.6 ML Filgrastim 0.3 MG/ML Injection [Neupogen] Box of 20). Alternatively, some of them lack volume adn concentration and are handled like fixed formulations (e.g. Clinical Drug leuprolide 42 MG Prefilled Syringe).
- For slow release drug (e.g. patches) the intended duration is currently treated as a denominator, similar to volume for the liquids. But that does not work that way, if you leave a patch twice as long on the arm it will elude more, but not twice as much drug.
- For packs, which are combinations of drug products at fixed amounts, the calculation of their relative contribution is not defined.
- Drug pumps, which elude a certain amount of ingredient over time, are not defined.
- More exotic drug forms, some of them even living in other domains, are not covered at all: chemotherapy regimens, stents, radiopharmaceuticals, homeopathics, etc.
For these reasons, it is impossible to create a standard script that will produce daily or total dose per ingredient. For the same reason, nobody has filled the DOSE_ERA table.
If we want to fix this we need to solve the following problems:
- Fix the definition of days_supply for single administrations.
- Fix the definition of quantity and consolidate all quantity information in one place.
- Get the relevant information out of sig and model it accordingly.
- Clean up how all drug forms are represented correctly.
Proposal
Drug doses for all exposures will be calculated by simple formulas:
total dose = quantity * drug strength for each ingredient
daily dose = quantity * drug strength for each ingredient / days supply
or
daily dose = sig * drug strength for each ingredient
This will work if:
- For drugs formulated into fixed element (solids, denominator unit in DRUG_STRENGTH = NULL), quantity contains the number of these elements. Drug strength already contains the amount of ingredient per element.
- For divisible drugs (liquids, denominator unit in DRUG_STRENGTH is not NULL), quantity should contain the volume or other measure that can be divided randomly. Drug strength contains the concentration (numerator, denominator).
- For combination drugs, these formulas must be applied to each ingredient separately, resulting in multiple records.
- For drug records provided as ingredient as well as Clinical/Branded Drug Form, quantity should contain the amount of ingredient and drug strength = 1.
It is worth mentioning that this will give us the maximal possible dose. Obviously, we know that patients show less than 100% adherence and the doctors sometimes oversupply, especially for âon demandâ drugs, like asthma medication. Methods of establishing the actual dose exist but are not addressed here.
To get us there, we propose the following changes to the OMOP CDM, Themis conventions and Vocabularies.
Changes to the OMOP CDM
Changes to DRUG_EXPOSURE:
# | Solution | Solves the problem | Note |
---|---|---|---|
1 | Add field sig_amount | not computable sig | Just like quantity, it should contain the amount of drug product per day. For example, a text â3 tablets per dayâ will result in sig_amount=3. â2 tablespoons twice a dayâ will result in sig_amount=10, provided the denominator unit is mL and a tablespoon is 5 mL. The reference duration is always one day, and therefore there is no need for an equivalent to days_supply. This change will require NLP, but the LLMs should have no problem with that. |
2 | Rename sig to sig_source_value | not computable sig | It contains verbatim text and should not be something a standardized analytic ever uses. |
3 | Rename quantity to total_amount | quantity definition | This change will make sure ETLers will fill in the correct value, instead of just copying and pasting from a quantity field in the source. This change is optional. |
Changes to DRUG_STRENGTH:
# | Solution | Solves the problem | Note |
---|---|---|---|
4 | Merge amount and numerator value and unit field pairs | quantity definition | This would combine amount_value with numerator_value and amount_unit_concept_id with numerator_unit_concept_id. Currently, content in the amount and numerator field pairs are mutually exclusive, indicating a drug is fixed element or divisible formulation. But we already know this from the denominator unit (the amount might also be empty). This change will make things easier, removing one coalesce() function and avoiding internal contradictions, without losing any information. However, this change is optional. |
Changes to Themis Conventions
To support the ETL process, the following should be well documented and enforced:
# | Solution | Solves the problem | Note |
---|---|---|---|
5 | days_supply = NULL or 1 for one-off administrations | days_supply definition | We just need to set the convention. |
6 | quantity = total number of individual elements for fixed element drugs | quantity definition | This is most common for solid drugs such as tablets and capsules, but it could also be used for powders for solutions or other liquid substances that are formulated to be used all at once (e.g. Clinical Drug leuprolide 42 MG Prefilled Syringe. The quantity can be obtained from the source (often from a field called âquantityâ) or from the box size in DRUG_STRENGTH. E.g., a prescription of 30 capsules of acetaminophen 300 MG Oral Capsule would get 30 in the quantity field, a record of Acetaminophen 1000 MG Oral Capsule [Paracetabs] Box of 10 would receive 10. The quantity must be an integer, with the exception of simple fractions (½, â , Âź, written as 0.5, 0.333, 0.25) |
7 | quantity = total volume or other measure for divisible drug formulations | quantity definition | The volume can be taken from the source data, or the denominator in DRUG_STRENGTH. This is most commonly measured in milliliters, but there are also actuations (puffs) of inhalers, square centimeters of patches, units and liters, which work the same way. If there is more than one unit in the product (e.g. several flasks or prefilled syringes) the volume should be denominator * box size. E.g. a prescription of 1.6 ML Filgrastim 0.3 MG/ML Injection [Neupogen] Box of 20 would result in 1.6*20=32 for the quantity field. |
8 | quantity = total amount for ingredients | quantity definition | Ingredients are measured mostly in milligrams, but there are also cells, milliliters, international units etc., which are defined in DRUG_STRENGTH. |
Changes to the Vocabularies
These changes are substantial, but might make the whole system simpler and more concise. But they are also a rather large change to the system, affecting the RxNorm and RxNorm Extension vocabs and hierarchy.
# | Solution | Solves the problem | Note |
---|---|---|---|
9 | The time denominators (12 hours, 24 hours) of slow release drugs become part of the dose form | quantity definition | In contrast to drug pumps, the release time of slow release formulations is not linear and can therefore not be treated like divisible amounts of drug. For example, 24 HR gabapentin 300 MG Extended Release Tablet will change to âgabapentin 300 MG 24-HR Extended Release Tabletâ. |
10 | All liquid Quantified classes are destandardized and mapped over to their Clinical or Branded counterpart | quantity definition | This will remove the denominator value from DRUG_STRENGTH and put it into the quantity field, unless it is overwritten with better information from the soure. For example, Quant Branded Drug 1.6 ML Filgrastim 0.3 MG/ML Injectable Solution [Neupogen] will be mapped to Branded Drug filgrastim 0.3 MG/ML Injection [Neupogen], and Quantified Branded Box 1.6 ML Filgrastim 0.3 MG/ML Injection [Neupogen] Box of 20 goes to Branded Drug Box Filgrastim 0.3 MG/ML Injection [Neupogen] Box of 20. This change is desirable, since it will make the drug hierarchy much more concise, but at the end of the day this change is optional. |
11 | Add Drug Form records to DRUG_STRENGTH | drug_strength definition | Currently, we have records for all drug concept classes except Clinical/Branded Drug Form. But these should be treated like ingredients, providing themar unit of the ingredient (mostly mg, sometimes mL or more exotic units). |
Open issues
There are a number of additional issues, the solution for which we could decide to adopt or leave alone:
- Right now, we have quantity (maybe renamed total_amount) and sig_amount. Alternatively, we could name them exposure_amount and daily_amount.
- With the above definitions for quantity (maybe renamed total_amount), it still can mean 3 different things. We could decide to not overload it by splitting it up into _of_doseform, _of_denominator and _of_ingredient. Same thing for sig_amount. Doing so we avoid the ugly âcase when thenâ clauses, but we would add six new fields.
- We might have simplified sig_amount too much. âTwo tablespoons twice a dayâ indeed is 4 tablespoons a day, but we are throwing away the fact that it is 2*2. How much do we care about that?
- What do we do with Packs? Contraceptives have packs with 21 products, 7 containing estrogen and 14 with progesterone. Now what?
- When we resolve the sig, what do we do with âas neededâ? Similarly, do we need to encode âup toâ?
- We also need to solve the problems of drug pumps, and we have a proposal, but letâs table that for now.
- We also need to solve the problem for the exotic drugs, but letâs table that for now.
This would be a big surgery indeed, but we believe if we get that right we solved the problem, and we will be the only global initiative to achieve that.
What do you think? Anything we forgot? Anything that wonât work?