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

: Discharge Clearance: Clinical Readiness Extraction - XML Representation

Active as of 2026-10-06

Raw xml | Download


<StructureMap xmlns="http://hl7.org/fhir">
  <id value="ExtractDischargeClearanceClinicalReadiness"/>
  <text>
    <status value="generated"/>
    <div xmlns="http://www.w3.org/1999/xhtml"><p class="res-header-id"><b>Generated Narrative: StructureMap ExtractDischargeClearanceClinicalReadiness</b></p><a name="ExtractDischargeClearanceClinicalReadiness"> </a><a name="hcExtractDischargeClearanceClinicalReadiness"> </a><pre class="fml">
<span style="color: #cc00cc">/// <b>url</b> = </span><span style="color: blue">'https://fhir.slade360.co.ke/fhir/StructureMap/ExtractDischargeClearanceClinicalReadiness'</span>
<span style="color: #cc00cc">/// <b>name</b> = </span><span style="color: blue">'ExtractDischargeClearanceClinicalReadiness'</span>
<span style="color: #cc00cc">/// <b>title</b> = </span><span style="color: blue">'Discharge Clearance: Clinical Readiness 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">'Turns the discharging clinician\'s readiness attestation into four survey Observations: oral intake, mobility, pain control and the condition the patient is leaving in. Each is its own Observation because a clinician answers four separate questions and one flat resource would let an answer to one stand in for an answer to another. The handover sentence rides as a note on the condition Observation rather than becoming a fifth: it is prose about the discharge, and an Observation whose value is a paragraph answers no query. Nothing here writes to the Encounter -- closing the stay and recording the discharge disposition belong to the EMR\'s discharge workflow, and the condition a patient leaves in is a different axis from where they went. The signature the form collects is a typed name, which SGHIObservation cannot carry as a performer, so it stays in the response and out of the extracted resources.'</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>ExtractDischargeClearanceClinicalReadiness<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>
  <span style="color: navy">// </span><span style="color: green">linkId 301989955559 — &quot;Oral intake tolerated&quot;</span>
  qr.item<b> as </b><span style="color: maroon">it</span><b> where </b><span style="color: navy">(</span>(linkId = '301989955559') and answer.value.exists()<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>    it.answer first<b> as </b><span style="color: maroon">a</span><b> then</b><span style="color: navy"> {
</span>      a<span style="color: navy"><b> -&gt; </b></span> bundle.entry<b> as </b><span style="color: maroon">entry</span><span style="color: navy">, </span> entry.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">obs</span><b> then</b><span style="color: navy"> {
</span>        qr<span style="color: navy"><b> -&gt; </b></span>obs<b> then </b>CopyResponseTags<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">obs</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> obs<span style="color: navy">, </span> entry<b> then </b>BuildClearanceObs<span style="color: navy">(</span><span style="color: maroon">qr</span><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;oralIntakeBase&quot;</i><span style="color: navy">;</span>
        qr<span style="color: navy"><b> -&gt; </b></span>obs.code<b> as </b><span style="color: maroon">oralIntakeCodeCc</span><b> then</b><span style="color: navy"> {
</span>          qr<span style="color: navy"><b> -&gt; </b></span>oralIntakeCodeCc.coding<b> as </b><span style="color: maroon">oralIntakeCodeCoding</span><b> then</b><span style="color: navy"> {
</span>            qr<span style="color: navy"><b> -&gt; </b></span>oralIntakeCodeCoding.system = <span style="color: blue">'https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem'</span> <i>&quot;oralIntakeCodeSystem&quot;</i><span style="color: navy">;</span>
            qr<span style="color: navy"><b> -&gt; </b></span>oralIntakeCodeCoding.code = <span style="color: blue">'oral-intake-at-discharge'</span> <i>&quot;oralIntakeCodeCode&quot;</i><span style="color: navy">;</span>
            qr<span style="color: navy"><b> -&gt; </b></span>oralIntakeCodeCoding.display = <span style="color: blue">'Oral intake tolerated at discharge'</span> <i>&quot;oralIntakeCodeDisplay&quot;</i><span style="color: navy">;</span>
          <span style="color: navy">}</span> <i>&quot;oralIntakeCodeCodingRule&quot;</i><span style="color: navy">;</span>
        <span style="color: navy">}</span> <i>&quot;oralIntakeCode&quot;</i><span style="color: navy">;</span>
        a<span style="color: navy"><b> -&gt; </b></span>obs<b> then </b>SetCodedValue<span style="color: navy">(</span><span style="color: maroon">a</span><span style="color: navy">, </span><span style="color: maroon">obs</span><span style="color: navy">)</span> <i>&quot;oralIntakeValue&quot;</i><span style="color: navy">;</span>
      <span style="color: navy">}</span> <i>&quot;oralIntakeObs&quot;</i><span style="color: navy">;</span>
    <span style="color: navy">}</span> <i>&quot;oralIntakeAnswer&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;oralIntakeRule&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">// </span><span style="color: green">linkId 507198101338 — &quot;Mobility&quot;</span>
  qr.item<b> as </b><span style="color: maroon">it</span><b> where </b><span style="color: navy">(</span>(linkId = '507198101338') and answer.value.exists()<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>    it.answer first<b> as </b><span style="color: maroon">a</span><b> then</b><span style="color: navy"> {
</span>      a<span style="color: navy"><b> -&gt; </b></span> bundle.entry<b> as </b><span style="color: maroon">entry</span><span style="color: navy">, </span> entry.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">obs</span><b> then</b><span style="color: navy"> {
</span>        qr<span style="color: navy"><b> -&gt; </b></span>obs<b> then </b>CopyResponseTags<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">obs</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> obs<span style="color: navy">, </span> entry<b> then </b>BuildClearanceObs<span style="color: navy">(</span><span style="color: maroon">qr</span><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;mobilityBase&quot;</i><span style="color: navy">;</span>
        qr<span style="color: navy"><b> -&gt; </b></span>obs.code<b> as </b><span style="color: maroon">mobilityCodeCc</span><b> then</b><span style="color: navy"> {
</span>          qr<span style="color: navy"><b> -&gt; </b></span>mobilityCodeCc.coding<b> as </b><span style="color: maroon">mobilityCodeCoding</span><b> then</b><span style="color: navy"> {
</span>            qr<span style="color: navy"><b> -&gt; </b></span>mobilityCodeCoding.system = <span style="color: blue">'https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem'</span> <i>&quot;mobilityCodeSystem&quot;</i><span style="color: navy">;</span>
            qr<span style="color: navy"><b> -&gt; </b></span>mobilityCodeCoding.code = <span style="color: blue">'mobility-at-discharge'</span> <i>&quot;mobilityCodeCode&quot;</i><span style="color: navy">;</span>
            qr<span style="color: navy"><b> -&gt; </b></span>mobilityCodeCoding.display = <span style="color: blue">'Mobility at discharge'</span> <i>&quot;mobilityCodeDisplay&quot;</i><span style="color: navy">;</span>
          <span style="color: navy">}</span> <i>&quot;mobilityCodeCodingRule&quot;</i><span style="color: navy">;</span>
        <span style="color: navy">}</span> <i>&quot;mobilityCode&quot;</i><span style="color: navy">;</span>
        a<span style="color: navy"><b> -&gt; </b></span>obs<b> then </b>SetCodedValue<span style="color: navy">(</span><span style="color: maroon">a</span><span style="color: navy">, </span><span style="color: maroon">obs</span><span style="color: navy">)</span> <i>&quot;mobilityValue&quot;</i><span style="color: navy">;</span>
      <span style="color: navy">}</span> <i>&quot;mobilityObs&quot;</i><span style="color: navy">;</span>
    <span style="color: navy">}</span> <i>&quot;mobilityAnswer&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;mobilityRule&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">// </span><span style="color: green">linkId 852812667233 — &quot;Pain controlled&quot;</span>
  qr.item<b> as </b><span style="color: maroon">it</span><b> where </b><span style="color: navy">(</span>(linkId = '852812667233') and answer.value.exists()<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>    it.answer first<b> as </b><span style="color: maroon">a</span><b> then</b><span style="color: navy"> {
</span>      a<span style="color: navy"><b> -&gt; </b></span> bundle.entry<b> as </b><span style="color: maroon">entry</span><span style="color: navy">, </span> entry.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">obs</span><b> then</b><span style="color: navy"> {
</span>        qr<span style="color: navy"><b> -&gt; </b></span>obs<b> then </b>CopyResponseTags<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">obs</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> obs<span style="color: navy">, </span> entry<b> then </b>BuildClearanceObs<span style="color: navy">(</span><span style="color: maroon">qr</span><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;painControlBase&quot;</i><span style="color: navy">;</span>
        qr<span style="color: navy"><b> -&gt; </b></span>obs.code<b> as </b><span style="color: maroon">painControlCodeCc</span><b> then</b><span style="color: navy"> {
</span>          qr<span style="color: navy"><b> -&gt; </b></span>painControlCodeCc.coding<b> as </b><span style="color: maroon">painControlCodeCoding</span><b> then</b><span style="color: navy"> {
</span>            qr<span style="color: navy"><b> -&gt; </b></span>painControlCodeCoding.system = <span style="color: blue">'https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem'</span> <i>&quot;painControlCodeSystem&quot;</i><span style="color: navy">;</span>
            qr<span style="color: navy"><b> -&gt; </b></span>painControlCodeCoding.code = <span style="color: blue">'pain-control-at-discharge'</span> <i>&quot;painControlCodeCode&quot;</i><span style="color: navy">;</span>
            qr<span style="color: navy"><b> -&gt; </b></span>painControlCodeCoding.display = <span style="color: blue">'Pain control at discharge'</span> <i>&quot;painControlCodeDisplay&quot;</i><span style="color: navy">;</span>
          <span style="color: navy">}</span> <i>&quot;painControlCodeCodingRule&quot;</i><span style="color: navy">;</span>
        <span style="color: navy">}</span> <i>&quot;painControlCode&quot;</i><span style="color: navy">;</span>
        a<span style="color: navy"><b> -&gt; </b></span>obs<b> then </b>SetCodedValue<span style="color: navy">(</span><span style="color: maroon">a</span><span style="color: navy">, </span><span style="color: maroon">obs</span><span style="color: navy">)</span> <i>&quot;painControlValue&quot;</i><span style="color: navy">;</span>
      <span style="color: navy">}</span> <i>&quot;painControlObs&quot;</i><span style="color: navy">;</span>
    <span style="color: navy">}</span> <i>&quot;painControlAnswer&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;painControlRule&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">// </span><span style="color: green">linkId 108099570999 — &quot;Condition at discharge&quot;. This one carries the</span>
  <span style="color: navy">// </span><span style="color: green">free-text handover as a note, so it is the Observation a reader lands on</span>
  <span style="color: navy">// </span><span style="color: green">when they want the clinician's own words.</span>
  qr.item<b> as </b><span style="color: maroon">it</span><b> where </b><span style="color: navy">(</span>(linkId = '108099570999') and answer.value.exists()<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>    it.answer first<b> as </b><span style="color: maroon">a</span><b> then</b><span style="color: navy"> {
</span>      a<span style="color: navy"><b> -&gt; </b></span> bundle.entry<b> as </b><span style="color: maroon">entry</span><span style="color: navy">, </span> entry.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">obs</span><b> then</b><span style="color: navy"> {
</span>        qr<span style="color: navy"><b> -&gt; </b></span>obs<b> then </b>CopyResponseTags<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">obs</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> obs<span style="color: navy">, </span> entry<b> then </b>BuildClearanceObs<span style="color: navy">(</span><span style="color: maroon">qr</span><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;conditionBase&quot;</i><span style="color: navy">;</span>
        qr<span style="color: navy"><b> -&gt; </b></span>obs.code<b> as </b><span style="color: maroon">conditionCodeCc</span><b> then</b><span style="color: navy"> {
</span>          qr<span style="color: navy"><b> -&gt; </b></span>conditionCodeCc.coding<b> as </b><span style="color: maroon">conditionCodeCoding</span><b> then</b><span style="color: navy"> {
</span>            qr<span style="color: navy"><b> -&gt; </b></span>conditionCodeCoding.system = <span style="color: blue">'https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem'</span> <i>&quot;conditionCodeSystem&quot;</i><span style="color: navy">;</span>
            qr<span style="color: navy"><b> -&gt; </b></span>conditionCodeCoding.code = <span style="color: blue">'patient-condition-at-discharge'</span> <i>&quot;conditionCodeCode&quot;</i><span style="color: navy">;</span>
            qr<span style="color: navy"><b> -&gt; </b></span>conditionCodeCoding.display = <span style="color: blue">'Condition at discharge'</span> <i>&quot;conditionCodeDisplay&quot;</i><span style="color: navy">;</span>
          <span style="color: navy">}</span> <i>&quot;conditionCodeCodingRule&quot;</i><span style="color: navy">;</span>
        <span style="color: navy">}</span> <i>&quot;conditionCode&quot;</i><span style="color: navy">;</span>
        a<span style="color: navy"><b> -&gt; </b></span>obs<b> then </b>SetCodedValue<span style="color: navy">(</span><span style="color: maroon">a</span><span style="color: navy">, </span><span style="color: maroon">obs</span><span style="color: navy">)</span> <i>&quot;conditionValue&quot;</i><span style="color: navy">;</span>
        <span style="color: navy">// </span><span style="color: green">linkId 474741611141 — &quot;Anything the next clinician should know&quot;</span>
        qr.item<b> as </b><span style="color: maroon">itNote</span><b> where </b><span style="color: navy">(</span>(linkId = '474741611141') and answer.value.exists()<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>          itNote.answer first<b> as </b><span style="color: maroon">aNote</span><b> then</b><span style="color: navy"> {
</span>            aNote.value<b> as </b><span style="color: maroon">nv</span><span style="color: navy"><b> -&gt; </b></span>obs.note<b> as </b><span style="color: maroon">note</span><b> then</b><span style="color: navy"> {
</span>              nv<span style="color: navy"><b> -&gt; </b></span>note.text = <span style="color: maroon">nv</span> <i>&quot;handoverNoteText&quot;</i><span style="color: navy">;</span>
              qr.authored<b> as </b><span style="color: maroon">t</span><span style="color: navy"><b> -&gt; </b></span>note.time = <span style="color: maroon">t</span> <i>&quot;handoverNoteTime&quot;</i><span style="color: navy">;</span>
            <span style="color: navy">}</span> <i>&quot;handoverNote&quot;</i><span style="color: navy">;</span>
          <span style="color: navy">}</span> <i>&quot;handoverNoteAnswer&quot;</i><span style="color: navy">;</span>
        <span style="color: navy">}</span> <i>&quot;handoverNoteRule&quot;</i><span style="color: navy">;</span>
      <span style="color: navy">}</span> <i>&quot;conditionObs&quot;</i><span style="color: navy">;</span>
    <span style="color: navy">}</span> <i>&quot;conditionAnswer&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;conditionRule&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 clearance map rather than imported: the</span>
