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, 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.
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 |