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