This page is part of the CDISC Mapping FHIR IG (v0.1.0: STU 1 Ballot 1) based on FHIR R4. The current version which supercedes this version is 1.0.0. For a full list of available versions, see the Directory of published versions
The fact a patient is taking or has been exposed to a medication can be expressed in a number of ways in FHIR, with some conveying a greater degree of certainty and/or detail about exactly what was taken and when. Mappings are provided for all of these resources.
Note that the same resources are used when dealing with study drugs as with concomitant drugs, so when converting data from FHIR, data will need to be filtered to differentiate between the two.
Guidance on interpreting the table can be found here.
CDISC | FHIR map (or gap) | Comment | |||
---|---|---|---|---|---|
Name | CDASH | SDTM | Element | FHIRPath | |
Study Identifier | STUDYID | STUDYID | ResearchStudy.identifier |
ResearchSubject.where(subject=(MedicationStatement.subject|MedicationRequest.subject|MedicationDispense.subject|MedicationAdministration.subject|Immunizations.patient)).study.resolve().partOf.resolve().identifier.value MedicationStatement.extension(workflow-researchstudy).valueReference.resolve().partOf.resolve().identifier.value MedicationRequest.extension(workflow-researchstudy).valueReference.resolve().partOf.resolve().identifier.value MedicationDispense.extension(workflow-researchstudy).valueReference.resolve().partOf.resolve().identifier.value MedicationAdministration.extension(workflow-researchstudy).valueReference.resolve().partOf.resolve().identifier.value Immunization.extension(workflow-researchstudy).valueReference.resolve().partOf.resolve().identifier.value |
Mapping is based on presumption that research subject will be tied to site-specific ResearchStudy, which will then be part of overall ResearchStudy. The path using the extension will only exist if the system maintaining the MedicationStatement/Request/Dispense/Administration or Immunization is aware of its relevance to the Study. |
Study Site Identifier | SITEID | DM.SITEID | ResearchStudy.site |
ResearchSubject.where(subject=(MedicationStatement.subject|MedicationRequest.subject|MedicationDispense.subject|MedicationAdministration.subject|Immunizations.patient)).study.resolve().identifier.value MedicationStatement.extension(workflow-researchstudy).valueReference.resolve().identifier.value MedicationRequest.extension(workflow-researchstudy).valueReference.resolve().identifier.value MedicationDispense.extension(workflow-researchstudy).valueReference.resolve().identifier.value MedicationAdministration.extension(workflow-researchstudy).valueReference.resolve().identifier.value Immunization.extension(workflow-researchstudy).valueReference.resolve().identifier.value |
Mapping is based on presumption that research subject will be tied to site-specific ResearchStudy, which will then be part of overall ResearchStudy. The path using the extension will only exist if the system maintaining the MedicationStatement/Request/Dispense/Administration or Immunization is aware of its relevance to the Study. |
Subject Identifier for the Study | SUBJID | DM.SUBJID | ResearchSubject.identifier |
ResearchSubject.where(individual=(MedicationStatement.subject|MedicationRequest.subject|MedicationDispense.subject|MedicationAdministration.subject|Immunizations.patient).identifier.value |
Study subject is found by finding the StudySubject that corresponds to the same Patient and ResearchStudy as the focal resource. No standard way to decide which subject identifier to use |
Category for Medication | CMCAT | CMCAT | MedicationStatement.category |
MedicationStatement.category |
In FHIR, an medication can be categorized in multiple ways and to the granularity desired. When converting from FHIR to CDASH, systems will need to look at the FHIR categories (and potentially other information) to determine how best to populate CMCAT and CMSCAT based on the study-designed categories (unless they've pre-arranged with the EHR to ensure it captures the same codes) |
MedicationRequest.category |
MedicationRequest.category |
||||
MedicationDispense.category |
MedicationDispense.category |
||||
MedicationAdministration.category |
MedicationAdministration.category |
||||
Subcategory for Medication | CMSCAT | CMSCAT | MedicationStatement.category |
MedicationStatement.category |
In FHIR, an medication can be categorized in multiple ways and to the granularity desired. When converting from FHIR to CDASH, systems will need to look at the FHIR categories (and potentially other information) to determine how best to populate CMCAT and CMSCAT based on the study-designed categories (unless they've pre-arranged with the EHR to ensure it captures the same codes) |
MedicationRequest.category |
MedicationRequest.category |
||||
MedicationDispense.category |
MedicationDispense.category |
||||
MedicationAdministration.category |
MedicationAdministration.category |
||||
Any Concomitant Medications Taken | CMYN | This would be determined by dates within the protocol. What constitutes a 'concomitant' drug is study-specific and would need to be evaluated on a study level. FHIR would not normally store that information. However an extension on ResearchSubject could be utilized or could be captured in a Questionnaire. |
|||
CM Sponsor-Defined Identifier | CMSPID | CMSPID | MedicationStatement.identifier |
MedicationStatement.identifier |
|
MedicationRequest.identifier |
MedicationRequest.identifier |
||||
MedicationDispense.identifier |
MedicationDispense.identifier |
||||
MedicationAdministration.identifier |
MedicationAdministration.identifier |
||||
Immunization.identifier |
Immunization.identifier |
||||
Reported Name of Drug, Med, or Therapy | CMTRT | CMTRT | MedicationStatement.medicationCodeableconcept |
MedicationStatement.medication.medicationCodeableConcept |
|
MedicationStatement.medicationReference |
MedicationStatement.medication.medicationReference.resolve().code |
||||
MedicationRequest.medicationCodeableConcept |
MedicationRequest.medication.medicationCodeableConcept |
||||
MedicationRequest.medicationReference |
MedicationRequest.medication.medicationReference.resolve().code |
||||
MedicationDispense.medicationCodeableConcept |
MedicationDispense.medication.medicationCodeableConcept |
||||
MedicationDispense.medicationReference |
MedicationDispense.medication.medicationReference.resolve().code |
||||
MedicationAdministration.medicationCodeableConcept |
MedicationAdministration.medication.medicationCodeableConcept |
||||
MedicationAdministration.medicationReference |
MedicationAdministration.medication.medicationReference.resolve().code |
||||
Immunization.vaccineCode |
Immunization.vaccineCode |
||||
CM Pre-Specified | CMPRESP | CMPRESP | Would not expect to receive from the site. | ||
CM Occurrence | CMOCCUR | CMOCCUR | MedicationStatement.status |
MedicationStatement.status |
In general, medication records won't exist unless the patient is taking the medication, though there is an ability to say a medication isn't currently being taken or shouldn't be taken |
MedicationRequest.doNotPerform |
MedicationRequest.doNotPerform=true |
||||
MedicationRequest.status |
MedicationRequest.status IN {'entered-in-error'|'cancelled'|'stopped'} |
||||
MedicationDispense.status |
MedicationRequest.status IN {entered-in-error'|'cancelled'|'stopped'} |
||||
MedicationAdministration.status |
MedicationAdministration.status |
||||
Immunization.status |
Immunization.status IN {'completed'|'entered-in-error'} |
||||
Concomitant Meds Active Ingredients | CMINGRD | Medication.ingredient |
MedicationStatement.medicationReference.resolve().ingredient.where(isActive) |
||
Medication.ingredient |
MedicationRequest.medicationReference.resolve().ingredient.where(isActive) |
||||
Medication.ingredient |
MedicationDispense.medicationReference.resolve().ingredient.where(isActive) |
||||
Medication.ingredient |
MedicationAdministration.medicationReference.resolve().ingredient.where(isActive) |
||||
Immunization.ingredient |
Immunization.medicationReference.resolve().ingredient.where(isActive) |
||||
CM Indication | CMINDC | CMINDC | MedicationStatement.reasonCode |
MedicationStatement.reasonCode |
|
MedicationRequest.reasonCode |
MedicationRequest.reasonCode |
||||
MedicationAdministration.reasonCode |
MedicationAdministration.reasonCode |
||||
Immunization.reasonCode |
Immunization.reasonCode |
||||
Related AdverseEvent ID | CMAENO | AdverseEvent.identifier |
AdverseEvent.where(suspectEntity.instanceReference=MedicationX).identifier |
This could match on AdverseEvent by code. (Note that the AdverseEvent points to the medication record, not the reverse | |
Related Medical History Event ID | CMMHNO | Condition.identifier |
MedicationStatement.reasonReference.resolve().identifier |
||
Condition.identifier |
MedicationRequest.reasonReference.resolve().identifier |
||||
Condition.identifier |
MedicationAdministration.reasonReference.resolve().identifier |
||||
Immunization.identifier |
Immunization.reasonReference.resolve().identifier |
||||
CM Dose per Administration | CMDOSE | CMDOSE | MedicationStatement.dosage |
MedicationStatement.dosage.doseAndRate.doseQuantity |
|
MedicationRequest.dosageInstruction |
MedicationRequest.dosageInstruction.doseAndRate.doseQuantity |
||||
MedicationDispense.dosageInstruction |
MedicationDispense.dosageInstruction.doseAndRate.doseQuantity |
||||
MedicationAdministration.dosage.dose |
MedicationAdministration.dosage.dose |
||||
Immunization.doesQuantity |
Immunization.doseQuantity |
||||
Concomitant Meds Dose Description | CMDSTXT | CMDOSTXT; CMDOSE | MedicationStatement.dosage |
MedicationStatement.dosage.text |
Requires combining multiple repetitions together |
MedicationRequest.dosageInstruction |
MedicationRequest.dosageInstruction.text |
||||
MedicationDispense.dosageInstruction |
MedicationDispense.dosageInstruction.text |
||||
MedicationAdministration.dosage.text |
MedicationAdministration.dosage.text |
||||
CM Total Daily Dose | CMDOSTOT | CMDOSTOT | MedicationStatement.dosage.maxDosePerPeriod |
MedicationStatement.dosage.maxDosePerPeriod |
If Total Daily Dose is required by the sponsor, it may require collection of the drug dose and frequency to derive the CM Total Daily Dose. |
MedicationRequest.dosage.maxDosePerPeriod |
MedicationRequest.dosageInstruction.dosage.maxDosePerPeriod |
||||
MedicationDispense.dosage.maxDosePerPeriod |
MedicationDispense.dosageInstruction.dosage.maxDosePerPeriod |
||||
Immunization.doseQuantity |
Immunization.doseQuantity |
||||
CM Dose Units | CMDOSU | CMDOSU | MedicationStatement.dosage.maxDosePerPeriod |
MedicationStatement.dosage.maxDosePerPeriod.code |
|
MedicationRequest.dosage.maxDosePerPeriod |
MedicationRequest.dosage.maxDosePerPeriod.code |
||||
MedicationDispense.dosage.maxDosePerPeriod |
MedicationDispense.dosage.maxDosePerPeriod.code |
||||
CM Dose Form | CMDOSFRM | CMDOSFRM | Medication.form |
MedicationStatement.medicationReference.resolve().form |
|
Medication.form |
MedicationRequest.medicationReference.resolve().form |
||||
Medication.form |
MedicationDispense.medicationReference.resolve().form |
||||
CM Dosing Frequency per Interval | CMDOSFRQ | CMDOSFRQ | MedicationStatement.dosage |
MedicationStatement.dosage.timing.frequency |
|
MedicationRequest.dosageInstruction |
MedicationRequest.dosageInstruction.timing.frequencey |
||||
MedicationDispense.dosageInstruction |
MedicationDispense.dosageInstruction.timing.frequency |
||||
CM Route of Administration | CMROUTE | CMROUTE | MedicationStatement.dosage |
MedicationStatement.dosage.route |
|
MedicationRequest.dosageInstruction |
MedicationRequest.dosageInstruction.route |
||||
MedicationDispense.dosageInstruction |
MedicationDispense.dosageInstruction.route |
||||
MedicationAdministration.dosage.route |
MedicationAdministration.dosage.route |
||||
Immunization.route |
Immunization.route |
||||
Concomitant Meds Start Date | CMSTDTC | CMSTDTC | MedicationStatement.effectiveDateTime |
MedicationStatement.effectiveDateTime |
start includes both date and time, though time commonly won't be specified |
MedicationStatement.effectivePeriod |
MedicationStatement.effectivePeriod.start |
||||
MedicationRequest.dosageInstruction.timing |
MedicationRequest.dosageInstruction.timing.repeat.boundsPeriod.start |
||||
MedicationDispense.dosageInstruction.timing |
MedicationDispense.dosageInstruction.timing.repeat.boundsPeriod.start |
||||
Immunization.occurrenceDateTime |
Immunization.occurrence.occurrenceDateTime |
||||
Immunization.occurrenceString |
Immunization.occurrence.orrurrenceString |
||||
Concomitant Meds Start Time | CMSTDTC | CMSTDTC | MedicationStatement.effectiveDateTime |
MedicationStatement.effectiveDateTime |
start includes both date and time, though time commonly won't be specified |
MedicationStatement.effectivePeriod |
MedicationStatement.effectivePeriod.start |
||||
MedicationRequest.dosageInstruction |
MedicationRequest.dosageInstruction.timing.repeat.boundsPeriod.start |
||||
MedicationDispense.dosage.instruction |
MedicationDispense.dosageInstruction.timing.repeat.boundsPeriod.start |
||||
Immunization.occurrenceDateTime |
Immunization.occurrence.occurrenceDateTime |
||||
Immunization.occurrenceString |
Immunization.occurrence.orrurrenceString |
||||
Concomitant Meds End Date | CMSTDTC | CMSTDTC | MedicationStatement.effectiveDateTime |
MedicationStatement.effectiveDateTime |
end includes both date and time, though time commonly won't be specified |
MedicationStatement.effectivePeriod |
MedicationStatement.effectivePeriod.end |
||||
MedicationRequest.dosageInstruction |
MedicationRequest.dosageInstruction.timing.repeat.boundsPeriod.end |
||||
MedicationDispense.dosage.instruction |
MedicationDispense.dosageInstruction.timing.repeat.boundsPeriod.end |
||||
Immunization.occurrence |
Immunization.occurrence.occurrenceDateTime Immunization.occurrence.orrurrenceString |
||||
Concomitant Meds End Time | CMENDTC | CMENDTC | MedicationStatement.effectiveDateTime |
MedicationStatement.effectiveDateTime |
end includes both date and time, though time commonly won't be specified |
MedicationStatement.effectivePeriod |
MedicationStatement.effectivePeriod.end |
||||
MedicationRequest.dosageInstruction |
MedicationRequest.dosageInstruction.timing.repeat.boundsPeriod.end |
||||
MedicationDispense.dosageInstruction |
MedicationDispense.dosageInstruction.timing.repeat.boundsPeriod.end |
||||
Immunization.occurrence |
Immunization.occurrence.occurrenceDateTime Immunization.occurrence.orrurrenceString |
||||
Prior Concomitant Medications | CMPRIOR | CMSTRF; CMSTRTPT | This would need to be an extension added to the study extension on the medication resource - normally it is not captured except in the context of a study (and would be a study-specific assertion) | ||
Ongoing Concomitant Medications | CMONGO | CMENRF; CMENRTPT | This would need to be an extension added to the study extension on the medication resource - normally it is not captured except in the context of a study (and would be a study-specific assertion) | ||
Standardized Medication Name | CMDECOD | CMDECOD | MedicationStatement.medicationCodeableConcept |
MedicationStatement.medicationCodeableConcept MedicationStatement.medicationReference.resolve().code |
We would not expect to receive these from the site. |
Medication.code |
MedicationStatement.medicationCodeableConcept MedicationStatement.medicationReference.resolve().code |
||||
MedicationRequest.medicationCodeableConcept |
MedicationRequest.medicationCodeableConcept MedicationRequest.medicationReference.resolve().code |
||||
Medication.code |
MedicationRequest.medicationCodeableConcept MedicationRequest.medicationReference.resolve().code |
||||
MedicationDispense.medicationCodeableConcept |
MedicationDispense.medicationCodeableConcept MedicationDispense.medicationReference.resolve().code |
||||
Medication.code |
MedicationDispense.medicationCodeableConcept MedicationDispense.medicationReference.resolve().code |
||||
MedicationAdministration.medicationCodeableConcept |
MedicationAdministration.medicationCodeableConcept MedicationAdministration.medicationReference.resolve().code |
||||
Medication.code |
MedicationAdministration.medicationCodeableConcept MedicationAdministration.medicationReference.resolve().code |
||||
Immunization.vaccineCode |
Immunization.vaccineCode |
||||
CM Medication Class | CMCLAS | CMCLAS | MedicationStatement.medicationCodeableConcept |
MedicationStatement.medicationCodeableConcept MedicationStatement.medicationReference.resolve().code |
These *can* be provided as alternate codings, however typically encoding is performed by the sponsor and we would not expect to receive these from the site. |
Medication.code |
MedicationStatement.medicationCodeableConcept MedicationStatement.medicationReference.resolve().code |
||||
MedicationRequest.medicationCodeableConcept |
MedicationRequest.medicationCodeableConcept MedicationRequest.medicationReference.resolve().code |
||||
Medication.code |
MedicationRequest.medicationCodeableConcept MedicationRequest.medicationReference.resolve().code |
||||
MedicationDispense.medicationCodeableConcept |
MedicationDispense.medicationCodeableConcept MedicationDispense.medicationReference.resolve().code |
||||
Medication.code |
MedicationDispense.medicationCodeableConcept MedicationDispense.medicationReference.resolve().code |
||||
MedicationAdministration.medicationCodeableConcept |
MedicationAdministration.medicationCodeableConcept MedicationAdministration.medicationReference.resolve().code |
||||
Medication.code |
MedicationAdministration.medicationCodeableConcept MedicationAdministration.medicationReference.resolve().code |
||||
Immunizations.vaccineCode |
Immunization.vaccineCode |
||||
CM Medication Class Code | CMCLASCD | CMCLASCD | MedicationStatement.medicationCodeableConcept |
MedicationStatement.medicationCodeableConcept MedicationStatement.medicationReference.resolve().code |
These *can* be provided as alternate codings, however typically encoding is performed by the sponsor and we would not expect to receive these from the site. |
Medication.code |
MedicationStatement.medicationCodeableConcept MedicationStatement.medicationReference.resolve().code |
||||
MedicationRequest.medicationCodeableConcept |
MedicationRequest.medicationCodeableConcept MedicationRequest.medicationReference.resolve().code |
||||
Medication.code |
MedicationRequest.medicationCodeableConcept MedicationRequest.medicationReference.resolve().code |
||||
MedicationDispense.medicationCodeableConcept |
MedicationDispense.medicationCodeableConcept MedicationDispense.medicationReference.resolve().code |
||||
Medication.code |
MedicationDispense.medicationCodeableConcept MedicationDispense.medicationReference.resolve().code |
||||
MedicationAdministration.medicationCodeableConcept |
MedicationAdministration.medicationCodeableConcept MedicationAdministration.medicationReference.resolve().code |
||||
Medication.code |
MedicationAdministration.medicationCodeableConcept MedicationAdministration.medicationReference.resolve().code |
||||
Immunization.vaccineCode |
Immunization.vaccineCode |
||||
ATC Level 1 Description | CMATC1 | SUPPCM.QVAL | Encoding is performed by the sponsor and we would not expect to receive these from the site. | ||
ATC Level 1 Code | CMATC1CD | SUPPCM.QVAL | Encoding is performed by the sponsor and we would not expect to receive these from the site. All coding levels are found in the same attribute as distinct codings. The granularity is distinguished by the code system or knowledge of the code |
||
ATC Level 2 Description | CMATC2 | SUPPCM.QVAL | Encoding is performed by the sponsor and we would not expect to receive these from the site. | ||
ATC Level 2 Code | CMATC2CD | SUPPCM.QVAL | Encoding is performed by the sponsor and we would not expect to receive these from the site. All coding levels are found in the same attribute as distinct codings. The granularity is distinguished by the code system or knowledge of the code |
||
ATC Level 3 Description | CMATC3 | SUPPCM.QVAL | Encoding is performed by the sponsor and we would not expect to receive these from the site. | ||
ATC Level 3 Code | CMATC3CD | SUPPCM.QVAL | Encoding is performed by the sponsor and we would not expect to receive these from the site. All coding levels are found in the same attribute as distinct codings. The granularity is distinguished by the code system or knowledge of the code |
||
ATC Level 4 Description | CMATC4 | SUPPCM.QVAL | Encoding is performed by the sponsor and we would not expect to receive these from the site. | ||
ATC Level 4 Code | CMATC4CD | SUPPCM.QVAL | Encoding is performed by the sponsor and we would not expect to receive these from the site. All coding levels are found in the same attribute as distinct codings. The granularity is distinguished by the code system or knowledge of the code |
||
ATC Level 5 Description | CMATC5 | SUPPCM.QVAL | Encoding is performed by the sponsor and we would not expect to receive these from the site. | ||
ATC Level 5 Code | CMATC5CD | SUPPCM.QVAL | Encoding is performed by the sponsor and we would not expect to receive these from the site. All coding levels are found in the same attribute as distinct codings. The granularity is distinguished by the code system or knowledge of the code |