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

Vital Signs

Like laboratory results, vital signs are also typically captured in Observations. FHIR actually defines specific profiles for common vital sign measures, significantly increasing the consistency of basic vital signs data. These profiles mandate the declaration of the vital-signs category. This allows vital signs to be easily separated from other observations.

One consideration to be aware of is that Blood Pressure is typically captured as a single Observation with two components, however it is sometimes captured as two distinct resource instances. When converting, both approaches will need to be accounted for.

VS 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

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

Observation.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=Observation.subject).identifier.value

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

No standard way to decide which subject identifier to use
Visit Name VISIT VISIT Encounter should have a standard instantiatesCanonical extension that would allow pointing to the ActivityDefinition. This would be the ActivityDefinition.name. Submit a change request to add the extension
Visit Date VISDAT Encounter.period.start

Observation.encounter.resolve().period.start

Linked via Observation.encounter
Vital Signs Performed [VSTESTCD]_VSPERF VSSTAT Observation.status

Observation.status=('final' or 'cancelled')

Vital Signs Date [VSTESTCD]_VSDAT VSDTC Observation.effectiveDateTime

Observation.effectiveDateTime

Vital Signs Time [VSTESTCD]_VSTIM VSDTC Observation.effectiveDateTime

Observation.effectiveDateTime

Category for Vital Signs VSCAT VSCAT Observation.category

Observation.category

FHIR allows multiple categorizations at various levels of granularity.

Observation.category.coding.system="http://terminology.hl7.org/CodeSystem/observation-category" + Observation.category.coding.code="vital-signs". This combination can be used to extract vital sign data points from EHR system and correctly assign them to the VS domain.
Subcategory for Vital Signs VSCAT VSSCAT Observation.category

Observation.category

FHIR allows multiple categorizations at various levels of granularity.

Observation.category.coding.system="http://terminology.hl7.org/CodeSystem/observation-category" + Observation.category.coding.code="vital-signs". This combination can be used to extract vital sign data points from EHR system and correctly assign them to the VS domain.
Vital Signs Group ID VSGRPID VSGRPID This would typically be done by having the related Observations being 'membersOf' a common parent Observation.
Vital Signs Planned Time Point Name [VSTESTCD]_VSTPT VSTPT Observation.instantiates

Observation.instantiates.resolve().title

TimePoints will be represented in FHIR as PlanDefinition.activities.
Vital Signs Completion Status [VSTESTCD]_VSSTAT VSSTAT Observation.status

Observation.status

ServiceRequest.status IN {'cancelled'|'on-hold'|'revoked'| 'entered-in-error'}

In some instances, VSSTAT="NOT DONE" records will come from FHIR Observation resources where Observation.status="cancelled".
ServiceRequest.status

Observation.status

ServiceRequest.status IN {'cancelled'|'on-hold'|'revoked'| 'entered-in-error'}

Vital Signs Results or Finding in Original Units [VSTESTCD]_VSORRES VSORRES Observation.valueQuantity

Observation.valueQuantity.value

Ensure the value provided from the EHR is considered an actual value (result), an interpretation or range.
Vital Sign Original Units [VSTESTCD]_VSORRESU VSORRESU Observation.valueQuantity

Observation.valueQuantity.unit

Vital Signs Clinical Significance [VSTESTCD]_VSCLSIG SUPPVS.QVAL Observation.interpretation

Observation.interpretation

If clinical significance is a boolean, then the mapping is different from the existing http://hl7.org/fhir/ValueSet/observation-interpretation ValueSet. Meaning, the values of "normal", "high", :low", etc. can reside in the --NRIND variable. There are also cases where clinical significant outcome details can exist with corresponding details that don't fit into either of those mentioned buckets.
Vital Signs Position of Subject [VSTESTCD]_VSPOS VSPOS Observation.code

Observation.code

This is often pre-coordinated into the Observation.code, but can also be expressed in the method
Observation.method

Observation.method

Location of Vital Signs Measurement [VSTESTCD]_VSLOC VSLOC Observation.bodySite

Observation.bodySite

Requires knowledge or review of data to ensure location, laterality and directionality are included in the code and can be parsed.
Vital Signs Laterality [VSTESTCD]_VSLAT VSLAT Observation.bodySite

Observation.bodySite

Requires knowledge or review of data to ensure location, laterality and directionality are included in the code and can be parsed.
Vital Signs Directionality VSDIR VSDIR Observation.bodySite

Observation.bodySite

Requires knowledge or review of data to ensure location, laterality and directionality are included in the code and can be parsed.
Vital Signs Test code VSTESTCD VSTESTCD Observation.code

Observation.code.coding.code

coding.display and coding.code (plus coding.system)
Vital Signs Test Name VSTEST VSTEST Observation.code

Observation.code.coding.display

coding.display and coding.code (plus coding.system)
Vital Signs Sponsor Defined Identifier VSSPID VSSPID Observation.identifier

Observation.identifier.where(assigner=[sponsor organization id])

The assigner of the identifier can be explicit or inferred by the Identifier.system. Example: "assigner=sponsor", the value of assigner can either be a simple name using "display" (e.g. "assigner.display=MyPharma" or a reference to an "Organization"
Vital Signs Repetition Number VSREPNUM SUPPVS.QVAL This could be captured as a specific ActivityDefinition where you'd have a distinct ActivityDefinition for each occurrence. However, it is more likely to be a single ActivityDefinition for the test and an extension would be added on Observation.instantiates to indicate which occurrence is the Observation.