FHIR to OMOP FHIR IG
2.0.0-ballot - STU 1 Ballot International flag

FHIR to OMOP FHIR IG, published by HL7 International / Biomedical Research and Regulation. This guide is not an authorized publication; it is the continuous build for version 2.0.0-ballot built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/HL7/fhir-omop-ig/ and changes regularly. See the Directory of published versions

StructureMap: Mapping Vital Ssigns resource to Measurement OMOP Domain

Official URL: http://hl7.org/fhir/uv/omop/StructureMap/SimpleVitalSignsMap Version: 2.0.0-ballot
Standards status: Trial-use Maturity Level: 2 Computable Name: SimpleVitalSignsMap
Other Identifiers: OID:2.16.840.1.113883.4.642.40.77.43.11

This mapping maps simple FHIR Vital Signs instances that are considered measurements to OMOP Measurement Table objects.

Simple Vital Signs

This mapping handles all of the standard Vital Signs resource profiles defined in the FHIR Core specification, except for Blood Pressure. They all result in an OMOP Measurement table entry with a value_as_quantity for the vital sign value.

Mapping

Language: en

/// url = 'http://hl7.org/fhir/uv/omop/StructureMap/SimpleVitalSignsMap'
/// name = 'SimpleVitalSignsMap'
/// title = 'Mapping Vital Ssigns resource to Measurement OMOP Domain'
/// status = 'active'
/// description = 'This mapping maps simple FHIR Vital Signs instances that are considered measurements to OMOP Measurement Table objects.'

uses "http://hl7.org/fhir/StructureDefinition/Observation" alias VitalSigns as source
uses "http://hl7.org/fhir/uv/omop/StructureDefinition/Measurement" alias MeasureTable as target

group VitalSigns(source src : VitalSigns, target tgt : MeasureTable) {
  src where (src.category.coding.code contains 'vital-signs') then {
    src where (src.effective.empty().not()) then {
      src.code as s -> tgt then {
        s.coding as sc -> tgt then {
          sc.system where ('http://loinc.org') then {
            sc.code as a where ((a in ('85354-9' | '8480-6' | '8462-4' | '8478-0')).not()) -> tgt.measurement_type_concept_id = translate(a, 'http://hl7.org/fhir/uv/omop/ConceptMap/VitalSignsCodes', 'code') then {
              sc.display as display -> tgt.measurement_concept_id = display;
              src.effective : dateTime as edt ->  tgt.measurement_datetime = edt,  tgt.measurement_date = (edt.toString().substring(0, 10));
              src.effective : instant as einst ->  tgt.measurement_datetime = cast(einst, 'dateTime'),  (einst.toString().substring(0, 10));
              src.effective : Period as s -> tgt then {
                s.start as eps ->  tgt.measurement_datetime = cast(eps, 'dateTime'),  tgt.measurement_date = (eps.toString().substring(0, 10));
              };
              // src.issued as s where (src.issued.toDate()  != src.effective) -> tgt.measurement_source_value = (s.toString());
              src.value : Quantity as s -> tgt then {
                s.value as a -> tgt.value_as_number = cast(a, 'decimal');
                s.unit as b -> tgt.unit_concept_id = b;
              };
              src.value : CodeableConcept as s -> tgt then {
                s.coding as sc -> tgt then {
                  sc.code as code -> tgt.value_as_concept_id = code;
                };
              };
              src.value : string as b -> tgt.value_source_value = b;
              src.interpretation as c -> tgt.value_as_concept_id = cast(c, 'code');
              src.note as d -> tgt.measurement_source_value = cast(d, 'string');
            };
          };
        };
      };
    } "vitalSignMapping";
  } "OnlyMeasures";
}