FHIR to CDISC Joint Mapping Implementation Guide
0.1.0 - STU 1

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

Concomitant Medications

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.

  • MedicationStatement - captures information about a drug that the patient is believed to be taking. This is generally 'summary' information and may span multiple orders. It can also be used for non-prescribed medications. In some cases, it will also assert medications not taken.
  • MedicationRequest - captures drug orders and prescriptions (though it can also contain recommendations and plans). Not all ordered drugs are actually taken (or taken as ordered)
  • MedicationDispense - captures information about a drug that was supplied to or for a patient. It also conveys the instructions for administering the supplied medication. The existence of a dispense gives confidence that the medication was actually received, but again, not dispensed are actually taken (or taken according to instructions)
  • MedicationAdministration - captures information about a specific administration of a particular drug at a specific time. These records generally only exist for in-patient administrations, though in principle they could be captured for community administrations, either by a healthcare professional or even by the patient themselves. These records are highly specific and are the most likely to reflect what the patient actually received.
  • Immunization - captures information about a specific administration of a vaccine. Like MedicationAdministration, these records are highly specific and are the most likely to reflect what the patient actually received.

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.

CM Mappings

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