SGHI FHIR Profile Implementation Guide
0.1.0 - ci-build

SGHI FHIR Profile Implementation Guide, published by Kathurima Kimathi. This guide is not an authorized publication; it is the continuous build for version 0.1.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/savannahghi/sil_fhir_profile_ig/ and changes regularly. See the Directory of published versions

: Inpatient Obstetric Admission Assessment Extraction - XML Representation

Active as of 2026-10-06

Raw xml | Download


<StructureMap xmlns="http://hl7.org/fhir">
  <id value="ExtractInpatientObstetricAdmissionAssessment"/>
  <text>
    <status value="generated"/>
    <div xmlns="http://www.w3.org/1999/xhtml"><p class="res-header-id"><b>Generated Narrative: StructureMap ExtractInpatientObstetricAdmissionAssessment</b></p><a name="ExtractInpatientObstetricAdmissionAssessment"> </a><a name="hcExtractInpatientObstetricAdmissionAssessment"> </a><pre class="fml">
<span style="color: #cc00cc">/// <b>url</b> = </span><span style="color: blue">'https://fhir.slade360.co.ke/fhir/StructureMap/ExtractInpatientObstetricAdmissionAssessment'</span>
<span style="color: #cc00cc">/// <b>name</b> = </span><span style="color: blue">'ExtractInpatientObstetricAdmissionAssessment'</span>
<span style="color: #cc00cc">/// <b>title</b> = </span><span style="color: blue">'Inpatient Obstetric Admission Assessment Extraction'</span>
<span style="color: #cc00cc">/// <b>status</b> = </span><span style="color: blue">'active'</span>
<span style="color: #cc00cc">/// <b>description</b> = </span><span style="color: blue">'Four measurements out, four Observations. Gestation, fetal heart rate and cervical dilatation are readings taken at the bedside, so they carry category `exam`; the obstetric history is reported rather than measured, so it carries `social-history`. Every LOINC code here was checked against tx.fhir.org before use.'</span>

<b>uses</b><span style="color: navy"> &quot;</span><a href="http://hl7.org/fhir/R5/questionnaireresponse.html" title="QuestionnaireResponse">http://hl7.org/fhir/StructureDefinition/QuestionnaireResponse</a><span style="color: navy">&quot; </span><b>alias </b>QR <b>as </b><b>source</b>
<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>target</b>
<b>uses</b><span style="color: navy"> &quot;</span><a href="http://hl7.org/fhir/R5/observation.html" title="Observation">http://hl7.org/fhir/StructureDefinition/Observation</a><span style="color: navy">&quot; </span><b>alias </b>Observation <b>as </b><b>target</b>

