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

Procedures

Procedures, in FHIR, use the Procedure resource. However, like Observations, the notion of Procedure is quite broad. It includes counseling, education and physio-therapy as well as more traditional concepts such as surgery. One area of interest relevant to CDISC mapping that has not yet been decided in the FHIR standard is how best to handle the ordering and administration of non-drug therapies that involve the notion of 'dose' - for example radiation, light therapy, etc. Options being considered include expanding the scope of the Medication resources, adding dose elements or extensions to Procedure, or defining a separate set of resources. Because this area is not yet settled, no mappings are provided for the dose-relevant elements.

In some cases, procedure information may be captured only in document form (as DocumentReferences) or as the associated Encounter. Because of the limited metadata available in these, no mappings are provided.

PR Mappings

Guidance on interpreting the table can be found here.

CDISC FHIR map (or gap) Comment
Name CDASH SDTM Element FHIRPath
Study ID or Number STUDYID STUDYID ResearchStudy.identifier

ResearchSubject.where(subject=Observation.subject).study.resolve().partOf.resolve().identifier.value

Procedure.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 Observation is aware of its relevance to the Study.
Study Site ID SITEID DM.SITEID ResearchStudy.site

ResearchSubject.where(subject=Observation.subject).study.resolve().identifier.value

Procedure.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 Observation is aware of its relevance to the Study.
Subject ID for the Study SUBJID DM.SUBJID ResearchSubject.identifier

ResearchSubject.where(individual=Procedure.subject).identifier.value

Study subject is found by finding the StudySubject that corresponds to the same Patient and ResearchStudy as the Procedure.

No standard way to decide which subject identifier to use
Any Procedures Performed PRYN (Y/N) This likely to be a Questionnaire question than something that would directly be captured in a record. It could be the answer to an Observation, but even then it would be qualified by type and time-range (procedure covers education, massage, cognitive therapy and various other data)
Procedure Category PRCAT PRCAT Procedure.category

Procedure.category

FHIR doesn't have 2 distinct category levels. Instead, Procedure.category repeats. The option exists to have as many categorizations with whatever axes and granularities needed or desired. When mapping data to a particular study, it would be necessary to decide what category values best correspond to CAT vs. SCAT.
Procedure Subcategory PRSCAT PRSCAT Procedure.category

Procedure.category

FHIR doesn't have 2 distinct category levels. Instead, Procedure.category repeats. The option exists to have as many categorizations with whatever axes and granularities needed or desired. When mapping data to a particular study, it would be necessary to decide what category values best correspond to CAT vs. SCAT.
Procedure Sponsor Defined Identifier PRSPID PRSPID Procedure.identifier

Procedure.identifier

Report name of Procedure PRTRT PRTRT Procedure.code

Procedure.code.coding.display; Procedure.code.text

The name as expressed by or displayed to the user goes in code.text. The name associated with the selected code goes in code.coding.display.
Standardized Procedure Name PRDECOD PRDECOD Procedure.code

Procedure.code

Define and review standardized coding schema with coding translations are conducted by the sponsor.

PRDECOD is the dictionary or the sponsor-defined standardized text description of PRTRT, or the modified topic variable (PRMODIFY), if applicable. This means it is the standardized term for the procedure.
Modified Procedure Name PRMODIFY PRMODIFY Coding translations are conducted by the sponsor.

In FHIR, there's no need to modify the PRTERM. The text which was actually saw/typed (errors and all) is present and the various codes encoding it and the display names for those codes. If there was a need to capture a corrected text that was submitted to a post-coding process, that would be an extension
Procedure Prespecified PRPRESP PRPRESP This likely to be a Questionnaire question than something that would directly be captured in a record. This could possibly be an extension on the Procedure/MedicationAdministration/MedicationStatement.
Procedure Occurrence PROCCUR PROCCUR Procedure.status

Procedure.status

Coding translations are left to the sponsor.

Status of 'not-done', 'entered-in-error' would indicate that it didn't happen, 'active', 'in-progress', 'on-hold', 'completed' would indicate that it did. 'stopped' would indicate that it started, but was abnormally terminated - where that should go depends on the study's definition of 'occur'.
Procedure Reason for Occur Value PRREASOC SUPPPR.QVAL Procedure.reasonCode

Procedure.reasonCode

Note that reasonReference would need to be turned into a code or string. Reason[x] indicates reason for doing the procedure; statusReason when status=not-done would be reason for non-occurrence
Procedure.reasonReference

Procedure.reasonReference

Procedure.statusReason

Procedure.statusReason

Procedure Reason NOT Done PRREASND PRREASND Procedure.statusReason

Procedure.statusReason.where(%resource.status IN {'not-done'| 'stopped'})

