profiles / StructureDefinition

OMOP-Convertible Observation → measurement

Observation measurement edge mapspec

An Observation whose code routes to the OMOP `measurement` table. Validate against this profile first; if it passes, write to measurement. Routing is enforced by the `code` binding to OmopMeasurementCodes (vocab.concept.domain_id = 'Measurement').

Routing key — code binding
omop-measurement-codes OMOP domain: Measurement

If Observation.code resolves to a concept in this ValueSet, the resource converts to measurement.

Path Card Type Binding / Fixed Comment
Observation.status fhir/observation-status required OMOP measurement requires a finalized value.
Observation.code 1..* MS omop-measurement-codes required
Observation.subject 1..* Reference Required for measurement.person_id.
Observation.effective[x] 1..* MS Required for measurement.measurement_date / measurement_datetime.
Observation.value[x] 1..* Quantity | CodeableConcept | string | boolean | integer Required for measurement.value_as_number / value_as_concept_id / value_source_value.
Observation.valueQuantity.unit
Observation.valueQuantity.system fixed: http://unitsofmeasure.org Units must be UCUM for measurement.unit_concept_id resolution.
Raw JSON
{
  "resourceType": "StructureDefinition",
  "id": "omop-observation-measurement",
  "url": "https://fhir2omop.health-samurai.io/StructureDefinition/omop-observation-measurement",
  "version": "0.1.0",
  "name": "OmopObservationMeasurement",
  "title": "OMOP-Convertible Observation → measurement",
  "status": "draft",
  "experimental": true,
  "description": "An Observation whose code routes to the OMOP `measurement` table. Validate against this profile first; if it passes, write to measurement. Routing is enforced by the `code` binding to OmopMeasurementCodes (vocab.concept.domain_id = 'Measurement').",
  "fhirVersion": "4.0.1",
  "kind": "resource",
  "abstract": false,
  "type": "Observation",
  "baseDefinition": "http://hl7.org/fhir/StructureDefinition/Observation",
  "derivation": "constraint",
  "extension": [
    {
      "url": "https://fhir2omop.health-samurai.io/StructureDefinition/omop-target-table",
      "valueString": "measurement"
    },
    {
      "url": "https://fhir2omop.health-samurai.io/StructureDefinition/omop-edge",
      "valueString": "Observation__measurement"
    }
  ],
  "differential": {
    "element": [
      {
        "id": "Observation.status",
        "path": "Observation.status",
        "comment": "OMOP measurement requires a finalized value.",
        "binding": {
          "strength": "required",
          "valueSet": "http://hl7.org/fhir/ValueSet/observation-status",
          "description": "final | amended | corrected"
        },
        "fixedCode": null
      },
      {
        "id": "Observation.code",
        "path": "Observation.code",
        "min": 1,
        "mustSupport": true,
        "binding": {
          "strength": "required",
          "valueSet": "https://fhir2omop.health-samurai.io/ValueSet/omop-measurement-codes",
          "description": "Code must be in the OMOP Measurement domain (LOINC/SNOMED-CT measurements). This binding is the routing key — if Observation.code is not in this ValueSet, the resource is not a measurement and should be tried against OmopObservationObservation instead."
        }
      },
      {
        "id": "Observation.subject",
        "path": "Observation.subject",
        "min": 1,
        "type": [
          {
            "code": "Reference",
            "targetProfile": [
              "http://hl7.org/fhir/StructureDefinition/Patient"
            ]
          }
        ],
        "comment": "Required for measurement.person_id."
      },
      {
        "id": "Observation.effective[x]",
        "path": "Observation.effective[x]",
        "min": 1,
        "mustSupport": true,
        "comment": "Required for measurement.measurement_date / measurement_datetime."
      },
      {
        "id": "Observation.value[x]",
        "path": "Observation.value[x]",
        "min": 1,
        "type": [
          {
            "code": "Quantity"
          },
          {
            "code": "CodeableConcept"
          },
          {
            "code": "string"
          },
          {
            "code": "boolean"
          },
          {
            "code": "integer"
          }
        ],
        "comment": "Required for measurement.value_as_number / value_as_concept_id / value_source_value."
      },
      {
        "id": "Observation.valueQuantity.unit",
        "path": "Observation.valueQuantity.unit"
      },
      {
        "id": "Observation.valueQuantity.system",
        "path": "Observation.valueQuantity.system",
        "fixedUri": "http://unitsofmeasure.org",
        "comment": "Units must be UCUM for measurement.unit_concept_id resolution."
      }
    ]
  },
  "targetTable": "measurement",
  "edgeKey": "Observation__measurement"
}