{
  "resourceType" : "StructureMap",
  "id" : "RecordSetMap",
  "language" : "en",
  "text" : {
    "status" : "generated",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\"><p class=\"res-header-id\"><b>Generated Narrative: StructureMap RecordSetMap</b></p><a name=\"RecordSetMap\"> </a><a name=\"hcRecordSetMap\"> </a><pre class=\"fml\">\r\n<span style=\"color: #cc00cc\">/// <b>url</b> = </span><span style=\"color: blue\">'http://hl7.org/fhir/uv/omop/StructureMap/RecordSetMap'</span>\r\n<span style=\"color: #cc00cc\">/// <b>name</b> = </span><span style=\"color: blue\">'RecordSetMap'</span>\r\n<span style=\"color: #cc00cc\">/// <b>title</b> = </span><span style=\"color: blue\">'Mapping an International Patient Summary resource to OMOP domains collected in a RecordSet resource'</span>\r\n<span style=\"color: #cc00cc\">/// <b>status</b> = </span><span style=\"color: blue\">'active'</span>\r\n<span style=\"color: #cc00cc\">/// <b>description</b> = </span><span style=\"color: blue\">'This mapping maps a FHIR International Patient Summary Bundle to a set of OMOP Patient records collected in a RecordSet resource.'</span>\r\n\r\n<b>uses</b><span style=\"color: navy\"> &quot;</span><a href=\"http://hl7.org/fhir/R5/bundle.html\" title=\"Bundle\">http://hl7.org/fhir/StructureDefinition/Bundle</a><span style=\"color: navy\">&quot; </span><b>alias </b>Bundle <b>as </b><b>source</b>\r\n<b>uses</b><span style=\"color: navy\"> &quot;</span><a href=\"StructureDefinition-RecordSet.html\" title=\"Patient Record Setting\">http://hl7.org/fhir/uv/omop/StructureDefinition/RecordSet</a><span style=\"color: navy\">&quot; </span><b>alias </b>RecordSetTable <b>as </b><b>target</b>\r\n\r\n<b>imports</b><span style=\"color: navy\"> &quot;</span><a href=\"StructureMap-AllergyMap.html\" title=\"Mapping Allergy resource to Observation OMOP Domain\">http://hl7.org/fhir/uv/omop/StructureMap/AllergyMap</a><span style=\"color: navy\">&quot;\r\n</span><b>imports</b><span style=\"color: navy\"> &quot;</span><a href=\"StructureMap-BloodPressureVitalSignsMap.html\" title=\"Mapping Blood Pressure Vital Signs resource to Measurement OMOP Domain\">http://hl7.org/fhir/uv/omop/StructureMap/BloodPressureVitalSignsMap</a><span style=\"color: navy\">&quot;\r\n</span><b>imports</b><span style=\"color: navy\"> &quot;</span><a href=\"StructureMap-ConditionMap.html\" title=\"Mapping Condition resource to Condition Occurrence OMOP Domain\">http://hl7.org/fhir/uv/omop/StructureMap/ConditionMap</a><span style=\"color: navy\">&quot;\r\n</span><b>imports</b><span style=\"color: navy\"> &quot;</span><a href=\"StructureMap-EncounterVisitMap.html\" title=\"Mapping Encounter resource to VisitOccurrence OMOP Domain\">http://hl7.org/fhir/uv/omop/StructureMap/EncounterVisitMap</a><span style=\"color: navy\">&quot;\r\n</span><b>imports</b><span style=\"color: navy\"> &quot;</span><a href=\"StructureMap-ImmunizationMap.html\" title=\"Mapping Immunization resource to Drug Exposure OMOP Domain\">http://hl7.org/fhir/uv/omop/StructureMap/ImmunizationMap</a><span style=\"color: navy\">&quot;\r\n</span><b>imports</b><span style=\"color: navy\"> &quot;</span><a href=\"StructureMap-MeasurementMap.html\" title=\"Mapping Observation resource to Measurement  OMOP Domain\">http://hl7.org/fhir/uv/omop/StructureMap/MeasurementMap</a><span style=\"color: navy\">&quot;\r\n</span><b>imports</b><span style=\"color: navy\"> &quot;</span><a href=\"StructureMap-PersonMap.html\" title=\"Mapping Patient resource to Person OMOP Domain\">http://hl7.org/fhir/uv/omop/StructureMap/PersonMap</a><span style=\"color: navy\">&quot;\r\n</span><b>imports</b><span style=\"color: navy\"> &quot;</span><a href=\"StructureMap-ProcedureMap.html\" title=\"Mapping Procedure resource to Procedure Occurrence OMOP Domain\">http://hl7.org/fhir/uv/omop/StructureMap/ProcedureMap</a><span style=\"color: navy\">&quot;\r\n</span><b>imports</b><span style=\"color: navy\"> &quot;</span><a href=\"StructureMap-SimpleVitalSignsMap.html\" title=\"Mapping Vital Ssigns resource to Measurement OMOP Domain\">http://hl7.org/fhir/uv/omop/StructureMap/SimpleVitalSignsMap</a><span style=\"color: navy\">&quot;\r\n</span>\r\n<b>group </b>RecordSet<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">src</span><span style=\"color: navy\"> : </span>Bundle, <b>target</b> <span style=\"color: maroon\">tgt</span><span style=\"color: navy\"> : </span>RecordSetTable<span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  src.id<b> as </b><span style=\"color: maroon\">s</span><span style=\"color: navy\"><b> -&gt; </b></span>tgt<b> then</b><span style=\"color: navy\"> {\r\n</span>    s.id<b> as </b><span style=\"color: maroon\">id</span><span style=\"color: navy\"><b> -&gt; </b></span>tgt.record_id = <span style=\"color: navy\">(</span>%id.substring(%id.indexOf('/') + 1)<span style=\"color: navy\">)</span><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">Map bundle timestamp</span>\r\n  src.timestamp<b> as </b><span style=\"color: maroon\">ts</span><span style=\"color: navy\"><b> -&gt; </b></span>tgt.record_set_timestamp = <span style=\"color: maroon\">ts</span><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">Map bundle entries</span>\r\n  src.entry<b> as </b><span style=\"color: maroon\">entry</span><span style=\"color: navy\"><b> -&gt; </b></span>tgt<b> then</b><span style=\"color: navy\"> {\r\n</span>    entry.resource<span style=\"color: navy\"> : </span>AllergyIntolerance<b> as </b><span style=\"color: maroon\">a</span><span style=\"color: navy\"><b> -&gt; </b></span>tgt<b> then</b><span style=\"color: navy\"> {\r\n</span>      a<span style=\"color: navy\"><b> -&gt; </b></span>tgt.allergy<b> as </b><span style=\"color: maroon\">allergy</span><b> then </b>Allergy<span style=\"color: navy\">(</span><span style=\"color: maroon\">a</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">allergy</span><span style=\"color: navy\">)</span> <i>&quot;allergyEntry&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;allergyIntoleranceEntry&quot;</i><span style=\"color: navy\">;</span>\r\n    entry.resource<span style=\"color: navy\"> : </span>Condition<b> as </b><span style=\"color: maroon\">condition</span><span style=\"color: navy\"><b> -&gt; </b></span>tgt<b> then</b><span style=\"color: navy\"> {\r\n</span>      condition<span style=\"color: navy\"><b> -&gt; </b></span>tgt.condition<b> as </b><span style=\"color: maroon\">conditionOccurrence</span><b> then </b>ConditionOccurrence<span style=\"color: navy\">(</span><span style=\"color: maroon\">condition</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">conditionOccurrence</span><span style=\"color: navy\">)</span> <i>&quot;conditionEntry&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;conditionOccurenceEntry&quot;</i><span style=\"color: navy\">;</span>\r\n    entry.resource<span style=\"color: navy\"> : </span>Encounter<b> as </b><span style=\"color: maroon\">encounter</span><span style=\"color: navy\"><b> -&gt; </b></span>tgt<b> then</b><span style=\"color: navy\"> {\r\n</span>      encounter<span style=\"color: navy\"><b> -&gt; </b></span>tgt.visitOccurrence<b> as </b><span style=\"color: maroon\">visitOccurrence</span><b> then </b>VisitOccurrence<span style=\"color: navy\">(</span><span style=\"color: maroon\">encounter</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">visitOccurrence</span><span style=\"color: navy\">)</span> <i>&quot;encounterEntry&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;conditionOccurenceEntry&quot;</i><span style=\"color: navy\">;</span>\r\n    entry.resource<span style=\"color: navy\"> : </span>Observation<b> as </b><span style=\"color: maroon\">observation</span><span style=\"color: navy\"><b> -&gt; </b></span>tgt<b> then</b><span style=\"color: navy\"> {\r\n</span>      observation<span style=\"color: navy\"><b> -&gt; </b></span>tgt.measurement<b> as </b><span style=\"color: maroon\">measurement</span><b> then </b>Measures<span style=\"color: navy\">(</span><span style=\"color: maroon\">observation</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">measurement</span><span style=\"color: navy\">)</span> <i>&quot;measurementEntry&quot;</i><span style=\"color: navy\">;</span>\r\n      observation<span style=\"color: navy\"><b> -&gt; </b></span>tgt<b> as </b><span style=\"color: maroon\">recordSet</span><b> then </b>BloodPressure<span style=\"color: navy\">(</span><span style=\"color: maroon\">observation</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">recordSet</span><span style=\"color: navy\">)</span> <i>&quot;bloodPressureEntry&quot;</i><span style=\"color: navy\">;</span>\r\n      observation<span style=\"color: navy\"><b> -&gt; </b></span>tgt.measurement<b> as </b><span style=\"color: maroon\">vitalSign</span><b> then </b>VitalSigns<span style=\"color: navy\">(</span><span style=\"color: maroon\">observation</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">vitalSign</span><span style=\"color: navy\">)</span> <i>&quot;simpleVitalSignEntry&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;observationEntry&quot;</i><span style=\"color: navy\">;</span>\r\n    entry.resource<span style=\"color: navy\"> : </span>Patient<b> as </b><span style=\"color: maroon\">patient</span><span style=\"color: navy\"><b> -&gt; </b></span>tgt<b> then</b><span style=\"color: navy\"> {\r\n</span>      patient<b> as </b><span style=\"color: maroon\">s</span><span style=\"color: navy\"><b> -&gt; </b></span>tgt<b> then</b><span style=\"color: navy\"> {\r\n</span>        s.id<b> as </b><span style=\"color: maroon\">id</span><span style=\"color: navy\"><b> -&gt; </b></span>tgt.patient_id = <b>cast</b><span style=\"color: navy\">(</span><span style=\"color: maroon\">id</span><span style=\"color: navy\">, </span><span style=\"color: blue\">'integer'</span><span style=\"color: navy\">)</span><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;personID&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n    entry.resource<span style=\"color: navy\"> : </span>Encounter<b> as </b><span style=\"color: maroon\">encounter</span><span style=\"color: navy\"><b> -&gt; </b></span>tgt<b> then</b><span style=\"color: navy\"> {\r\n</span>      encounter<span style=\"color: navy\"><b> -&gt; </b></span>tgt.visitOccurrence<b> as </b><span style=\"color: maroon\">visit</span><b> then </b>VisitOccurrence<span style=\"color: navy\">(</span><span style=\"color: maroon\">encounter</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">visit</span><span style=\"color: navy\">)</span> <i>&quot;visit&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;bundleEntry&quot;</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span></pre></div>"
  },
  "extension" : [{
    "url" : "http://hl7.org/fhir/StructureDefinition/structuredefinition-wg",
    "valueCode" : "brr"
  },
  {
    "url" : "http://hl7.org/fhir/StructureDefinition/structuredefinition-fmm",
    "valueInteger" : 2,
    "_valueInteger" : {
      "extension" : [{
        "url" : "http://hl7.org/fhir/StructureDefinition/structuredefinition-conformance-derivedFrom",
        "valueCanonical" : "http://hl7.org/fhir/uv/omop/ImplementationGuide/hl7.fhir.uv.omop"
      }]
    }
  },
  {
    "url" : "http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status",
    "valueCode" : "trial-use",
    "_valueCode" : {
      "extension" : [{
        "url" : "http://hl7.org/fhir/StructureDefinition/structuredefinition-conformance-derivedFrom",
        "valueCanonical" : "http://hl7.org/fhir/uv/omop/ImplementationGuide/hl7.fhir.uv.omop"
      }]
    }
  }],
  "url" : "http://hl7.org/fhir/uv/omop/StructureMap/RecordSetMap",
  "identifier" : [{
    "system" : "urn:ietf:rfc:3986",
    "value" : "urn:oid:2.16.840.1.113883.4.642.40.77.43.10"
  }],
  "version" : "2.0.0-ballot",
  "name" : "RecordSetMap",
  "title" : "Mapping an International Patient Summary resource to OMOP domains collected in a RecordSet resource",
  "status" : "active",
  "date" : "2026-08-08T01:17:21+00:00",
  "publisher" : "HL7 International / Biomedical Research and Regulation",
  "contact" : [{
    "name" : "HL7 International / Biomedical Research and Regulation",
    "telecom" : [{
      "system" : "url",
      "value" : "http://www.hl7.org/Special/committees/rcrim"
    }]
  }],
  "description" : "This mapping maps a FHIR International Patient Summary Bundle to a set of OMOP Patient records collected in a RecordSet resource.",
  "jurisdiction" : [{
    "coding" : [{
      "system" : "http://unstats.un.org/unsd/methods/m49/m49.htm",
      "code" : "001",
      "display" : "World"
    }]
  }],
  "structure" : [{
    "url" : "http://hl7.org/fhir/StructureDefinition/Bundle",
    "mode" : "source",
    "alias" : "Bundle"
  },
  {
    "url" : "http://hl7.org/fhir/uv/omop/StructureDefinition/RecordSet",
    "mode" : "target",
    "alias" : "RecordSetTable"
  }],
  "import" : ["http://hl7.org/fhir/uv/omop/StructureMap/AllergyMap",
  "http://hl7.org/fhir/uv/omop/StructureMap/BloodPressureVitalSignsMap",
  "http://hl7.org/fhir/uv/omop/StructureMap/ConditionMap",
  "http://hl7.org/fhir/uv/omop/StructureMap/EncounterVisitMap",
  "http://hl7.org/fhir/uv/omop/StructureMap/ImmunizationMap",
  "http://hl7.org/fhir/uv/omop/StructureMap/MeasurementMap",
  "http://hl7.org/fhir/uv/omop/StructureMap/PersonMap",
  "http://hl7.org/fhir/uv/omop/StructureMap/ProcedureMap",
  "http://hl7.org/fhir/uv/omop/StructureMap/SimpleVitalSignsMap"],
  "group" : [{
    "name" : "RecordSet",
    "input" : [{
      "name" : "src",
      "type" : "Bundle",
      "mode" : "source"
    },
    {
      "name" : "tgt",
      "type" : "RecordSetTable",
      "mode" : "target"
    }],
    "rule" : [{
      "name" : "id",
      "source" : [{
        "context" : "src",
        "element" : "id",
        "variable" : "s"
      }],
      "target" : [{
        "context" : "tgt"
      }],
      "rule" : [{
        "name" : "id",
        "source" : [{
          "context" : "s",
          "element" : "id",
          "variable" : "id"
        }],
        "target" : [{
          "context" : "tgt",
          "element" : "record_id",
          "transform" : "evaluate",
          "parameter" : [{
            "valueString" : "%id.substring(%id.indexOf('/') + 1)"
          }]
        }]
      }]
    },
    {
      "name" : "timestamp",
      "source" : [{
        "context" : "src",
        "element" : "timestamp",
        "variable" : "ts"
      }],
      "target" : [{
        "context" : "tgt",
        "element" : "record_set_timestamp",
        "transform" : "copy",
        "parameter" : [{
          "valueId" : "ts"
        }]
      }],
      "documentation" : "Map bundle timestamp"
    },
    {
      "name" : "bundleEntry",
      "source" : [{
        "context" : "src",
        "element" : "entry",
        "variable" : "entry"
      }],
      "target" : [{
        "context" : "tgt"
      }],
      "rule" : [{
        "name" : "allergyIntoleranceEntry",
        "source" : [{
          "context" : "entry",
          "type" : "AllergyIntolerance",
          "element" : "resource",
          "variable" : "a"
        }],
        "target" : [{
          "context" : "tgt"
        }],
        "rule" : [{
          "name" : "allergyEntry",
          "source" : [{
            "context" : "a"
          }],
          "target" : [{
            "context" : "tgt",
            "element" : "allergy",
            "variable" : "allergy"
          }],
          "dependent" : [{
            "name" : "Allergy",
            "parameter" : [{
              "valueId" : "a"
            },
            {
              "valueId" : "allergy"
            }]
          }]
        }]
      },
      {
        "name" : "conditionOccurenceEntry",
        "source" : [{
          "context" : "entry",
          "type" : "Condition",
          "element" : "resource",
          "variable" : "condition"
        }],
        "target" : [{
          "context" : "tgt"
        }],
        "rule" : [{
          "name" : "conditionEntry",
          "source" : [{
            "context" : "condition"
          }],
          "target" : [{
            "context" : "tgt",
            "element" : "condition",
            "variable" : "conditionOccurrence"
          }],
          "dependent" : [{
            "name" : "ConditionOccurrence",
            "parameter" : [{
              "valueId" : "condition"
            },
            {
              "valueId" : "conditionOccurrence"
            }]
          }]
        }]
      },
      {
        "name" : "conditionOccurenceEntry",
        "source" : [{
          "context" : "entry",
          "type" : "Encounter",
          "element" : "resource",
          "variable" : "encounter"
        }],
        "target" : [{
          "context" : "tgt"
        }],
        "rule" : [{
          "name" : "encounterEntry",
          "source" : [{
            "context" : "encounter"
          }],
          "target" : [{
            "context" : "tgt",
            "element" : "visitOccurrence",
            "variable" : "visitOccurrence"
          }],
          "dependent" : [{
            "name" : "VisitOccurrence",
            "parameter" : [{
              "valueId" : "encounter"
            },
            {
              "valueId" : "visitOccurrence"
            }]
          }]
        }]
      },
      {
        "name" : "observationEntry",
        "source" : [{
          "context" : "entry",
          "type" : "Observation",
          "element" : "resource",
          "variable" : "observation"
        }],
        "target" : [{
          "context" : "tgt"
        }],
        "rule" : [{
          "name" : "measurementEntry",
          "source" : [{
            "context" : "observation"
          }],
          "target" : [{
            "context" : "tgt",
            "element" : "measurement",
            "variable" : "measurement"
          }],
          "dependent" : [{
            "name" : "Measures",
            "parameter" : [{
              "valueId" : "observation"
            },
            {
              "valueId" : "measurement"
            }]
          }]
        },
        {
          "name" : "bloodPressureEntry",
          "source" : [{
            "context" : "observation"
          }],
          "target" : [{
            "context" : "tgt",
            "variable" : "recordSet"
          }],
          "dependent" : [{
            "name" : "BloodPressure",
            "parameter" : [{
              "valueId" : "observation"
            },
            {
              "valueId" : "recordSet"
            }]
          }]
        },
        {
          "name" : "simpleVitalSignEntry",
          "source" : [{
            "context" : "observation"
          }],
          "target" : [{
            "context" : "tgt",
            "element" : "measurement",
            "variable" : "vitalSign"
          }],
          "dependent" : [{
            "name" : "VitalSigns",
            "parameter" : [{
              "valueId" : "observation"
            },
            {
              "valueId" : "vitalSign"
            }]
          }]
        }]
      },
      {
        "name" : "resourcePatient",
        "source" : [{
          "context" : "entry",
          "type" : "Patient",
          "element" : "resource",
          "variable" : "patient"
        }],
        "target" : [{
          "context" : "tgt"
        }],
        "rule" : [{
          "name" : "personID",
          "source" : [{
            "context" : "patient",
            "variable" : "s"
          }],
          "target" : [{
            "context" : "tgt"
          }],
          "rule" : [{
            "name" : "id",
            "source" : [{
              "context" : "s",
              "element" : "id",
              "variable" : "id"
            }],
            "target" : [{
              "context" : "tgt",
              "element" : "patient_id",
              "transform" : "cast",
              "parameter" : [{
                "valueId" : "id"
              },
              {
                "valueString" : "integer"
              }]
            }]
          }]
        }]
      },
      {
        "name" : "resourceEncounter",
        "source" : [{
          "context" : "entry",
          "type" : "Encounter",
          "element" : "resource",
          "variable" : "encounter"
        }],
        "target" : [{
          "context" : "tgt"
        }],
        "rule" : [{
          "name" : "visit",
          "source" : [{
            "context" : "encounter"
          }],
          "target" : [{
            "context" : "tgt",
            "element" : "visitOccurrence",
            "variable" : "visit"
          }],
          "dependent" : [{
            "name" : "VisitOccurrence",
            "parameter" : [{
              "valueId" : "encounter"
            },
            {
              "valueId" : "visit"
            }]
          }]
        }]
      }],
      "documentation" : "Map bundle entries"
    }]
  }]
}