<b>group </b>ExtractInpatientObstetricAdmissionAssessment<span style="color: navy">(</span><b>source</b> <span style="color: maroon">qr</span><span style="color: navy"> : </span>QR, <b>target</b> <span style="color: maroon">bundle</span><span style="color: navy"> : </span>Bundle<span style="color: navy">)</span><span style="color: navy"> {
</span>  qr<span style="color: navy"><b> -&gt; </b></span>bundle.type = <span style="color: blue">'transaction'</span> <i>&quot;setBundleType&quot;</i><span style="color: navy">;</span>
  qr.item<b> as </b><span style="color: maroon">itG</span><b> where </b><span style="color: navy">(</span>(linkId = 'gestation') and answer.value.exists()<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>    itG.answer first<b> as </b><span style="color: maroon">aG</span><b> then</b><span style="color: navy"> {
</span>      aG<span style="color: navy"><b> -&gt; </b></span> bundle.entry<b> as </b><span style="color: maroon">entryG</span><span style="color: navy">, </span> entryG.resource = <b>create</b><span style="color: navy">(</span><span style="color: blue">'Observation'</span><span style="color: navy">)</span><b> as </b><span style="color: maroon">obsG</span><b> then</b><span style="color: navy"> {
</span>        qr<span style="color: navy"><b> -&gt; </b></span>obsG<b> then </b>CopyResponseTags<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">obsG</span><span style="color: navy">)</span> <i>&quot;responseTags&quot;</i><span style="color: navy">;</span>
        qr<span style="color: navy"><b> -&gt; </b></span> obsG<span style="color: navy">, </span> entryG<b> then </b>BuildObsBase<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">obsG</span><span style="color: navy">, </span><span style="color: maroon">entryG</span><span style="color: navy">)</span> <i>&quot;gestationBase&quot;</i><span style="color: navy">;</span>
        qr<span style="color: navy"><b> -&gt; </b></span>obsG<b> then </b>SetExamCategory<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">obsG</span><span style="color: navy">)</span> <i>&quot;gestationCategory&quot;</i><span style="color: navy">;</span>
        qr<span style="color: navy"><b> -&gt; </b></span>obsG.code<b> as </b><span style="color: maroon">code</span><b> then</b><span style="color: navy"> {
</span>          qr<span style="color: navy"><b> -&gt; </b></span>code.coding<b> as </b><span style="color: maroon">coding</span><b> then</b><span style="color: navy"> {
</span>            qr<span style="color: navy"><b> -&gt; </b></span>coding.system = <span style="color: blue">'http://loinc.org'</span> <i>&quot;codeSystem&quot;</i><span style="color: navy">;</span>
            qr<span style="color: navy"><b> -&gt; </b></span>coding.code = <span style="color: blue">'18185-9'</span> <i>&quot;codeCode&quot;</i><span style="color: navy">;</span>
            qr<span style="color: navy"><b> -&gt; </b></span>coding.display = <span style="color: blue">'Gestational age'</span> <i>&quot;codeDisplay&quot;</i><span style="color: navy">;</span>
          <span style="color: navy">}</span> <i>&quot;codeCoding&quot;</i><span style="color: navy">;</span>
        <span style="color: navy">}</span> <i>&quot;gestationCode&quot;</i><span style="color: navy">;</span>
        <span style="color: navy">// </span><span style="color: green">The item is type `quantity` with a unitOption pinning weeks, so the</span>
        <span style="color: navy">// </span><span style="color: green">answer arrives as a Quantity and is copied through whole.</span>
        aG.value<b> as </b><span style="color: maroon">v</span><span style="color: navy"><b> -&gt; </b></span>obsG.value = <span style="color: maroon">v</span> <i>&quot;gestationValue&quot;</i><span style="color: navy">;</span>
      <span style="color: navy">}</span> <i>&quot;gestationObservation&quot;</i><span style="color: navy">;</span>
    <span style="color: navy">}</span> <i>&quot;gestationAnswer&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;gestationRule&quot;</i><span style="color: navy">;</span>
  qr.item<b> as </b><span style="color: maroon">itF</span><b> where </b><span style="color: navy">(</span>(linkId = 'fhr') and answer.value.exists()<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>    itF.answer first<b> as </b><span style="color: maroon">aF</span><b> then</b><span style="color: navy"> {
</span>      aF<span style="color: navy"><b> -&gt; </b></span> bundle.entry<b> as </b><span style="color: maroon">entryF</span><span style="color: navy">, </span> entryF.resource = <b>create</b><span style="color: navy">(</span><span style="color: blue">'Observation'</span><span style="color: navy">)</span><b> as </b><span style="color: maroon">obsF</span><b> then</b><span style="color: navy"> {
</span>        qr<span style="color: navy"><b> -&gt; </b></span>obsF<b> then </b>CopyResponseTags<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">obsF</span><span style="color: navy">)</span> <i>&quot;responseTags&quot;</i><span style="color: navy">;</span>
        qr<span style="color: navy"><b> -&gt; </b></span> obsF<span style="color: navy">, </span> entryF<b> then </b>BuildObsBase<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">obsF</span><span style="color: navy">, </span><span style="color: maroon">entryF</span><span style="color: navy">)</span> <i>&quot;fhrBase&quot;</i><span style="color: navy">;</span>
        qr<span style="color: navy"><b> -&gt; </b></span>obsF<b> then </b>SetExamCategory<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">obsF</span><span style="color: navy">)</span> <i>&quot;fhrCategory&quot;</i><span style="color: navy">;</span>
        qr<span style="color: navy"><b> -&gt; </b></span>obsF.code<b> as </b><span style="color: maroon">code</span><b> then</b><span style="color: navy"> {
</span>          qr<span style="color: navy"><b> -&gt; </b></span>code.coding<b> as </b><span style="color: maroon">coding</span><b> then</b><span style="color: navy"> {
</span>            qr<span style="color: navy"><b> -&gt; </b></span>coding.system = <span style="color: blue">'http://loinc.org'</span> <i>&quot;codeSystem&quot;</i><span style="color: navy">;</span>
            qr<span style="color: navy"><b> -&gt; </b></span>coding.code = <span style="color: blue">'55283-6'</span> <i>&quot;codeCode&quot;</i><span style="color: navy">;</span>
            qr<span style="color: navy"><b> -&gt; </b></span>coding.display = <span style="color: blue">'Fetal Heart rate'</span> <i>&quot;codeDisplay&quot;</i><span style="color: navy">;</span>
          <span style="color: navy">}</span> <i>&quot;codeCoding&quot;</i><span style="color: navy">;</span>
        <span style="color: navy">}</span> <i>&quot;fhrCode&quot;</i><span style="color: navy">;</span>
        aF.value<b> as </b><span style="color: maroon">v</span><span style="color: navy"><b> -&gt; </b></span>obsF.value = <span style="color: maroon">v</span> <i>&quot;fhrValue&quot;</i><span style="color: navy">;</span>
      <span style="color: navy">}</span> <i>&quot;fhrObservation&quot;</i><span style="color: navy">;</span>
    <span style="color: navy">}</span> <i>&quot;fhrAnswer&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;fhrRule&quot;</i><span style="color: navy">;</span>
  qr.item<b> as </b><span style="color: maroon">itD</span><b> where </b><span style="color: navy">(</span>(linkId = 'dilatation') and answer.value.exists()<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>    itD.answer first<b> as </b><span style="color: maroon">aD</span><b> then</b><span style="color: navy"> {
</span>      aD<span style="color: navy"><b> -&gt; </b></span> bundle.entry<b> as </b><span style="color: maroon">entryD</span><span style="color: navy">, </span> entryD.resource = <b>create</b><span style="color: navy">(</span><span style="color: blue">'Observation'</span><span style="color: navy">)</span><b> as </b><span style="color: maroon">obsD</span><b> then</b><span style="color: navy"> {
</span>        qr<span style="color: navy"><b> -&gt; </b></span>obsD<b> then </b>CopyResponseTags<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">obsD</span><span style="color: navy">)</span> <i>&quot;responseTags&quot;</i><span style="color: navy">;</span>
        qr<span style="color: navy"><b> -&gt; </b></span> obsD<span style="color: navy">, </span> entryD<b> then </b>BuildObsBase<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">obsD</span><span style="color: navy">, </span><span style="color: maroon">entryD</span><span style="color: navy">)</span> <i>&quot;dilatationBase&quot;</i><span style="color: navy">;</span>
        qr<span style="color: navy"><b> -&gt; </b></span>obsD<b> then </b>SetExamCategory<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">obsD</span><span style="color: navy">)</span> <i>&quot;dilatationCategory&quot;</i><span style="color: navy">;</span>
        qr<span style="color: navy"><b> -&gt; </b></span>obsD.code<b> as </b><span style="color: maroon">code</span><b> then</b><span style="color: navy"> {
</span>          qr<span style="color: navy"><b> -&gt; </b></span>code.coding<b> as </b><span style="color: maroon">coding</span><b> then</b><span style="color: navy"> {
</span>            qr<span style="color: navy"><b> -&gt; </b></span>coding.system = <span style="color: blue">'http://loinc.org'</span> <i>&quot;codeSystem&quot;</i><span style="color: navy">;</span>
            qr<span style="color: navy"><b> -&gt; </b></span>coding.code = <span style="color: blue">'11784-6'</span> <i>&quot;codeCode&quot;</i><span style="color: navy">;</span>
            qr<span style="color: navy"><b> -&gt; </b></span>coding.display = <span style="color: blue">'Cervical canal external os Diameter palpation'</span> <i>&quot;codeDisplay&quot;</i><span style="color: navy">;</span>
          <span style="color: navy">}</span> <i>&quot;codeCoding&quot;</i><span style="color: navy">;</span>
        <span style="color: navy">}</span> <i>&quot;dilatationCode&quot;</i><span style="color: navy">;</span>
        aD.value<b> as </b><span style="color: maroon">v</span><span style="color: navy"><b> -&gt; </b></span>obsD.value = <span style="color: maroon">v</span> <i>&quot;dilatationValue&quot;</i><span style="color: navy">;</span>
      <span style="color: navy">}</span> <i>&quot;dilatationObservation&quot;</i><span style="color: navy">;</span>
    <span style="color: navy">}</span> <i>&quot;dilatationAnswer&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;dilatationRule&quot;</i><span style="color: navy">;</span>
  qr.item<b> as </b><span style="color: maroon">itH</span><b> where </b><span style="color: navy">(</span>(linkId = 'obsHistory') and answer.value.exists()<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>    itH.answer first<b> as </b><span style="color: maroon">aH</span><b> then</b><span style="color: navy"> {
</span>      aH<span style="color: navy"><b> -&gt; </b></span> bundle.entry<b> as </b><span style="color: maroon">entryH</span><span style="color: navy">, </span> entryH.resource = <b>create</b><span style="color: navy">(</span><span style="color: blue">'Observation'</span><span style="color: navy">)</span><b> as </b><span style="color: maroon">obsH</span><b> then</b><span style="color: navy"> {
</span>        qr<span style="color: navy"><b> -&gt; </b></span>obsH<b> then </b>CopyResponseTags<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">obsH</span><span style="color: navy">)</span> <i>&quot;responseTags&quot;</i><span style="color: navy">;</span>
        qr<span style="color: navy"><b> -&gt; </b></span> obsH<span style="color: navy">, </span> entryH<b> then </b>BuildObsBase<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">obsH</span><span style="color: navy">, </span><span style="color: maroon">entryH</span><span style="color: navy">)</span> <i>&quot;historyBase&quot;</i><span style="color: navy">;</span>
        qr<span style="color: navy"><b> -&gt; </b></span>obsH<b> then </b>SetSocialHistoryCategory<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">obsH</span><span style="color: navy">)</span> <i>&quot;historyCategory&quot;</i><span style="color: navy">;</span>
        qr<span style="color: navy"><b> -&gt; </b></span>obsH.code<b> as </b><span style="color: maroon">code</span><b> then</b><span style="color: navy"> {
</span>          qr<span style="color: navy"><b> -&gt; </b></span>code.coding<b> as </b><span style="color: maroon">coding</span><b> then</b><span style="color: navy"> {
</span>            qr<span style="color: navy"><b> -&gt; </b></span>coding.system = <span style="color: blue">'http://loinc.org'</span> <i>&quot;codeSystem&quot;</i><span style="color: navy">;</span>
            qr<span style="color: navy"><b> -&gt; </b></span>coding.code = <span style="color: blue">'89213-3'</span> <i>&quot;codeCode&quot;</i><span style="color: navy">;</span>
            qr<span style="color: navy"><b> -&gt; </b></span>coding.display = <span style="color: blue">'Obstetrics History and physical note'</span> <i>&quot;codeDisplay&quot;</i><span style="color: navy">;</span>
          <span style="color: navy">}</span> <i>&quot;codeCoding&quot;</i><span style="color: navy">;</span>
        <span style="color: navy">}</span> <i>&quot;historyCode&quot;</i><span style="color: navy">;</span>
        aH.value<b> as </b><span style="color: maroon">v</span><span style="color: navy"><b> -&gt; </b></span>obsH.value = <span style="color: maroon">v</span> <i>&quot;historyValue&quot;</i><span style="color: navy">;</span>
      <span style="color: navy">}</span> <i>&quot;historyObservation&quot;</i><span style="color: navy">;</span>
    <span style="color: navy">}</span> <i>&quot;historyAnswer&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;obsHistoryRule&quot;</i><span style="color: navy">;</span>
<span style="color: navy">}

</span><span style="color: navy">// </span><span style="color: green">─────────────────────────────────────────────────────────────────────────────</span>
<span style="color: navy">// </span><span style="color: green">Shared scaffolding. Repeated in each map rather than imported: the transform</span>
<span style="color: navy">// </span><span style="color: green">engine resolves `imports` against whatever StructureMaps happen to be on the</span>
<span style="color: navy">// </span><span style="color: green">server, and a form that stops extracting because a shared map was not</span>
<span style="color: navy">// </span><span style="color: green">uploaded is a worse failure than a duplicated group.</span>
<span style="color: navy">// </span><span style="color: green">─────────────────────────────────────────────────────────────────────────────</span>
<b>group </b>BuildObsBase<span style="color: navy">(</span><b>source</b> <span style="color: maroon">qr</span><span style="color: navy"> : </span>QR, <b>target</b> <span style="color: maroon">obs</span><span style="color: navy"> : </span>Observation, <b>target</b> <span style="color: maroon">entry</span><span style="color: navy">)</span><span style="color: navy"> {
</span>  qr<span style="color: navy"><b> -&gt; </b></span>obs.id = <b>uuid</b><span style="color: navy">(</span><span style="color: navy">)</span><b> then </b>SetObservationFullUrl<span style="color: navy">(</span><span style="color: maroon">obs</span><span style="color: navy">, </span><span style="color: maroon">entry</span><span style="color: navy">)</span> <i>&quot;idAndFullUrl&quot;</i><span style="color: navy">;</span>
  qr<span style="color: navy"><b> -&gt; </b></span>entry.request<b> as </b><span style="color: maroon">request</span><b> then</b><span style="color: navy"> {
</span>    qr<span style="color: navy"><b> -&gt; </b></span>request.method = <span style="color: blue">'POST'</span> <i>&quot;requestMethod&quot;</i><span style="color: navy">;</span>
    qr<span style="color: navy"><b> -&gt; </b></span>request.url = <span style="color: blue">'Observation'</span> <i>&quot;requestUrl&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;entryRequest&quot;</i><span style="color: navy">;</span>
  qr<span style="color: navy"><b> -&gt; </b></span>obs.status = <span style="color: blue">'final'</span> <i>&quot;status&quot;</i><span style="color: navy">;</span>
  qr.subject<b> as </b><span style="color: maroon">s</span><b> where </b><span style="color: navy">(</span>(reference.exists() and (reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Patient')))<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>obs.subject = <span style="color: maroon">s</span><span style="color: navy">;</span>
  qr.encounter<b> as </b><span style="color: maroon">e</span><b> where </b><span style="color: navy">(</span>(reference.exists() and (reference.startsWith('Encounter/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Encounter')))<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>obs.encounter = <span style="color: maroon">e</span><span style="color: navy">;</span>
  qr.authored<b> as </b><span style="color: maroon">t</span><span style="color: navy"><b> -&gt; </b></span>obs.effective = <span style="color: maroon">t</span> <i>&quot;effective&quot;</i><span style="color: navy">;</span>
  qr.source<b> as </b><span style="color: maroon">src</span><b> where </b><span style="color: navy">(</span>(reference.exists() and (reference.startsWith('Organization/') or reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Organization') or ('/' + type).endsWith('/Patient')))<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>obs.performer = <span style="color: maroon">src</span> <i>&quot;performerFromSource&quot;</i><span style="color: navy">;</span>
  qr<b> where </b><span style="color: navy">(</span>source.where(((reference.exists() and (reference.startsWith('Organization/') or reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Organization') or ('/' + type).endsWith('/Patient'))))).exists().not()<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>    qr.author<b> as </b><span style="color: maroon">a</span><b> where </b><span style="color: navy">(</span>(reference.exists() and (reference.startsWith('Organization/') or reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Organization') or ('/' + type).endsWith('/Patient')))<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>obs.performer = <span style="color: maroon">a</span> <i>&quot;performerFromAuthor&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;performerFallback&quot;</i><span style="color: navy">;</span>
  qr<span style="color: navy"><b> -&gt; </b></span>obs.derivedFrom = <b>create</b><span style="color: navy">(</span><span style="color: blue">'Reference'</span><span style="color: navy">)</span><b> as </b><span style="color: maroon">ref</span><b> then</b><span style="color: navy"> {
</span>    qr.id<b> as </b><span style="color: maroon">qid</span><span style="color: navy"><b> -&gt; </b></span>ref.reference = <span style="color: maroon">qid</span> <i>&quot;derivedFromRef&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;linkQuestionnaireResponse&quot;</i><span style="color: navy">;</span>
<span style="color: navy">}

</span><b>group </b>SetExamCategory<span style="color: navy">(</span><b>source</b> <span style="color: maroon">qr</span><span style="color: navy"> : </span>QR, <b>target</b> <span style="color: maroon">obs</span><span style="color: navy"> : </span>Observation<span style="color: navy">)</span><span style="color: navy"> {
</span>  qr<span style="color: navy"><b> -&gt; </b></span>obs.category<b> as </b><span style="color: maroon">cat</span><b> then</b><span style="color: navy"> {
</span>    qr<span style="color: navy"><b> -&gt; </b></span>cat.coding<b> as </b><span style="color: maroon">coding</span><b> then</b><span style="color: navy"> {
</span>      qr<span style="color: navy"><b> -&gt; </b></span>coding.system = <span style="color: blue">'http://terminology.hl7.org/CodeSystem/observation-category'</span> <i>&quot;categorySystem&quot;</i><span style="color: navy">;</span>
      qr<span style="color: navy"><b> -&gt; </b></span>coding.code = <span style="color: blue">'exam'</span> <i>&quot;categoryCode&quot;</i><span style="color: navy">;</span>
      qr<span style="color: navy"><b> -&gt; </b></span>coding.display = <span style="color: blue">'Exam'</span> <i>&quot;categoryDisplay&quot;</i><span style="color: navy">;</span>
    <span style="color: navy">}</span> <i>&quot;categoryCoding&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;category&quot;</i><span style="color: navy">;</span>
<span style="color: navy">}

</span><b>group </b>SetSocialHistoryCategory<span style="color: navy">(</span><b>source</b> <span style="color: maroon">qr</span><span style="color: navy"> : </span>QR, <b>target</b> <span style="color: maroon">obs</span><span style="color: navy"> : </span>Observation<span style="color: navy">)</span><span style="color: navy"> {
</span>  qr<span style="color: navy"><b> -&gt; </b></span>obs.category<b> as </b><span style="color: maroon">cat</span><b> then</b><span style="color: navy"> {
</span>    qr<span style="color: navy"><b> -&gt; </b></span>cat.coding<b> as </b><span style="color: maroon">coding</span><b> then</b><span style="color: navy"> {
</span>      qr<span style="color: navy"><b> -&gt; </b></span>coding.system = <span style="color: blue">'http://terminology.hl7.org/CodeSystem/observation-category'</span> <i>&quot;categorySystem&quot;</i><span style="color: navy">;</span>
      qr<span style="color: navy"><b> -&gt; </b></span>coding.code = <span style="color: blue">'social-history'</span> <i>&quot;categoryCode&quot;</i><span style="color: navy">;</span>
      qr<span style="color: navy"><b> -&gt; </b></span>coding.display = <span style="color: blue">'Social History'</span> <i>&quot;categoryDisplay&quot;</i><span style="color: navy">;</span>
    <span style="color: navy">}</span> <i>&quot;categoryCoding&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;category&quot;</i><span style="color: navy">;</span>
<span style="color: navy">}

</span><b>group </b>SetObservationFullUrl<span style="color: navy">(</span><b>source</b> <span style="color: maroon">obs</span><span style="color: navy"> : </span>Observation, <b>target</b> <span style="color: maroon">entry</span><span style="color: navy">)</span><span style="color: navy"> {
</span>  obs.id<b> as </b><span style="color: maroon">id</span><span style="color: navy"><b> -&gt; </b></span>entry.fullUrl = <b>append</b><span style="color: navy">(</span><span style="color: blue">'https://fhir.slade360.co.ke/fhir/Observation/'</span><span style="color: navy">, </span><span style="color: maroon">id</span><span style="color: navy">)</span> <i>&quot;assignFullUrl&quot;</i><span style="color: navy">;</span>
<span style="color: navy">}

</span><span style="color: navy">// </span><span style="color: green">── Tenancy ──────────────────────────────────────────────────────────────────</span>
<span style="color: navy">// </span><span style="color: green">Whose this is. The platform says which tenant a response belongs to with a</span>
<span style="color: navy">// </span><span style="color: green">tag on the response, and every tag the response carries is copied onto</span>
<span style="color: navy">// </span><span style="color: green">everything this map creates, as it is. Copied rather than named here, so the</span>
<span style="color: navy">// </span><span style="color: green">map never has to know which tenant it is running for, nor which system the</span>
<span style="color: navy">// </span><span style="color: green">tag is under: that system has moved more than once.</span>
<b>group </b>CopyResponseTags<span style="color: navy">(</span><b>source</b> <span style="color: maroon">qr</span><span style="color: navy"> : </span>QR, <b>target</b> <span style="color: maroon">r</span><span style="color: navy">)</span><span style="color: navy"> {
</span>  qr.meta<b> as </b><span style="color: maroon">qm</span><b> then</b><span style="color: navy"> {
</span>    qm.tag<b> as </b><span style="color: maroon">qt</span><span style="color: navy"><b> -&gt; </b></span> r.meta<b> as </b><span style="color: maroon">m</span><span style="color: navy">, </span> m.tag = <span style="color: maroon">qt</span> <i>&quot;copyTag&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;tenantTags&quot;</i><span style="color: navy">;</span>
<span style="color: navy">}

</span></pre></div>
  </text>
  <url
       value="https://fhir.slade360.co.ke/fhir/StructureMap/ExtractInpatientObstetricAdmissionAssessment"/>
  <version value="0.1.0"/>
  <name value="ExtractInpatientObstetricAdmissionAssessment"/>
  <title value="Inpatient Obstetric Admission Assessment Extraction"/>
  <status value="active"/>
  <date value="2026-10-06T18:48:22+00:00"/>
  <publisher value="Kathurima Kimathi"/>
  <contact>
    <name value="Kathurima Kimathi"/>
    <telecom>
      <system value="url"/>
      <value value="https://www.linkedin.com/in/kathurima-kimathi/"/>
    </telecom>
    <telecom>
      <system value="email"/>
      <value value="kathurimakimathi415@gmail.com"/>
    </telecom>
  </contact>
  <contact>
    <name value="Oscar John"/>
    <telecom>
      <system value="email"/>
      <value value="oscarjohnotieno@gmail.com"/>
      <use value="work"/>
    </telecom>
  </contact>
  <contact>
    <name value="Kennedy Omondi"/>
    <telecom>
      <system value="email"/>
      <value value="kennankole@gmail.com"/>
      <use value="work"/>
    </telecom>
  </contact>
  <description
               value="Four measurements out, four Observations. Gestation, fetal heart rate and cervical dilatation are readings taken at the bedside, so they carry category `exam`; the obstetric history is reported rather than measured, so it carries `social-history`. Every LOINC code here was checked against tx.fhir.org before use."/>
  <structure>
    <url
         value="http://hl7.org/fhir/StructureDefinition/QuestionnaireResponse"/>
    <mode value="source"/>
    <alias value="QR"/>
  </structure>
  <structure>
    <url value="http://hl7.org/fhir/StructureDefinition/Bundle"/>
    <mode value="target"/>
    <alias value="Bundle"/>
  </structure>
  <structure>
    <url value="http://hl7.org/fhir/StructureDefinition/Observation"/>
    <mode value="target"/>
    <alias value="Observation"/>
  </structure>
  <group>
    <name value="ExtractInpatientObstetricAdmissionAssessment"/>
    <input>
      <name value="qr"/>
      <type value="QR"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="bundle"/>
      <type value="Bundle"/>
      <mode value="target"/>
    </input>
    <rule>
      <name value="setBundleType"/>
      <source>
        <context value="qr"/>
      </source>
      <target>
        <context value="bundle"/>
        <element value="type"/>
        <transform value="copy"/>
        <parameter>
          <valueString value="transaction"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="gestationRule"/>
      <source>
        <context value="qr"/>
        <element value="item"/>
        <variable value="itG"/>
        <condition value="(linkId = 'gestation') and answer.value.exists()"/>
      </source>
      <rule>
        <name value="gestationAnswer"/>
        <source>
          <context value="itG"/>
          <element value="answer"/>
          <listMode value="first"/>
          <variable value="aG"/>
        </source>
        <rule>
          <name value="gestationObservation"/>
          <source>
            <context value="aG"/>
          </source>
          <target>
            <context value="bundle"/>
            <element value="entry"/>
            <variable value="entryG"/>
          </target>
          <target>
            <context value="entryG"/>
            <element value="resource"/>
            <variable value="obsG"/>
            <transform value="create"/>
            <parameter>
              <valueString value="Observation"/>
            </parameter>
          </target>
          <rule>
            <name value="responseTags"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obsG"/>
            </target>
            <dependent>
              <name value="CopyResponseTags"/>
              <parameter>
                <valueId value="qr"/>
              </parameter>
              <parameter>
                <valueId value="obsG"/>
              </parameter>
            </dependent>
          </rule>
          <rule>
            <name value="gestationBase"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obsG"/>
            </target>
            <target>
              <context value="entryG"/>
            </target>
            <dependent>
              <name value="BuildObsBase"/>
              <parameter>
                <valueId value="qr"/>
              </parameter>
              <parameter>
                <valueId value="obsG"/>
              </parameter>
              <parameter>
                <valueId value="entryG"/>
              </parameter>
            </dependent>
          </rule>
          <rule>
            <name value="gestationCategory"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obsG"/>
            </target>
            <dependent>
              <name value="SetExamCategory"/>
              <parameter>
                <valueId value="qr"/>
              </parameter>
              <parameter>
                <valueId value="obsG"/>
              </parameter>
            </dependent>
          </rule>
          <rule>
            <name value="gestationCode"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obsG"/>
              <element value="code"/>
              <variable value="code"/>
            </target>
            <rule>
              <name value="codeCoding"/>
              <source>
                <context value="qr"/>
              </source>
              <target>
                <context value="code"/>
                <element value="coding"/>
                <variable value="coding"/>
              </target>
              <rule>
                <name value="codeSystem"/>
                <source>
                  <context value="qr"/>
                </source>
                <target>
                  <context value="coding"/>
                  <element value="system"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueString value="http://loinc.org"/>
                  </parameter>
                </target>
              </rule>
              <rule>
                <name value="codeCode"/>
                <source>
                  <context value="qr"/>
                </source>
                <target>
                  <context value="coding"/>
                  <element value="code"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueString value="18185-9"/>
                  </parameter>
                </target>
              </rule>
              <rule>
                <name value="codeDisplay"/>
                <source>
                  <context value="qr"/>
                </source>
                <target>
                  <context value="coding"/>
                  <element value="display"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueString value="Gestational age"/>
                  </parameter>
                </target>
              </rule>
            </rule>
          </rule>
          <rule>
            <name value="gestationValue"/>
            <source>
              <context value="aG"/>
              <element value="value"/>
              <variable value="v"/>
            </source>
            <target>
              <context value="obsG"/>
              <element value="value"/>
              <transform value="copy"/>
              <parameter>
                <valueId value="v"/>
              </parameter>
            </target>
            <documentation
                           value="The item is type `quantity` with a unitOption pinning weeks, so the
answer arrives as a Quantity and is copied through whole."/>
          </rule>
        </rule>
      </rule>
    </rule>
    <rule>
      <name value="fhrRule"/>
      <source>
        <context value="qr"/>
        <element value="item"/>
        <variable value="itF"/>
        <condition value="(linkId = 'fhr') and answer.value.exists()"/>
      </source>
      <rule>
        <name value="fhrAnswer"/>
        <source>
          <context value="itF"/>
          <element value="answer"/>
          <listMode value="first"/>
          <variable value="aF"/>
        </source>
        <rule>
          <name value="fhrObservation"/>
          <source>
            <context value="aF"/>
          </source>
          <target>
            <context value="bundle"/>
            <element value="entry"/>
            <variable value="entryF"/>
          </target>
          <target>
            <context value="entryF"/>
            <element value="resource"/>
            <variable value="obsF"/>
            <transform value="create"/>
            <parameter>
              <valueString value="Observation"/>
            </parameter>
          </target>
          <rule>
            <name value="responseTags"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obsF"/>
            </target>
            <dependent>
              <name value="CopyResponseTags"/>
              <parameter>
                <valueId value="qr"/>
              </parameter>
              <parameter>
                <valueId value="obsF"/>
              </parameter>
            </dependent>
          </rule>
          <rule>
            <name value="fhrBase"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obsF"/>
            </target>
            <target>
              <context value="entryF"/>
            </target>
            <dependent>
              <name value="BuildObsBase"/>
              <parameter>
                <valueId value="qr"/>
              </parameter>
              <parameter>
                <valueId value="obsF"/>
              </parameter>
              <parameter>
                <valueId value="entryF"/>
              </parameter>
            </dependent>
          </rule>
          <rule>
            <name value="fhrCategory"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obsF"/>
            </target>
            <dependent>
              <name value="SetExamCategory"/>
              <parameter>
                <valueId value="qr"/>
              </parameter>
              <parameter>
                <valueId value="obsF"/>
              </parameter>
            </dependent>
          </rule>
          <rule>
            <name value="fhrCode"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obsF"/>
              <element value="code"/>
              <variable value="code"/>
            </target>
            <rule>
              <name value="codeCoding"/>
              <source>
                <context value="qr"/>
              </source>
              <target>
                <context value="code"/>
                <element value="coding"/>
                <variable value="coding"/>
              </target>
              <rule>
                <name value="codeSystem"/>
                <source>
                  <context value="qr"/>
                </source>
                <target>
                  <context value="coding"/>
                  <element value="system"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueString value="http://loinc.org"/>
                  </parameter>
                </target>
              </rule>
              <rule>
                <name value="codeCode"/>
                <source>
                  <context value="qr"/>
                </source>
                <target>
                  <context value="coding"/>
                  <element value="code"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueString value="55283-6"/>
                  </parameter>
                </target>
              </rule>
              <rule>
                <name value="codeDisplay"/>
                <source>
                  <context value="qr"/>
                </source>
                <target>
                  <context value="coding"/>
                  <element value="display"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueString value="Fetal Heart rate"/>
                  </parameter>
                </target>
              </rule>
            </rule>
          </rule>
          <rule>
            <name value="fhrValue"/>
            <source>
              <context value="aF"/>
              <element value="value"/>
              <variable value="v"/>
            </source>
            <target>
              <context value="obsF"/>
              <element value="value"/>
              <transform value="copy"/>
              <parameter>
                <valueId value="v"/>
              </parameter>
            </target>
          </rule>
        </rule>
      </rule>
    </rule>
    <rule>
      <name value="dilatationRule"/>
      <source>
        <context value="qr"/>
        <element value="item"/>
        <variable value="itD"/>
        <condition value="(linkId = 'dilatation') and answer.value.exists()"/>
      </source>
      <rule>
        <name value="dilatationAnswer"/>
        <source>
          <context value="itD"/>
          <element value="answer"/>
          <listMode value="first"/>
          <variable value="aD"/>
        </source>
        <rule>
          <name value="dilatationObservation"/>
          <source>
            <context value="aD"/>
          </source>
          <target>
            <context value="bundle"/>
            <element value="entry"/>
            <variable value="entryD"/>
          </target>
          <target>
            <context value="entryD"/>
            <element value="resource"/>
            <variable value="obsD"/>
            <transform value="create"/>
            <parameter>
              <valueString value="Observation"/>
            </parameter>
          </target>
          <rule>
            <name value="responseTags"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obsD"/>
            </target>
            <dependent>
              <name value="CopyResponseTags"/>
              <parameter>
                <valueId value="qr"/>
              </parameter>
              <parameter>
                <valueId value="obsD"/>
              </parameter>
            </dependent>
          </rule>
          <rule>
            <name value="dilatationBase"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obsD"/>
            </target>
            <target>
              <context value="entryD"/>
            </target>
            <dependent>
              <name value="BuildObsBase"/>
              <parameter>
                <valueId value="qr"/>
              </parameter>
              <parameter>
                <valueId value="obsD"/>
              </parameter>
              <parameter>
                <valueId value="entryD"/>
              </parameter>
            </dependent>
          </rule>
          <rule>
            <name value="dilatationCategory"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obsD"/>
            </target>
            <dependent>
              <name value="SetExamCategory"/>
              <parameter>
                <valueId value="qr"/>
              </parameter>
              <parameter>
                <valueId value="obsD"/>
              </parameter>
            </dependent>
          </rule>
          <rule>
            <name value="dilatationCode"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obsD"/>
              <element value="code"/>
              <variable value="code"/>
            </target>
            <rule>
              <name value="codeCoding"/>
              <source>
                <context value="qr"/>
              </source>
              <target>
                <context value="code"/>
                <element value="coding"/>
                <variable value="coding"/>
              </target>
              <rule>
                <name value="codeSystem"/>
                <source>
                  <context value="qr"/>
                </source>
                <target>
                  <context value="coding"/>
                  <element value="system"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueString value="http://loinc.org"/>
                  </parameter>
                </target>
              </rule>
              <rule>
                <name value="codeCode"/>
                <source>
                  <context value="qr"/>
                </source>
                <target>
                  <context value="coding"/>
                  <element value="code"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueString value="11784-6"/>
                  </parameter>
                </target>
              </rule>
              <rule>
                <name value="codeDisplay"/>
                <source>
                  <context value="qr"/>
                </source>
                <target>
                  <context value="coding"/>
                  <element value="display"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueString
                                 value="Cervical canal external os Diameter palpation"/>
                  </parameter>
                </target>
              </rule>
            </rule>
          </rule>
          <rule>
            <name value="dilatationValue"/>
            <source>
              <context value="aD"/>
              <element value="value"/>
              <variable value="v"/>
            </source>
            <target>
              <context value="obsD"/>
              <element value="value"/>
              <transform value="copy"/>
              <parameter>
                <valueId value="v"/>
              </parameter>
            </target>
          </rule>
        </rule>
      </rule>
    </rule>
    <rule>
      <name value="obsHistoryRule"/>
      <source>
        <context value="qr"/>
        <element value="item"/>
        <variable value="itH"/>
        <condition value="(linkId = 'obsHistory') and answer.value.exists()"/>
      </source>
      <rule>
        <name value="historyAnswer"/>
        <source>
          <context value="itH"/>
          <element value="answer"/>
          <listMode value="first"/>
          <variable value="aH"/>
        </source>
        <rule>
          <name value="historyObservation"/>
          <source>
            <context value="aH"/>
          </source>
          <target>
            <context value="bundle"/>
            <element value="entry"/>
            <variable value="entryH"/>
          </target>
          <target>
            <context value="entryH"/>
            <element value="resource"/>
            <variable value="obsH"/>
            <transform value="create"/>
            <parameter>
              <valueString value="Observation"/>
            </parameter>
          </target>
          <rule>
            <name value="responseTags"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obsH"/>
            </target>
            <dependent>
              <name value="CopyResponseTags"/>
              <parameter>
                <valueId value="qr"/>
              </parameter>
              <parameter>
                <valueId value="obsH"/>
              </parameter>
            </dependent>
          </rule>
          <rule>
            <name value="historyBase"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obsH"/>
            </target>
            <target>
              <context value="entryH"/>
            </target>
            <dependent>
              <name value="BuildObsBase"/>
              <parameter>
                <valueId value="qr"/>
              </parameter>
              <parameter>
                <valueId value="obsH"/>
              </parameter>
              <parameter>
                <valueId value="entryH"/>
              </parameter>
            </dependent>
          </rule>
          <rule>
            <name value="historyCategory"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obsH"/>
            </target>
            <dependent>
              <name value="SetSocialHistoryCategory"/>
              <parameter>
                <valueId value="qr"/>
              </parameter>
              <parameter>
                <valueId value="obsH"/>
              </parameter>
            </dependent>
          </rule>
          <rule>
            <name value="historyCode"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obsH"/>
              <element value="code"/>
              <variable value="code"/>
            </target>
            <rule>
              <name value="codeCoding"/>
              <source>
                <context value="qr"/>
              </source>
              <target>
                <context value="code"/>
                <element value="coding"/>
                <variable value="coding"/>
              </target>
              <rule>
                <name value="codeSystem"/>
                <source>
                  <context value="qr"/>
                </source>
                <target>
                  <context value="coding"/>
                  <element value="system"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueString value="http://loinc.org"/>
                  </parameter>
                </target>
              </rule>
              <rule>
                <name value="codeCode"/>
                <source>
                  <context value="qr"/>
                </source>
                <target>
                  <context value="coding"/>
                  <element value="code"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueString value="89213-3"/>
                  </parameter>
                </target>
              </rule>
              <rule>
                <name value="codeDisplay"/>
                <source>
                  <context value="qr"/>
                </source>
                <target>
                  <context value="coding"/>
                  <element value="display"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueString
                                 value="Obstetrics History and physical note"/>
                  </parameter>
                </target>
              </rule>
            </rule>
          </rule>
          <rule>
            <name value="historyValue"/>
            <source>
              <context value="aH"/>
              <element value="value"/>
              <variable value="v"/>
            </source>
            <target>
              <context value="obsH"/>
              <element value="value"/>
              <transform value="copy"/>
              <parameter>
                <valueId value="v"/>
              </parameter>
            </target>
          </rule>
        </rule>
      </rule>
    </rule>
  </group>
  <group>
    <name value="BuildObsBase"/>
    <documentation
                   value="─────────────────────────────────────────────────────────────────────────────
Shared scaffolding. Repeated in each map rather than imported: the transform
engine resolves `imports` against whatever StructureMaps happen to be on the
server, and a form that stops extracting because a shared map was not
uploaded is a worse failure than a duplicated group.
─────────────────────────────────────────────────────────────────────────────"/>
    <input>
      <name value="qr"/>
      <type value="QR"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="obs"/>
      <type value="Observation"/>
      <mode value="target"/>
    </input>
    <input>
      <name value="entry"/>
      <mode value="target"/>
    </input>
    <rule>
      <name value="idAndFullUrl"/>
      <source>
        <context value="qr"/>
      </source>
      <target>
        <context value="obs"/>
        <element value="id"/>
        <transform value="uuid"/>
      </target>
      <dependent>
        <name value="SetObservationFullUrl"/>
        <parameter>
          <valueId value="obs"/>
        </parameter>
        <parameter>
          <valueId value="entry"/>
        </parameter>
      </dependent>
    </rule>
    <rule>
      <name value="entryRequest"/>
      <source>
        <context value="qr"/>
      </source>
      <target>
        <context value="entry"/>
        <element value="request"/>
        <variable value="request"/>
      </target>
      <rule>
        <name value="requestMethod"/>
        <source>
          <context value="qr"/>
        </source>
        <target>
          <context value="request"/>
          <element value="method"/>
          <transform value="copy"/>
          <parameter>
            <valueString value="POST"/>
          </parameter>
        </target>
      </rule>
      <rule>
        <name value="requestUrl"/>
        <source>
          <context value="qr"/>
        </source>
        <target>
          <context value="request"/>
          <element value="url"/>
          <transform value="copy"/>
          <parameter>
            <valueString value="Observation"/>
          </parameter>
        </target>
      </rule>
    </rule>
    <rule>
      <name value="status"/>
      <source>
        <context value="qr"/>
      </source>
      <target>
        <context value="obs"/>
        <element value="status"/>
        <transform value="copy"/>
        <parameter>
          <valueString value="final"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="subject"/>
      <source>
        <context value="qr"/>
        <element value="subject"/>
        <variable value="s"/>
        <condition
                   value="(reference.exists() and (reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Patient')))"/>
      </source>
      <target>
        <context value="obs"/>
        <element value="subject"/>
        <transform value="copy"/>
        <parameter>
          <valueId value="s"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="encounter"/>
      <source>
        <context value="qr"/>
        <element value="encounter"/>
        <variable value="e"/>
        <condition
                   value="(reference.exists() and (reference.startsWith('Encounter/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Encounter')))"/>
      </source>
      <target>
        <context value="obs"/>
        <element value="encounter"/>
        <transform value="copy"/>
        <parameter>
          <valueId value="e"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="effective"/>
      <source>
        <context value="qr"/>
        <element value="authored"/>
        <variable value="t"/>
      </source>
      <target>
        <context value="obs"/>
        <element value="effective"/>
        <transform value="copy"/>
        <parameter>
          <valueId value="t"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="performerFromSource"/>
      <source>
        <context value="qr"/>
        <element value="source"/>
        <variable value="src"/>
        <condition
                   value="(reference.exists() and (reference.startsWith('Organization/') or reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Organization') or ('/' + type).endsWith('/Patient')))"/>
      </source>
      <target>
        <context value="obs"/>
        <element value="performer"/>
        <transform value="copy"/>
        <parameter>
          <valueId value="src"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="performerFallback"/>
      <source>
        <context value="qr"/>
        <condition
                   value="source.where(((reference.exists() and (reference.startsWith('Organization/') or reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Organization') or ('/' + type).endsWith('/Patient'))))).exists().not()"/>
      </source>
      <rule>
        <name value="performerFromAuthor"/>
        <source>
          <context value="qr"/>
          <element value="author"/>
          <variable value="a"/>
          <condition
                     value="(reference.exists() and (reference.startsWith('Organization/') or reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Organization') or ('/' + type).endsWith('/Patient')))"/>
        </source>
        <target>
          <context value="obs"/>
          <element value="performer"/>
          <transform value="copy"/>
          <parameter>
            <valueId value="a"/>
          </parameter>
        </target>
      </rule>
    </rule>
    <rule>
      <name value="linkQuestionnaireResponse"/>
      <source>
        <context value="qr"/>
      </source>
      <target>
        <context value="obs"/>
        <element value="derivedFrom"/>
        <variable value="ref"/>
        <transform value="create"/>
        <parameter>
          <valueString value="Reference"/>
        </parameter>
      </target>
      <rule>
        <name value="derivedFromRef"/>
        <source>
          <context value="qr"/>
          <element value="id"/>
          <variable value="qid"/>
        </source>
        <target>
          <context value="ref"/>
          <element value="reference"/>
          <transform value="copy"/>
          <parameter>
            <valueId value="qid"/>
          </parameter>
        </target>
      </rule>
    </rule>
  </group>
  <group>
    <name value="SetExamCategory"/>
    <input>
      <name value="qr"/>
      <type value="QR"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="obs"/>
      <type value="Observation"/>
      <mode value="target"/>
    </input>
    <rule>
      <name value="category"/>
      <source>
        <context value="qr"/>
      </source>
      <target>
        <context value="obs"/>
        <element value="category"/>
        <variable value="cat"/>
      </target>
      <rule>
        <name value="categoryCoding"/>
        <source>
          <context value="qr"/>
        </source>
        <target>
          <context value="cat"/>
          <element value="coding"/>
          <variable value="coding"/>
        </target>
        <rule>
          <name value="categorySystem"/>
          <source>
            <context value="qr"/>
          </source>
          <target>
            <context value="coding"/>
            <element value="system"/>
            <transform value="copy"/>
            <parameter>
              <valueString
                           value="http://terminology.hl7.org/CodeSystem/observation-category"/>
            </parameter>
          </target>
        </rule>
        <rule>
          <name value="categoryCode"/>
          <source>
            <context value="qr"/>
          </source>
          <target>
            <context value="coding"/>
            <element value="code"/>
            <transform value="copy"/>
            <parameter>
              <valueString value="exam"/>
            </parameter>
          </target>
        </rule>
        <rule>
          <name value="categoryDisplay"/>
          <source>
            <context value="qr"/>
          </source>
          <target>
            <context value="coding"/>
            <element value="display"/>
            <transform value="copy"/>
            <parameter>
              <valueString value="Exam"/>
            </parameter>
          </target>
        </rule>
      </rule>
    </rule>
  </group>
  <group>
    <name value="SetSocialHistoryCategory"/>
    <input>
      <name value="qr"/>
      <type value="QR"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="obs"/>
      <type value="Observation"/>
      <mode value="target"/>
    </input>
    <rule>
      <name value="category"/>
      <source>
        <context value="qr"/>
      </source>
      <target>
        <context value="obs"/>
        <element value="category"/>
        <variable value="cat"/>
      </target>
      <rule>
        <name value="categoryCoding"/>
        <source>
          <context value="qr"/>
        </source>
        <target>
          <context value="cat"/>
          <element value="coding"/>
          <variable value="coding"/>
        </target>
        <rule>
          <name value="categorySystem"/>
          <source>
            <context value="qr"/>
          </source>
          <target>
            <context value="coding"/>
            <element value="system"/>
            <transform value="copy"/>
            <parameter>
              <valueString
                           value="http://terminology.hl7.org/CodeSystem/observation-category"/>
            </parameter>
          </target>
        </rule>
        <rule>
          <name value="categoryCode"/>
          <source>
            <context value="qr"/>
          </source>
          <target>
            <context value="coding"/>
            <element value="code"/>
            <transform value="copy"/>
            <parameter>
              <valueString value="social-history"/>
            </parameter>
          </target>
        </rule>
        <rule>
          <name value="categoryDisplay"/>
          <source>
            <context value="qr"/>
          </source>
          <target>
            <context value="coding"/>
            <element value="display"/>
            <transform value="copy"/>
            <parameter>
              <valueString value="Social History"/>
            </parameter>
          </target>
        </rule>
      </rule>
    </rule>
  </group>
  <group>
    <name value="SetObservationFullUrl"/>
    <input>
      <name value="obs"/>
      <type value="Observation"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="entry"/>
      <mode value="target"/>
    </input>
    <rule>
      <name value="assignFullUrl"/>
      <source>
        <context value="obs"/>
        <element value="id"/>
        <variable value="id"/>
      </source>
      <target>
        <context value="entry"/>
        <element value="fullUrl"/>
        <transform value="append"/>
        <parameter>
          <valueString value="https://fhir.slade360.co.ke/fhir/Observation/"/>
        </parameter>
        <parameter>
          <valueId value="id"/>
        </parameter>
      </target>
    </rule>
  </group>
  <group>
    <name value="CopyResponseTags"/>
    <documentation
                   value="── Tenancy ──────────────────────────────────────────────────────────────────
Whose this is. The platform says which tenant a response belongs to with a
tag on the response, and every tag the response carries is copied onto
everything this map creates, as it is. Copied rather than named here, so the
map never has to know which tenant it is running for, nor which system the
tag is under: that system has moved more than once."/>
    <input>
      <name value="qr"/>
      <type value="QR"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="r"/>
      <mode value="target"/>
    </input>
    <rule>
      <name value="tenantTags"/>
      <source>
        <context value="qr"/>
        <element value="meta"/>
        <variable value="qm"/>
      </source>
      <rule>
        <name value="copyTag"/>
        <source>
          <context value="qm"/>
          <element value="tag"/>
          <variable value="qt"/>
        </source>
        <target>
          <context value="r"/>
          <element value="meta"/>
          <variable value="m"/>
        </target>
        <target>
          <context value="m"/>
          <element value="tag"/>
          <transform value="copy"/>
          <parameter>
            <valueId value="qt"/>
          </parameter>
        </target>
      </rule>
    </rule>
  </group>
</StructureMap>