Prior Procedure PRPRIOR PRSTRTPT; PRSTRF This is not expect to receive from the site.

This would be handled as an extension on the extension that ties the procedure to the study (though it can also be determined just by looking at the respective dates). (This assertion would be specific to the study link.)
Procedure Start Date PRSTDAT PRSTDTC Procedure.performed

Procedure.performedDateTime

Procedure.performedPeriod.start

Procedure.performedRange.low

PerformedString and performedRange don't allow exact mappings (the latter indicates uncertainty about timing)
Ongoing Procedure PRONGO PRENRTPT; PRENRF Procedure.status

Procedure.status

This supports the necessity of separating procedures and medication.

An example of ongoing procedure, "hemodialysis with frequency of three times a week". If the status is 'in-progress'/'active', then it's ongoing. Note that MedicationAdministration reflects a single administration, so it would only be 'ongoing' until the IV is turned off or the rate is adjusted.
Procedure End Date PRENDAT PRENDTC Procedure.performed

Procedure.performedDateTime Procedure.performedPeriod.start

Procedure.performedRange.high

PerformedString and performedRange don't allow exact mappings (the latter indicates uncertainty about timing)
Procedure Indication PRINDC PRINDC Procedure.reasonCode

Procedure.reasonCode

Note that reasonReference would need to be turned into a code or string.
Procedure.reasonReference

Procedure.reasonReference

Related AdverseEvent ID PRAENO AdverseEvent.identifier

Procedure.reasonReference.resolve().where(type='AdverseEvent').identifier

Related Medical History Event ID PRMHNO If FHIR IDs are used for RELREC, then the sponsor should evaluate its use case as necessary prior to mapping.
Procedure Dose Description PRDOSTXT If FHIR IDs are used for RELREC, then the sponsor should evaluate its use case as necessary prior to mapping.
Procedure Dose Unit PRDOSU PRDOSU If FHIR IDs are used for RELREC, then the sponsor should evaluate its use case as necessary prior to mapping.
Procedure Frequency per Interval PRDOSFRQ Procedure.occurrenceTiming

Procedure.occurrenceTiming.repeat.frequency

Procedure Route of Administration PRROUTE PRROUTE This is a known gap. Procedure Dose interval does NOT exist for 'Procedure'.
Location of Procedure PRLOC PRLOC Procedure.bodySite

Procedure.bodySite

Procedure Laterality PRLAT PRLAT BodyStructure.locationQualifier

Procedure.extension(procedure-targetBodyStructure).valueReference.resolve().locationQualifier

This is frequently pre-coordinated into Procedure.bodySite. Multiple qualifiers are possible. Laterality will need to be recognized by code and/or system
Procedure Directionality PRDIR PRDIR BodyStructure.locationQualifier

Procedure.extension(procedure-targetBodyStructure).valueReference.resolve().locationQualifier

This is frequently pre-coordinated into Procedure.bodySite. Multiple qualifiers are possible. Directionality will need to be recognized by code and/or system
Procedure Portion or Totality PRPORTOT PRPORTOT Typically this would be pre-coordinated into Procedure.code and would be captured in dosage instructions text for medications. If captured as a separate element, if would need to be an extension.
Procedure Fasting Status PRFAST PRFAST This would be handled as an extension. Could propose as standard extension. Probably not relevant for MedicationStatement
Procedure Intended Dose Regimen PRDOSRGM PRDOSRGM An administration could be based on more than one thing (recommendation, plan, order) and in theory the intended dose would be different for each.
Procedure Adjusted PRDOSADJ This would be handled as an extension. Would appear on Procedure/MedicationAdministration/MedicationStatement.basedOn. Might consider proposing it as a standard extension.
Reason for Procedure Adjustment PRADJ PRADJ This would be handled as an extension. Would appear on Procedure/MedicationAdministration/MedicationStatement.basedOn. Might consider proposing it as a standard extension.
Completed Procedure PRTRTCMP SUPPPR.QVAL Not all potential mapping/FHIR resources/attributes will be addressed in this implementation guide. All data requires review and analysis to ensure the data is relevant and understood.
Procedure Interrupted PRITRPYN Procedure.status

Procedure.status

If something is currently interrupted, the status would either be on-hold or stopped. If there was a temporary interruption and the procedure has since resumed or completed, the only way to detect the interruption would be an extension or to review the history.
Reason Procedure Interrupted PRITRPRS SUPPPR.QVAL Procedure.statusReason

Procedure.statusReason