<span style="color: navy">// </span><span style="color: green">transform engine resolves `imports` against whatever StructureMaps happen to</span>
<span style="color: navy">// </span><span style="color: green">be on the server, and a clearance that stops extracting because a shared map</span>
<span style="color: navy">// </span><span style="color: green">was not uploaded is a worse failure than a duplicated group.</span>
<span style="color: navy">// </span><span style="color: green">Source parameters are left untyped on purpose. Writing `: Element` makes the</span>
<span style="color: navy">// </span><span style="color: green">publisher's StructureMap validator compare QuestionnaireResponse.item against</span>
<span style="color: navy">// </span><span style="color: green">the literal 'Element' and report them as incompatible, which is noise.</span>
<span style="color: navy">// </span><span style="color: green">─────────────────────────────────────────────────────────────────────────────</span>
<b>group </b>BuildClearanceObs<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<span style="color: navy"><b> -&gt; </b></span>obs.category<b> as </b><span style="color: maroon">categoryCc</span><b> then</b><span style="color: navy"> {
</span>    qr<span style="color: navy"><b> -&gt; </b></span>categoryCc.coding<b> as </b><span style="color: maroon">categoryCoding</span><b> then</b><span style="color: navy"> {
</span>      qr<span style="color: navy"><b> -&gt; </b></span>categoryCoding.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>categoryCoding.code = <span style="color: blue">'survey'</span> <i>&quot;categoryCode&quot;</i><span style="color: navy">;</span>
      qr<span style="color: navy"><b> -&gt; </b></span>categoryCoding.display = <span style="color: blue">'Survey'</span> <i>&quot;categoryDisplay&quot;</i><span style="color: navy">;</span>
    <span style="color: navy">}</span> <i>&quot;categoryCodingRule&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;category&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>
  <span style="color: navy">// </span><span style="color: green">`effective`, not `effectiveInstant`: the R5 transform engine writes choice</span>
  <span style="color: navy">// </span><span style="color: green">elements by their base name and rejects the typed form.</span>
  <span style="color: navy">// </span><span style="color: green">Advantage stamps `authored` when the clearances are submitted, not when each</span>
  <span style="color: navy">// </span><span style="color: green">was signed, so a clearance signed at two in the morning and submitted at the</span>
  <span style="color: navy">// </span><span style="color: green">handover carries the handover time. Sending the signature time on the</span>
  <span style="color: navy">// </span><span style="color: green">response would fix it at the source; there is nothing on the response for a</span>
  <span style="color: navy">// </span><span style="color: green">map to read it from.</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.authored<b> as </b><span style="color: maroon">t</span><b> where </b><span style="color: navy">(</span>$this.toString().length() &gt;= 20<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>obs.issued = <b>cast</b><span style="color: navy">(</span><span style="color: maroon">t</span><span style="color: navy">, </span><span style="color: blue">'instant'</span><span style="color: navy">)</span> <i>&quot;issued&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">// </span><span style="color: green">The facility, not the person who signed: SGHIObservation admits only an</span>
  <span style="color: navy">// </span><span style="color: green">Organization or a Patient as performer, and the form's signature is a typed</span>
  <span style="color: navy">// </span><span style="color: green">name that resolves to neither.</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 = <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">perf</span><b> then</b><span style="color: navy"> {
</span>    src.reference<b> as </b><span style="color: maroon">ref</span><span style="color: navy"><b> -&gt; </b></span>perf.reference = <span style="color: maroon">ref</span> <i>&quot;performerRef&quot;</i><span style="color: navy">;</span>
    src.display<b> as </b><span style="color: maroon">disp</span><span style="color: navy"><b> -&gt; </b></span>perf.display = <span style="color: maroon">disp</span> <i>&quot;performerDisplay&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;performer&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">// </span><span style="color: green">One identifier per resource. Copying the response's own would give every</span>
  <span style="color: navy">// </span><span style="color: green">Observation from a single form the same business identity.</span>
  qr<span style="color: navy"><b> -&gt; </b></span>obs.identifier<b> as </b><span style="color: maroon">ident</span><b> then</b><span style="color: navy"> {
</span>    qr<span style="color: navy"><b> -&gt; </b></span>ident.use = <span style="color: blue">'official'</span> <i>&quot;identifierUse&quot;</i><span style="color: navy">;</span>
    qr<span style="color: navy"><b> -&gt; </b></span>ident.type<b> as </b><span style="color: maroon">identifierTypeCc</span><b> then</b><span style="color: navy"> {
</span>      qr<span style="color: navy"><b> -&gt; </b></span>identifierTypeCc.coding<b> as </b><span style="color: maroon">identifierTypeCoding</span><b> then</b><span style="color: navy"> {
</span>        qr<span style="color: navy"><b> -&gt; </b></span>identifierTypeCoding.system = <span style="color: blue">'https://fhir.slade360.co.ke/fhir/CodeSystem/default-identifier-codesystem'</span> <i>&quot;identifierTypeSystem&quot;</i><span style="color: navy">;</span>
        qr<span style="color: navy"><b> -&gt; </b></span>identifierTypeCoding.code = <span style="color: blue">'default-id'</span> <i>&quot;identifierTypeCode&quot;</i><span style="color: navy">;</span>
        qr<span style="color: navy"><b> -&gt; </b></span>identifierTypeCoding.display = <span style="color: blue">'Default Resource Identifier'</span> <i>&quot;identifierTypeDisplay&quot;</i><span style="color: navy">;</span>
      <span style="color: navy">}</span> <i>&quot;identifierTypeCodingRule&quot;</i><span style="color: navy">;</span>
    <span style="color: navy">}</span> <i>&quot;identifierType&quot;</i><span style="color: navy">;</span>
    qr<span style="color: navy"><b> -&gt; </b></span>ident.system = <span style="color: blue">'https://fhir.slade360.co.ke/fhir/CodeSystem/default-identifier-codesystem'</span> <i>&quot;identifierSystem&quot;</i><span style="color: navy">;</span>
    qr<span style="color: navy"><b> -&gt; </b></span>ident.value = <b>uuid</b><span style="color: navy">(</span><span style="color: navy">)</span> <i>&quot;identifierValue&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.empty() and (type.empty() or ('/' + type).endsWith('/Organization')))<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>ident.assigner = <span style="color: maroon">src</span> <i>&quot;identifierAssigner&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;identifier&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">// </span><span style="color: green">No append: under this engine `qr.id` already resolves to the type-qualified</span>
  <span style="color: navy">// </span><span style="color: green">relative reference, so prefixing it again produces a reference to nothing.</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>SetCodedValue<span style="color: navy">(</span><b>source</b> <span style="color: maroon">a</span>, <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>  a.value<b> as </b><span style="color: maroon">cv</span><span style="color: navy"><b> -&gt; </b></span>obs.value = <b>create</b><span style="color: navy">(</span><span style="color: blue">'CodeableConcept'</span><span style="color: navy">)</span><b> as </b><span style="color: maroon">concept</span><b> then</b><span style="color: navy"> {
</span>    cv<span style="color: navy"><b> -&gt; </b></span>concept.coding = <span style="color: maroon">cv</span> <i>&quot;valueCoding&quot;</i><span style="color: navy">;</span>
    cv.display<b> as </b><span style="color: maroon">d</span><span style="color: navy"><b> -&gt; </b></span>concept.text = <span style="color: maroon">d</span> <i>&quot;valueText&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;codedValue&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/ExtractDischargeClearanceClinicalReadiness"/>
  <version value="0.1.0"/>
  <name value="ExtractDischargeClearanceClinicalReadiness"/>
  <title value="Discharge Clearance: Clinical Readiness 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="Turns the discharging clinician's readiness attestation into four survey Observations: oral intake, mobility, pain control and the condition the patient is leaving in. Each is its own Observation because a clinician answers four separate questions and one flat resource would let an answer to one stand in for an answer to another. The handover sentence rides as a note on the condition Observation rather than becoming a fifth: it is prose about the discharge, and an Observation whose value is a paragraph answers no query. Nothing here writes to the Encounter -- closing the stay and recording the discharge disposition belong to the EMR's discharge workflow, and the condition a patient leaves in is a different axis from where they went. The signature the form collects is a typed name, which SGHIObservation cannot carry as a performer, so it stays in the response and out of the extracted resources."/>
  <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="ExtractDischargeClearanceClinicalReadiness"/>
    <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="oralIntakeRule"/>
      <source>
        <context value="qr"/>
        <element value="item"/>
        <variable value="it"/>
        <condition
                   value="(linkId = '301989955559') and answer.value.exists()"/>
      </source>
      <rule>
        <name value="oralIntakeAnswer"/>
        <source>
          <context value="it"/>
          <element value="answer"/>
          <listMode value="first"/>
          <variable value="a"/>
        </source>
        <rule>
          <name value="oralIntakeObs"/>
          <source>
            <context value="a"/>
          </source>
          <target>
            <context value="bundle"/>
            <element value="entry"/>
            <variable value="entry"/>
          </target>
          <target>
            <context value="entry"/>
            <element value="resource"/>
            <variable value="obs"/>
            <transform value="create"/>
            <parameter>
              <valueString value="Observation"/>
            </parameter>
          </target>
          <rule>
            <name value="responseTags"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obs"/>
            </target>
            <dependent>
              <name value="CopyResponseTags"/>
              <parameter>
                <valueId value="qr"/>
              </parameter>
              <parameter>
                <valueId value="obs"/>
              </parameter>
            </dependent>
          </rule>
          <rule>
            <name value="oralIntakeBase"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obs"/>
            </target>
            <target>
              <context value="entry"/>
            </target>
            <dependent>
              <name value="BuildClearanceObs"/>
              <parameter>
                <valueId value="qr"/>
              </parameter>
              <parameter>
                <valueId value="obs"/>
              </parameter>
              <parameter>
                <valueId value="entry"/>
              </parameter>
            </dependent>
          </rule>
          <rule>
            <name value="oralIntakeCode"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obs"/>
              <element value="code"/>
              <variable value="oralIntakeCodeCc"/>
            </target>
            <rule>
              <name value="oralIntakeCodeCodingRule"/>
              <source>
                <context value="qr"/>
              </source>
              <target>
                <context value="oralIntakeCodeCc"/>
                <element value="coding"/>
                <variable value="oralIntakeCodeCoding"/>
              </target>
              <rule>
                <name value="oralIntakeCodeSystem"/>
                <source>
                  <context value="qr"/>
                </source>
                <target>
                  <context value="oralIntakeCodeCoding"/>
                  <element value="system"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueString
                                 value="https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem"/>
                  </parameter>
                </target>
              </rule>
              <rule>
                <name value="oralIntakeCodeCode"/>
                <source>
                  <context value="qr"/>
                </source>
                <target>
                  <context value="oralIntakeCodeCoding"/>
                  <element value="code"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueString value="oral-intake-at-discharge"/>
                  </parameter>
                </target>
              </rule>
              <rule>
                <name value="oralIntakeCodeDisplay"/>
                <source>
                  <context value="qr"/>
                </source>
                <target>
                  <context value="oralIntakeCodeCoding"/>
                  <element value="display"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueString value="Oral intake tolerated at discharge"/>
                  </parameter>
                </target>
              </rule>
            </rule>
          </rule>
          <rule>
            <name value="oralIntakeValue"/>
            <source>
              <context value="a"/>
            </source>
            <target>
              <context value="obs"/>
            </target>
            <dependent>
              <name value="SetCodedValue"/>
              <parameter>
                <valueId value="a"/>
              </parameter>
              <parameter>
                <valueId value="obs"/>
              </parameter>
            </dependent>
          </rule>
        </rule>
      </rule>
      <documentation
                     value="linkId 301989955559 — &quot;Oral intake tolerated&quot;"/>
    </rule>
    <rule>
      <name value="mobilityRule"/>
      <source>
        <context value="qr"/>
        <element value="item"/>
        <variable value="it"/>
        <condition
                   value="(linkId = '507198101338') and answer.value.exists()"/>
      </source>
      <rule>
        <name value="mobilityAnswer"/>
        <source>
          <context value="it"/>
          <element value="answer"/>
          <listMode value="first"/>
          <variable value="a"/>
        </source>
        <rule>
          <name value="mobilityObs"/>
          <source>
            <context value="a"/>
          </source>
          <target>
            <context value="bundle"/>
            <element value="entry"/>
            <variable value="entry"/>
          </target>
          <target>
            <context value="entry"/>
            <element value="resource"/>
            <variable value="obs"/>
            <transform value="create"/>
            <parameter>
              <valueString value="Observation"/>
            </parameter>
          </target>
          <rule>
            <name value="responseTags"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obs"/>
            </target>
            <dependent>
              <name value="CopyResponseTags"/>
              <parameter>
                <valueId value="qr"/>
              </parameter>
              <parameter>
                <valueId value="obs"/>
              </parameter>
            </dependent>
          </rule>
          <rule>
            <name value="mobilityBase"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obs"/>
            </target>
            <target>
              <context value="entry"/>
            </target>
            <dependent>
              <name value="BuildClearanceObs"/>
              <parameter>
                <valueId value="qr"/>
              </parameter>
              <parameter>
                <valueId value="obs"/>
              </parameter>
              <parameter>
                <valueId value="entry"/>
              </parameter>
            </dependent>
          </rule>
          <rule>
            <name value="mobilityCode"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obs"/>
              <element value="code"/>
              <variable value="mobilityCodeCc"/>
            </target>
            <rule>
              <name value="mobilityCodeCodingRule"/>
              <source>
                <context value="qr"/>
              </source>
              <target>
                <context value="mobilityCodeCc"/>
                <element value="coding"/>
                <variable value="mobilityCodeCoding"/>
              </target>
              <rule>
                <name value="mobilityCodeSystem"/>
                <source>
                  <context value="qr"/>
                </source>
                <target>
                  <context value="mobilityCodeCoding"/>
                  <element value="system"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueString
                                 value="https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem"/>
                  </parameter>
                </target>
              </rule>
              <rule>
                <name value="mobilityCodeCode"/>
                <source>
                  <context value="qr"/>
                </source>
                <target>
                  <context value="mobilityCodeCoding"/>
                  <element value="code"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueString value="mobility-at-discharge"/>
                  </parameter>
                </target>
              </rule>
              <rule>
                <name value="mobilityCodeDisplay"/>
                <source>
                  <context value="qr"/>
                </source>
                <target>
                  <context value="mobilityCodeCoding"/>
                  <element value="display"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueString value="Mobility at discharge"/>
                  </parameter>
                </target>
              </rule>
            </rule>
          </rule>
          <rule>
            <name value="mobilityValue"/>
            <source>
              <context value="a"/>
            </source>
            <target>
              <context value="obs"/>
            </target>
            <dependent>
              <name value="SetCodedValue"/>
              <parameter>
                <valueId value="a"/>
              </parameter>
              <parameter>
                <valueId value="obs"/>
              </parameter>
            </dependent>
          </rule>
        </rule>
      </rule>
      <documentation value="linkId 507198101338 — &quot;Mobility&quot;"/>
    </rule>
    <rule>
      <name value="painControlRule"/>
      <source>
        <context value="qr"/>
        <element value="item"/>
        <variable value="it"/>
        <condition
                   value="(linkId = '852812667233') and answer.value.exists()"/>
      </source>
      <rule>
        <name value="painControlAnswer"/>
        <source>
          <context value="it"/>
          <element value="answer"/>
          <listMode value="first"/>
          <variable value="a"/>
        </source>
        <rule>
          <name value="painControlObs"/>
          <source>
            <context value="a"/>
          </source>
          <target>
            <context value="bundle"/>
            <element value="entry"/>
            <variable value="entry"/>
          </target>
          <target>
            <context value="entry"/>
            <element value="resource"/>
            <variable value="obs"/>
            <transform value="create"/>
            <parameter>
              <valueString value="Observation"/>
            </parameter>
          </target>
          <rule>
            <name value="responseTags"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obs"/>
            </target>
            <dependent>
              <name value="CopyResponseTags"/>
              <parameter>
                <valueId value="qr"/>
              </parameter>
              <parameter>
                <valueId value="obs"/>
              </parameter>
            </dependent>
          </rule>
          <rule>
            <name value="painControlBase"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obs"/>
            </target>
            <target>
              <context value="entry"/>
            </target>
            <dependent>
              <name value="BuildClearanceObs"/>
              <parameter>
                <valueId value="qr"/>
              </parameter>
              <parameter>
                <valueId value="obs"/>
              </parameter>
              <parameter>
                <valueId value="entry"/>
              </parameter>
            </dependent>
          </rule>
          <rule>
            <name value="painControlCode"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obs"/>
              <element value="code"/>
              <variable value="painControlCodeCc"/>
            </target>
            <rule>
              <name value="painControlCodeCodingRule"/>
              <source>
                <context value="qr"/>
              </source>
              <target>
                <context value="painControlCodeCc"/>
                <element value="coding"/>
                <variable value="painControlCodeCoding"/>
              </target>
              <rule>
                <name value="painControlCodeSystem"/>
                <source>
                  <context value="qr"/>
                </source>
                <target>
                  <context value="painControlCodeCoding"/>
                  <element value="system"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueString
                                 value="https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem"/>
                  </parameter>
                </target>
              </rule>
              <rule>
                <name value="painControlCodeCode"/>
                <source>
                  <context value="qr"/>
                </source>
                <target>
                  <context value="painControlCodeCoding"/>
                  <element value="code"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueString value="pain-control-at-discharge"/>
                  </parameter>
                </target>
              </rule>
              <rule>
                <name value="painControlCodeDisplay"/>
                <source>
                  <context value="qr"/>
                </source>
                <target>
                  <context value="painControlCodeCoding"/>
                  <element value="display"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueString value="Pain control at discharge"/>
                  </parameter>
                </target>
              </rule>
            </rule>
          </rule>
          <rule>
            <name value="painControlValue"/>
            <source>
              <context value="a"/>
            </source>
            <target>
              <context value="obs"/>
            </target>
            <dependent>
              <name value="SetCodedValue"/>
              <parameter>
                <valueId value="a"/>
              </parameter>
              <parameter>
                <valueId value="obs"/>
              </parameter>
            </dependent>
          </rule>
        </rule>
      </rule>
      <documentation
                     value="linkId 852812667233 — &quot;Pain controlled&quot;"/>
    </rule>
    <rule>
      <name value="conditionRule"/>
      <source>
        <context value="qr"/>
        <element value="item"/>
        <variable value="it"/>
        <condition
                   value="(linkId = '108099570999') and answer.value.exists()"/>
      </source>
      <rule>
        <name value="conditionAnswer"/>
        <source>
          <context value="it"/>
          <element value="answer"/>
          <listMode value="first"/>
          <variable value="a"/>
        </source>
        <rule>
          <name value="conditionObs"/>
          <source>
            <context value="a"/>
          </source>
          <target>
            <context value="bundle"/>
            <element value="entry"/>
            <variable value="entry"/>
          </target>
          <target>
            <context value="entry"/>
            <element value="resource"/>
            <variable value="obs"/>
            <transform value="create"/>
            <parameter>
              <valueString value="Observation"/>
            </parameter>
          </target>
          <rule>
            <name value="responseTags"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obs"/>
            </target>
            <dependent>
              <name value="CopyResponseTags"/>
              <parameter>
                <valueId value="qr"/>
              </parameter>
              <parameter>
                <valueId value="obs"/>
              </parameter>
            </dependent>
          </rule>
          <rule>
            <name value="conditionBase"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obs"/>
            </target>
            <target>
              <context value="entry"/>
            </target>
            <dependent>
              <name value="BuildClearanceObs"/>
              <parameter>
                <valueId value="qr"/>
              </parameter>
              <parameter>
                <valueId value="obs"/>
              </parameter>
              <parameter>
                <valueId value="entry"/>
              </parameter>
            </dependent>
          </rule>
          <rule>
            <name value="conditionCode"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="obs"/>
              <element value="code"/>
              <variable value="conditionCodeCc"/>
            </target>
            <rule>
              <name value="conditionCodeCodingRule"/>
              <source>
                <context value="qr"/>
              </source>
              <target>
                <context value="conditionCodeCc"/>
                <element value="coding"/>
                <variable value="conditionCodeCoding"/>
              </target>
              <rule>
                <name value="conditionCodeSystem"/>
                <source>
                  <context value="qr"/>
                </source>
                <target>
                  <context value="conditionCodeCoding"/>
                  <element value="system"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueString
                                 value="https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem"/>
                  </parameter>
                </target>
              </rule>
              <rule>
                <name value="conditionCodeCode"/>
                <source>
                  <context value="qr"/>
                </source>
                <target>
                  <context value="conditionCodeCoding"/>
                  <element value="code"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueString value="patient-condition-at-discharge"/>
                  </parameter>
                </target>
              </rule>
              <rule>
                <name value="conditionCodeDisplay"/>
                <source>
                  <context value="qr"/>
                </source>
                <target>
                  <context value="conditionCodeCoding"/>
                  <element value="display"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueString value="Condition at discharge"/>
                  </parameter>
                </target>
              </rule>
            </rule>
          </rule>
          <rule>
            <name value="conditionValue"/>
            <source>
              <context value="a"/>
            </source>
            <target>
              <context value="obs"/>
            </target>
            <dependent>
              <name value="SetCodedValue"/>
              <parameter>
                <valueId value="a"/>
              </parameter>
              <parameter>
                <valueId value="obs"/>
              </parameter>
            </dependent>
          </rule>
          <rule>
            <name value="handoverNoteRule"/>
            <source>
              <context value="qr"/>
              <element value="item"/>
              <variable value="itNote"/>
              <condition
                         value="(linkId = '474741611141') and answer.value.exists()"/>
            </source>
            <rule>
              <name value="handoverNoteAnswer"/>
              <source>
                <context value="itNote"/>
                <element value="answer"/>
                <listMode value="first"/>
                <variable value="aNote"/>
              </source>
              <rule>
                <name value="handoverNote"/>
                <source>
                  <context value="aNote"/>
                  <element value="value"/>
                  <variable value="nv"/>
                </source>
                <target>
                  <context value="obs"/>
                  <element value="note"/>
                  <variable value="note"/>
                </target>
                <rule>
                  <name value="handoverNoteText"/>
                  <source>
                    <context value="nv"/>
                  </source>
                  <target>
                    <context value="note"/>
                    <element value="text"/>
                    <transform value="copy"/>
                    <parameter>
                      <valueId value="nv"/>
                    </parameter>
                  </target>
                </rule>
                <rule>
                  <name value="handoverNoteTime"/>
                  <source>
                    <context value="qr"/>
                    <element value="authored"/>
                    <variable value="t"/>
                  </source>
                  <target>
                    <context value="note"/>
                    <element value="time"/>
                    <transform value="copy"/>
                    <parameter>
                      <valueId value="t"/>
                    </parameter>
                  </target>
                </rule>
              </rule>
            </rule>
            <documentation
                           value="linkId 474741611141 — &quot;Anything the next clinician should know&quot;"/>
          </rule>
        </rule>
      </rule>
      <documentation
                     value="linkId 108099570999 — &quot;Condition at discharge&quot;. This one carries the
free-text handover as a note, so it is the Observation a reader lands on
when they want the clinician's own words."/>
    </rule>
  </group>
  <group>
    <name value="BuildClearanceObs"/>
    <documentation
                   value="─────────────────────────────────────────────────────────────────────────────
Shared scaffolding. Repeated in each clearance map rather than imported: the
transform engine resolves `imports` against whatever StructureMaps happen to
be on the server, and a clearance that stops extracting because a shared map
was not uploaded is a worse failure than a duplicated group.
Source parameters are left untyped on purpose. Writing `: Element` makes the
publisher's StructureMap validator compare QuestionnaireResponse.item against
the literal 'Element' and report them as incompatible, which is noise.
─────────────────────────────────────────────────────────────────────────────"/>
    <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="category"/>
      <source>
        <context value="qr"/>
      </source>
      <target>
        <context value="obs"/>
        <element value="category"/>
        <variable value="categoryCc"/>
      </target>
      <rule>
        <name value="categoryCodingRule"/>
        <source>
          <context value="qr"/>
        </source>
        <target>
          <context value="categoryCc"/>
          <element value="coding"/>
          <variable value="categoryCoding"/>
        </target>
        <rule>
          <name value="categorySystem"/>
          <source>
            <context value="qr"/>
          </source>
          <target>
            <context value="categoryCoding"/>
            <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="categoryCoding"/>
            <element value="code"/>
            <transform value="copy"/>
            <parameter>
              <valueString value="survey"/>
            </parameter>
          </target>
        </rule>
        <rule>
          <name value="categoryDisplay"/>
          <source>
            <context value="qr"/>
          </source>
          <target>
            <context value="categoryCoding"/>
            <element value="display"/>
            <transform value="copy"/>
            <parameter>
              <valueString value="Survey"/>
            </parameter>
          </target>
        </rule>
      </rule>
    </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>
      <documentation
                     value="`effective`, not `effectiveInstant`: the R5 transform engine writes choice
elements by their base name and rejects the typed form.
Advantage stamps `authored` when the clearances are submitted, not when each
was signed, so a clearance signed at two in the morning and submitted at the
handover carries the handover time. Sending the signature time on the
response would fix it at the source; there is nothing on the response for a
map to read it from."/>
    </rule>
    <rule>
      <name value="issued"/>
      <source>
        <context value="qr"/>
        <element value="authored"/>
        <variable value="t"/>
        <condition value="$this.toString().length() &gt;= 20"/>
      </source>
      <target>
        <context value="obs"/>
        <element value="issued"/>
        <transform value="cast"/>
        <parameter>
          <valueId value="t"/>
        </parameter>
        <parameter>
          <valueString value="instant"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="performer"/>
      <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"/>
        <variable value="perf"/>
        <transform value="create"/>
        <parameter>
          <valueString value="Reference"/>
        </parameter>
      </target>
      <rule>
        <name value="performerRef"/>
        <source>
          <context value="src"/>
          <element value="reference"/>
          <variable value="ref"/>
        </source>
        <target>
          <context value="perf"/>
          <element value="reference"/>
          <transform value="copy"/>
          <parameter>
            <valueId value="ref"/>
          </parameter>
        </target>
      </rule>
      <rule>
        <name value="performerDisplay"/>
        <source>
          <context value="src"/>
          <element value="display"/>
          <variable value="disp"/>
        </source>
        <target>
          <context value="perf"/>
          <element value="display"/>
          <transform value="copy"/>
          <parameter>
            <valueId value="disp"/>
          </parameter>
        </target>
      </rule>
      <documentation
                     value="The facility, not the person who signed: SGHIObservation admits only an
Organization or a Patient as performer, and the form's signature is a typed
name that resolves to neither."/>
    </rule>
    <rule>
      <name value="identifier"/>
      <source>
        <context value="qr"/>
      </source>
      <target>
        <context value="obs"/>
        <element value="identifier"/>
        <variable value="ident"/>
      </target>
      <rule>
        <name value="identifierUse"/>
        <source>
          <context value="qr"/>
        </source>
        <target>
          <context value="ident"/>
          <element value="use"/>
          <transform value="copy"/>
          <parameter>
            <valueString value="official"/>
          </parameter>
        </target>
      </rule>
      <rule>
        <name value="identifierType"/>
        <source>
          <context value="qr"/>
        </source>
        <target>
          <context value="ident"/>
          <element value="type"/>
          <variable value="identifierTypeCc"/>
        </target>
        <rule>
          <name value="identifierTypeCodingRule"/>
          <source>
            <context value="qr"/>
          </source>
          <target>
            <context value="identifierTypeCc"/>
            <element value="coding"/>
            <variable value="identifierTypeCoding"/>
          </target>
          <rule>
            <name value="identifierTypeSystem"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="identifierTypeCoding"/>
              <element value="system"/>
              <transform value="copy"/>
              <parameter>
                <valueString
                             value="https://fhir.slade360.co.ke/fhir/CodeSystem/default-identifier-codesystem"/>
              </parameter>
            </target>
          </rule>
          <rule>
            <name value="identifierTypeCode"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="identifierTypeCoding"/>
              <element value="code"/>
              <transform value="copy"/>
              <parameter>
                <valueString value="default-id"/>
              </parameter>
            </target>
          </rule>
          <rule>
            <name value="identifierTypeDisplay"/>
            <source>
              <context value="qr"/>
            </source>
            <target>
              <context value="identifierTypeCoding"/>
              <element value="display"/>
              <transform value="copy"/>
              <parameter>
                <valueString value="Default Resource Identifier"/>
              </parameter>
            </target>
          </rule>
        </rule>
      </rule>
      <rule>
        <name value="identifierSystem"/>
        <source>
          <context value="qr"/>
        </source>
        <target>
          <context value="ident"/>
          <element value="system"/>
          <transform value="copy"/>
          <parameter>
            <valueString
                         value="https://fhir.slade360.co.ke/fhir/CodeSystem/default-identifier-codesystem"/>
          </parameter>
        </target>
      </rule>
      <rule>
        <name value="identifierValue"/>
        <source>
          <context value="qr"/>
        </source>
        <target>
          <context value="ident"/>
          <element value="value"/>
          <transform value="uuid"/>
        </target>
      </rule>
      <rule>
        <name value="identifierAssigner"/>
        <source>
          <context value="qr"/>
          <element value="source"/>
          <variable value="src"/>
          <condition
                     value="(reference.exists() and (reference.startsWith('Organization/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Organization')))"/>
        </source>
        <target>
          <context value="ident"/>
          <element value="assigner"/>
          <transform value="copy"/>
          <parameter>
            <valueId value="src"/>
          </parameter>
        </target>
      </rule>
      <documentation
                     value="One identifier per resource. Copying the response's own would give every
Observation from a single form the same business identity."/>
    </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>
      <documentation
                     value="No append: under this engine `qr.id` already resolves to the type-qualified
relative reference, so prefixing it again produces a reference to nothing."/>
    </rule>
  </group>
  <group>
    <name value="SetCodedValue"/>
    <input>
      <name value="a"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="obs"/>
      <type value="Observation"/>
      <mode value="target"/>
    </input>
    <rule>
      <name value="codedValue"/>
      <source>
        <context value="a"/>
        <element value="value"/>
        <variable value="cv"/>
      </source>
      <target>
        <context value="obs"/>
        <element value="value"/>
        <variable value="concept"/>
        <transform value="create"/>
        <parameter>
          <valueString value="CodeableConcept"/>
        </parameter>
      </target>
      <rule>
        <name value="valueCoding"/>
        <source>
          <context value="cv"/>
        </source>
        <target>
          <context value="concept"/>
          <element value="coding"/>
          <transform value="copy"/>
          <parameter>
            <valueId value="cv"/>
          </parameter>
        </target>
      </rule>
      <rule>
        <name value="valueText"/>
        <source>
          <context value="cv"/>
          <element value="display"/>
          <variable value="d"/>
        </source>
        <target>
          <context value="concept"/>
          <element value="text"/>
          <transform value="copy"/>
          <parameter>
            <valueId value="d"/>
          </parameter>
        </target>
      </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>