MedicationAdministration
→
drug_exposure
documented
primary
Inpatient medication administration events. Each MedicationAdministration produces one drug_exposure row distinguished by drug_type_concept_id = 38000179 (Physician administered drug). MedicationAdministration carries the richest route and dose-event timing information of the four medication resources.
Conversion profile
omop-medication-administration-drug-exposure
A FHIR instance converts to drug_exposure iff it validates against this profile.
| Path | Card | Type | Binding / Fixed | Comment |
|---|---|---|---|---|
| MedicationAdministration.status | 1..*MS | fhir/medication-admin-statusrequired | ||
| MedicationAdministration.medication[x] | 1..*MS | CodeableConcept | omop-drug-codesrequired | |
| MedicationAdministration.subject | 1..1 | Reference | Required for drug_exposure.person_id. | |
| MedicationAdministration.effective[x] | 1..1MS | Required for drug_exposure.drug_exposure_start_date / _end_date. May be dateTime or Period. |
ViewDefinition (Stage 1 flattener)
omop-medicationadministration-drug-exposure
18 columns · resource MedicationAdministration
| column name | FHIRPath | type |
|---|---|---|
| id | MedicationAdministration.id | id |
| drug_rxnorm | MedicationAdministration.medicationCodeableConcept.coding.where(system='http://www.nlm.nih.gov/research/umls/rxnorm').first().code | code |
| drug_ndc | MedicationAdministration.medicationCodeableConcept.coding.where(system='http://hl7.org/fhir/sid/ndc').first().code | code |
| drug_atc | MedicationAdministration.medicationCodeableConcept.coding.where(system='http://www.whocc.no/atc').first().code | code |
| drug_snomed | MedicationAdministration.medicationCodeableConcept.coding.where(system='http://snomed.info/sct').first().code | code |
| drug_text | MedicationAdministration.medicationCodeableConcept.text | string |
| subject_id | MedicationAdministration.subject | Reference(Patient) |
| drug_exposure_start_date | MedicationAdministration.effectiveDateTime | dateTime |
| drug_exposure_start_datetime | MedicationAdministration.effectiveDateTime | dateTime |
| drug_exposure_end_date | MedicationAdministration.effectivePeriod.end | dateTime |
| drug_exposure_end_datetime | MedicationAdministration.effectivePeriod.end | dateTime |
| quantity | MedicationAdministration.dosage.dose.value | decimal |
| sig | MedicationAdministration.dosage.text | string |
| route | MedicationAdministration.dosage.route | CodeableConcept |
| route_text | MedicationAdministration.dosage.route.text | string |
| performer_id | MedicationAdministration.performer[0].actor | Reference(Practitioner) |
| encounter_id | MedicationAdministration.context | Reference(Encounter) |
| dose_unit_text | MedicationAdministration.dosage.dose.unit | string |
Fields (23)
-
drug_exposure_id←MedicationAdministration.idinteger · idPKrequiredSurrogate key. Generated deterministically from MedicationAdministration.id. -
person_id←MedicationAdministration.subjectinteger · Reference(Patient)FK→PERSONrequiredResolved from subject reference to Patient. -
drug_concept_id←MedicationAdministration.medication[x]integer · CodeableConcept/Reference(Medication)FK→CONCEPTrequiredRxNorm / ATC / NDC mapped to OMOP standard concept. medicationCodeableConcept resolved inline; medicationReference resolved via Medication resource lookup. Placeholder: 0 when concept lookup unavailable.2 sources ▾
-
ETL-German pre-indexes Medication resources via medication_id_map, then extracts ATC code for EU data
- ETL-German-FHIR-Core(java) refs/refs/ETL-German-FHIR-Core/src/main/java/org/miracum/etl/fhirtoomop/mapper/MedicationMapper.java — 274 lines — ATC code extraction and concept lookup
- ETL-German-FHIR-Core(java) refs/refs/ETL-German-FHIR-Core/src/main/java/org/miracum/etl/fhirtoomop/mapper/MedicationAdministrationMapper.java — Resolves references via pre-indexed medication_id_map
-
fhir-to-omop-demo processes inline medicationCodeableConcept only; medicationReference requires external merge phase not implemented for MedicationAdministration
- fhir-to-omop-demo(jq) refs/refs/fhir-to-omop-demo/demo/translate/map/MedicationAdministration.jq — 59 lines
-
-
drug_exposure_start_date←MedicationAdministration.effectiveDateTime | MedicationAdministration.effectivePeriod.startdate · dateTimerequiredPoint-in-time (effectiveDateTime) or period start. Resource skipped if neither is available. -
drug_exposure_start_datetime←MedicationAdministration.effectiveDateTime | MedicationAdministration.effectivePeriod.startdatetime · dateTimeFull ISO datetime. -
drug_exposure_end_date←MedicationAdministration.effectivePeriod.enddate · dateTimerequiredtransform:effectivePeriod.end ?? drug_exposure_start_dateWhen effectiveDateTime is used (single point), end = start. When effectivePeriod has no end, end = start. omoponfhir general rule: setDrugExposureEndDate(startDate) when no period end.1 source ▾
-
omoponfhir, ETL-German, and fhir-to-omop-demo all set end = start when effectiveDateTime (point in time) is used or period has no end
- ETL-German-FHIR-Core(java) refs/refs/ETL-German-FHIR-Core/src/main/java/org/miracum/etl/fhirtoomop/mapper/MedicationAdministrationMapper.java — Copies start date when no period end available
- fhir-to-omop-demo(jq) refs/refs/fhir-to-omop-demo/demo/translate/map/MedicationAdministration.jq — 59 lines
-
-
drug_exposure_end_datetime←MedicationAdministration.effectivePeriod.enddatetime · dateTimeFull ISO datetime. Null if no period end. -
verbatim_end_date← — dateMost implementations leave null. No direct FHIR source for MedicationAdministration. -
drug_type_concept_id← constant integerFK→CONCEPTrequiredmap:drug_type=3800017938000179 = 'Physician administered drug (identified as procedure)'. fhir-to-omop-demo uses 32818 (EHR administration record). FhirToCdm/ETL-German use 32817 (EHR/CLAIM).3 sources ▾
-
This project and consensus use 38000179 (Physician administered drug) as the most semantically precise type for MedicationAdministration
-
fhir-to-omop-demo uses 32818 (EHR administration record) — a more generic EHR-record type
- fhir-to-omop-demo(jq) refs/refs/fhir-to-omop-demo/demo/translate/map/MedicationAdministration.jq:39-39 — drug_type_concept_id = 32818 at line 39
-
FhirToCdm and ETL-German use 32817 (EHR/CLAIM) universally across all medication resource types
- ETL-German-FHIR-Core(java) refs/refs/ETL-German-FHIR-Core/src/main/java/org/miracum/etl/fhirtoomop/mapper/MedicationAdministrationMapper.java — Uses CONCEPT_CLAIM (32817) for all medication resources
-
-
stop_reason← — varchar(20)MedicationAdministration does not commonly carry a discontinuation reason. Leave null. -
refills← — integerNot applicable. Refills are MedicationRequest-only. Leave null. -
quantity←MedicationAdministration.dosage.dose.valuefloat · decimalDose amount given. ETL-German computes mean of Range when doseRange is used.2 sources ▾
-
ETL-German computes the arithmetic mean of doseRange.low and doseRange.high when a Range is used instead of a Quantity; other implementations leave quantity null in that case
- ETL-German-FHIR-Core(java) refs/refs/ETL-German-FHIR-Core/src/main/java/org/miracum/etl/fhirtoomop/mapper/MedicationAdministrationMapper.java — doseRange mean computation
-
fhir-to-omop-demo reads dosage.dose.value directly with no Range handling
- fhir-to-omop-demo(jq) refs/refs/fhir-to-omop-demo/demo/translate/map/MedicationAdministration.jq — 59 lines
-
-
days_supply← — integerNot applicable to a single administration event. Leave null. -
sig←MedicationAdministration.dosage.textvarchar(MAX) · stringFree-text dosage instructions. -
route_concept_id←MedicationAdministration.dosage.routeinteger · CodeableConceptFK→CONCEPTmap:routeAdministration route via SNOMED to OMOP Route domain lookup. MedicationAdministration carries the richest route data of the four medication resources. -
route_source_value←MedicationAdministration.dosage.route.text | MedicationAdministration.dosage.route.coding[0].displayvarchar(50) · stringRaw route text or first coding display. -
lot_number← — varchar(50)Vaccine-only field; not used for MedicationAdministration. -
provider_id←MedicationAdministration.performer[0].actorinteger · Reference(Practitioner)FK→PROVIDERAdministering clinician. First performer entry. -
visit_occurrence_id←MedicationAdministration.contextinteger · Reference(Encounter)FK→VISIT_OCCURRENCEResolved from context reference to Encounter. -
visit_detail_id← — integerFK→VISIT_DETAILNot mapped. FhirToCdm sets it equal to visit_occurrence_id (non-standard).1 source ▾
-
Most implementations leave null; FhirToCdm non-standardly copies visit_occurrence_id here
- ETL-German-FHIR-Core(java) refs/refs/ETL-German-FHIR-Core/src/main/java/org/miracum/etl/fhirtoomop/mapper/MedicationAdministrationMapper.java — Leaves visit_detail_id null
-
-
drug_source_value←MedicationAdministration.medication[x].coding[best].codevarchar(50) · codeBest code by vocabulary priority (RxNorm > ATC > NDC > first). ETL-German uses ATC code.2 sources ▾
-
ETL-German specifically picks the ATC coding for European data
- ETL-German-FHIR-Core(java) refs/refs/ETL-German-FHIR-Core/src/main/java/org/miracum/etl/fhirtoomop/mapper/MedicationAdministrationMapper.java — ATC vocabulary used for drug_source_value
-
fhir-to-omop-demo selects best coding by vocabulary priority (RxNorm > ATC > NDC > first)
- fhir-to-omop-demo(jq) refs/refs/fhir-to-omop-demo/demo/translate/map/MedicationAdministration.jq — 59 lines
-
-
drug_source_concept_id←MedicationAdministration.medication[x]integer · CodeableConceptFK→CONCEPT=0Source vocabulary concept. Placeholder: 0. fhir-to-omop-demo uses pre-computed source_concept_id.2 sources ▾
-
fhir-to-omop-demo pre-computes source_concept_id via vocabulary lookup rather than defaulting to 0
- fhir-to-omop-demo(jq) refs/refs/fhir-to-omop-demo/demo/translate/map/MedicationAdministration.jq — 59 lines — pre-computed vocabulary concept
-
ETL-German and most other implementations leave this as 0 placeholder
- ETL-German-FHIR-Core(java) refs/refs/ETL-German-FHIR-Core/src/main/java/org/miracum/etl/fhirtoomop/mapper/MedicationAdministrationMapper.java — Defaults to 0
-
-
dose_unit_source_value←MedicationAdministration.dosage.dose.unit | MedicationAdministration.dosage.dose.codevarchar(50) · stringRaw dose unit string from dosage.dose.
Vocabularies
drug_type
| Source | Display | Concept ID | Concept Name |
|---|---|---|---|
| MedicationAdministration | Physician administered drug | 38000179 | Physician administered drug (identified as procedure) |
| MedicationAdministration (alt: fhir-to-omop-demo) | EHR administration record | 32818 | EHR administration record |
| MedicationAdministration (alt: FhirToCdm/ETL-German) | EHR | 32817 | EHR |
route
| Source | Display | Concept ID | Concept Name |
|---|---|---|---|
| 26643006 | Oral route | 4132161 | Oral |
| 47625008 | Intravenous route | 4171047 | Intravenous |
| 78421000 | Intramuscular route | 4302612 | Intramuscular |
| 34206005 | Subcutaneous route | 4142048 | Subcutaneous |
| 46713006 | Nasal route | 4262099 | Nasal |
| 6064005 | Topical route | 4263689 | Topical |
| 37161004 | Rectal route | 4115462 | Rectal |
| 45890007 | Transdermal route | 4262914 | Transdermal |
Edge Cases
status = entered-in-error
Skip -- do not create drug_exposure row.
status = not-done
Skip -- medication was not administered.
status = stopped
Implementation-dependent. ETL-German maps; this project would skip.
effectiveDateTime (point in time)
Start and end date are the same. omoponfhir general rule: setDrugExposureStartDate(date); setDrugExposureEndDate(date).
effectivePeriod with start but no end
End date = start date.
dosage absent
Leave quantity, route_concept_id, route_source_value, dose_unit_source_value, sig all null.
doseRange (Range instead of Quantity)
ETL-German computes the mean of low and high. Others leave quantity null.
Multiple codings in medication[x]
Best by vocabulary priority (RxNorm > ATC > NDC > first).
No medication code found
Skip -- consensus across implementations.
Reference Implementations
- ETL-German-FHIR-Core(java) refs/refs/ETL-German-FHIR-Core/src/main/java/org/miracum/etl/fhirtoomop/mapper/MedicationAdministrationMapper.java — ATC vocabulary, dose form and route mapping, Range mean quantity, fan-out per dosage entry. Pre-indexes Medication resources via medication_id_map.
- fhir-to-omop-demo(jq) refs/refs/fhir-to-omop-demo/demo/translate/map/MedicationAdministration.jq — 59 lines. drug_type_concept_id = 32818 (EHR administration record).