If the status is on-hold or stopped, statusReason would convey the reason. If there was a temporary interruption and the procedure has since resumed or completed, the only way to detect the interruption would be an extension or to review the history.
Procedure Interruption Duration PRCINTD SUPPPR.QVAL This would have to be an extension. Typically, you'd just look at history to see when something was suspended, then resumed.
Procedure Interruption Duration Units PRCINTDU SUPPPR.QVAL This would have to be part of the previous extension. Typically, reviewing the history of the procedure will indicate if it was suspended and then resumed.
Procedure Lowest Level Term PRLLT SUPPPR.QVAL Procedure.code

Procedure.code

Procedure Code is performed by the sponsor - not expected to receive this from the site or FHIR.

Procedure.code and Medication[x].medicationCode|Medication.code can contain many codings and at various levels of granularity. Granularity will be determined by reviewing the code system and/or having knowledge of the codes within the same code system (where one code system can express content at multiple granularities) Note: Not clear how many of these would be populated for a procedure rather than a medication
Procedure Lowest Level Term Code PRLLTCD SUPPPR.QVAL Procedure.code

Procedure.code

Procedure Code is performed by the sponsor - not expected to receive this from the site or FHIR.

Procedure.code and Medication[x].medicationCode|Medication.code can contain as many codings as you like at whatever granularity you like. You would distinguish what granularity it was by looking at the code system and/or having knowledge of the codes within the same code system (where one code system can express content at multiple granularities) Note: Not clear how many of these would be populated for a procedure rather than a medication
Procedure Preferred Term Code PRPTCD SUPPPR.QVAL Procedure.code

Procedure.code

Procedure Code is performed by the sponsor - not expected to receive this from the site or FHIR.

Procedure.code and Medication[x].medicationCode|Medication.code can contain as many codings as you like at whatever granularity you like. You would distinguish what granularity it was by looking at the code system and/or having knowledge of the codes within the same code system (where one code system can express content at multiple granularities) Note: Not clear how many of these would be populated for a procedure rather than a medication
Procedure High Level Term PRHLT SUPPPR.QVAL Procedure.code

Procedure.code

Procedure Code is performed by the sponsor - not expected to receive this from the site or FHIR.

Procedure.code and Medication[x].medicationCode|Medication.code can contain as many codings as you like at whatever granularity you like. You would distinguish what granularity it was by looking at the code system and/or having knowledge of the codes within the same code system (where one code system can express content at multiple granularities) Note: Not clear how many of these would be populated for a procedure rather than a medication
Procedure High Level Term Code PRHLTCD SUPPPR.QVAL Procedure.code

Procedure.code

Procedure Code is performed by the sponsor - not expected to receive this from the site or FHIR.

Procedure.code and Medication[x].medicationCode|Medication.code can contain as many codings as you like at whatever granularity you like. You would distinguish what granularity it was by looking at the code system and/or having knowledge of the codes within the same code system (where one code system can express content at multiple granularities) Note: Not clear how many of these would be populated for a procedure rather than a medication
Procedure High Level Group Term PRHLGT SUPPPR.QVAL Procedure.code

Procedure.code

Procedure Code is performed by the sponsor - not expected to receive this from the site or FHIR.

Procedure.code and Medication[x].medicationCode|Medication.code can contain as many codings as you like at whatever granularity you like. You would distinguish what granularity it was by looking at the code system and/or having knowledge of the codes within the same code system (where one code system can express content at multiple granularities) Note: Not clear how many of these would be populated for a procedure rather than a medication
Procedure High Level Group Term Code PRHLGTCD SUPPPR.QVAL Procedure.code

Procedure.code

Procedure Code is performed by the sponsor - not expected to receive this from the site or FHIR.

Procedure.code and Medication[x].medicationCode|Medication.code can contain as many codings as you like at whatever granularity you like. You would distinguish what granularity it was by looking at the code system and/or having knowledge of the codes within the same code system (where one code system can express content at multiple granularities) Note: Not clear how many of these would be populated for a procedure rather than a medication
PR Primary System Organ Class PRSOC SUPPPR.QVAL Procedure.code

Procedure.code

Procedure Code is performed by the sponsor - not expected to receive this from the site or FHIR.

Procedure.code and Medication[x].medicationCode|Medication.code can contain as many codings as you like at whatever granularity you like. You would distinguish what granularity it was by looking at the code system and/or having knowledge of the codes within the same code system (where one code system can express content at multiple granularities) Note: Not clear how many of these would be populated for a procedure rather than a medication
PR primary System Organ Class Code PRSOCCD SUPPPR.QVAL Procedure.code

Procedure.code

Procedure Code is performed by the sponsor - not expected to receive this from the site or FHIR.

Procedure.code and Medication[x].medicationCode|Medication.code can contain as many codings as you like at whatever granularity you like. You would distinguish what granularity it was by looking at the code system and/or having knowledge of the codes within the same code system (where one code system can express content at multiple granularities) Note: Not clear how many of these would be populated for a procedure rather than a medication