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

: Endoscopy Service Investigation Extraction - JSON Representation

Active as of 2026-09-14

Raw json | Download

{
  "resourceType" : "StructureMap",
  "id" : "ExtractEndoscopyInvestigation",
  "text" : {
    "status" : "generated",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\"><p class=\"res-header-id\"><b>Generated Narrative: StructureMap ExtractEndoscopyInvestigation</b></p><a name=\"ExtractEndoscopyInvestigation\"> </a><a name=\"hcExtractEndoscopyInvestigation\"> </a><pre class=\"fml\">\r\n<span style=\"color: #cc00cc\">/// <b>url</b> = </span><span style=\"color: blue\">'https://fhir.slade360.co.ke/fhir/StructureMap/ExtractEndoscopyInvestigation'</span>\r\n<span style=\"color: #cc00cc\">/// <b>name</b> = </span><span style=\"color: blue\">'ExtractEndoscopyInvestigation'</span>\r\n<span style=\"color: #cc00cc\">/// <b>title</b> = </span><span style=\"color: blue\">'Endoscopy Service Investigation Extraction'</span>\r\n<span style=\"color: #cc00cc\">/// <b>status</b> = </span><span style=\"color: blue\">'active'</span>\r\n<span style=\"color: #cc00cc\">/// <b>description</b> = </span><span style=\"color: blue\">'The endoscopy form is a request, a procedure and a report on one sheet, so it extracts as all three: a Procedure coded by whichever scope was done, taking its own coding from the answer so a colonoscopy is coded as a colonoscopy and not as \\'endoscopy\\'; a DiagnosticReport under LOINC 18751-8 whose conclusion is the endoscopist\\'s conclusion and whose result points at the findings Observation; a MedicationAdministration per drug given during the procedure; and a CarePlan for the suggested treatment. The findings live in an Observation rather than only in the report\\'s narrative so that what was seen stays queryable after the report is filed.'</span>\r\n\r\n<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>\r\n<b>uses</b><span style=\"color: navy\"> &quot;</span><a href=\"http://hl7.org/fhir/R5/bundle.html\" title=\"Bundle\">http://hl7.org/fhir/StructureDefinition/Bundle</a><span style=\"color: navy\">&quot; </span><b>alias </b>Bundle <b>as </b><b>target</b>\r\n<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>\r\n<b>uses</b><span style=\"color: navy\"> &quot;</span><a href=\"http://hl7.org/fhir/R5/procedure.html\" title=\"Procedure\">http://hl7.org/fhir/StructureDefinition/Procedure</a><span style=\"color: navy\">&quot; </span><b>alias </b>Procedure <b>as </b><b>target</b>\r\n<b>uses</b><span style=\"color: navy\"> &quot;</span><a href=\"http://hl7.org/fhir/R5/diagnosticreport.html\" title=\"DiagnosticReport\">http://hl7.org/fhir/StructureDefinition/DiagnosticReport</a><span style=\"color: navy\">&quot; </span><b>alias </b>DiagnosticReport <b>as </b><b>target</b>\r\n<b>uses</b><span style=\"color: navy\"> &quot;</span><a href=\"http://hl7.org/fhir/R5/medicationadministration.html\" title=\"MedicationAdministration\">http://hl7.org/fhir/StructureDefinition/MedicationAdministration</a><span style=\"color: navy\">&quot; </span><b>alias </b>MedicationAdministration <b>as </b><b>target</b>\r\n<b>uses</b><span style=\"color: navy\"> &quot;</span><a href=\"http://hl7.org/fhir/R5/careplan.html\" title=\"CarePlan\">http://hl7.org/fhir/StructureDefinition/CarePlan</a><span style=\"color: navy\">&quot; </span><b>alias </b>CarePlan <b>as </b><b>target</b>\r\n\r\n<b>group </b>ExtractEndoscopyInvestigation<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\"> {\r\n</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>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">── The report, and the findings Observation it points at ───────────────</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">Built together and in this order because the report's `result` has to</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">reference the Observation, and a reference to a resource created in a</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">sibling rule is not reachable: the target variable does not exist there.</span>\r\n  qr.item<b> as </b><span style=\"color: maroon\">g</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'study'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    qr<b> where </b><span style=\"color: navy\">(</span>item.where(linkId = 'findings').answer.value.exists() or item.where(linkId = 'conclusion').answer.value.exists()<span style=\"color: navy\">)</span><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\">'DiagnosticReport'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">dr</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      qr<span style=\"color: navy\"><b> -&gt; </b></span> dr<span style=\"color: navy\">, </span> entry<b> then </b>BuildDiagnosticReportBase<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">dr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span> <i>&quot;base&quot;</i><span style=\"color: navy\">;</span>\r\n      qr<span style=\"color: navy\"><b> -&gt; </b></span>dr.status = <span style=\"color: blue\">'final'</span> <i>&quot;status&quot;</i><span style=\"color: navy\">;</span>\r\n      qr.encounter<b> as </b><span style=\"color: maroon\">e</span><span style=\"color: navy\"><b> -&gt; </b></span>dr.encounter = <span style=\"color: maroon\">e</span><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">// </span><span style=\"color: green\">issued is an instant and qr.authored is a dateTime, so it needs the</span>\r\n      <span style=\"color: navy\">// </span><span style=\"color: green\">cast: &quot;Unable to convert a dateTime to a Instant&quot;. The cast is safe</span>\r\n      <span style=\"color: navy\">// </span><span style=\"color: green\">because a QuestionnaireResponse.authored always carries a time.</span>\r\n      qr.authored<b> as </b><span style=\"color: maroon\">t</span><span style=\"color: navy\"><b> -&gt; </b></span>dr.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>\r\n      qr<span style=\"color: navy\"><b> -&gt; </b></span>dr.code<b> as </b><span style=\"color: maroon\">cc</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        qr<span style=\"color: navy\"><b> -&gt; </b></span>cc.coding<b> as </b><span style=\"color: maroon\">cg</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          qr<span style=\"color: navy\"><b> -&gt; </b></span>cg.system = <span style=\"color: blue\">'http://loinc.org'</span> <i>&quot;sys&quot;</i><span style=\"color: navy\">;</span>\r\n          qr<span style=\"color: navy\"><b> -&gt; </b></span>cg.code = <span style=\"color: blue\">'18751-8'</span> <i>&quot;cd&quot;</i><span style=\"color: navy\">;</span>\r\n          qr<span style=\"color: navy\"><b> -&gt; </b></span>cg.display = <span style=\"color: blue\">'Endoscopy study'</span> <i>&quot;dsp&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span> <i>&quot;coding&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;code&quot;</i><span style=\"color: navy\">;</span>\r\n      qr<span style=\"color: navy\"><b> -&gt; </b></span>dr.category<b> as </b><span style=\"color: maroon\">cat</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        qr<span style=\"color: navy\"><b> -&gt; </b></span>cat.coding<b> as </b><span style=\"color: maroon\">cg</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          qr<span style=\"color: navy\"><b> -&gt; </b></span>cg.system = <span style=\"color: blue\">'http://terminology.hl7.org/CodeSystem/v2-0074'</span> <i>&quot;sys&quot;</i><span style=\"color: navy\">;</span>\r\n          qr<span style=\"color: navy\"><b> -&gt; </b></span>cg.code = <span style=\"color: blue\">'OSL'</span> <i>&quot;cd&quot;</i><span style=\"color: navy\">;</span>\r\n          qr<span style=\"color: navy\"><b> -&gt; </b></span>cg.display = <span style=\"color: blue\">'Outside Lab'</span> <i>&quot;dsp&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span> <i>&quot;coding&quot;</i><span style=\"color: navy\">;</span>\r\n        qr<span style=\"color: navy\"><b> -&gt; </b></span>cat.text = <span style=\"color: blue\">'Endoscopy unit'</span> <i>&quot;catText&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;category&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">// </span><span style=\"color: green\">Effective time is the study's own time, not the form's. A report filed</span>\r\n      <span style=\"color: navy\">// </span><span style=\"color: green\">the next morning is still a report on yesterday's scope.</span>\r\n      g.item<b> as </b><span style=\"color: maroon\">pa</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'study/performed-at') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        pa.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          a.value<b> as </b><span style=\"color: maroon\">v</span><span style=\"color: navy\"><b> -&gt; </b></span>dr.effective = <span style=\"color: maroon\">v</span> <i>&quot;effectiveFromStudy&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;effectiveRule&quot;</i><span style=\"color: navy\">;</span>\r\n      g.item<b> as </b><span style=\"color: maroon\">ep</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'study/endoscopist') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        ep.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          a.value<b> as </b><span style=\"color: maroon\">ref</span><span style=\"color: navy\"><b> -&gt; </b></span>dr.performer = <span style=\"color: maroon\">ref</span> <i>&quot;performer&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;performerRule&quot;</i><span style=\"color: navy\">;</span>\r\n      qr.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'conclusion') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          a.value<b> as </b><span style=\"color: maroon\">txt</span><span style=\"color: navy\"><b> -&gt; </b></span>dr.conclusion = <span style=\"color: maroon\">txt</span> <i>&quot;conclusionText&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;conclusionRule&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">// </span><span style=\"color: green\">The findings, as an Observation the report points at.</span>\r\n      qr.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'findings') and answer.value.exists()<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -&gt; </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">sentry</span><span style=\"color: navy\">, </span> sentry.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\">sobs</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        qr<span style=\"color: navy\"><b> -&gt; </b></span> sobs<span style=\"color: navy\">, </span> sentry<b> then </b>BuildObsBase<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">sobs</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">sentry</span><span style=\"color: navy\">)</span> <i>&quot;base&quot;</i><span style=\"color: navy\">;</span>\r\n        qr<span style=\"color: navy\"><b> -&gt; </b></span>sobs<b> then </b>SetProcedureCategory<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">sobs</span><span style=\"color: navy\">)</span> <i>&quot;category&quot;</i><span style=\"color: navy\">;</span>\r\n        it<span style=\"color: navy\"><b> -&gt; </b></span>sobs.code<b> as </b><span style=\"color: maroon\">cc</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          it<span style=\"color: navy\"><b> -&gt; </b></span>cc.coding<b> as </b><span style=\"color: maroon\">cg</span><b> then</b><span style=\"color: navy\"> {\r\n</span>            it<span style=\"color: navy\"><b> -&gt; </b></span>cg.system = <span style=\"color: blue\">'https://fhir.slade360.co.ke/fhir/CodeSystem/concept-codesystem'</span> <i>&quot;sys&quot;</i><span style=\"color: navy\">;</span>\r\n            it<span style=\"color: navy\"><b> -&gt; </b></span>cg.code = <span style=\"color: blue\">'endoscopy-endoscopic-findings'</span> <i>&quot;cd&quot;</i><span style=\"color: navy\">;</span>\r\n            it<span style=\"color: navy\"><b> -&gt; </b></span>cg.display = <span style=\"color: blue\">'Endoscopic findings'</span> <i>&quot;dsp&quot;</i><span style=\"color: navy\">;</span>\r\n          <span style=\"color: navy\">}</span> <i>&quot;coding&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span> <i>&quot;code&quot;</i><span style=\"color: navy\">;</span>\r\n        it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          a.value<b> as </b><span style=\"color: maroon\">txt</span><span style=\"color: navy\"><b> -&gt; </b></span> sobs.note<b> as </b><span style=\"color: maroon\">n</span><span style=\"color: navy\">, </span> n.text = <span style=\"color: maroon\">txt</span> <i>&quot;findingsText&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n        it<span style=\"color: navy\"><b> -&gt; </b></span> dr.result = <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\">fref</span><span style=\"color: navy\">, </span> fref.reference = <b>reference</b><span style=\"color: navy\">(</span><span style=\"color: maroon\">sobs</span><span style=\"color: navy\">)</span> <i>&quot;linkResult&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;findingsObservation&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;endoscopyReport&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">── The procedure ─────────────────────────────────────────────────────</span>\r\n    g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'study/investigation') and answer.value.exists()<span style=\"color: navy\">)</span><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\">'Procedure'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">proc</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      qr<span style=\"color: navy\"><b> -&gt; </b></span> proc<span style=\"color: navy\">, </span> entry<b> then </b>BuildProcedureBase<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">proc</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span> <i>&quot;base&quot;</i><span style=\"color: navy\">;</span>\r\n      it<span style=\"color: navy\"><b> -&gt; </b></span>proc.status = <span style=\"color: blue\">'completed'</span> <i>&quot;status&quot;</i><span style=\"color: navy\">;</span>\r\n      qr.encounter<b> as </b><span style=\"color: maroon\">e</span><span style=\"color: navy\"><b> -&gt; </b></span>proc.encounter = <span style=\"color: maroon\">e</span><span style=\"color: navy\">;</span>\r\n      it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        a.value<b> as </b><span style=\"color: maroon\">cv</span><span style=\"color: navy\"><b> -&gt; </b></span>proc.code<b> as </b><span style=\"color: maroon\">cc</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          cv<span style=\"color: navy\"><b> -&gt; </b></span>cc.coding = <span style=\"color: maroon\">cv</span> <i>&quot;coding&quot;</i><span style=\"color: navy\">;</span>\r\n          cv.display<b> as </b><span style=\"color: maroon\">d</span><span style=\"color: navy\"><b> -&gt; </b></span>cc.text = <span style=\"color: maroon\">d</span> <i>&quot;text&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span> <i>&quot;codeFromAnswer&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n      g.item<b> as </b><span style=\"color: maroon\">pa</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'study/performed-at') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        pa.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          a.value<b> as </b><span style=\"color: maroon\">v</span><span style=\"color: navy\"><b> -&gt; </b></span>proc.occurrence = <span style=\"color: maroon\">v</span> <i>&quot;occurrence&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;occurrenceRule&quot;</i><span style=\"color: navy\">;</span>\r\n      g.item<b> as </b><span style=\"color: maroon\">ep</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'study/endoscopist') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        ep.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          a.value<b> as </b><span style=\"color: maroon\">ref</span><span style=\"color: navy\"><b> -&gt; </b></span> proc.performer<b> as </b><span style=\"color: maroon\">p</span><span style=\"color: navy\">, </span> p.actor = <span style=\"color: maroon\">ref</span> <i>&quot;endoscopist&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;endoscopistRule&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">// </span><span style=\"color: green\">The assistant is a name typed on the form, not a picked practitioner,</span>\r\n      <span style=\"color: navy\">// </span><span style=\"color: green\">so it travels as the actor's display with no reference behind it.</span>\r\n      g.item<b> as </b><span style=\"color: maroon\">asst</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'study/assistant-instrumentalist') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        asst.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          a.value<b> as </b><span style=\"color: maroon\">txt</span><span style=\"color: navy\"><b> -&gt; </b></span> proc.performer<b> as </b><span style=\"color: maroon\">p</span><span style=\"color: navy\">, </span> p.actor = <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\">aref</span><span style=\"color: navy\">, </span> aref.display = <span style=\"color: maroon\">txt</span> <i>&quot;assistant&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;assistantRule&quot;</i><span style=\"color: navy\">;</span>\r\n      g.item<b> as </b><span style=\"color: maroon\">mh</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'study/medical-history') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        mh.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          a.value<b> as </b><span style=\"color: maroon\">txt</span><span style=\"color: navy\"><b> -&gt; </b></span> proc.note<b> as </b><span style=\"color: maroon\">n</span><span style=\"color: navy\">, </span> n.text = <span style=\"color: maroon\">txt</span> <i>&quot;historyNote&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;historyRule&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;endoscopyProcedure&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;studyGroup&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">── The medical history, also as its own Observation ────────────────────</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">Duplicated deliberately. On the Procedure it is context for the operator;</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">as an Observation it is a piece of history a later clinician can find</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">without opening an endoscopy report to look for it.</span>\r\n  qr.item<b> as </b><span style=\"color: maroon\">g</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'study'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'study/medical-history') and answer.value.exists()<span style=\"color: navy\">)</span><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\"> {\r\n</span>      qr<span style=\"color: navy\"><b> -&gt; </b></span> obs<span style=\"color: navy\">, </span> entry<b> then </b>BuildObsBase<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;base&quot;</i><span style=\"color: navy\">;</span>\r\n      qr<span style=\"color: navy\"><b> -&gt; </b></span>obs<b> then </b>SetSurveyCategory<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;category&quot;</i><span style=\"color: navy\">;</span>\r\n      it<span style=\"color: navy\"><b> -&gt; </b></span>obs.code<b> as </b><span style=\"color: maroon\">cc</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        it<span style=\"color: navy\"><b> -&gt; </b></span>cc.coding<b> as </b><span style=\"color: maroon\">cg</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          it<span style=\"color: navy\"><b> -&gt; </b></span>cg.system = <span style=\"color: blue\">'http://loinc.org'</span> <i>&quot;sys&quot;</i><span style=\"color: navy\">;</span>\r\n          it<span style=\"color: navy\"><b> -&gt; </b></span>cg.code = <span style=\"color: blue\">'11348-0'</span> <i>&quot;cd&quot;</i><span style=\"color: navy\">;</span>\r\n          it<span style=\"color: navy\"><b> -&gt; </b></span>cg.display = <span style=\"color: blue\">'History of Past illness note'</span> <i>&quot;dsp&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span> <i>&quot;coding&quot;</i><span style=\"color: navy\">;</span>\r\n        it<span style=\"color: navy\"><b> -&gt; </b></span>cc.text = <span style=\"color: blue\">'Relevant medical history recorded on the endoscopy request'</span> <i>&quot;codeText&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;code&quot;</i><span style=\"color: navy\">;</span>\r\n      it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        a.value<b> as </b><span style=\"color: maroon\">txt</span><span style=\"color: navy\"><b> -&gt; </b></span> obs.note<b> as </b><span style=\"color: maroon\">n</span><span style=\"color: navy\">, </span> n.text = <span style=\"color: maroon\">txt</span> <i>&quot;text&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;narr_11348_0&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;historyObsGroup&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">── Drugs given during the procedure ────────────────────────────────────</span>\r\n  qr.item<b> as </b><span style=\"color: maroon\">g</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'management'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    g.item<b> as </b><span style=\"color: maroon\">d</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'management/drug') and item.where(linkId = 'management/drug/name').answer.value.exists()<span style=\"color: navy\">)</span><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\">'MedicationAdministration'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">ma</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      qr<span style=\"color: navy\"><b> -&gt; </b></span> ma<span style=\"color: navy\">, </span> entry<b> then </b>BuildMedicationAdministrationBase<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">ma</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span> <i>&quot;base&quot;</i><span style=\"color: navy\">;</span>\r\n      d<span style=\"color: navy\"><b> -&gt; </b></span>ma.status = <span style=\"color: blue\">'completed'</span> <i>&quot;status&quot;</i><span style=\"color: navy\">;</span>\r\n      qr.encounter<b> as </b><span style=\"color: maroon\">e</span><span style=\"color: navy\"><b> -&gt; </b></span>ma.encounter = <span style=\"color: maroon\">e</span><span style=\"color: navy\">;</span>\r\n      qr.source<b> as </b><span style=\"color: maroon\">src</span><span style=\"color: navy\"><b> -&gt; </b></span> ma.performer<b> as </b><span style=\"color: maroon\">p</span><span style=\"color: navy\">, </span> p.actor = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'CodeableReference'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">cr</span><span style=\"color: navy\">, </span> cr.reference = <span style=\"color: maroon\">src</span> <i>&quot;performer&quot;</i><span style=\"color: navy\">;</span>\r\n      d.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'management/drug/name'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          a.value<b> as </b><span style=\"color: maroon\">txt</span><span style=\"color: navy\"><b> -&gt; </b></span> ma.medication<b> as </b><span style=\"color: maroon\">med</span><span style=\"color: navy\">, </span> med.concept<b> as </b><span style=\"color: maroon\">mc</span><span style=\"color: navy\">, </span> mc.text = <span style=\"color: maroon\">txt</span> <i>&quot;medicationText&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;drugNameRule&quot;</i><span style=\"color: navy\">;</span>\r\n      d.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'management/drug/dose') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          a.value<b> as </b><span style=\"color: maroon\">txt</span><span style=\"color: navy\"><b> -&gt; </b></span> ma.dosage<b> as </b><span style=\"color: maroon\">dos</span><span style=\"color: navy\">, </span> dos.text = <span style=\"color: maroon\">txt</span> <i>&quot;dosageText&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;drugDoseRule&quot;</i><span style=\"color: navy\">;</span>\r\n      qr.authored<b> as </b><span style=\"color: maroon\">t</span><span style=\"color: navy\"><b> -&gt; </b></span>ma.occurence = <span style=\"color: maroon\">t</span> <i>&quot;occurrence&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;drugAdministration&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">── Suggested treatment, as a plan ────────────────────────────────────</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">A CarePlan and not a note: what the endoscopist suggests is the whole</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">point of the referral coming back, and the referring clinician needs to</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">find it as an outstanding action rather than as prose in a report.</span>\r\n    g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'management/suggested-treatment') and answer.value.exists()<span style=\"color: navy\">)</span><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\">'CarePlan'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">plan</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      qr<span style=\"color: navy\"><b> -&gt; </b></span> plan<span style=\"color: navy\">, </span> entry<b> then </b>BuildCarePlanBase<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">plan</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span> <i>&quot;base&quot;</i><span style=\"color: navy\">;</span>\r\n      it<span style=\"color: navy\"><b> -&gt; </b></span>plan.status = <span style=\"color: blue\">'active'</span> <i>&quot;status&quot;</i><span style=\"color: navy\">;</span>\r\n      it<span style=\"color: navy\"><b> -&gt; </b></span>plan.intent = <span style=\"color: blue\">'proposal'</span> <i>&quot;intent&quot;</i><span style=\"color: navy\">;</span>\r\n      it<span style=\"color: navy\"><b> -&gt; </b></span>plan.title = <span style=\"color: blue\">'Treatment suggested after endoscopy'</span> <i>&quot;title&quot;</i><span style=\"color: navy\">;</span>\r\n      qr.authored<b> as </b><span style=\"color: maroon\">t</span><span style=\"color: navy\"><b> -&gt; </b></span>plan.created = <span style=\"color: maroon\">t</span> <i>&quot;created&quot;</i><span style=\"color: navy\">;</span>\r\n      qr.encounter<b> as </b><span style=\"color: maroon\">e</span><span style=\"color: navy\"><b> -&gt; </b></span>plan.encounter = <span style=\"color: maroon\">e</span><span style=\"color: navy\">;</span>\r\n      qr.source<b> as </b><span style=\"color: maroon\">src</span><span style=\"color: navy\"><b> -&gt; </b></span>plan.custodian = <span style=\"color: maroon\">src</span> <i>&quot;custodian&quot;</i><span style=\"color: navy\">;</span>\r\n      it<span style=\"color: navy\"><b> -&gt; </b></span>plan.category<b> as </b><span style=\"color: maroon\">cat</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        it<span style=\"color: navy\"><b> -&gt; </b></span>cat.coding<b> as </b><span style=\"color: maroon\">cg</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          it<span style=\"color: navy\"><b> -&gt; </b></span>cg.system = <span style=\"color: blue\">'http://loinc.org'</span> <i>&quot;sys&quot;</i><span style=\"color: navy\">;</span>\r\n          it<span style=\"color: navy\"><b> -&gt; </b></span>cg.code = <span style=\"color: blue\">'18776-5'</span> <i>&quot;cd&quot;</i><span style=\"color: navy\">;</span>\r\n          it<span style=\"color: navy\"><b> -&gt; </b></span>cg.display = <span style=\"color: blue\">'Plan of care note'</span> <i>&quot;dsp&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span> <i>&quot;coding&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;category&quot;</i><span style=\"color: navy\">;</span>\r\n      it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        a.value<b> as </b><span style=\"color: maroon\">txt</span><span style=\"color: navy\"><b> -&gt; </b></span>plan.description = <span style=\"color: maroon\">txt</span> <i>&quot;description&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;suggestedTreatmentPlan&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;managementGroup&quot;</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><span style=\"color: navy\">// </span><span style=\"color: green\">─────────────────────────────────────────────────────────────────────────────</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">Shared scaffolding. Repeated in each map rather than imported: the transform</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">engine resolves `imports` against whatever StructureMaps happen to be on the</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">server, and a form that stops extracting because a shared map was not</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">uploaded is a worse failure than a duplicated group.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">Two notes on what the publisher's StructureMap validator says about this file.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">Source parameters below are left untyped on purpose. Writing `: Element` makes</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">the validator compare QuestionnaireResponse.item against the literal 'Element'</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">and report them as incompatible with each other, which is noise, not a finding.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">`evaluate(context, expression)` is flagged as &quot;takes 1 parameter but 2 were</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">found&quot;. Leave it. The FML parser in the same jar refuses the one-argument form</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">outright -- it wants a parameter, a comma, then the FHIRPath -- so the</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">publisher is objecting to what its own compiler emits. Two arguments is the</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">only form that compiles, and it is what the R5 transform engine executes.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">─────────────────────────────────────────────────────────────────────────────</span>\r\n<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\"> {\r\n</span>  qr<span style=\"color: navy\"><b> -&gt; </b></span>obs<b> then </b>SetResponseProvenance<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;responseProvenance&quot;</i><span style=\"color: navy\">;</span>\r\n  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>\r\n  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\"> {\r\n</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>\r\n    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>\r\n  <span style=\"color: navy\">}</span> <i>&quot;entryRequest&quot;</i><span style=\"color: navy\">;</span>\r\n  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>\r\n  qr.subject<b> as </b><span style=\"color: maroon\">s</span><span style=\"color: navy\"><b> -&gt; </b></span>obs.subject = <span style=\"color: maroon\">s</span><span style=\"color: navy\">;</span>\r\n  qr.encounter<b> as </b><span style=\"color: maroon\">e</span><span style=\"color: navy\"><b> -&gt; </b></span>obs.encounter = <span style=\"color: maroon\">e</span><span style=\"color: navy\">;</span>\r\n  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>\r\n  qr.source<b> as </b><span style=\"color: maroon\">src</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>\r\n  qr<b> where </b><span style=\"color: navy\">(</span>source.exists().not()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    qr.author<b> as </b><span style=\"color: maroon\">a</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>\r\n  <span style=\"color: navy\">}</span> <i>&quot;performerFallback&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">A stored response's id already reads &quot;QuestionnaireResponse/&lt;id&gt;&quot;, so it is</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">a relative reference as it stands. The hasValue() guard is what stops an</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">unsaved response -- one posted straight to $extract rather than saved first</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">-- from writing &quot;QuestionnaireResponse/null&quot; into the record.</span>\r\n  qr.id<b> as </b><span style=\"color: maroon\">qid</span><b> where </b><span style=\"color: navy\">(</span>$this.hasValue()<span style=\"color: navy\">)</span><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><span style=\"color: navy\">, </span> ref.reference = <span style=\"color: maroon\">qid</span> <i>&quot;linkQuestionnaireResponse&quot;</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</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\"> {\r\n</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>\r\n<span style=\"color: navy\">}\r\n\r\n</span><span style=\"color: navy\">// </span><span style=\"color: green\">The two answer shapes a component can carry. Both read the answer through the</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">untyped `.value` accessor: reading `valueCoding` or `valueQuantity` by its</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">typed property name fails at transform time on HAPI R5 with &quot;Attempt to read</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">invalid property ... on QuestionnaireResponse.item.answer&quot;.</span>\r\n<b>group </b>SetComponentCodedValue<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">it</span>, <b>target</b> <span style=\"color: maroon\">comp</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    a.value<b> as </b><span style=\"color: maroon\">cv</span><span style=\"color: navy\"><b> -&gt; </b></span>comp.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\">cc</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      cv<span style=\"color: navy\"><b> -&gt; </b></span>cc.coding = <span style=\"color: maroon\">cv</span> <i>&quot;valueCoding&quot;</i><span style=\"color: navy\">;</span>\r\n      cv.display<b> as </b><span style=\"color: maroon\">d</span><span style=\"color: navy\"><b> -&gt; </b></span>cc.text = <span style=\"color: maroon\">d</span> <i>&quot;valueText&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;codedValue&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;componentAnswer&quot;</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>SetComponentValue<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">it</span>, <b>target</b> <span style=\"color: maroon\">comp</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    a.value<b> as </b><span style=\"color: maroon\">v</span><span style=\"color: navy\"><b> -&gt; </b></span>comp.value = <span style=\"color: maroon\">v</span> <i>&quot;plainValue&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;componentAnswer&quot;</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>SetSurveyCategory<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\"> {\r\n</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\"> {\r\n</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\"> {\r\n</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>\r\n      qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.code = <span style=\"color: blue\">'survey'</span> <i>&quot;categoryCode&quot;</i><span style=\"color: navy\">;</span>\r\n      qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.display = <span style=\"color: blue\">'Survey'</span> <i>&quot;categoryDisplay&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;categoryCoding&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;category&quot;</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>SetProcedureCategory<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\"> {\r\n</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\"> {\r\n</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\"> {\r\n</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>\r\n      qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.code = <span style=\"color: blue\">'procedure'</span> <i>&quot;categoryCode&quot;</i><span style=\"color: navy\">;</span>\r\n      qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.display = <span style=\"color: blue\">'Procedure'</span> <i>&quot;categoryDisplay&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;categoryCoding&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;category&quot;</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>BuildProcedureBase<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>Procedure, <b>target</b> <span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  qr<span style=\"color: navy\"><b> -&gt; </b></span>r<b> then </b>SetResponseProvenance<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">r</span><span style=\"color: navy\">)</span> <i>&quot;responseProvenance&quot;</i><span style=\"color: navy\">;</span>\r\n  qr<span style=\"color: navy\"><b> -&gt; </b></span>r.id = <b>uuid</b><span style=\"color: navy\">(</span><span style=\"color: navy\">)</span><b> then </b>SetProcedureFullUrl<span style=\"color: navy\">(</span><span style=\"color: maroon\">r</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>\r\n  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\"> {\r\n</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>\r\n    qr<span style=\"color: navy\"><b> -&gt; </b></span>request.url = <span style=\"color: blue\">'Procedure'</span> <i>&quot;requestUrl&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;entryRequest&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">The response's own time, as a floor, the way BuildObsBase does it. A rule</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">that reads a time off the form overwrites this; without it a procedure whose</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">date column was taken off on review has no time at all, and a procedure with</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">no time cannot be ordered against the rest of the admission.</span>\r\n  qr.authored<b> as </b><span style=\"color: maroon\">t</span><span style=\"color: navy\"><b> -&gt; </b></span>r.occurrence = <span style=\"color: maroon\">t</span> <i>&quot;occurrenceFallback&quot;</i><span style=\"color: navy\">;</span>\r\n  qr.subject<b> as </b><span style=\"color: maroon\">s</span><span style=\"color: navy\"><b> -&gt; </b></span>r.subject = <span style=\"color: maroon\">s</span><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>SetProcedureFullUrl<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">r</span><span style=\"color: navy\"> : </span>Procedure, <b>target</b> <span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  r.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/Procedure/'</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>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>BuildDiagnosticReportBase<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>DiagnosticReport, <b>target</b> <span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  qr<span style=\"color: navy\"><b> -&gt; </b></span>r<b> then </b>SetResponseProvenance<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">r</span><span style=\"color: navy\">)</span> <i>&quot;responseProvenance&quot;</i><span style=\"color: navy\">;</span>\r\n  qr<span style=\"color: navy\"><b> -&gt; </b></span>r.id = <b>uuid</b><span style=\"color: navy\">(</span><span style=\"color: navy\">)</span><b> then </b>SetDiagnosticReportFullUrl<span style=\"color: navy\">(</span><span style=\"color: maroon\">r</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>\r\n  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\"> {\r\n</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>\r\n    qr<span style=\"color: navy\"><b> -&gt; </b></span>request.url = <span style=\"color: blue\">'DiagnosticReport'</span> <i>&quot;requestUrl&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;entryRequest&quot;</i><span style=\"color: navy\">;</span>\r\n  qr.subject<b> as </b><span style=\"color: maroon\">s</span><span style=\"color: navy\"><b> -&gt; </b></span>r.subject = <span style=\"color: maroon\">s</span><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>SetDiagnosticReportFullUrl<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">r</span><span style=\"color: navy\"> : </span>DiagnosticReport, <b>target</b> <span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  r.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/DiagnosticReport/'</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>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>BuildMedicationAdministrationBase<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>MedicationAdministration, <b>target</b> <span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  qr<span style=\"color: navy\"><b> -&gt; </b></span>r<b> then </b>SetResponseProvenance<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">r</span><span style=\"color: navy\">)</span> <i>&quot;responseProvenance&quot;</i><span style=\"color: navy\">;</span>\r\n  qr<span style=\"color: navy\"><b> -&gt; </b></span>r.id = <b>uuid</b><span style=\"color: navy\">(</span><span style=\"color: navy\">)</span><b> then </b>SetMedicationAdministrationFullUrl<span style=\"color: navy\">(</span><span style=\"color: maroon\">r</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>\r\n  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\"> {\r\n</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>\r\n    qr<span style=\"color: navy\"><b> -&gt; </b></span>request.url = <span style=\"color: blue\">'MedicationAdministration'</span> <i>&quot;requestUrl&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;entryRequest&quot;</i><span style=\"color: navy\">;</span>\r\n  qr.subject<b> as </b><span style=\"color: maroon\">s</span><span style=\"color: navy\"><b> -&gt; </b></span>r.subject = <span style=\"color: maroon\">s</span><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">The response's own time, as a floor. A row that names the time it was given</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">overwrites this; a form whose time column was taken off on review would</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">otherwise produce an administration with no time at all, which is not a</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">record of an administration. Same fallback BuildObsBase already applies.</span>\r\n  qr.authored<b> as </b><span style=\"color: maroon\">t</span><span style=\"color: navy\"><b> -&gt; </b></span>r.occurence = <span style=\"color: maroon\">t</span> <i>&quot;occurrenceFallback&quot;</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>SetMedicationAdministrationFullUrl<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">r</span><span style=\"color: navy\"> : </span>MedicationAdministration, <b>target</b> <span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  r.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/MedicationAdministration/'</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>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>BuildCarePlanBase<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>CarePlan, <b>target</b> <span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  qr<span style=\"color: navy\"><b> -&gt; </b></span>r<b> then </b>SetResponseProvenance<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">r</span><span style=\"color: navy\">)</span> <i>&quot;responseProvenance&quot;</i><span style=\"color: navy\">;</span>\r\n  qr<span style=\"color: navy\"><b> -&gt; </b></span>r.id = <b>uuid</b><span style=\"color: navy\">(</span><span style=\"color: navy\">)</span><b> then </b>SetCarePlanFullUrl<span style=\"color: navy\">(</span><span style=\"color: maroon\">r</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>\r\n  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\"> {\r\n</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>\r\n    qr<span style=\"color: navy\"><b> -&gt; </b></span>request.url = <span style=\"color: blue\">'CarePlan'</span> <i>&quot;requestUrl&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;entryRequest&quot;</i><span style=\"color: navy\">;</span>\r\n  qr.subject<b> as </b><span style=\"color: maroon\">s</span><span style=\"color: navy\"><b> -&gt; </b></span>r.subject = <span style=\"color: maroon\">s</span><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>SetCarePlanFullUrl<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">r</span><span style=\"color: navy\"> : </span>CarePlan, <b>target</b> <span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  r.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/CarePlan/'</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>\r\n<span style=\"color: navy\">}\r\n\r\n</span><span style=\"color: navy\">// </span><span style=\"color: green\">── Provenance and tenancy ───────────────────────────────────────────────────</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">Two tags on everything this map creates. The first says which questionnaire</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">produced it, so a form that reopens mid-admission recalls its own earlier</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">entries and not another form's. The second copies the tenant tags off the</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">response, because nothing else on the path puts them there.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">The code is the form's document type, not the questionnaire's id: every</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">environment mints its own ids, and there is only one set of maps, so an id</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">here would tie the tag to whichever environment stamped it.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">── Provenance and tenancy ───────────────────────────────────────────────────</span>\r\n<b>group </b>SetResponseProvenance<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\"> {\r\n</span>  qr<span style=\"color: navy\"><b> -&gt; </b></span>r.meta<b> as </b><span style=\"color: maroon\">m</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    qr<span style=\"color: navy\"><b> -&gt; </b></span>m.tag<b> as </b><span style=\"color: maroon\">t</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      qr<span style=\"color: navy\"><b> -&gt; </b></span>t.system = <span style=\"color: blue\">'http://slade360edi.com/questionnaire-provenance'</span> <i>&quot;provenanceSystem&quot;</i><span style=\"color: navy\">;</span>\r\n      qr<span style=\"color: navy\"><b> -&gt; </b></span>t.code = <span style=\"color: blue\">'endoscopy-investigation'</span> <i>&quot;provenanceCode&quot;</i><span style=\"color: navy\">;</span>\r\n      qr<span style=\"color: navy\"><b> -&gt; </b></span>t.display = <span style=\"color: blue\">'Endoscopy service investigation form'</span> <i>&quot;provenanceDisplay&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;provenanceTag&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;provenanceMeta&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">Every tag the response carries, onto the resource. `meta` is 0..1, so this</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">lands on the same meta the rule above created rather than a second one.</span>\r\n  qr.meta<b> as </b><span style=\"color: maroon\">qm</span><b> then</b><span style=\"color: navy\"> {\r\n</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>\r\n  <span style=\"color: navy\">}</span> <i>&quot;tenantTags&quot;</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span></pre></div>"
  },
  "url" : "https://fhir.slade360.co.ke/fhir/StructureMap/ExtractEndoscopyInvestigation",
  "version" : "0.1.0",
  "name" : "ExtractEndoscopyInvestigation",
  "title" : "Endoscopy Service Investigation Extraction",
  "status" : "active",
  "date" : "2026-09-14T06:31:13+00:00",
  "publisher" : "Kathurima Kimathi",
  "contact" : [
    {
      "name" : "Kathurima Kimathi",
      "telecom" : [
        {
          "system" : "url",
          "value" : "https://www.linkedin.com/in/kathurima-kimathi/"
        },
        {
          "system" : "email",
          "value" : "kathurimakimathi415@gmail.com"
        }
      ]
    },
    {
      "name" : "Oscar John",
      "telecom" : [
        {
          "system" : "email",
          "value" : "oscarjohnotieno@gmail.com",
          "use" : "work"
        }
      ]
    },
    {
      "name" : "Kennedy Omondi",
      "telecom" : [
        {
          "system" : "email",
          "value" : "kennankole@gmail.com",
          "use" : "work"
        }
      ]
    }
  ],
  "description" : "The endoscopy form is a request, a procedure and a report on one sheet, so it extracts as all three: a Procedure coded by whichever scope was done, taking its own coding from the answer so a colonoscopy is coded as a colonoscopy and not as 'endoscopy'; a DiagnosticReport under LOINC 18751-8 whose conclusion is the endoscopist's conclusion and whose result points at the findings Observation; a MedicationAdministration per drug given during the procedure; and a CarePlan for the suggested treatment. The findings live in an Observation rather than only in the report's narrative so that what was seen stays queryable after the report is filed.",
  "structure" : [
    {
      "url" : "http://hl7.org/fhir/StructureDefinition/QuestionnaireResponse",
      "mode" : "source",
      "alias" : "QR"
    },
    {
      "url" : "http://hl7.org/fhir/StructureDefinition/Bundle",
      "mode" : "target",
      "alias" : "Bundle"
    },
    {
      "url" : "http://hl7.org/fhir/StructureDefinition/Observation",
      "mode" : "target",
      "alias" : "Observation"
    },
    {
      "url" : "http://hl7.org/fhir/StructureDefinition/Procedure",
      "mode" : "target",
      "alias" : "Procedure"
    },
    {
      "url" : "http://hl7.org/fhir/StructureDefinition/DiagnosticReport",
      "mode" : "target",
      "alias" : "DiagnosticReport"
    },
    {
      "url" : "http://hl7.org/fhir/StructureDefinition/MedicationAdministration",
      "mode" : "target",
      "alias" : "MedicationAdministration"
    },
    {
      "url" : "http://hl7.org/fhir/StructureDefinition/CarePlan",
      "mode" : "target",
      "alias" : "CarePlan"
    }
  ],
  "group" : [
    {
      "name" : "ExtractEndoscopyInvestigation",
      "input" : [
        {
          "name" : "qr",
          "type" : "QR",
          "mode" : "source"
        },
        {
          "name" : "bundle",
          "type" : "Bundle",
          "mode" : "target"
        }
      ],
      "rule" : [
        {
          "name" : "setBundleType",
          "source" : [
            {
              "context" : "qr"
            }
          ],
          "target" : [
            {
              "context" : "bundle",
              "element" : "type",
              "transform" : "copy",
              "parameter" : [
                {
                  "valueString" : "transaction"
                }
              ]
            }
          ]
        },
        {
          "name" : "studyGroup",
          "source" : [
            {
              "context" : "qr",
              "element" : "item",
              "variable" : "g",
              "condition" : "linkId = 'study'"
            }
          ],
          "rule" : [
            {
              "name" : "endoscopyReport",
              "source" : [
                {
                  "context" : "qr",
                  "condition" : "item.where(linkId = 'findings').answer.value.exists() or item.where(linkId = 'conclusion').answer.value.exists()"
                }
              ],
              "target" : [
                {
                  "context" : "bundle",
                  "element" : "entry",
                  "variable" : "entry"
                },
                {
                  "context" : "entry",
                  "element" : "resource",
                  "variable" : "dr",
                  "transform" : "create",
                  "parameter" : [
                    {
                      "valueString" : "DiagnosticReport"
                    }
                  ]
                }
              ],
              "rule" : [
                {
                  "name" : "base",
                  "source" : [
                    {
                      "context" : "qr"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "dr"
                    },
                    {
                      "context" : "entry"
                    }
                  ],
                  "dependent" : [
                    {
                      "name" : "BuildDiagnosticReportBase",
                      "parameter" : [
                        {
                          "valueId" : "qr"
                        },
                        {
                          "valueId" : "dr"
                        },
                        {
                          "valueId" : "entry"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "status",
                  "source" : [
                    {
                      "context" : "qr"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "dr",
                      "element" : "status",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueString" : "final"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "encounter",
                  "source" : [
                    {
                      "context" : "qr",
                      "element" : "encounter",
                      "variable" : "e"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "dr",
                      "element" : "encounter",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueId" : "e"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "issued",
                  "source" : [
                    {
                      "context" : "qr",
                      "element" : "authored",
                      "variable" : "t"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "dr",
                      "element" : "issued",
                      "transform" : "cast",
                      "parameter" : [
                        {
                          "valueId" : "t"
                        },
                        {
                          "valueString" : "instant"
                        }
                      ]
                    }
                  ],
                  "documentation" : "issued is an instant and qr.authored is a dateTime, so it needs the\r\ncast: \"Unable to convert a dateTime to a Instant\". The cast is safe\r\nbecause a QuestionnaireResponse.authored always carries a time."
                },
                {
                  "name" : "code",
                  "source" : [
                    {
                      "context" : "qr"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "dr",
                      "element" : "code",
                      "variable" : "cc"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "coding",
                      "source" : [
                        {
                          "context" : "qr"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "cc",
                          "element" : "coding",
                          "variable" : "cg"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "sys",
                          "source" : [
                            {
                              "context" : "qr"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "cg",
                              "element" : "system",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueString" : "http://loinc.org"
                                }
                              ]
                            }
                          ]
                        },
                        {
                          "name" : "cd",
                          "source" : [
                            {
                              "context" : "qr"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "cg",
                              "element" : "code",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueString" : "18751-8"
                                }
                              ]
                            }
                          ]
                        },
                        {
                          "name" : "dsp",
                          "source" : [
                            {
                              "context" : "qr"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "cg",
                              "element" : "display",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueString" : "Endoscopy study"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "category",
                  "source" : [
                    {
                      "context" : "qr"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "dr",
                      "element" : "category",
                      "variable" : "cat"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "coding",
                      "source" : [
                        {
                          "context" : "qr"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "cat",
                          "element" : "coding",
                          "variable" : "cg"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "sys",
                          "source" : [
                            {
                              "context" : "qr"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "cg",
                              "element" : "system",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueString" : "http://terminology.hl7.org/CodeSystem/v2-0074"
                                }
                              ]
                            }
                          ]
                        },
                        {
                          "name" : "cd",
                          "source" : [
                            {
                              "context" : "qr"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "cg",
                              "element" : "code",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueString" : "OSL"
                                }
                              ]
                            }
                          ]
                        },
                        {
                          "name" : "dsp",
                          "source" : [
                            {
                              "context" : "qr"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "cg",
                              "element" : "display",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueString" : "Outside Lab"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "name" : "catText",
                      "source" : [
                        {
                          "context" : "qr"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "cat",
                          "element" : "text",
                          "transform" : "copy",
                          "parameter" : [
                            {
                              "valueString" : "Endoscopy unit"
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "effectiveRule",
                  "source" : [
                    {
                      "context" : "g",
                      "element" : "item",
                      "variable" : "pa",
                      "condition" : "(linkId = 'study/performed-at') and answer.value.exists()"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "answer",
                      "source" : [
                        {
                          "context" : "pa",
                          "element" : "answer",
                          "listMode" : "first",
                          "variable" : "a"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "effectiveFromStudy",
                          "source" : [
                            {
                              "context" : "a",
                              "element" : "value",
                              "variable" : "v"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "dr",
                              "element" : "effective",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueId" : "v"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ],
                  "documentation" : "Effective time is the study's own time, not the form's. A report filed\r\nthe next morning is still a report on yesterday's scope."
                },
                {
                  "name" : "performerRule",
                  "source" : [
                    {
                      "context" : "g",
                      "element" : "item",
                      "variable" : "ep",
                      "condition" : "(linkId = 'study/endoscopist') and answer.value.exists()"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "answer",
                      "source" : [
                        {
                          "context" : "ep",
                          "element" : "answer",
                          "listMode" : "first",
                          "variable" : "a"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "performer",
                          "source" : [
                            {
                              "context" : "a",
                              "element" : "value",
                              "variable" : "ref"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "dr",
                              "element" : "performer",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueId" : "ref"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "conclusionRule",
                  "source" : [
                    {
                      "context" : "qr",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = 'conclusion') and answer.value.exists()"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "answer",
                      "source" : [
                        {
                          "context" : "it",
                          "element" : "answer",
                          "listMode" : "first",
                          "variable" : "a"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "conclusionText",
                          "source" : [
                            {
                              "context" : "a",
                              "element" : "value",
                              "variable" : "txt"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "dr",
                              "element" : "conclusion",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueId" : "txt"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "findingsObservation",
                  "source" : [
                    {
                      "context" : "qr",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = 'findings') and answer.value.exists()"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "bundle",
                      "element" : "entry",
                      "variable" : "sentry"
                    },
                    {
                      "context" : "sentry",
                      "element" : "resource",
                      "variable" : "sobs",
                      "transform" : "create",
                      "parameter" : [
                        {
                          "valueString" : "Observation"
                        }
                      ]
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "base",
                      "source" : [
                        {
                          "context" : "qr"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "sobs"
                        },
                        {
                          "context" : "sentry"
                        }
                      ],
                      "dependent" : [
                        {
                          "name" : "BuildObsBase",
                          "parameter" : [
                            {
                              "valueId" : "qr"
                            },
                            {
                              "valueId" : "sobs"
                            },
                            {
                              "valueId" : "sentry"
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "name" : "category",
                      "source" : [
                        {
                          "context" : "qr"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "sobs"
                        }
                      ],
                      "dependent" : [
                        {
                          "name" : "SetProcedureCategory",
                          "parameter" : [
                            {
                              "valueId" : "qr"
                            },
                            {
                              "valueId" : "sobs"
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "name" : "code",
                      "source" : [
                        {
                          "context" : "it"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "sobs",
                          "element" : "code",
                          "variable" : "cc"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "coding",
                          "source" : [
                            {
                              "context" : "it"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "cc",
                              "element" : "coding",
                              "variable" : "cg"
                            }
                          ],
                          "rule" : [
                            {
                              "name" : "sys",
                              "source" : [
                                {
                                  "context" : "it"
                                }
                              ],
                              "target" : [
                                {
                                  "context" : "cg",
                                  "element" : "system",
                                  "transform" : "copy",
                                  "parameter" : [
                                    {
                                      "valueString" : "https://fhir.slade360.co.ke/fhir/CodeSystem/concept-codesystem"
                                    }
                                  ]
                                }
                              ]
                            },
                            {
                              "name" : "cd",
                              "source" : [
                                {
                                  "context" : "it"
                                }
                              ],
                              "target" : [
                                {
                                  "context" : "cg",
                                  "element" : "code",
                                  "transform" : "copy",
                                  "parameter" : [
                                    {
                                      "valueString" : "endoscopy-endoscopic-findings"
                                    }
                                  ]
                                }
                              ]
                            },
                            {
                              "name" : "dsp",
                              "source" : [
                                {
                                  "context" : "it"
                                }
                              ],
                              "target" : [
                                {
                                  "context" : "cg",
                                  "element" : "display",
                                  "transform" : "copy",
                                  "parameter" : [
                                    {
                                      "valueString" : "Endoscopic findings"
                                    }
                                  ]
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "name" : "answer",
                      "source" : [
                        {
                          "context" : "it",
                          "element" : "answer",
                          "listMode" : "first",
                          "variable" : "a"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "findingsText",
                          "source" : [
                            {
                              "context" : "a",
                              "element" : "value",
                              "variable" : "txt"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "sobs",
                              "element" : "note",
                              "variable" : "n"
                            },
                            {
                              "context" : "n",
                              "element" : "text",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueId" : "txt"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "name" : "linkResult",
                      "source" : [
                        {
                          "context" : "it"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "dr",
                          "element" : "result",
                          "variable" : "fref",
                          "transform" : "create",
                          "parameter" : [
                            {
                              "valueString" : "Reference"
                            }
                          ]
                        },
                        {
                          "context" : "fref",
                          "element" : "reference",
                          "transform" : "reference",
                          "parameter" : [
                            {
                              "valueId" : "sobs"
                            }
                          ]
                        }
                      ]
                    }
                  ],
                  "documentation" : "The findings, as an Observation the report points at."
                }
              ]
            },
            {
              "name" : "endoscopyProcedure",
              "source" : [
                {
                  "context" : "g",
                  "element" : "item",
                  "variable" : "it",
                  "condition" : "(linkId = 'study/investigation') and answer.value.exists()"
                }
              ],
              "target" : [
                {
                  "context" : "bundle",
                  "element" : "entry",
                  "variable" : "entry"
                },
                {
                  "context" : "entry",
                  "element" : "resource",
                  "variable" : "proc",
                  "transform" : "create",
                  "parameter" : [
                    {
                      "valueString" : "Procedure"
                    }
                  ]
                }
              ],
              "rule" : [
                {
                  "name" : "base",
                  "source" : [
                    {
                      "context" : "qr"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "proc"
                    },
                    {
                      "context" : "entry"
                    }
                  ],
                  "dependent" : [
                    {
                      "name" : "BuildProcedureBase",
                      "parameter" : [
                        {
                          "valueId" : "qr"
                        },
                        {
                          "valueId" : "proc"
                        },
                        {
                          "valueId" : "entry"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "status",
                  "source" : [
                    {
                      "context" : "it"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "proc",
                      "element" : "status",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueString" : "completed"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "encounter",
                  "source" : [
                    {
                      "context" : "qr",
                      "element" : "encounter",
                      "variable" : "e"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "proc",
                      "element" : "encounter",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueId" : "e"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "answer",
                  "source" : [
                    {
                      "context" : "it",
                      "element" : "answer",
                      "listMode" : "first",
                      "variable" : "a"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "codeFromAnswer",
                      "source" : [
                        {
                          "context" : "a",
                          "element" : "value",
                          "variable" : "cv"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "proc",
                          "element" : "code",
                          "variable" : "cc"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "coding",
                          "source" : [
                            {
                              "context" : "cv"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "cc",
                              "element" : "coding",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueId" : "cv"
                                }
                              ]
                            }
                          ]
                        },
                        {
                          "name" : "text",
                          "source" : [
                            {
                              "context" : "cv",
                              "element" : "display",
                              "variable" : "d"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "cc",
                              "element" : "text",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueId" : "d"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "occurrenceRule",
                  "source" : [
                    {
                      "context" : "g",
                      "element" : "item",
                      "variable" : "pa",
                      "condition" : "(linkId = 'study/performed-at') and answer.value.exists()"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "answer",
                      "source" : [
                        {
                          "context" : "pa",
                          "element" : "answer",
                          "listMode" : "first",
                          "variable" : "a"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "occurrence",
                          "source" : [
                            {
                              "context" : "a",
                              "element" : "value",
                              "variable" : "v"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "proc",
                              "element" : "occurrence",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueId" : "v"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "endoscopistRule",
                  "source" : [
                    {
                      "context" : "g",
                      "element" : "item",
                      "variable" : "ep",
                      "condition" : "(linkId = 'study/endoscopist') and answer.value.exists()"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "answer",
                      "source" : [
                        {
                          "context" : "ep",
                          "element" : "answer",
                          "listMode" : "first",
                          "variable" : "a"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "endoscopist",
                          "source" : [
                            {
                              "context" : "a",
                              "element" : "value",
                              "variable" : "ref"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "proc",
                              "element" : "performer",
                              "variable" : "p"
                            },
                            {
                              "context" : "p",
                              "element" : "actor",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueId" : "ref"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "assistantRule",
                  "source" : [
                    {
                      "context" : "g",
                      "element" : "item",
                      "variable" : "asst",
                      "condition" : "(linkId = 'study/assistant-instrumentalist') and answer.value.exists()"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "answer",
                      "source" : [
                        {
                          "context" : "asst",
                          "element" : "answer",
                          "listMode" : "first",
                          "variable" : "a"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "assistant",
                          "source" : [
                            {
                              "context" : "a",
                              "element" : "value",
                              "variable" : "txt"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "proc",
                              "element" : "performer",
                              "variable" : "p"
                            },
                            {
                              "context" : "p",
                              "element" : "actor",
                              "variable" : "aref",
                              "transform" : "create",
                              "parameter" : [
                                {
                                  "valueString" : "Reference"
                                }
                              ]
                            },
                            {
                              "context" : "aref",
                              "element" : "display",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueId" : "txt"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ],
                  "documentation" : "The assistant is a name typed on the form, not a picked practitioner,\r\nso it travels as the actor's display with no reference behind it."
                },
                {
                  "name" : "historyRule",
                  "source" : [
                    {
                      "context" : "g",
                      "element" : "item",
                      "variable" : "mh",
                      "condition" : "(linkId = 'study/medical-history') and answer.value.exists()"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "answer",
                      "source" : [
                        {
                          "context" : "mh",
                          "element" : "answer",
                          "listMode" : "first",
                          "variable" : "a"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "historyNote",
                          "source" : [
                            {
                              "context" : "a",
                              "element" : "value",
                              "variable" : "txt"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "proc",
                              "element" : "note",
                              "variable" : "n"
                            },
                            {
                              "context" : "n",
                              "element" : "text",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueId" : "txt"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ],
              "documentation" : "── The procedure ─────────────────────────────────────────────────────"
            }
          ],
          "documentation" : "── The report, and the findings Observation it points at ───────────────\r\nBuilt together and in this order because the report's `result` has to\r\nreference the Observation, and a reference to a resource created in a\r\nsibling rule is not reachable: the target variable does not exist there."
        },
        {
          "name" : "historyObsGroup",
          "source" : [
            {
              "context" : "qr",
              "element" : "item",
              "variable" : "g",
              "condition" : "linkId = 'study'"
            }
          ],
          "rule" : [
            {
              "name" : "narr_11348_0",
              "source" : [
                {
                  "context" : "g",
                  "element" : "item",
                  "variable" : "it",
                  "condition" : "(linkId = 'study/medical-history') and answer.value.exists()"
                }
              ],
              "target" : [
                {
                  "context" : "bundle",
                  "element" : "entry",
                  "variable" : "entry"
                },
                {
                  "context" : "entry",
                  "element" : "resource",
                  "variable" : "obs",
                  "transform" : "create",
                  "parameter" : [
                    {
                      "valueString" : "Observation"
                    }
                  ]
                }
              ],
              "rule" : [
                {
                  "name" : "base",
                  "source" : [
                    {
                      "context" : "qr"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "obs"
                    },
                    {
                      "context" : "entry"
                    }
                  ],
                  "dependent" : [
                    {
                      "name" : "BuildObsBase",
                      "parameter" : [
                        {
                          "valueId" : "qr"
                        },
                        {
                          "valueId" : "obs"
                        },
                        {
                          "valueId" : "entry"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "category",
                  "source" : [
                    {
                      "context" : "qr"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "obs"
                    }
                  ],
                  "dependent" : [
                    {
                      "name" : "SetSurveyCategory",
                      "parameter" : [
                        {
                          "valueId" : "qr"
                        },
                        {
                          "valueId" : "obs"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "code",
                  "source" : [
                    {
                      "context" : "it"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "obs",
                      "element" : "code",
                      "variable" : "cc"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "coding",
                      "source" : [
                        {
                          "context" : "it"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "cc",
                          "element" : "coding",
                          "variable" : "cg"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "sys",
                          "source" : [
                            {
                              "context" : "it"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "cg",
                              "element" : "system",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueString" : "http://loinc.org"
                                }
                              ]
                            }
                          ]
                        },
                        {
                          "name" : "cd",
                          "source" : [
                            {
                              "context" : "it"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "cg",
                              "element" : "code",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueString" : "11348-0"
                                }
                              ]
                            }
                          ]
                        },
                        {
                          "name" : "dsp",
                          "source" : [
                            {
                              "context" : "it"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "cg",
                              "element" : "display",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueString" : "History of Past illness note"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "name" : "codeText",
                      "source" : [
                        {
                          "context" : "it"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "cc",
                          "element" : "text",
                          "transform" : "copy",
                          "parameter" : [
                            {
                              "valueString" : "Relevant medical history recorded on the endoscopy request"
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "answer",
                  "source" : [
                    {
                      "context" : "it",
                      "element" : "answer",
                      "listMode" : "first",
                      "variable" : "a"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "text",
                      "source" : [
                        {
                          "context" : "a",
                          "element" : "value",
                          "variable" : "txt"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "obs",
                          "element" : "note",
                          "variable" : "n"
                        },
                        {
                          "context" : "n",
                          "element" : "text",
                          "transform" : "copy",
                          "parameter" : [
                            {
                              "valueId" : "txt"
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ],
          "documentation" : "── The medical history, also as its own Observation ────────────────────\r\nDuplicated deliberately. On the Procedure it is context for the operator;\r\nas an Observation it is a piece of history a later clinician can find\r\nwithout opening an endoscopy report to look for it."
        },
        {
          "name" : "managementGroup",
          "source" : [
            {
              "context" : "qr",
              "element" : "item",
              "variable" : "g",
              "condition" : "linkId = 'management'"
            }
          ],
          "rule" : [
            {
              "name" : "drugAdministration",
              "source" : [
                {
                  "context" : "g",
                  "element" : "item",
                  "variable" : "d",
                  "condition" : "(linkId = 'management/drug') and item.where(linkId = 'management/drug/name').answer.value.exists()"
                }
              ],
              "target" : [
                {
                  "context" : "bundle",
                  "element" : "entry",
                  "variable" : "entry"
                },
                {
                  "context" : "entry",
                  "element" : "resource",
                  "variable" : "ma",
                  "transform" : "create",
                  "parameter" : [
                    {
                      "valueString" : "MedicationAdministration"
                    }
                  ]
                }
              ],
              "rule" : [
                {
                  "name" : "base",
                  "source" : [
                    {
                      "context" : "qr"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "ma"
                    },
                    {
                      "context" : "entry"
                    }
                  ],
                  "dependent" : [
                    {
                      "name" : "BuildMedicationAdministrationBase",
                      "parameter" : [
                        {
                          "valueId" : "qr"
                        },
                        {
                          "valueId" : "ma"
                        },
                        {
                          "valueId" : "entry"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "status",
                  "source" : [
                    {
                      "context" : "d"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "ma",
                      "element" : "status",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueString" : "completed"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "encounter",
                  "source" : [
                    {
                      "context" : "qr",
                      "element" : "encounter",
                      "variable" : "e"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "ma",
                      "element" : "encounter",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueId" : "e"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "performer",
                  "source" : [
                    {
                      "context" : "qr",
                      "element" : "source",
                      "variable" : "src"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "ma",
                      "element" : "performer",
                      "variable" : "p"
                    },
                    {
                      "context" : "p",
                      "element" : "actor",
                      "variable" : "cr",
                      "transform" : "create",
                      "parameter" : [
                        {
                          "valueString" : "CodeableReference"
                        }
                      ]
                    },
                    {
                      "context" : "cr",
                      "element" : "reference",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueId" : "src"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "drugNameRule",
                  "source" : [
                    {
                      "context" : "d",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "linkId = 'management/drug/name'"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "answer",
                      "source" : [
                        {
                          "context" : "it",
                          "element" : "answer",
                          "listMode" : "first",
                          "variable" : "a"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "medicationText",
                          "source" : [
                            {
                              "context" : "a",
                              "element" : "value",
                              "variable" : "txt"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "ma",
                              "element" : "medication",
                              "variable" : "med"
                            },
                            {
                              "context" : "med",
                              "element" : "concept",
                              "variable" : "mc"
                            },
                            {
                              "context" : "mc",
                              "element" : "text",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueId" : "txt"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "drugDoseRule",
                  "source" : [
                    {
                      "context" : "d",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = 'management/drug/dose') and answer.value.exists()"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "answer",
                      "source" : [
                        {
                          "context" : "it",
                          "element" : "answer",
                          "listMode" : "first",
                          "variable" : "a"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "dosageText",
                          "source" : [
                            {
                              "context" : "a",
                              "element" : "value",
                              "variable" : "txt"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "ma",
                              "element" : "dosage",
                              "variable" : "dos"
                            },
                            {
                              "context" : "dos",
                              "element" : "text",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueId" : "txt"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "occurrence",
                  "source" : [
                    {
                      "context" : "qr",
                      "element" : "authored",
                      "variable" : "t"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "ma",
                      "element" : "occurence",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueId" : "t"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "name" : "suggestedTreatmentPlan",
              "source" : [
                {
                  "context" : "g",
                  "element" : "item",
                  "variable" : "it",
                  "condition" : "(linkId = 'management/suggested-treatment') and answer.value.exists()"
                }
              ],
              "target" : [
                {
                  "context" : "bundle",
                  "element" : "entry",
                  "variable" : "entry"
                },
                {
                  "context" : "entry",
                  "element" : "resource",
                  "variable" : "plan",
                  "transform" : "create",
                  "parameter" : [
                    {
                      "valueString" : "CarePlan"
                    }
                  ]
                }
              ],
              "rule" : [
                {
                  "name" : "base",
                  "source" : [
                    {
                      "context" : "qr"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "plan"
                    },
                    {
                      "context" : "entry"
                    }
                  ],
                  "dependent" : [
                    {
                      "name" : "BuildCarePlanBase",
                      "parameter" : [
                        {
                          "valueId" : "qr"
                        },
                        {
                          "valueId" : "plan"
                        },
                        {
                          "valueId" : "entry"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "status",
                  "source" : [
                    {
                      "context" : "it"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "plan",
                      "element" : "status",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueString" : "active"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "intent",
                  "source" : [
                    {
                      "context" : "it"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "plan",
                      "element" : "intent",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueString" : "proposal"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "title",
                  "source" : [
                    {
                      "context" : "it"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "plan",
                      "element" : "title",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueString" : "Treatment suggested after endoscopy"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "created",
                  "source" : [
                    {
                      "context" : "qr",
                      "element" : "authored",
                      "variable" : "t"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "plan",
                      "element" : "created",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueId" : "t"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "encounter",
                  "source" : [
                    {
                      "context" : "qr",
                      "element" : "encounter",
                      "variable" : "e"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "plan",
                      "element" : "encounter",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueId" : "e"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "custodian",
                  "source" : [
                    {
                      "context" : "qr",
                      "element" : "source",
                      "variable" : "src"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "plan",
                      "element" : "custodian",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueId" : "src"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "category",
                  "source" : [
                    {
                      "context" : "it"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "plan",
                      "element" : "category",
                      "variable" : "cat"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "coding",
                      "source" : [
                        {
                          "context" : "it"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "cat",
                          "element" : "coding",
                          "variable" : "cg"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "sys",
                          "source" : [
                            {
                              "context" : "it"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "cg",
                              "element" : "system",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueString" : "http://loinc.org"
                                }
                              ]
                            }
                          ]
                        },
                        {
                          "name" : "cd",
                          "source" : [
                            {
                              "context" : "it"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "cg",
                              "element" : "code",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueString" : "18776-5"
                                }
                              ]
                            }
                          ]
                        },
                        {
                          "name" : "dsp",
                          "source" : [
                            {
                              "context" : "it"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "cg",
                              "element" : "display",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueString" : "Plan of care note"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "answer",
                  "source" : [
                    {
                      "context" : "it",
                      "element" : "answer",
                      "listMode" : "first",
                      "variable" : "a"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "description",
                      "source" : [
                        {
                          "context" : "a",
                          "element" : "value",
                          "variable" : "txt"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "plan",
                          "element" : "description",
                          "transform" : "copy",
                          "parameter" : [
                            {
                              "valueId" : "txt"
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ],
              "documentation" : "── Suggested treatment, as a plan ────────────────────────────────────\r\nA CarePlan and not a note: what the endoscopist suggests is the whole\r\npoint of the referral coming back, and the referring clinician needs to\r\nfind it as an outstanding action rather than as prose in a report."
            }
          ],
          "documentation" : "── Drugs given during the procedure ────────────────────────────────────"
        }
      ]
    },
    {
      "name" : "BuildObsBase",
      "documentation" : "─────────────────────────────────────────────────────────────────────────────\r\nShared scaffolding. Repeated in each map rather than imported: the transform\r\nengine resolves `imports` against whatever StructureMaps happen to be on the\r\nserver, and a form that stops extracting because a shared map was not\r\nuploaded is a worse failure than a duplicated group.\r\nTwo notes on what the publisher's StructureMap validator says about this file.\r\nSource parameters below are left untyped on purpose. Writing `: Element` makes\r\nthe validator compare QuestionnaireResponse.item against the literal 'Element'\r\nand report them as incompatible with each other, which is noise, not a finding.\r\n`evaluate(context, expression)` is flagged as \"takes 1 parameter but 2 were\r\nfound\". Leave it. The FML parser in the same jar refuses the one-argument form\r\noutright -- it wants a parameter, a comma, then the FHIRPath -- so the\r\npublisher is objecting to what its own compiler emits. Two arguments is the\r\nonly form that compiles, and it is what the R5 transform engine executes.\r\n─────────────────────────────────────────────────────────────────────────────",
      "input" : [
        {
          "name" : "qr",
          "type" : "QR",
          "mode" : "source"
        },
        {
          "name" : "obs",
          "type" : "Observation",
          "mode" : "target"
        },
        {
          "name" : "entry",
          "mode" : "target"
        }
      ],
      "rule" : [
        {
          "name" : "responseProvenance",
          "source" : [
            {
              "context" : "qr"
            }
          ],
          "target" : [
            {
              "context" : "obs"
            }
          ],
          "dependent" : [
            {
              "name" : "SetResponseProvenance",
              "parameter" : [
                {
                  "valueId" : "qr"
                },
                {
                  "valueId" : "obs"
                }
              ]
            }
          ]
        },
        {
          "name" : "idAndFullUrl",
          "source" : [
            {
              "context" : "qr"
            }
          ],
          "target" : [
            {
              "context" : "obs",
              "element" : "id",
              "transform" : "uuid"
            }
          ],
          "dependent" : [
            {
              "name" : "SetObservationFullUrl",
              "parameter" : [
                {
                  "valueId" : "obs"
                },
                {
                  "valueId" : "entry"
                }
              ]
            }
          ]
        },
        {
          "name" : "entryRequest",
          "source" : [
            {
              "context" : "qr"
            }
          ],
          "target" : [
            {
              "context" : "entry",
              "element" : "request",
              "variable" : "request"
            }
          ],
          "rule" : [
            {
              "name" : "requestMethod",
              "source" : [
                {
                  "context" : "qr"
                }
              ],
              "target" : [
                {
                  "context" : "request",
                  "element" : "method",
                  "transform" : "copy",
                  "parameter" : [
                    {
                      "valueString" : "POST"
                    }
                  ]
                }
              ]
            },
            {
              "name" : "requestUrl",
              "source" : [
                {
                  "context" : "qr"
                }
              ],
              "target" : [
                {
                  "context" : "request",
                  "element" : "url",
                  "transform" : "copy",
                  "parameter" : [
                    {
                      "valueString" : "Observation"
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "name" : "status",
          "source" : [
            {
              "context" : "qr"
            }
          ],
          "target" : [
            {
              "context" : "obs",
              "element" : "status",
              "transform" : "copy",
              "parameter" : [
                {
                  "valueString" : "final"
                }
              ]
            }
          ]
        },
        {
          "name" : "subject",
          "source" : [
            {
              "context" : "qr",
              "element" : "subject",
              "variable" : "s"
            }
          ],
          "target" : [
            {
              "context" : "obs",
              "element" : "subject",
              "transform" : "copy",
              "parameter" : [
                {
                  "valueId" : "s"
                }
              ]
            }
          ]
        },
        {
          "name" : "encounter",
          "source" : [
            {
              "context" : "qr",
              "element" : "encounter",
              "variable" : "e"
            }
          ],
          "target" : [
            {
              "context" : "obs",
              "element" : "encounter",
              "transform" : "copy",
              "parameter" : [
                {
                  "valueId" : "e"
                }
              ]
            }
          ]
        },
        {
          "name" : "effective",
          "source" : [
            {
              "context" : "qr",
              "element" : "authored",
              "variable" : "t"
            }
          ],
          "target" : [
            {
              "context" : "obs",
              "element" : "effective",
              "transform" : "copy",
              "parameter" : [
                {
                  "valueId" : "t"
                }
              ]
            }
          ]
        },
        {
          "name" : "performerFromSource",
          "source" : [
            {
              "context" : "qr",
              "element" : "source",
              "variable" : "src"
            }
          ],
          "target" : [
            {
              "context" : "obs",
              "element" : "performer",
              "transform" : "copy",
              "parameter" : [
                {
                  "valueId" : "src"
                }
              ]
            }
          ]
        },
        {
          "name" : "performerFallback",
          "source" : [
            {
              "context" : "qr",
              "condition" : "source.exists().not()"
            }
          ],
          "rule" : [
            {
              "name" : "performerFromAuthor",
              "source" : [
                {
                  "context" : "qr",
                  "element" : "author",
                  "variable" : "a"
                }
              ],
              "target" : [
                {
                  "context" : "obs",
                  "element" : "performer",
                  "transform" : "copy",
                  "parameter" : [
                    {
                      "valueId" : "a"
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "name" : "linkQuestionnaireResponse",
          "source" : [
            {
              "context" : "qr",
              "element" : "id",
              "variable" : "qid",
              "condition" : "$this.hasValue()"
            }
          ],
          "target" : [
            {
              "context" : "obs",
              "element" : "derivedFrom",
              "variable" : "ref",
              "transform" : "create",
              "parameter" : [
                {
                  "valueString" : "Reference"
                }
              ]
            },
            {
              "context" : "ref",
              "element" : "reference",
              "transform" : "copy",
              "parameter" : [
                {
                  "valueId" : "qid"
                }
              ]
            }
          ],
          "documentation" : "A stored response's id already reads \"QuestionnaireResponse/<id>\", so it is\r\na relative reference as it stands. The hasValue() guard is what stops an\r\nunsaved response -- one posted straight to $extract rather than saved first\r\n-- from writing \"QuestionnaireResponse/null\" into the record."
        }
      ]
    },
    {
      "name" : "SetObservationFullUrl",
      "input" : [
        {
          "name" : "obs",
          "type" : "Observation",
          "mode" : "source"
        },
        {
          "name" : "entry",
          "mode" : "target"
        }
      ],
      "rule" : [
        {
          "name" : "assignFullUrl",
          "source" : [
            {
              "context" : "obs",
              "element" : "id",
              "variable" : "id"
            }
          ],
          "target" : [
            {
              "context" : "entry",
              "element" : "fullUrl",
              "transform" : "append",
              "parameter" : [
                {
                  "valueString" : "https://fhir.slade360.co.ke/fhir/Observation/"
                },
                {
                  "valueId" : "id"
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name" : "SetComponentCodedValue",
      "documentation" : "The two answer shapes a component can carry. Both read the answer through the\r\nuntyped `.value` accessor: reading `valueCoding` or `valueQuantity` by its\r\ntyped property name fails at transform time on HAPI R5 with \"Attempt to read\r\ninvalid property ... on QuestionnaireResponse.item.answer\".",
      "input" : [
        {
          "name" : "it",
          "mode" : "source"
        },
        {
          "name" : "comp",
          "mode" : "target"
        }
      ],
      "rule" : [
        {
          "name" : "componentAnswer",
          "source" : [
            {
              "context" : "it",
              "element" : "answer",
              "listMode" : "first",
              "variable" : "a"
            }
          ],
          "rule" : [
            {
              "name" : "codedValue",
              "source" : [
                {
                  "context" : "a",
                  "element" : "value",
                  "variable" : "cv"
                }
              ],
              "target" : [
                {
                  "context" : "comp",
                  "element" : "value",
                  "variable" : "cc",
                  "transform" : "create",
                  "parameter" : [
                    {
                      "valueString" : "CodeableConcept"
                    }
                  ]
                }
              ],
              "rule" : [
                {
                  "name" : "valueCoding",
                  "source" : [
                    {
                      "context" : "cv"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "cc",
                      "element" : "coding",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueId" : "cv"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "valueText",
                  "source" : [
                    {
                      "context" : "cv",
                      "element" : "display",
                      "variable" : "d"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "cc",
                      "element" : "text",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueId" : "d"
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name" : "SetComponentValue",
      "input" : [
        {
          "name" : "it",
          "mode" : "source"
        },
        {
          "name" : "comp",
          "mode" : "target"
        }
      ],
      "rule" : [
        {
          "name" : "componentAnswer",
          "source" : [
            {
              "context" : "it",
              "element" : "answer",
              "listMode" : "first",
              "variable" : "a"
            }
          ],
          "rule" : [
            {
              "name" : "plainValue",
              "source" : [
                {
                  "context" : "a",
                  "element" : "value",
                  "variable" : "v"
                }
              ],
              "target" : [
                {
                  "context" : "comp",
                  "element" : "value",
                  "transform" : "copy",
                  "parameter" : [
                    {
                      "valueId" : "v"
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name" : "SetSurveyCategory",
      "input" : [
        {
          "name" : "qr",
          "type" : "QR",
          "mode" : "source"
        },
        {
          "name" : "obs",
          "type" : "Observation",
          "mode" : "target"
        }
      ],
      "rule" : [
        {
          "name" : "category",
          "source" : [
            {
              "context" : "qr"
            }
          ],
          "target" : [
            {
              "context" : "obs",
              "element" : "category",
              "variable" : "cat"
            }
          ],
          "rule" : [
            {
              "name" : "categoryCoding",
              "source" : [
                {
                  "context" : "qr"
                }
              ],
              "target" : [
                {
                  "context" : "cat",
                  "element" : "coding",
                  "variable" : "coding"
                }
              ],
              "rule" : [
                {
                  "name" : "categorySystem",
                  "source" : [
                    {
                      "context" : "qr"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "coding",
                      "element" : "system",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueString" : "http://terminology.hl7.org/CodeSystem/observation-category"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "categoryCode",
                  "source" : [
                    {
                      "context" : "qr"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "coding",
                      "element" : "code",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueString" : "survey"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "categoryDisplay",
                  "source" : [
                    {
                      "context" : "qr"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "coding",
                      "element" : "display",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueString" : "Survey"
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name" : "SetProcedureCategory",
      "input" : [
        {
          "name" : "qr",
          "type" : "QR",
          "mode" : "source"
        },
        {
          "name" : "obs",
          "type" : "Observation",
          "mode" : "target"
        }
      ],
      "rule" : [
        {
          "name" : "category",
          "source" : [
            {
              "context" : "qr"
            }
          ],
          "target" : [
            {
              "context" : "obs",
              "element" : "category",
              "variable" : "cat"
            }
          ],
          "rule" : [
            {
              "name" : "categoryCoding",
              "source" : [
                {
                  "context" : "qr"
                }
              ],
              "target" : [
                {
                  "context" : "cat",
                  "element" : "coding",
                  "variable" : "coding"
                }
              ],
              "rule" : [
                {
                  "name" : "categorySystem",
                  "source" : [
                    {
                      "context" : "qr"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "coding",
                      "element" : "system",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueString" : "http://terminology.hl7.org/CodeSystem/observation-category"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "categoryCode",
                  "source" : [
                    {
                      "context" : "qr"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "coding",
                      "element" : "code",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueString" : "procedure"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "categoryDisplay",
                  "source" : [
                    {
                      "context" : "qr"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "coding",
                      "element" : "display",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueString" : "Procedure"
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name" : "BuildProcedureBase",
      "input" : [
        {
          "name" : "qr",
          "type" : "QR",
          "mode" : "source"
        },
        {
          "name" : "r",
          "type" : "Procedure",
          "mode" : "target"
        },
        {
          "name" : "entry",
          "mode" : "target"
        }
      ],
      "rule" : [
        {
          "name" : "responseProvenance",
          "source" : [
            {
              "context" : "qr"
            }
          ],
          "target" : [
            {
              "context" : "r"
            }
          ],
          "dependent" : [
            {
              "name" : "SetResponseProvenance",
              "parameter" : [
                {
                  "valueId" : "qr"
                },
                {
                  "valueId" : "r"
                }
              ]
            }
          ]
        },
        {
          "name" : "idAndFullUrl",
          "source" : [
            {
              "context" : "qr"
            }
          ],
          "target" : [
            {
              "context" : "r",
              "element" : "id",
              "transform" : "uuid"
            }
          ],
          "dependent" : [
            {
              "name" : "SetProcedureFullUrl",
              "parameter" : [
                {
                  "valueId" : "r"
                },
                {
                  "valueId" : "entry"
                }
              ]
            }
          ]
        },
        {
          "name" : "entryRequest",
          "source" : [
            {
              "context" : "qr"
            }
          ],
          "target" : [
            {
              "context" : "entry",
              "element" : "request",
              "variable" : "request"
            }
          ],
          "rule" : [
            {
              "name" : "requestMethod",
              "source" : [
                {
                  "context" : "qr"
                }
              ],
              "target" : [
                {
                  "context" : "request",
                  "element" : "method",
                  "transform" : "copy",
                  "parameter" : [
                    {
                      "valueString" : "POST"
                    }
                  ]
                }
              ]
            },
            {
              "name" : "requestUrl",
              "source" : [
                {
                  "context" : "qr"
                }
              ],
              "target" : [
                {
                  "context" : "request",
                  "element" : "url",
                  "transform" : "copy",
                  "parameter" : [
                    {
                      "valueString" : "Procedure"
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "name" : "occurrenceFallback",
          "source" : [
            {
              "context" : "qr",
              "element" : "authored",
              "variable" : "t"
            }
          ],
          "target" : [
            {
              "context" : "r",
              "element" : "occurrence",
              "transform" : "copy",
              "parameter" : [
                {
                  "valueId" : "t"
                }
              ]
            }
          ],
          "documentation" : "The response's own time, as a floor, the way BuildObsBase does it. A rule\r\nthat reads a time off the form overwrites this; without it a procedure whose\r\ndate column was taken off on review has no time at all, and a procedure with\r\nno time cannot be ordered against the rest of the admission."
        },
        {
          "name" : "subject",
          "source" : [
            {
              "context" : "qr",
              "element" : "subject",
              "variable" : "s"
            }
          ],
          "target" : [
            {
              "context" : "r",
              "element" : "subject",
              "transform" : "copy",
              "parameter" : [
                {
                  "valueId" : "s"
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name" : "SetProcedureFullUrl",
      "input" : [
        {
          "name" : "r",
          "type" : "Procedure",
          "mode" : "source"
        },
        {
          "name" : "entry",
          "mode" : "target"
        }
      ],
      "rule" : [
        {
          "name" : "assignFullUrl",
          "source" : [
            {
              "context" : "r",
              "element" : "id",
              "variable" : "id"
            }
          ],
          "target" : [
            {
              "context" : "entry",
              "element" : "fullUrl",
              "transform" : "append",
              "parameter" : [
                {
                  "valueString" : "https://fhir.slade360.co.ke/fhir/Procedure/"
                },
                {
                  "valueId" : "id"
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name" : "BuildDiagnosticReportBase",
      "input" : [
        {
          "name" : "qr",
          "type" : "QR",
          "mode" : "source"
        },
        {
          "name" : "r",
          "type" : "DiagnosticReport",
          "mode" : "target"
        },
        {
          "name" : "entry",
          "mode" : "target"
        }
      ],
      "rule" : [
        {
          "name" : "responseProvenance",
          "source" : [
            {
              "context" : "qr"
            }
          ],
          "target" : [
            {
              "context" : "r"
            }
          ],
          "dependent" : [
            {
              "name" : "SetResponseProvenance",
              "parameter" : [
                {
                  "valueId" : "qr"
                },
                {
                  "valueId" : "r"
                }
              ]
            }
          ]
        },
        {
          "name" : "idAndFullUrl",
          "source" : [
            {
              "context" : "qr"
            }
          ],
          "target" : [
            {
              "context" : "r",
              "element" : "id",
              "transform" : "uuid"
            }
          ],
          "dependent" : [
            {
              "name" : "SetDiagnosticReportFullUrl",
              "parameter" : [
                {
                  "valueId" : "r"
                },
                {
                  "valueId" : "entry"
                }
              ]
            }
          ]
        },
        {
          "name" : "entryRequest",
          "source" : [
            {
              "context" : "qr"
            }
          ],
          "target" : [
            {
              "context" : "entry",
              "element" : "request",
              "variable" : "request"
            }
          ],
          "rule" : [
            {
              "name" : "requestMethod",
              "source" : [
                {
                  "context" : "qr"
                }
              ],
              "target" : [
                {
                  "context" : "request",
                  "element" : "method",
                  "transform" : "copy",
                  "parameter" : [
                    {
                      "valueString" : "POST"
                    }
                  ]
                }
              ]
            },
            {
              "name" : "requestUrl",
              "source" : [
                {
                  "context" : "qr"
                }
              ],
              "target" : [
                {
                  "context" : "request",
                  "element" : "url",
                  "transform" : "copy",
                  "parameter" : [
                    {
                      "valueString" : "DiagnosticReport"
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "name" : "subject",
          "source" : [
            {
              "context" : "qr",
              "element" : "subject",
              "variable" : "s"
            }
          ],
          "target" : [
            {
              "context" : "r",
              "element" : "subject",
              "transform" : "copy",
              "parameter" : [
                {
                  "valueId" : "s"
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name" : "SetDiagnosticReportFullUrl",
      "input" : [
        {
          "name" : "r",
          "type" : "DiagnosticReport",
          "mode" : "source"
        },
        {
          "name" : "entry",
          "mode" : "target"
        }
      ],
      "rule" : [
        {
          "name" : "assignFullUrl",
          "source" : [
            {
              "context" : "r",
              "element" : "id",
              "variable" : "id"
            }
          ],
          "target" : [
            {
              "context" : "entry",
              "element" : "fullUrl",
              "transform" : "append",
              "parameter" : [
                {
                  "valueString" : "https://fhir.slade360.co.ke/fhir/DiagnosticReport/"
                },
                {
                  "valueId" : "id"
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name" : "BuildMedicationAdministrationBase",
      "input" : [
        {
          "name" : "qr",
          "type" : "QR",
          "mode" : "source"
        },
        {
          "name" : "r",
          "type" : "MedicationAdministration",
          "mode" : "target"
        },
        {
          "name" : "entry",
          "mode" : "target"
        }
      ],
      "rule" : [
        {
          "name" : "responseProvenance",
          "source" : [
            {
              "context" : "qr"
            }
          ],
          "target" : [
            {
              "context" : "r"
            }
          ],
          "dependent" : [
            {
              "name" : "SetResponseProvenance",
              "parameter" : [
                {
                  "valueId" : "qr"
                },
                {
                  "valueId" : "r"
                }
              ]
            }
          ]
        },
        {
          "name" : "idAndFullUrl",
          "source" : [
            {
              "context" : "qr"
            }
          ],
          "target" : [
            {
              "context" : "r",
              "element" : "id",
              "transform" : "uuid"
            }
          ],
          "dependent" : [
            {
              "name" : "SetMedicationAdministrationFullUrl",
              "parameter" : [
                {
                  "valueId" : "r"
                },
                {
                  "valueId" : "entry"
                }
              ]
            }
          ]
        },
        {
          "name" : "entryRequest",
          "source" : [
            {
              "context" : "qr"
            }
          ],
          "target" : [
            {
              "context" : "entry",
              "element" : "request",
              "variable" : "request"
            }
          ],
          "rule" : [
            {
              "name" : "requestMethod",
              "source" : [
                {
                  "context" : "qr"
                }
              ],
              "target" : [
                {
                  "context" : "request",
                  "element" : "method",
                  "transform" : "copy",
                  "parameter" : [
                    {
                      "valueString" : "POST"
                    }
                  ]
                }
              ]
            },
            {
              "name" : "requestUrl",
              "source" : [
                {
                  "context" : "qr"
                }
              ],
              "target" : [
                {
                  "context" : "request",
                  "element" : "url",
                  "transform" : "copy",
                  "parameter" : [
                    {
                      "valueString" : "MedicationAdministration"
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "name" : "subject",
          "source" : [
            {
              "context" : "qr",
              "element" : "subject",
              "variable" : "s"
            }
          ],
          "target" : [
            {
              "context" : "r",
              "element" : "subject",
              "transform" : "copy",
              "parameter" : [
                {
                  "valueId" : "s"
                }
              ]
            }
          ]
        },
        {
          "name" : "occurrenceFallback",
          "source" : [
            {
              "context" : "qr",
              "element" : "authored",
              "variable" : "t"
            }
          ],
          "target" : [
            {
              "context" : "r",
              "element" : "occurence",
              "transform" : "copy",
              "parameter" : [
                {
                  "valueId" : "t"
                }
              ]
            }
          ],
          "documentation" : "The response's own time, as a floor. A row that names the time it was given\r\noverwrites this; a form whose time column was taken off on review would\r\notherwise produce an administration with no time at all, which is not a\r\nrecord of an administration. Same fallback BuildObsBase already applies."
        }
      ]
    },
    {
      "name" : "SetMedicationAdministrationFullUrl",
      "input" : [
        {
          "name" : "r",
          "type" : "MedicationAdministration",
          "mode" : "source"
        },
        {
          "name" : "entry",
          "mode" : "target"
        }
      ],
      "rule" : [
        {
          "name" : "assignFullUrl",
          "source" : [
            {
              "context" : "r",
              "element" : "id",
              "variable" : "id"
            }
          ],
          "target" : [
            {
              "context" : "entry",
              "element" : "fullUrl",
              "transform" : "append",
              "parameter" : [
                {
                  "valueString" : "https://fhir.slade360.co.ke/fhir/MedicationAdministration/"
                },
                {
                  "valueId" : "id"
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name" : "BuildCarePlanBase",
      "input" : [
        {
          "name" : "qr",
          "type" : "QR",
          "mode" : "source"
        },
        {
          "name" : "r",
          "type" : "CarePlan",
          "mode" : "target"
        },
        {
          "name" : "entry",
          "mode" : "target"
        }
      ],
      "rule" : [
        {
          "name" : "responseProvenance",
          "source" : [
            {
              "context" : "qr"
            }
          ],
          "target" : [
            {
              "context" : "r"
            }
          ],
          "dependent" : [
            {
              "name" : "SetResponseProvenance",
              "parameter" : [
                {
                  "valueId" : "qr"
                },
                {
                  "valueId" : "r"
                }
              ]
            }
          ]
        },
        {
          "name" : "idAndFullUrl",
          "source" : [
            {
              "context" : "qr"
            }
          ],
          "target" : [
            {
              "context" : "r",
              "element" : "id",
              "transform" : "uuid"
            }
          ],
          "dependent" : [
            {
              "name" : "SetCarePlanFullUrl",
              "parameter" : [
                {
                  "valueId" : "r"
                },
                {
                  "valueId" : "entry"
                }
              ]
            }
          ]
        },
        {
          "name" : "entryRequest",
          "source" : [
            {
              "context" : "qr"
            }
          ],
          "target" : [
            {
              "context" : "entry",
              "element" : "request",
              "variable" : "request"
            }
          ],
          "rule" : [
            {
              "name" : "requestMethod",
              "source" : [
                {
                  "context" : "qr"
                }
              ],
              "target" : [
                {
                  "context" : "request",
                  "element" : "method",
                  "transform" : "copy",
                  "parameter" : [
                    {
                      "valueString" : "POST"
                    }
                  ]
                }
              ]
            },
            {
              "name" : "requestUrl",
              "source" : [
                {
                  "context" : "qr"
                }
              ],
              "target" : [
                {
                  "context" : "request",
                  "element" : "url",
                  "transform" : "copy",
                  "parameter" : [
                    {
                      "valueString" : "CarePlan"
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "name" : "subject",
          "source" : [
            {
              "context" : "qr",
              "element" : "subject",
              "variable" : "s"
            }
          ],
          "target" : [
            {
              "context" : "r",
              "element" : "subject",
              "transform" : "copy",
              "parameter" : [
                {
                  "valueId" : "s"
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name" : "SetCarePlanFullUrl",
      "input" : [
        {
          "name" : "r",
          "type" : "CarePlan",
          "mode" : "source"
        },
        {
          "name" : "entry",
          "mode" : "target"
        }
      ],
      "rule" : [
        {
          "name" : "assignFullUrl",
          "source" : [
            {
              "context" : "r",
              "element" : "id",
              "variable" : "id"
            }
          ],
          "target" : [
            {
              "context" : "entry",
              "element" : "fullUrl",
              "transform" : "append",
              "parameter" : [
                {
                  "valueString" : "https://fhir.slade360.co.ke/fhir/CarePlan/"
                },
                {
                  "valueId" : "id"
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name" : "SetResponseProvenance",
      "documentation" : "── Provenance and tenancy ───────────────────────────────────────────────────\r\nTwo tags on everything this map creates. The first says which questionnaire\r\nproduced it, so a form that reopens mid-admission recalls its own earlier\r\nentries and not another form's. The second copies the tenant tags off the\r\nresponse, because nothing else on the path puts them there.\r\nThe code is the form's document type, not the questionnaire's id: every\r\nenvironment mints its own ids, and there is only one set of maps, so an id\r\nhere would tie the tag to whichever environment stamped it.\r\n── Provenance and tenancy ───────────────────────────────────────────────────",
      "input" : [
        {
          "name" : "qr",
          "type" : "QR",
          "mode" : "source"
        },
        {
          "name" : "r",
          "mode" : "target"
        }
      ],
      "rule" : [
        {
          "name" : "provenanceMeta",
          "source" : [
            {
              "context" : "qr"
            }
          ],
          "target" : [
            {
              "context" : "r",
              "element" : "meta",
              "variable" : "m"
            }
          ],
          "rule" : [
            {
              "name" : "provenanceTag",
              "source" : [
                {
                  "context" : "qr"
                }
              ],
              "target" : [
                {
                  "context" : "m",
                  "element" : "tag",
                  "variable" : "t"
                }
              ],
              "rule" : [
                {
                  "name" : "provenanceSystem",
                  "source" : [
                    {
                      "context" : "qr"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "t",
                      "element" : "system",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueString" : "http://slade360edi.com/questionnaire-provenance"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "provenanceCode",
                  "source" : [
                    {
                      "context" : "qr"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "t",
                      "element" : "code",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueString" : "endoscopy-investigation"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "provenanceDisplay",
                  "source" : [
                    {
                      "context" : "qr"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "t",
                      "element" : "display",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueString" : "Endoscopy service investigation form"
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "name" : "tenantTags",
          "source" : [
            {
              "context" : "qr",
              "element" : "meta",
              "variable" : "qm"
            }
          ],
          "rule" : [
            {
              "name" : "copyTag",
              "source" : [
                {
                  "context" : "qm",
                  "element" : "tag",
                  "variable" : "qt"
                }
              ],
              "target" : [
                {
                  "context" : "r",
                  "element" : "meta",
                  "variable" : "m"
                },
                {
                  "context" : "m",
                  "element" : "tag",
                  "transform" : "copy",
                  "parameter" : [
                    {
                      "valueId" : "qt"
                    }
                  ]
                }
              ]
            }
          ],
          "documentation" : "Every tag the response carries, onto the resource. `meta` is 0..1, so this\r\nlands on the same meta the rule above created rather than a second one."
        }
      ]
    }
  ]
}