This is about how medications are identified in Medication, MedicationRequest, MedicationAdministration, MedicationDispense, MedicationStatement, about whether extensions are needed.
Table of different combinations of brand and generic name in descriptions of a medication.
I assume that when a system is creating one of the FHIR medication resources the source system will have zero, one or two text strings or code values to identify the medication. For example a brand name code and a generic name code.
This table lists the options around whether the information is in text or code, whether it is flagged as for a generic or branded item, and whether zero, one or two items (text strings or codes) are provided. It then provides mappings to the HL7 AU Medication profile for the combinations that have been identified as being used. Combinations not identified as used are coded with reasons for not being used.
How to read Source system columns
Case #2 says that one item for medication from the source system is uncoded text marked as being a brand name
Case #7 says that one item for medication from the source system is a code with no information about being a brand or generic name
Case #17 says that one item for medication from the source system is uncoded text marked as being a generic name and a second item is a code marked as being a brand name
Policy
Do not use an extension (such as medication-brand-name) when a core element (such as code.text) is suitable.
Assumptions
- Some source systems can distinguish brand from generic, but are too coarse to use the values in medication-type
- Alternate values of CodeableConcept.coding are meant to be alternate codes for the same thing, not represent a classification hierarchy for that thing. The part of the classification hierarchy relevant to the medication needs to be recorded in a different element.
Key
Values used in the columns item 1 and item 2
- bn = the item is marked as a brand name
- gn = the item is marked as a generic name
- ni = no information about whether the item is a brand or generic name
- NA = not applicable
Values in the used column
- yes = is used
- no = is not used
- NA = not applicable
- ? = unknown whether used
Values in the reason not used column, and row colours
| 1 | unused as cannot give two texts for the same class of medication |
| 2 | unused as cannot give an item of unknown type with another item |
| 3 | unused as cannot give two codes for the same type of medication |
| 4 | duplicate row - this combination is described in another row |
New extensions
- code.med-item-type - like existing medication-type extension with the available values being "branded" and "unbranded". Allows suitably grained classification.
- relevant-generic-medication-item - semantics: a relevant unbranded medication item for the branded item, same structure as code with extension for code.med-item-type
| Source system | FHIR mapping - existing profile | FHIR mapping - proposed profile | |||||||
|---|---|---|---|---|---|---|---|---|---|
| case # | item 1 | item 2 | used | reason not used | item 1 | item 2 | item 1 | item 2 | mapping assumptions |
| 1 | - | - | ? | ? | NA | NA | NA | NA | |
| 2 | text, bn | - | yes | NA | code.text | NA | code.text | NA | |
| 3 | text, gn | - | yes | NA | code.text | NA | code.text code.med-item-type | NA | |
| 4 | text, ni | - | yes | NA | code.text | NA | code.text | NA | |
| 5 | code, bn | - | yes | NA | code.coding.code code.coding.medication-type | NA | code.coding.code code.coding.medication-type | NA | |
| 6 | code, gn | - | yes | NA | code.coding.code code.coding.medication-type | NA | code.coding.code code.coding.medication-type | NA | |
| 7 | code, ni | - | yes | NA | code.coding.code | NA | code.coding.code | NA | |
| 8 | text, bn | text, bn | no | 1 | |||||
| 9 | text, bn | text, gn | yes | NA | code.text | code.text code.med-item-type | relevant-generic-medication-item | ||
| 10 | text, bn | text, ni | no | 2 | |||||
| 11 | text, bn | code, bn | yes | NA | code.text | code.coding.code code.coding.medication-type | code.text | code.coding.code code.coding.medication-type | |
| 12 | text, bn | code, gn | ? | ? | code.coding.code | relevant-generic-medication-item | code.coding.code | ||
| 13 | text, bn | code, ni | no | 2 | |||||
| 14 | text, gn | text, bn | NA | 4 | |||||
| 15 | text, gn | text, gn | no | 1 | |||||
| 16 | text, gn | text, ni | no | 2 | |||||
| 17 | text, gn | code, bn | yes | NA | code.coding.code code.coding.medication-type | relevant-generic-medication-item | code.coding.code code.coding.medication-type | ||
| 18 | text, gn | code, gn | yes | NA | code.text | code.coding.code code.coding.medication-type | code.text | code.coding.code code.coding.medication-type | |
| 19 | text, gn | code, ni | no | 2 | |||||
| 20 | text, ni | text, bn | NA | 4 | |||||
| 21 | text, ni | text, gn | NA | 4 | |||||
| 22 | text, ni | text, ni | no | 2 | |||||
| 23 | text, ni | code, bn | no | 2 | |||||
| 24 | text, ni | code, gn | no | 2 | |||||
| 25 | text, ni | code, ni | no | 2 | possibly one is brand and one is generic | ||||
| 26 | code, bn | text, bn | NA | 4 | |||||
| 27 | code, bn | text, gn | NA | 4 | |||||
| 28 | code, bn | text, ni | NA | 4 | |||||
| 29 | code, bn | code, bn | no | 3 | |||||
| 30 | code, bn | code, gn | yes | NA | code.coding.code code.coding.medication-type | code.coding.code | code.coding.code code.coding.medication-type | relevant-generic-medication-item | existing profile misuses alternate values in coding |
| 31 | code, bn | code, ni | no | 2 | |||||
| 32 | code, gn | text, bn | NA | 4 | |||||
| 33 | code, gn | text, gn | NA | 4 | |||||
| 34 | code, gn | text, ni | NA | 4 | |||||
| 35 | code, gn | code, bn | NA | 4 | |||||
| 36 | code, gn | code, gn | no | 3 | |||||
| 37 | code, gn | code, ni | no | 2 | |||||
| 38 | code, ni | text, bn | NA | 4 | |||||
| 39 | code, ni | text, gn | NA | 4 | |||||
| 40 | code, ni | text, ni | NA | 4 | |||||
| 41 | code, ni | code, bn | NA | 4 | |||||
| 42 | code, ni | code, gn | NA | 4 | |||||
| 43 | code, ni | code, ni | no | 2 | code.coding.code | code.coding.code | code.coding.code | code.coding.code | |
Comments:
|
For these cases, what about https://www.hl7.org/fhir/medication-definitions.html#Medication.isBrand - should that be set? I assume that code, bn means a branded medication code for something like "Panadol 500 mg tablet", as opposed to a code for the brand "Panadol"? The latter is where I think the medication-brand-name extension should be a CodeableConcept rather than String, so that if someone has a code like "Panadol" they can say that. I also find the idea of code.text being set without at least one coding kind of strange in the context of the code for the Medication resource. For example cases 2, 3 and 4 - how would this differ from the resource text? What would it mean to have different resource text and code.text values for the same Medication resource? I also wonder if you really need a medication-type extension on Medication at the base - i.e. what kind of thing is this Medication resource identifying. You could attempt to imply that by picking the "lowest" level medication-type code from all the codings...but there may not be a coding available for the "level" that this Medication resource represents, just one or more codes representing more general levels. Not sure if that is useful, but it occurred to me as I read this. |
|
After a conversation with Dion I think that my analysis works for medicationCodeableConcept in the medication resources other than Medication itself and the vaccination resources. In those resources the medications is identified, in Medication the medication is described. Consequently I've revised the introduction and title of this page. |
|
I realised that my previous design
So I added a new pair of columns. |