{
  "resourceType" : "StructureMap",
  "id" : "ExtractInpatientPaediatricAdmissionAssessment",
  "text" : {
    "status" : "generated",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\"><p class=\"res-header-id\"><b>Generated Narrative: StructureMap ExtractInpatientPaediatricAdmissionAssessment</b></p><a name=\"ExtractInpatientPaediatricAdmissionAssessment\"> </a><a name=\"hcExtractInpatientPaediatricAdmissionAssessment\"> </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/ExtractInpatientPaediatricAdmissionAssessment'</span>\r\n<span style=\"color: #cc00cc\">/// <b>name</b> = </span><span style=\"color: blue\">'ExtractInpatientPaediatricAdmissionAssessment'</span>\r\n<span style=\"color: #cc00cc\">/// <b>title</b> = </span><span style=\"color: blue\">'Inpatient Paediatric Admission Assessment 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\">'Weight, immunisation status and feeding become Observations; the guardian at the bedside becomes a RelatedPerson. Immunisation status is an Observation rather than an Immunization because the form records what the guardian says, not a dose given with a vaccine, a date and a batch -- an Immunization built from `Partially immunised` would be a fiction. The guardian is a new RelatedPerson rather than a patch to Patient.contact: repeated assessments would append a duplicate contact each time with nothing to deduplicate on, and moh-510-extractor already mints guardian RelatedPersons this way.'</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/relatedperson.html\" title=\"RelatedPerson\">http://hl7.org/fhir/StructureDefinition/RelatedPerson</a><span style=\"color: navy\">&quot; </span><b>alias </b>RelatedPerson <b>as </b><b>target</b>\r\n\r\n<b>group </b>ExtractInpatientPaediatricAdmissionAssessment<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  qr.item<b> as </b><span style=\"color: maroon\">itW</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'weight') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    itW.answer first<b> as </b><span style=\"color: maroon\">aW</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      aW<span style=\"color: navy\"><b> -&gt; </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">entryW</span><span style=\"color: navy\">, </span> entryW.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\">obsW</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        qr<span style=\"color: navy\"><b> -&gt; </b></span> obsW<span style=\"color: navy\">, </span> entryW<b> then </b>BuildObsBase<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obsW</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entryW</span><span style=\"color: navy\">)</span> <i>&quot;weightBase&quot;</i><span style=\"color: navy\">;</span>\r\n        qr<span style=\"color: navy\"><b> -&gt; </b></span>obsW<b> then </b>SetVitalSignsCategory<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obsW</span><span style=\"color: navy\">)</span> <i>&quot;weightCategory&quot;</i><span style=\"color: navy\">;</span>\r\n        qr<span style=\"color: navy\"><b> -&gt; </b></span>obsW.code<b> as </b><span style=\"color: maroon\">code</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          qr<span style=\"color: navy\"><b> -&gt; </b></span>code.coding<b> as </b><span style=\"color: maroon\">coding</span><b> then</b><span style=\"color: navy\"> {\r\n</span>            qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.system = <span style=\"color: blue\">'http://loinc.org'</span> <i>&quot;codeSystem&quot;</i><span style=\"color: navy\">;</span>\r\n            qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.code = <span style=\"color: blue\">'29463-7'</span> <i>&quot;codeCode&quot;</i><span style=\"color: navy\">;</span>\r\n            qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.display = <span style=\"color: blue\">'Body weight'</span> <i>&quot;codeDisplay&quot;</i><span style=\"color: navy\">;</span>\r\n          <span style=\"color: navy\">}</span> <i>&quot;codeCoding&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span> <i>&quot;weightCode&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">// </span><span style=\"color: green\">Already a Quantity: the item is type `quantity` with a unitOption</span>\r\n        <span style=\"color: navy\">// </span><span style=\"color: green\">pinning kg.</span>\r\n        aW.value<b> as </b><span style=\"color: maroon\">v</span><span style=\"color: navy\"><b> -&gt; </b></span>obsW.value = <span style=\"color: maroon\">v</span> <i>&quot;weightValue&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;weightObservation&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;weightAnswer&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;weightRule&quot;</i><span style=\"color: navy\">;</span>\r\n  qr.item<b> as </b><span style=\"color: maroon\">itI</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'immunisation') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    itI.answer first<b> as </b><span style=\"color: maroon\">aI</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      aI<span style=\"color: navy\"><b> -&gt; </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">entryI</span><span style=\"color: navy\">, </span> entryI.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\">obsI</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        qr<span style=\"color: navy\"><b> -&gt; </b></span> obsI<span style=\"color: navy\">, </span> entryI<b> then </b>BuildObsBase<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obsI</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entryI</span><span style=\"color: navy\">)</span> <i>&quot;immunisationBase&quot;</i><span style=\"color: navy\">;</span>\r\n        qr<span style=\"color: navy\"><b> -&gt; </b></span>obsI<b> then </b>SetSocialHistoryCategory<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obsI</span><span style=\"color: navy\">)</span> <i>&quot;immunisationCategory&quot;</i><span style=\"color: navy\">;</span>\r\n        qr<span style=\"color: navy\"><b> -&gt; </b></span>obsI.code<b> as </b><span style=\"color: maroon\">code</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          qr<span style=\"color: navy\"><b> -&gt; </b></span>code.coding<b> as </b><span style=\"color: maroon\">coding</span><b> then</b><span style=\"color: navy\"> {\r\n</span>            qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.system = <span style=\"color: blue\">'http://loinc.org'</span> <i>&quot;codeSystem&quot;</i><span style=\"color: navy\">;</span>\r\n            qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.code = <span style=\"color: blue\">'11370-4'</span> <i>&quot;codeCode&quot;</i><span style=\"color: navy\">;</span>\r\n            qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.display = <span style=\"color: blue\">'Immunization status - Reported'</span> <i>&quot;codeDisplay&quot;</i><span style=\"color: navy\">;</span>\r\n          <span style=\"color: navy\">}</span> <i>&quot;codeCoding&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span> <i>&quot;immunisationCode&quot;</i><span style=\"color: navy\">;</span>\r\n        aI<span style=\"color: navy\"><b> -&gt; </b></span>obsI<b> then </b>SetCodedValue<span style=\"color: navy\">(</span><span style=\"color: maroon\">aI</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obsI</span><span style=\"color: navy\">)</span> <i>&quot;immunisationValue&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;immunisationObservation&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;immunisationAnswer&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;immunisationRule&quot;</i><span style=\"color: navy\">;</span>\r\n  qr.item<b> as </b><span style=\"color: maroon\">itF</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'feeding') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    itF.answer first<b> as </b><span style=\"color: maroon\">aF</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      aF<span style=\"color: navy\"><b> -&gt; </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">entryF</span><span style=\"color: navy\">, </span> entryF.resource = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'Observation'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">obsF</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        qr<span style=\"color: navy\"><b> -&gt; </b></span> obsF<span style=\"color: navy\">, </span> entryF<b> then </b>BuildObsBase<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obsF</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entryF</span><span style=\"color: navy\">)</span> <i>&quot;feedingBase&quot;</i><span style=\"color: navy\">;</span>\r\n        qr<span style=\"color: navy\"><b> -&gt; </b></span>obsF<b> then </b>SetSocialHistoryCategory<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obsF</span><span style=\"color: navy\">)</span> <i>&quot;feedingCategory&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">// </span><span style=\"color: green\">No LOINC concept for a free-text account of how a child is fed, so a</span>\r\n        <span style=\"color: navy\">// </span><span style=\"color: green\">local code. See SGHIInpatientClinicalConceptCodeSystem.</span>\r\n        qr<span style=\"color: navy\"><b> -&gt; </b></span>obsF.code<b> as </b><span style=\"color: maroon\">code</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          qr<span style=\"color: navy\"><b> -&gt; </b></span>code.coding<b> as </b><span style=\"color: maroon\">coding</span><b> then</b><span style=\"color: navy\"> {\r\n</span>            qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.system = <span style=\"color: blue\">'https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem'</span> <i>&quot;codeSystem&quot;</i><span style=\"color: navy\">;</span>\r\n            qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.code = <span style=\"color: blue\">'feeding'</span> <i>&quot;codeCode&quot;</i><span style=\"color: navy\">;</span>\r\n            qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.display = <span style=\"color: blue\">'Feeding'</span> <i>&quot;codeDisplay&quot;</i><span style=\"color: navy\">;</span>\r\n          <span style=\"color: navy\">}</span> <i>&quot;codeCoding&quot;</i><span style=\"color: navy\">;</span>\r\n          qr<span style=\"color: navy\"><b> -&gt; </b></span>code.text = <span style=\"color: blue\">'Feeding'</span> <i>&quot;codeText&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span> <i>&quot;feedingCode&quot;</i><span style=\"color: navy\">;</span>\r\n        aF.value<b> as </b><span style=\"color: maroon\">v</span><span style=\"color: navy\"><b> -&gt; </b></span>obsF.value = <span style=\"color: maroon\">v</span> <i>&quot;feedingValue&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;feedingObservation&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;feedingAnswer&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;feedingRule&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">── Guardian ───────────────────────────────────────────────────────────────</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">RelatedPerson has no element that points back at the response it came from,</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">so this resource is the one thing the map emits with no link home. A</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">Provenance would carry it, but that is a wider change than this form.</span>\r\n  qr.item<b> as </b><span style=\"color: maroon\">itG</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'guardianName') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    itG.answer first<b> as </b><span style=\"color: maroon\">aG</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      aG<span style=\"color: navy\"><b> -&gt; </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">entryG</span><span style=\"color: navy\">, </span> entryG.resource = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'RelatedPerson'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">rp</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        qr<span style=\"color: navy\"><b> -&gt; </b></span>rp.id = <b>uuid</b><span style=\"color: navy\">(</span><span style=\"color: navy\">)</span><b> then </b>SetRelatedPersonFullUrl<span style=\"color: navy\">(</span><span style=\"color: maroon\">rp</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entryG</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>entryG.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\">'RelatedPerson'</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>rp.active = <span style=\"color: blue\">true</span> <i>&quot;active&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>rp.patient = <span style=\"color: maroon\">s</span> <i>&quot;patient&quot;</i><span style=\"color: navy\">;</span>\r\n        aG.value<b> as </b><span style=\"color: maroon\">v</span><span style=\"color: navy\"><b> -&gt; </b></span>rp.name<b> as </b><span style=\"color: maroon\">name</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          v<span style=\"color: navy\"><b> -&gt; </b></span>name.text = <span style=\"color: maroon\">v</span> <i>&quot;nameText&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span> <i>&quot;guardianName&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">// </span><span style=\"color: green\">The relationship is written as the guardian described it on the day.</span>\r\n        <span style=\"color: navy\">// </span><span style=\"color: green\">v3-RoleCode has concepts for mother and father, but the form accepts</span>\r\n        <span style=\"color: navy\">// </span><span style=\"color: green\">anything from &quot;Aunt&quot; to &quot;Neighbour&quot;, so matching free text against a</span>\r\n        <span style=\"color: navy\">// </span><span style=\"color: green\">code system here would guess.</span>\r\n        qr.item<b> as </b><span style=\"color: maroon\">itR</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'guardianRel') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          itR.answer first<b> as </b><span style=\"color: maroon\">aR</span><b> then</b><span style=\"color: navy\"> {\r\n</span>            aR.value<b> as </b><span style=\"color: maroon\">rv</span><span style=\"color: navy\"><b> -&gt; </b></span>rp.relationship<b> as </b><span style=\"color: maroon\">rel</span><b> then</b><span style=\"color: navy\"> {\r\n</span>              rv<span style=\"color: navy\"><b> -&gt; </b></span>rel.text = <span style=\"color: maroon\">rv</span> <i>&quot;relationshipText&quot;</i><span style=\"color: navy\">;</span>\r\n            <span style=\"color: navy\">}</span> <i>&quot;guardianRelationship&quot;</i><span style=\"color: navy\">;</span>\r\n          <span style=\"color: navy\">}</span> <i>&quot;guardianRelAnswer&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span> <i>&quot;guardianRelRule&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;relatedPerson&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;guardianNameAnswer&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;guardianRule&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\">─────────────────────────────────────────────────────────────────────────────</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">Source parameters are left untyped on purpose. Writing `: Element` makes the</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">publisher's StructureMap validator compare QuestionnaireResponse.item against</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">the literal 'Element' and report them as incompatible with each other, which is</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">noise, not a finding. Untyped, it says only that it cannot check the paths.</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.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  qr<span style=\"color: navy\"><b> -&gt; </b></span>obs.derivedFrom = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'Reference'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">ref</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    qr.id<b> as </b><span style=\"color: maroon\">qid</span><span style=\"color: navy\"><b> -&gt; </b></span>ref.reference = <span style=\"color: maroon\">qid</span> <i>&quot;derivedFromRef&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;linkQuestionnaireResponse&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\">A coded answer becomes the Observation's value, coding and display intact, so</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">the record says both what was picked and how it read on screen.</span>\r\n<b>group </b>SetCodedValue<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">a</span>, <b>target</b> <span style=\"color: maroon\">obs</span><span style=\"color: navy\"> : </span>Observation<span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  a.value<b> as </b><span style=\"color: maroon\">cv</span><span style=\"color: navy\"><b> -&gt; </b></span>obs.value = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'CodeableConcept'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">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\">}\r\n\r\n</span><b>group </b>SetVitalSignsCategory<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\">'vital-signs'</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\">'Vital Signs'</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>SetSocialHistoryCategory<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">qr</span><span style=\"color: navy\"> : </span>QR, <b>target</b> <span style=\"color: maroon\">obs</span><span style=\"color: navy\"> : </span>Observation<span style=\"color: navy\">)</span><span style=\"color: navy\"> {\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\">'social-history'</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\">'Social History'</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>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><b>group </b>SetRelatedPersonFullUrl<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">rp</span><span style=\"color: navy\"> : </span>RelatedPerson, <b>target</b> <span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  rp.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/RelatedPerson/'</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></pre></div>"
  },
  "url" : "https://fhir.slade360.co.ke/fhir/StructureMap/ExtractInpatientPaediatricAdmissionAssessment",
  "version" : "0.1.0",
  "name" : "ExtractInpatientPaediatricAdmissionAssessment",
  "title" : "Inpatient Paediatric Admission Assessment 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" : "Weight, immunisation status and feeding become Observations; the guardian at the bedside becomes a RelatedPerson. Immunisation status is an Observation rather than an Immunization because the form records what the guardian says, not a dose given with a vaccine, a date and a batch -- an Immunization built from `Partially immunised` would be a fiction. The guardian is a new RelatedPerson rather than a patch to Patient.contact: repeated assessments would append a duplicate contact each time with nothing to deduplicate on, and moh-510-extractor already mints guardian RelatedPersons this way.",
  "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/RelatedPerson",
    "mode" : "target",
    "alias" : "RelatedPerson"
  }],
  "group" : [{
    "name" : "ExtractInpatientPaediatricAdmissionAssessment",
    "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" : "weightRule",
      "source" : [{
        "context" : "qr",
        "element" : "item",
        "variable" : "itW",
        "condition" : "(linkId = 'weight') and answer.value.exists()"
      }],
      "rule" : [{
        "name" : "weightAnswer",
        "source" : [{
          "context" : "itW",
          "element" : "answer",
          "listMode" : "first",
          "variable" : "aW"
        }],
        "rule" : [{
          "name" : "weightObservation",
          "source" : [{
            "context" : "aW"
          }],
          "target" : [{
            "context" : "bundle",
            "element" : "entry",
            "variable" : "entryW"
          },
          {
            "context" : "entryW",
            "element" : "resource",
            "variable" : "obsW",
            "transform" : "create",
            "parameter" : [{
              "valueString" : "Observation"
            }]
          }],
          "rule" : [{
            "name" : "weightBase",
            "source" : [{
              "context" : "qr"
            }],
            "target" : [{
              "context" : "obsW"
            },
            {
              "context" : "entryW"
            }],
            "dependent" : [{
              "name" : "BuildObsBase",
              "parameter" : [{
                "valueId" : "qr"
              },
              {
                "valueId" : "obsW"
              },
              {
                "valueId" : "entryW"
              }]
            }]
          },
          {
            "name" : "weightCategory",
            "source" : [{
              "context" : "qr"
            }],
            "target" : [{
              "context" : "obsW"
            }],
            "dependent" : [{
              "name" : "SetVitalSignsCategory",
              "parameter" : [{
                "valueId" : "qr"
              },
              {
                "valueId" : "obsW"
              }]
            }]
          },
          {
            "name" : "weightCode",
            "source" : [{
              "context" : "qr"
            }],
            "target" : [{
              "context" : "obsW",
              "element" : "code",
              "variable" : "code"
            }],
            "rule" : [{
              "name" : "codeCoding",
              "source" : [{
                "context" : "qr"
              }],
              "target" : [{
                "context" : "code",
                "element" : "coding",
                "variable" : "coding"
              }],
              "rule" : [{
                "name" : "codeSystem",
                "source" : [{
                  "context" : "qr"
                }],
                "target" : [{
                  "context" : "coding",
                  "element" : "system",
                  "transform" : "copy",
                  "parameter" : [{
                    "valueString" : "http://loinc.org"
                  }]
                }]
              },
              {
                "name" : "codeCode",
                "source" : [{
                  "context" : "qr"
                }],
                "target" : [{
                  "context" : "coding",
                  "element" : "code",
                  "transform" : "copy",
                  "parameter" : [{
                    "valueString" : "29463-7"
                  }]
                }]
              },
              {
                "name" : "codeDisplay",
                "source" : [{
                  "context" : "qr"
                }],
                "target" : [{
                  "context" : "coding",
                  "element" : "display",
                  "transform" : "copy",
                  "parameter" : [{
                    "valueString" : "Body weight"
                  }]
                }]
              }]
            }]
          },
          {
            "name" : "weightValue",
            "source" : [{
              "context" : "aW",
              "element" : "value",
              "variable" : "v"
            }],
            "target" : [{
              "context" : "obsW",
              "element" : "value",
              "transform" : "copy",
              "parameter" : [{
                "valueId" : "v"
              }]
            }],
            "documentation" : "Already a Quantity: the item is type `quantity` with a unitOption\r\npinning kg."
          }]
        }]
      }]
    },
    {
      "name" : "immunisationRule",
      "source" : [{
        "context" : "qr",
        "element" : "item",
        "variable" : "itI",
        "condition" : "(linkId = 'immunisation') and answer.value.exists()"
      }],
      "rule" : [{
        "name" : "immunisationAnswer",
        "source" : [{
          "context" : "itI",
          "element" : "answer",
          "listMode" : "first",
          "variable" : "aI"
        }],
        "rule" : [{
          "name" : "immunisationObservation",
          "source" : [{
            "context" : "aI"
          }],
          "target" : [{
            "context" : "bundle",
            "element" : "entry",
            "variable" : "entryI"
          },
          {
            "context" : "entryI",
            "element" : "resource",
            "variable" : "obsI",
            "transform" : "create",
            "parameter" : [{
              "valueString" : "Observation"
            }]
          }],
          "rule" : [{
            "name" : "immunisationBase",
            "source" : [{
              "context" : "qr"
            }],
            "target" : [{
              "context" : "obsI"
            },
            {
              "context" : "entryI"
            }],
            "dependent" : [{
              "name" : "BuildObsBase",
              "parameter" : [{
                "valueId" : "qr"
              },
              {
                "valueId" : "obsI"
              },
              {
                "valueId" : "entryI"
              }]
            }]
          },
          {
            "name" : "immunisationCategory",
            "source" : [{
              "context" : "qr"
            }],
            "target" : [{
              "context" : "obsI"
            }],
            "dependent" : [{
              "name" : "SetSocialHistoryCategory",
              "parameter" : [{
                "valueId" : "qr"
              },
              {
                "valueId" : "obsI"
              }]
            }]
          },
          {
            "name" : "immunisationCode",
            "source" : [{
              "context" : "qr"
            }],
            "target" : [{
              "context" : "obsI",
              "element" : "code",
              "variable" : "code"
            }],
            "rule" : [{
              "name" : "codeCoding",
              "source" : [{
                "context" : "qr"
              }],
              "target" : [{
                "context" : "code",
                "element" : "coding",
                "variable" : "coding"
              }],
              "rule" : [{
                "name" : "codeSystem",
                "source" : [{
                  "context" : "qr"
                }],
                "target" : [{
                  "context" : "coding",
                  "element" : "system",
                  "transform" : "copy",
                  "parameter" : [{
                    "valueString" : "http://loinc.org"
                  }]
                }]
              },
              {
                "name" : "codeCode",
                "source" : [{
                  "context" : "qr"
                }],
                "target" : [{
                  "context" : "coding",
                  "element" : "code",
                  "transform" : "copy",
                  "parameter" : [{
                    "valueString" : "11370-4"
                  }]
                }]
              },
              {
                "name" : "codeDisplay",
                "source" : [{
                  "context" : "qr"
                }],
                "target" : [{
                  "context" : "coding",
                  "element" : "display",
                  "transform" : "copy",
                  "parameter" : [{
                    "valueString" : "Immunization status - Reported"
                  }]
                }]
              }]
            }]
          },
          {
            "name" : "immunisationValue",
            "source" : [{
              "context" : "aI"
            }],
            "target" : [{
              "context" : "obsI"
            }],
            "dependent" : [{
              "name" : "SetCodedValue",
              "parameter" : [{
                "valueId" : "aI"
              },
              {
                "valueId" : "obsI"
              }]
            }]
          }]
        }]
      }]
    },
    {
      "name" : "feedingRule",
      "source" : [{
        "context" : "qr",
        "element" : "item",
        "variable" : "itF",
        "condition" : "(linkId = 'feeding') and answer.value.exists()"
      }],
      "rule" : [{
        "name" : "feedingAnswer",
        "source" : [{
          "context" : "itF",
          "element" : "answer",
          "listMode" : "first",
          "variable" : "aF"
        }],
        "rule" : [{
          "name" : "feedingObservation",
          "source" : [{
            "context" : "aF"
          }],
          "target" : [{
            "context" : "bundle",
            "element" : "entry",
            "variable" : "entryF"
          },
          {
            "context" : "entryF",
            "element" : "resource",
            "variable" : "obsF",
            "transform" : "create",
            "parameter" : [{
              "valueString" : "Observation"
            }]
          }],
          "rule" : [{
            "name" : "feedingBase",
            "source" : [{
              "context" : "qr"
            }],
            "target" : [{
              "context" : "obsF"
            },
            {
              "context" : "entryF"
            }],
            "dependent" : [{
              "name" : "BuildObsBase",
              "parameter" : [{
                "valueId" : "qr"
              },
              {
                "valueId" : "obsF"
              },
              {
                "valueId" : "entryF"
              }]
            }]
          },
          {
            "name" : "feedingCategory",
            "source" : [{
              "context" : "qr"
            }],
            "target" : [{
              "context" : "obsF"
            }],
            "dependent" : [{
              "name" : "SetSocialHistoryCategory",
              "parameter" : [{
                "valueId" : "qr"
              },
              {
                "valueId" : "obsF"
              }]
            }]
          },
          {
            "name" : "feedingCode",
            "source" : [{
              "context" : "qr"
            }],
            "target" : [{
              "context" : "obsF",
              "element" : "code",
              "variable" : "code"
            }],
            "rule" : [{
              "name" : "codeCoding",
              "source" : [{
                "context" : "qr"
              }],
              "target" : [{
                "context" : "code",
                "element" : "coding",
                "variable" : "coding"
              }],
              "rule" : [{
                "name" : "codeSystem",
                "source" : [{
                  "context" : "qr"
                }],
                "target" : [{
                  "context" : "coding",
                  "element" : "system",
                  "transform" : "copy",
                  "parameter" : [{
                    "valueString" : "https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem"
                  }]
                }]
              },
              {
                "name" : "codeCode",
                "source" : [{
                  "context" : "qr"
                }],
                "target" : [{
                  "context" : "coding",
                  "element" : "code",
                  "transform" : "copy",
                  "parameter" : [{
                    "valueString" : "feeding"
                  }]
                }]
              },
              {
                "name" : "codeDisplay",
                "source" : [{
                  "context" : "qr"
                }],
                "target" : [{
                  "context" : "coding",
                  "element" : "display",
                  "transform" : "copy",
                  "parameter" : [{
                    "valueString" : "Feeding"
                  }]
                }]
              }]
            },
            {
              "name" : "codeText",
              "source" : [{
                "context" : "qr"
              }],
              "target" : [{
                "context" : "code",
                "element" : "text",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "Feeding"
                }]
              }]
            }],
            "documentation" : "No LOINC concept for a free-text account of how a child is fed, so a\r\nlocal code. See SGHIInpatientClinicalConceptCodeSystem."
          },
          {
            "name" : "feedingValue",
            "source" : [{
              "context" : "aF",
              "element" : "value",
              "variable" : "v"
            }],
            "target" : [{
              "context" : "obsF",
              "element" : "value",
              "transform" : "copy",
              "parameter" : [{
                "valueId" : "v"
              }]
            }]
          }]
        }]
      }]
    },
    {
      "name" : "guardianRule",
      "source" : [{
        "context" : "qr",
        "element" : "item",
        "variable" : "itG",
        "condition" : "(linkId = 'guardianName') and answer.value.exists()"
      }],
      "rule" : [{
        "name" : "guardianNameAnswer",
        "source" : [{
          "context" : "itG",
          "element" : "answer",
          "listMode" : "first",
          "variable" : "aG"
        }],
        "rule" : [{
          "name" : "relatedPerson",
          "source" : [{
            "context" : "aG"
          }],
          "target" : [{
            "context" : "bundle",
            "element" : "entry",
            "variable" : "entryG"
          },
          {
            "context" : "entryG",
            "element" : "resource",
            "variable" : "rp",
            "transform" : "create",
            "parameter" : [{
              "valueString" : "RelatedPerson"
            }]
          }],
          "rule" : [{
            "name" : "idAndFullUrl",
            "source" : [{
              "context" : "qr"
            }],
            "target" : [{
              "context" : "rp",
              "element" : "id",
              "transform" : "uuid"
            }],
            "dependent" : [{
              "name" : "SetRelatedPersonFullUrl",
              "parameter" : [{
                "valueId" : "rp"
              },
              {
                "valueId" : "entryG"
              }]
            }]
          },
          {
            "name" : "entryRequest",
            "source" : [{
              "context" : "qr"
            }],
            "target" : [{
              "context" : "entryG",
              "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" : "RelatedPerson"
                }]
              }]
            }]
          },
          {
            "name" : "active",
            "source" : [{
              "context" : "qr"
            }],
            "target" : [{
              "context" : "rp",
              "element" : "active",
              "transform" : "copy",
              "parameter" : [{
                "valueBoolean" : true
              }]
            }]
          },
          {
            "name" : "patient",
            "source" : [{
              "context" : "qr",
              "element" : "subject",
              "variable" : "s"
            }],
            "target" : [{
              "context" : "rp",
              "element" : "patient",
              "transform" : "copy",
              "parameter" : [{
                "valueId" : "s"
              }]
            }]
          },
          {
            "name" : "guardianName",
            "source" : [{
              "context" : "aG",
              "element" : "value",
              "variable" : "v"
            }],
            "target" : [{
              "context" : "rp",
              "element" : "name",
              "variable" : "name"
            }],
            "rule" : [{
              "name" : "nameText",
              "source" : [{
                "context" : "v"
              }],
              "target" : [{
                "context" : "name",
                "element" : "text",
                "transform" : "copy",
                "parameter" : [{
                  "valueId" : "v"
                }]
              }]
            }]
          },
          {
            "name" : "guardianRelRule",
            "source" : [{
              "context" : "qr",
              "element" : "item",
              "variable" : "itR",
              "condition" : "(linkId = 'guardianRel') and answer.value.exists()"
            }],
            "rule" : [{
              "name" : "guardianRelAnswer",
              "source" : [{
                "context" : "itR",
                "element" : "answer",
                "listMode" : "first",
                "variable" : "aR"
              }],
              "rule" : [{
                "name" : "guardianRelationship",
                "source" : [{
                  "context" : "aR",
                  "element" : "value",
                  "variable" : "rv"
                }],
                "target" : [{
                  "context" : "rp",
                  "element" : "relationship",
                  "variable" : "rel"
                }],
                "rule" : [{
                  "name" : "relationshipText",
                  "source" : [{
                    "context" : "rv"
                  }],
                  "target" : [{
                    "context" : "rel",
                    "element" : "text",
                    "transform" : "copy",
                    "parameter" : [{
                      "valueId" : "rv"
                    }]
                  }]
                }]
              }]
            }],
            "documentation" : "The relationship is written as the guardian described it on the day.\r\nv3-RoleCode has concepts for mother and father, but the form accepts\r\nanything from \"Aunt\" to \"Neighbour\", so matching free text against a\r\ncode system here would guess."
          }]
        }]
      }],
      "documentation" : "── Guardian ───────────────────────────────────────────────────────────────\r\nRelatedPerson has no element that points back at the response it came from,\r\nso this resource is the one thing the map emits with no link home. A\r\nProvenance would carry it, but that is a wider change than this form."
    }]
  },
  {
    "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\n─────────────────────────────────────────────────────────────────────────────\r\nSource parameters are left untyped on purpose. Writing `: Element` makes the\r\npublisher's StructureMap validator compare QuestionnaireResponse.item against\r\nthe literal 'Element' and report them as incompatible with each other, which is\r\nnoise, not a finding. Untyped, it says only that it cannot check the paths.",
    "input" : [{
      "name" : "qr",
      "type" : "QR",
      "mode" : "source"
    },
    {
      "name" : "obs",
      "type" : "Observation",
      "mode" : "target"
    },
    {
      "name" : "entry",
      "mode" : "target"
    }],
    "rule" : [{
      "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"
      }],
      "target" : [{
        "context" : "obs",
        "element" : "derivedFrom",
        "variable" : "ref",
        "transform" : "create",
        "parameter" : [{
          "valueString" : "Reference"
        }]
      }],
      "rule" : [{
        "name" : "derivedFromRef",
        "source" : [{
          "context" : "qr",
          "element" : "id",
          "variable" : "qid"
        }],
        "target" : [{
          "context" : "ref",
          "element" : "reference",
          "transform" : "copy",
          "parameter" : [{
            "valueId" : "qid"
          }]
        }]
      }]
    }]
  },
  {
    "name" : "SetCodedValue",
    "documentation" : "A coded answer becomes the Observation's value, coding and display intact, so\r\nthe record says both what was picked and how it read on screen.",
    "input" : [{
      "name" : "a",
      "mode" : "source"
    },
    {
      "name" : "obs",
      "type" : "Observation",
      "mode" : "target"
    }],
    "rule" : [{
      "name" : "codedValue",
      "source" : [{
        "context" : "a",
        "element" : "value",
        "variable" : "cv"
      }],
      "target" : [{
        "context" : "obs",
        "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" : "SetVitalSignsCategory",
    "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" : "vital-signs"
            }]
          }]
        },
        {
          "name" : "categoryDisplay",
          "source" : [{
            "context" : "qr"
          }],
          "target" : [{
            "context" : "coding",
            "element" : "display",
            "transform" : "copy",
            "parameter" : [{
              "valueString" : "Vital Signs"
            }]
          }]
        }]
      }]
    }]
  },
  {
    "name" : "SetSocialHistoryCategory",
    "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" : "social-history"
            }]
          }]
        },
        {
          "name" : "categoryDisplay",
          "source" : [{
            "context" : "qr"
          }],
          "target" : [{
            "context" : "coding",
            "element" : "display",
            "transform" : "copy",
            "parameter" : [{
              "valueString" : "Social History"
            }]
          }]
        }]
      }]
    }]
  },
  {
    "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" : "SetRelatedPersonFullUrl",
    "input" : [{
      "name" : "rp",
      "type" : "RelatedPerson",
      "mode" : "source"
    },
    {
      "name" : "entry",
      "mode" : "target"
    }],
    "rule" : [{
      "name" : "assignFullUrl",
      "source" : [{
        "context" : "rp",
        "element" : "id",
        "variable" : "id"
      }],
      "target" : [{
        "context" : "entry",
        "element" : "fullUrl",
        "transform" : "append",
        "parameter" : [{
          "valueString" : "https://fhir.slade360.co.ke/fhir/RelatedPerson/"
        },
        {
          "valueId" : "id"
        }]
      }]
    }]
  }]
}