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
| Active as of 2026-10-06 |
<StructureMap xmlns="http://hl7.org/fhir">
<id value="ExtractInpatientPaediatricAdmissionAssessment"/>
<text>
<status value="generated"/>
<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">
<span style="color: #cc00cc">/// <b>url</b> = </span><span style="color: blue">'https://fhir.slade360.co.ke/fhir/StructureMap/ExtractInpatientPaediatricAdmissionAssessment'</span>
<span style="color: #cc00cc">/// <b>name</b> = </span><span style="color: blue">'ExtractInpatientPaediatricAdmissionAssessment'</span>
<span style="color: #cc00cc">/// <b>title</b> = </span><span style="color: blue">'Inpatient Paediatric Admission Assessment Extraction'</span>
<span style="color: #cc00cc">/// <b>status</b> = </span><span style="color: blue">'active'</span>
<span style="color: #cc00cc">/// <b>description</b> = </span><span style="color: blue">'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>
<b>uses</b><span style="color: navy"> "</span><a href="http://hl7.org/fhir/R5/questionnaireresponse.html" title="QuestionnaireResponse">http://hl7.org/fhir/StructureDefinition/QuestionnaireResponse</a><span style="color: navy">" </span><b>alias </b>QR <b>as </b><b>source</b>
<b>uses</b><span style="color: navy"> "</span><a href="http://hl7.org/fhir/R5/bundle.html" title="Bundle">http://hl7.org/fhir/StructureDefinition/Bundle</a><span style="color: navy">" </span><b>alias </b>Bundle <b>as </b><b>target</b>
<b>uses</b><span style="color: navy"> "</span><a href="http://hl7.org/fhir/R5/observation.html" title="Observation">http://hl7.org/fhir/StructureDefinition/Observation</a><span style="color: navy">" </span><b>alias </b>Observation <b>as </b><b>target</b>
<b>uses</b><span style="color: navy"> "</span><a href="http://hl7.org/fhir/R5/relatedperson.html" title="RelatedPerson">http://hl7.org/fhir/StructureDefinition/RelatedPerson</a><span style="color: navy">" </span><b>alias </b>RelatedPerson <b>as </b><b>target</b>
<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"> {
</span> qr<span style="color: navy"><b> -> </b></span>bundle.type = <span style="color: blue">'transaction'</span> <i>"setBundleType"</i><span style="color: navy">;</span>
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"> {
</span> itW.answer first<b> as </b><span style="color: maroon">aW</span><b> then</b><span style="color: navy"> {
</span> aW<span style="color: navy"><b> -> </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"> {
</span> qr<span style="color: navy"><b> -> </b></span>obsW<b> then </b>CopyResponseTags<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>"responseTags"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </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>"weightBase"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </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>"weightCategory"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>obsW.code<b> as </b><span style="color: maroon">code</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span>code.coding<b> as </b><span style="color: maroon">coding</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span>coding.system = <span style="color: blue">'http://loinc.org'</span> <i>"codeSystem"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>coding.code = <span style="color: blue">'29463-7'</span> <i>"codeCode"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>coding.display = <span style="color: blue">'Body weight'</span> <i>"codeDisplay"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"codeCoding"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"weightCode"</i><span style="color: navy">;</span>
<span style="color: navy">// </span><span style="color: green">Already a Quantity: the item is type `quantity` with a unitOption</span>
<span style="color: navy">// </span><span style="color: green">pinning kg.</span>
aW.value<b> as </b><span style="color: maroon">v</span><span style="color: navy"><b> -> </b></span>obsW.value = <span style="color: maroon">v</span> <i>"weightValue"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"weightObservation"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"weightAnswer"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"weightRule"</i><span style="color: navy">;</span>
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"> {
</span> itI.answer first<b> as </b><span style="color: maroon">aI</span><b> then</b><span style="color: navy"> {
</span> aI<span style="color: navy"><b> -> </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"> {
</span> qr<span style="color: navy"><b> -> </b></span>obsI<b> then </b>CopyResponseTags<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>"responseTags"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </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>"immunisationBase"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </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>"immunisationCategory"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>obsI.code<b> as </b><span style="color: maroon">code</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span>code.coding<b> as </b><span style="color: maroon">coding</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span>coding.system = <span style="color: blue">'http://loinc.org'</span> <i>"codeSystem"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>coding.code = <span style="color: blue">'11370-4'</span> <i>"codeCode"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>coding.display = <span style="color: blue">'Immunization status - Reported'</span> <i>"codeDisplay"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"codeCoding"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"immunisationCode"</i><span style="color: navy">;</span>
aI<span style="color: navy"><b> -> </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>"immunisationValue"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"immunisationObservation"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"immunisationAnswer"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"immunisationRule"</i><span style="color: navy">;</span>
qr.item<b> as </b><span style="color: maroon">itF</span><b> where </b><span style="color: navy">(</span>(linkId = 'feeding') and answer.value.exists()<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span> itF.answer first<b> as </b><span style="color: maroon">aF</span><b> then</b><span style="color: navy"> {
</span> aF<span style="color: navy"><b> -> </b></span> bundle.entry<b> as </b><span style="color: maroon">entryF</span><span style="color: navy">, </span> entryF.resource = <b>create</b><span style="color: navy">(</span><span style="color: blue">'Observation'</span><span style="color: navy">)</span><b> as </b><span style="color: maroon">obsF</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span>obsF<b> then </b>CopyResponseTags<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">obsF</span><span style="color: navy">)</span> <i>"responseTags"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </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>"feedingBase"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </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>"feedingCategory"</i><span style="color: navy">;</span>
<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>
<span style="color: navy">// </span><span style="color: green">local code. See SGHIInpatientClinicalConceptCodeSystem.</span>
qr<span style="color: navy"><b> -> </b></span>obsF.code<b> as </b><span style="color: maroon">code</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span>code.coding<b> as </b><span style="color: maroon">coding</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span>coding.system = <span style="color: blue">'https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem'</span> <i>"codeSystem"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>coding.code = <span style="color: blue">'feeding'</span> <i>"codeCode"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>coding.display = <span style="color: blue">'Feeding'</span> <i>"codeDisplay"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"codeCoding"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>code.text = <span style="color: blue">'Feeding'</span> <i>"codeText"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"feedingCode"</i><span style="color: navy">;</span>
aF.value<b> as </b><span style="color: maroon">v</span><span style="color: navy"><b> -> </b></span>obsF.value = <span style="color: maroon">v</span> <i>"feedingValue"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"feedingObservation"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"feedingAnswer"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"feedingRule"</i><span style="color: navy">;</span>
<span style="color: navy">// </span><span style="color: green">── Guardian ───────────────────────────────────────────────────────────────</span>
<span style="color: navy">// </span><span style="color: green">RelatedPerson has no element that points back at the response it came from,</span>
<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>
<span style="color: navy">// </span><span style="color: green">Provenance would carry it, but that is a wider change than this form.</span>
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"> {
</span> itG.answer first<b> as </b><span style="color: maroon">aG</span><b> then</b><span style="color: navy"> {
</span> aG<span style="color: navy"><b> -> </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"> {
</span> qr<span style="color: navy"><b> -> </b></span>rp<b> then </b>CopyResponseTags<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">rp</span><span style="color: navy">)</span> <i>"responseTags"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </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>"idAndFullUrl"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>entryG.request<b> as </b><span style="color: maroon">request</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span>request.method = <span style="color: blue">'POST'</span> <i>"requestMethod"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>request.url = <span style="color: blue">'RelatedPerson'</span> <i>"requestUrl"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"entryRequest"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>rp.active = <span style="color: blue">true</span> <i>"active"</i><span style="color: navy">;</span>
qr.subject<b> as </b><span style="color: maroon">s</span><b> where </b><span style="color: navy">(</span>(reference.exists() and (reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Patient')))<span style="color: navy">)</span><span style="color: navy"><b> -> </b></span>rp.patient = <span style="color: maroon">s</span> <i>"patient"</i><span style="color: navy">;</span>
aG.value<b> as </b><span style="color: maroon">v</span><span style="color: navy"><b> -> </b></span>rp.name<b> as </b><span style="color: maroon">name</span><b> then</b><span style="color: navy"> {
</span> v<span style="color: navy"><b> -> </b></span>name.text = <span style="color: maroon">v</span> <i>"nameText"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"guardianName"</i><span style="color: navy">;</span>
<span style="color: navy">// </span><span style="color: green">The relationship is written as the guardian described it on the day.</span>
<span style="color: navy">// </span><span style="color: green">v3-RoleCode has concepts for mother and father, but the form accepts</span>
<span style="color: navy">// </span><span style="color: green">anything from "Aunt" to "Neighbour", so matching free text against a</span>
<span style="color: navy">// </span><span style="color: green">code system here would guess.</span>
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"> {
</span> itR.answer first<b> as </b><span style="color: maroon">aR</span><b> then</b><span style="color: navy"> {
</span> aR.value<b> as </b><span style="color: maroon">rv</span><span style="color: navy"><b> -> </b></span>rp.relationship<b> as </b><span style="color: maroon">rel</span><b> then</b><span style="color: navy"> {
</span> rv<span style="color: navy"><b> -> </b></span>rel.text = <span style="color: maroon">rv</span> <i>"relationshipText"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"guardianRelationship"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"guardianRelAnswer"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"guardianRelRule"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"relatedPerson"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"guardianNameAnswer"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"guardianRule"</i><span style="color: navy">;</span>
<span style="color: navy">}
</span><span style="color: navy">// </span><span style="color: green">─────────────────────────────────────────────────────────────────────────────</span>
<span style="color: navy">// </span><span style="color: green">Shared scaffolding. Repeated in each map rather than imported: the transform</span>
<span style="color: navy">// </span><span style="color: green">engine resolves `imports` against whatever StructureMaps happen to be on the</span>
<span style="color: navy">// </span><span style="color: green">server, and a form that stops extracting because a shared map was not</span>
<span style="color: navy">// </span><span style="color: green">uploaded is a worse failure than a duplicated group.</span>
<span style="color: navy">// </span><span style="color: green">─────────────────────────────────────────────────────────────────────────────</span>
<span style="color: navy">// </span><span style="color: green">Source parameters are left untyped on purpose. Writing `: Element` makes the</span>
<span style="color: navy">// </span><span style="color: green">publisher's StructureMap validator compare QuestionnaireResponse.item against</span>
<span style="color: navy">// </span><span style="color: green">the literal 'Element' and report them as incompatible with each other, which is</span>
<span style="color: navy">// </span><span style="color: green">noise, not a finding. Untyped, it says only that it cannot check the paths.</span>
<b>group </b>BuildObsBase<span style="color: navy">(</span><b>source</b> <span style="color: maroon">qr</span><span style="color: navy"> : </span>QR, <b>target</b> <span style="color: maroon">obs</span><span style="color: navy"> : </span>Observation, <b>target</b> <span style="color: maroon">entry</span><span style="color: navy">)</span><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </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>"idAndFullUrl"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>entry.request<b> as </b><span style="color: maroon">request</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span>request.method = <span style="color: blue">'POST'</span> <i>"requestMethod"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>request.url = <span style="color: blue">'Observation'</span> <i>"requestUrl"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"entryRequest"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>obs.status = <span style="color: blue">'final'</span> <i>"status"</i><span style="color: navy">;</span>
qr.subject<b> as </b><span style="color: maroon">s</span><b> where </b><span style="color: navy">(</span>(reference.exists() and (reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Patient')))<span style="color: navy">)</span><span style="color: navy"><b> -> </b></span>obs.subject = <span style="color: maroon">s</span><span style="color: navy">;</span>
qr.encounter<b> as </b><span style="color: maroon">e</span><b> where </b><span style="color: navy">(</span>(reference.exists() and (reference.startsWith('Encounter/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Encounter')))<span style="color: navy">)</span><span style="color: navy"><b> -> </b></span>obs.encounter = <span style="color: maroon">e</span><span style="color: navy">;</span>
qr.authored<b> as </b><span style="color: maroon">t</span><span style="color: navy"><b> -> </b></span>obs.effective = <span style="color: maroon">t</span> <i>"effective"</i><span style="color: navy">;</span>
qr.source<b> as </b><span style="color: maroon">src</span><b> where </b><span style="color: navy">(</span>(reference.exists() and (reference.startsWith('Organization/') or reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Organization') or ('/' + type).endsWith('/Patient')))<span style="color: navy">)</span><span style="color: navy"><b> -> </b></span>obs.performer = <span style="color: maroon">src</span> <i>"performerFromSource"</i><span style="color: navy">;</span>
qr<b> where </b><span style="color: navy">(</span>source.where(((reference.exists() and (reference.startsWith('Organization/') or reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Organization') or ('/' + type).endsWith('/Patient'))))).exists().not()<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span> qr.author<b> as </b><span style="color: maroon">a</span><b> where </b><span style="color: navy">(</span>(reference.exists() and (reference.startsWith('Organization/') or reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Organization') or ('/' + type).endsWith('/Patient')))<span style="color: navy">)</span><span style="color: navy"><b> -> </b></span>obs.performer = <span style="color: maroon">a</span> <i>"performerFromAuthor"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"performerFallback"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>obs.derivedFrom = <b>create</b><span style="color: navy">(</span><span style="color: blue">'Reference'</span><span style="color: navy">)</span><b> as </b><span style="color: maroon">ref</span><b> then</b><span style="color: navy"> {
</span> qr.id<b> as </b><span style="color: maroon">qid</span><span style="color: navy"><b> -> </b></span>ref.reference = <span style="color: maroon">qid</span> <i>"derivedFromRef"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"linkQuestionnaireResponse"</i><span style="color: navy">;</span>
<span style="color: navy">}
</span><span style="color: navy">// </span><span style="color: green">A coded answer becomes the Observation's value, coding and display intact, so</span>
<span style="color: navy">// </span><span style="color: green">the record says both what was picked and how it read on screen.</span>
<b>group </b>SetCodedValue<span style="color: navy">(</span><b>source</b> <span style="color: maroon">a</span>, <b>target</b> <span style="color: maroon">obs</span><span style="color: navy"> : </span>Observation<span style="color: navy">)</span><span style="color: navy"> {
</span> a.value<b> as </b><span style="color: maroon">cv</span><span style="color: navy"><b> -> </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"> {
</span> cv<span style="color: navy"><b> -> </b></span>cc.coding = <span style="color: maroon">cv</span> <i>"valueCoding"</i><span style="color: navy">;</span>
cv.display<b> as </b><span style="color: maroon">d</span><span style="color: navy"><b> -> </b></span>cc.text = <span style="color: maroon">d</span> <i>"valueText"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"codedValue"</i><span style="color: navy">;</span>
<span style="color: navy">}
</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"> {
</span> qr<span style="color: navy"><b> -> </b></span>obs.category<b> as </b><span style="color: maroon">cat</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span>cat.coding<b> as </b><span style="color: maroon">coding</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span>coding.system = <span style="color: blue">'http://terminology.hl7.org/CodeSystem/observation-category'</span> <i>"categorySystem"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>coding.code = <span style="color: blue">'vital-signs'</span> <i>"categoryCode"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>coding.display = <span style="color: blue">'Vital Signs'</span> <i>"categoryDisplay"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"categoryCoding"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"category"</i><span style="color: navy">;</span>
<span style="color: navy">}
</span><b>group </b>SetSocialHistoryCategory<span style="color: navy">(</span><b>source</b> <span style="color: maroon">qr</span><span style="color: navy"> : </span>QR, <b>target</b> <span style="color: maroon">obs</span><span style="color: navy"> : </span>Observation<span style="color: navy">)</span><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span>obs.category<b> as </b><span style="color: maroon">cat</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span>cat.coding<b> as </b><span style="color: maroon">coding</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span>coding.system = <span style="color: blue">'http://terminology.hl7.org/CodeSystem/observation-category'</span> <i>"categorySystem"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>coding.code = <span style="color: blue">'social-history'</span> <i>"categoryCode"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>coding.display = <span style="color: blue">'Social History'</span> <i>"categoryDisplay"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"categoryCoding"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"category"</i><span style="color: navy">;</span>
<span style="color: navy">}
</span><b>group </b>SetObservationFullUrl<span style="color: navy">(</span><b>source</b> <span style="color: maroon">obs</span><span style="color: navy"> : </span>Observation, <b>target</b> <span style="color: maroon">entry</span><span style="color: navy">)</span><span style="color: navy"> {
</span> obs.id<b> as </b><span style="color: maroon">id</span><span style="color: navy"><b> -> </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>"assignFullUrl"</i><span style="color: navy">;</span>
<span style="color: navy">}
</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"> {
</span> rp.id<b> as </b><span style="color: maroon">id</span><span style="color: navy"><b> -> </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>"assignFullUrl"</i><span style="color: navy">;</span>
<span style="color: navy">}
</span><span style="color: navy">// </span><span style="color: green">── Tenancy ──────────────────────────────────────────────────────────────────</span>
<span style="color: navy">// </span><span style="color: green">Whose this is. The platform says which tenant a response belongs to with a</span>
<span style="color: navy">// </span><span style="color: green">tag on the response, and every tag the response carries is copied onto</span>
<span style="color: navy">// </span><span style="color: green">everything this map creates, as it is. Copied rather than named here, so the</span>
<span style="color: navy">// </span><span style="color: green">map never has to know which tenant it is running for, nor which system the</span>
<span style="color: navy">// </span><span style="color: green">tag is under: that system has moved more than once.</span>
<b>group </b>CopyResponseTags<span style="color: navy">(</span><b>source</b> <span style="color: maroon">qr</span><span style="color: navy"> : </span>QR, <b>target</b> <span style="color: maroon">r</span><span style="color: navy">)</span><span style="color: navy"> {
</span> qr.meta<b> as </b><span style="color: maroon">qm</span><b> then</b><span style="color: navy"> {
</span> qm.tag<b> as </b><span style="color: maroon">qt</span><span style="color: navy"><b> -> </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>"copyTag"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"tenantTags"</i><span style="color: navy">;</span>
<span style="color: navy">}
</span></pre></div>
</text>
<url
value="https://fhir.slade360.co.ke/fhir/StructureMap/ExtractInpatientPaediatricAdmissionAssessment"/>
<version value="0.1.0"/>
<name value="ExtractInpatientPaediatricAdmissionAssessment"/>
<title value="Inpatient Paediatric Admission Assessment Extraction"/>
<status value="active"/>
<date value="2026-10-06T18:48:22+00:00"/>
<publisher value="Kathurima Kimathi"/>
<contact>
<name value="Kathurima Kimathi"/>
<telecom>
<system value="url"/>
<value value="https://www.linkedin.com/in/kathurima-kimathi/"/>
</telecom>
<telecom>
<system value="email"/>
<value value="kathurimakimathi415@gmail.com"/>
</telecom>
</contact>
<contact>
<name value="Oscar John"/>
<telecom>
<system value="email"/>
<value value="oscarjohnotieno@gmail.com"/>
<use value="work"/>
</telecom>
</contact>
<contact>
<name value="Kennedy Omondi"/>
<telecom>
<system value="email"/>
<value value="kennankole@gmail.com"/>
<use value="work"/>
</telecom>
</contact>
<description
value="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
value="http://hl7.org/fhir/StructureDefinition/QuestionnaireResponse"/>
<mode value="source"/>
<alias value="QR"/>
</structure>
<structure>
<url value="http://hl7.org/fhir/StructureDefinition/Bundle"/>
<mode value="target"/>
<alias value="Bundle"/>
</structure>
<structure>
<url value="http://hl7.org/fhir/StructureDefinition/Observation"/>
<mode value="target"/>
<alias value="Observation"/>
</structure>
<structure>
<url value="http://hl7.org/fhir/StructureDefinition/RelatedPerson"/>
<mode value="target"/>
<alias value="RelatedPerson"/>
</structure>
<group>
<name value="ExtractInpatientPaediatricAdmissionAssessment"/>
<input>
<name value="qr"/>
<type value="QR"/>
<mode value="source"/>
</input>
<input>
<name value="bundle"/>
<type value="Bundle"/>
<mode value="target"/>
</input>
<rule>
<name value="setBundleType"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="bundle"/>
<element value="type"/>
<transform value="copy"/>
<parameter>
<valueString value="transaction"/>
</parameter>
</target>
</rule>
<rule>
<name value="weightRule"/>
<source>
<context value="qr"/>
<element value="item"/>
<variable value="itW"/>
<condition value="(linkId = 'weight') and answer.value.exists()"/>
</source>
<rule>
<name value="weightAnswer"/>
<source>
<context value="itW"/>
<element value="answer"/>
<listMode value="first"/>
<variable value="aW"/>
</source>
<rule>
<name value="weightObservation"/>
<source>
<context value="aW"/>
</source>
<target>
<context value="bundle"/>
<element value="entry"/>
<variable value="entryW"/>
</target>
<target>
<context value="entryW"/>
<element value="resource"/>
<variable value="obsW"/>
<transform value="create"/>
<parameter>
<valueString value="Observation"/>
</parameter>
</target>
<rule>
<name value="responseTags"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="obsW"/>
</target>
<dependent>
<name value="CopyResponseTags"/>
<parameter>
<valueId value="qr"/>
</parameter>
<parameter>
<valueId value="obsW"/>
</parameter>
</dependent>
</rule>
<rule>
<name value="weightBase"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="obsW"/>
</target>
<target>
<context value="entryW"/>
</target>
<dependent>
<name value="BuildObsBase"/>
<parameter>
<valueId value="qr"/>
</parameter>
<parameter>
<valueId value="obsW"/>
</parameter>
<parameter>
<valueId value="entryW"/>
</parameter>
</dependent>
</rule>
<rule>
<name value="weightCategory"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="obsW"/>
</target>
<dependent>
<name value="SetVitalSignsCategory"/>
<parameter>
<valueId value="qr"/>
</parameter>
<parameter>
<valueId value="obsW"/>
</parameter>
</dependent>
</rule>
<rule>
<name value="weightCode"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="obsW"/>
<element value="code"/>
<variable value="code"/>
</target>
<rule>
<name value="codeCoding"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="code"/>
<element value="coding"/>
<variable value="coding"/>
</target>
<rule>
<name value="codeSystem"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="system"/>
<transform value="copy"/>
<parameter>
<valueString value="http://loinc.org"/>
</parameter>
</target>
</rule>
<rule>
<name value="codeCode"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="code"/>
<transform value="copy"/>
<parameter>
<valueString value="29463-7"/>
</parameter>
</target>
</rule>
<rule>
<name value="codeDisplay"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="display"/>
<transform value="copy"/>
<parameter>
<valueString value="Body weight"/>
</parameter>
</target>
</rule>
</rule>
</rule>
<rule>
<name value="weightValue"/>
<source>
<context value="aW"/>
<element value="value"/>
<variable value="v"/>
</source>
<target>
<context value="obsW"/>
<element value="value"/>
<transform value="copy"/>
<parameter>
<valueId value="v"/>
</parameter>
</target>
<documentation
value="Already a Quantity: the item is type `quantity` with a unitOption
pinning kg."/>
</rule>
</rule>
</rule>
</rule>
<rule>
<name value="immunisationRule"/>
<source>
<context value="qr"/>
<element value="item"/>
<variable value="itI"/>
<condition
value="(linkId = 'immunisation') and answer.value.exists()"/>
</source>
<rule>
<name value="immunisationAnswer"/>
<source>
<context value="itI"/>
<element value="answer"/>
<listMode value="first"/>
<variable value="aI"/>
</source>
<rule>
<name value="immunisationObservation"/>
<source>
<context value="aI"/>
</source>
<target>
<context value="bundle"/>
<element value="entry"/>
<variable value="entryI"/>
</target>
<target>
<context value="entryI"/>
<element value="resource"/>
<variable value="obsI"/>
<transform value="create"/>
<parameter>
<valueString value="Observation"/>
</parameter>
</target>
<rule>
<name value="responseTags"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="obsI"/>
</target>
<dependent>
<name value="CopyResponseTags"/>
<parameter>
<valueId value="qr"/>
</parameter>
<parameter>
<valueId value="obsI"/>
</parameter>
</dependent>
</rule>
<rule>
<name value="immunisationBase"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="obsI"/>
</target>
<target>
<context value="entryI"/>
</target>
<dependent>
<name value="BuildObsBase"/>
<parameter>
<valueId value="qr"/>
</parameter>
<parameter>
<valueId value="obsI"/>
</parameter>
<parameter>
<valueId value="entryI"/>
</parameter>
</dependent>
</rule>
<rule>
<name value="immunisationCategory"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="obsI"/>
</target>
<dependent>
<name value="SetSocialHistoryCategory"/>
<parameter>
<valueId value="qr"/>
</parameter>
<parameter>
<valueId value="obsI"/>
</parameter>
</dependent>
</rule>
<rule>
<name value="immunisationCode"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="obsI"/>
<element value="code"/>
<variable value="code"/>
</target>
<rule>
<name value="codeCoding"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="code"/>
<element value="coding"/>
<variable value="coding"/>
</target>
<rule>
<name value="codeSystem"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="system"/>
<transform value="copy"/>
<parameter>
<valueString value="http://loinc.org"/>
</parameter>
</target>
</rule>
<rule>
<name value="codeCode"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="code"/>
<transform value="copy"/>
<parameter>
<valueString value="11370-4"/>
</parameter>
</target>
</rule>
<rule>
<name value="codeDisplay"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="display"/>
<transform value="copy"/>
<parameter>
<valueString value="Immunization status - Reported"/>
</parameter>
</target>
</rule>
</rule>
</rule>
<rule>
<name value="immunisationValue"/>
<source>
<context value="aI"/>
</source>
<target>
<context value="obsI"/>
</target>
<dependent>
<name value="SetCodedValue"/>
<parameter>
<valueId value="aI"/>
</parameter>
<parameter>
<valueId value="obsI"/>
</parameter>
</dependent>
</rule>
</rule>
</rule>
</rule>
<rule>
<name value="feedingRule"/>
<source>
<context value="qr"/>
<element value="item"/>
<variable value="itF"/>
<condition value="(linkId = 'feeding') and answer.value.exists()"/>
</source>
<rule>
<name value="feedingAnswer"/>
<source>
<context value="itF"/>
<element value="answer"/>
<listMode value="first"/>
<variable value="aF"/>
</source>
<rule>
<name value="feedingObservation"/>
<source>
<context value="aF"/>
</source>
<target>
<context value="bundle"/>
<element value="entry"/>
<variable value="entryF"/>
</target>
<target>
<context value="entryF"/>
<element value="resource"/>
<variable value="obsF"/>
<transform value="create"/>
<parameter>
<valueString value="Observation"/>
</parameter>
</target>
<rule>
<name value="responseTags"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="obsF"/>
</target>
<dependent>
<name value="CopyResponseTags"/>
<parameter>
<valueId value="qr"/>
</parameter>
<parameter>
<valueId value="obsF"/>
</parameter>
</dependent>
</rule>
<rule>
<name value="feedingBase"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="obsF"/>
</target>
<target>
<context value="entryF"/>
</target>
<dependent>
<name value="BuildObsBase"/>
<parameter>
<valueId value="qr"/>
</parameter>
<parameter>
<valueId value="obsF"/>
</parameter>
<parameter>
<valueId value="entryF"/>
</parameter>
</dependent>
</rule>
<rule>
<name value="feedingCategory"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="obsF"/>
</target>
<dependent>
<name value="SetSocialHistoryCategory"/>
<parameter>
<valueId value="qr"/>
</parameter>
<parameter>
<valueId value="obsF"/>
</parameter>
</dependent>
</rule>
<rule>
<name value="feedingCode"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="obsF"/>
<element value="code"/>
<variable value="code"/>
</target>
<rule>
<name value="codeCoding"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="code"/>
<element value="coding"/>
<variable value="coding"/>
</target>
<rule>
<name value="codeSystem"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="system"/>
<transform value="copy"/>
<parameter>
<valueString
value="https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem"/>
</parameter>
</target>
</rule>
<rule>
<name value="codeCode"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="code"/>
<transform value="copy"/>
<parameter>
<valueString value="feeding"/>
</parameter>
</target>
</rule>
<rule>
<name value="codeDisplay"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="display"/>
<transform value="copy"/>
<parameter>
<valueString value="Feeding"/>
</parameter>
</target>
</rule>
</rule>
<rule>
<name value="codeText"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="code"/>
<element value="text"/>
<transform value="copy"/>
<parameter>
<valueString value="Feeding"/>
</parameter>
</target>
</rule>
<documentation
value="No LOINC concept for a free-text account of how a child is fed, so a
local code. See SGHIInpatientClinicalConceptCodeSystem."/>
</rule>
<rule>
<name value="feedingValue"/>
<source>
<context value="aF"/>
<element value="value"/>
<variable value="v"/>
</source>
<target>
<context value="obsF"/>
<element value="value"/>
<transform value="copy"/>
<parameter>
<valueId value="v"/>
</parameter>
</target>
</rule>
</rule>
</rule>
</rule>
<rule>
<name value="guardianRule"/>
<source>
<context value="qr"/>
<element value="item"/>
<variable value="itG"/>
<condition
value="(linkId = 'guardianName') and answer.value.exists()"/>
</source>
<rule>
<name value="guardianNameAnswer"/>
<source>
<context value="itG"/>
<element value="answer"/>
<listMode value="first"/>
<variable value="aG"/>
</source>
<rule>
<name value="relatedPerson"/>
<source>
<context value="aG"/>
</source>
<target>
<context value="bundle"/>
<element value="entry"/>
<variable value="entryG"/>
</target>
<target>
<context value="entryG"/>
<element value="resource"/>
<variable value="rp"/>
<transform value="create"/>
<parameter>
<valueString value="RelatedPerson"/>
</parameter>
</target>
<rule>
<name value="responseTags"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="rp"/>
</target>
<dependent>
<name value="CopyResponseTags"/>
<parameter>
<valueId value="qr"/>
</parameter>
<parameter>
<valueId value="rp"/>
</parameter>
</dependent>
</rule>
<rule>
<name value="idAndFullUrl"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="rp"/>
<element value="id"/>
<transform value="uuid"/>
</target>
<dependent>
<name value="SetRelatedPersonFullUrl"/>
<parameter>
<valueId value="rp"/>
</parameter>
<parameter>
<valueId value="entryG"/>
</parameter>
</dependent>
</rule>
<rule>
<name value="entryRequest"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="entryG"/>
<element value="request"/>
<variable value="request"/>
</target>
<rule>
<name value="requestMethod"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="request"/>
<element value="method"/>
<transform value="copy"/>
<parameter>
<valueString value="POST"/>
</parameter>
</target>
</rule>
<rule>
<name value="requestUrl"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="request"/>
<element value="url"/>
<transform value="copy"/>
<parameter>
<valueString value="RelatedPerson"/>
</parameter>
</target>
</rule>
</rule>
<rule>
<name value="active"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="rp"/>
<element value="active"/>
<transform value="copy"/>
<parameter>
<valueBoolean value="true"/>
</parameter>
</target>
</rule>
<rule>
<name value="patient"/>
<source>
<context value="qr"/>
<element value="subject"/>
<variable value="s"/>
<condition
value="(reference.exists() and (reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Patient')))"/>
</source>
<target>
<context value="rp"/>
<element value="patient"/>
<transform value="copy"/>
<parameter>
<valueId value="s"/>
</parameter>
</target>
</rule>
<rule>
<name value="guardianName"/>
<source>
<context value="aG"/>
<element value="value"/>
<variable value="v"/>
</source>
<target>
<context value="rp"/>
<element value="name"/>
<variable value="name"/>
</target>
<rule>
<name value="nameText"/>
<source>
<context value="v"/>
</source>
<target>
<context value="name"/>
<element value="text"/>
<transform value="copy"/>
<parameter>
<valueId value="v"/>
</parameter>
</target>
</rule>
</rule>
<rule>
<name value="guardianRelRule"/>
<source>
<context value="qr"/>
<element value="item"/>
<variable value="itR"/>
<condition
value="(linkId = 'guardianRel') and answer.value.exists()"/>
</source>
<rule>
<name value="guardianRelAnswer"/>
<source>
<context value="itR"/>
<element value="answer"/>
<listMode value="first"/>
<variable value="aR"/>
</source>
<rule>
<name value="guardianRelationship"/>
<source>
<context value="aR"/>
<element value="value"/>
<variable value="rv"/>
</source>
<target>
<context value="rp"/>
<element value="relationship"/>
<variable value="rel"/>
</target>
<rule>
<name value="relationshipText"/>
<source>
<context value="rv"/>
</source>
<target>
<context value="rel"/>
<element value="text"/>
<transform value="copy"/>
<parameter>
<valueId value="rv"/>
</parameter>
</target>
</rule>
</rule>
</rule>
<documentation
value="The relationship is written as the guardian described it on the day.
v3-RoleCode has concepts for mother and father, but the form accepts
anything from "Aunt" to "Neighbour", so matching free text against a
code system here would guess."/>
</rule>
</rule>
</rule>
<documentation
value="── Guardian ───────────────────────────────────────────────────────────────
RelatedPerson has no element that points back at the response it came from,
so this resource is the one thing the map emits with no link home. A
Provenance would carry it, but that is a wider change than this form."/>
</rule>
</group>
<group>
<name value="BuildObsBase"/>
<documentation
value="─────────────────────────────────────────────────────────────────────────────
Shared scaffolding. Repeated in each map rather than imported: the transform
engine resolves `imports` against whatever StructureMaps happen to be on the
server, and a form that stops extracting because a shared map was not
uploaded is a worse failure than a duplicated group.
─────────────────────────────────────────────────────────────────────────────
Source parameters are left untyped on purpose. Writing `: Element` makes the
publisher's StructureMap validator compare QuestionnaireResponse.item against
the literal 'Element' and report them as incompatible with each other, which is
noise, not a finding. Untyped, it says only that it cannot check the paths."/>
<input>
<name value="qr"/>
<type value="QR"/>
<mode value="source"/>
</input>
<input>
<name value="obs"/>
<type value="Observation"/>
<mode value="target"/>
</input>
<input>
<name value="entry"/>
<mode value="target"/>
</input>
<rule>
<name value="idAndFullUrl"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="obs"/>
<element value="id"/>
<transform value="uuid"/>
</target>
<dependent>
<name value="SetObservationFullUrl"/>
<parameter>
<valueId value="obs"/>
</parameter>
<parameter>
<valueId value="entry"/>
</parameter>
</dependent>
</rule>
<rule>
<name value="entryRequest"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="entry"/>
<element value="request"/>
<variable value="request"/>
</target>
<rule>
<name value="requestMethod"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="request"/>
<element value="method"/>
<transform value="copy"/>
<parameter>
<valueString value="POST"/>
</parameter>
</target>
</rule>
<rule>
<name value="requestUrl"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="request"/>
<element value="url"/>
<transform value="copy"/>
<parameter>
<valueString value="Observation"/>
</parameter>
</target>
</rule>
</rule>
<rule>
<name value="status"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="obs"/>
<element value="status"/>
<transform value="copy"/>
<parameter>
<valueString value="final"/>
</parameter>
</target>
</rule>
<rule>
<name value="subject"/>
<source>
<context value="qr"/>
<element value="subject"/>
<variable value="s"/>
<condition
value="(reference.exists() and (reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Patient')))"/>
</source>
<target>
<context value="obs"/>
<element value="subject"/>
<transform value="copy"/>
<parameter>
<valueId value="s"/>
</parameter>
</target>
</rule>
<rule>
<name value="encounter"/>
<source>
<context value="qr"/>
<element value="encounter"/>
<variable value="e"/>
<condition
value="(reference.exists() and (reference.startsWith('Encounter/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Encounter')))"/>
</source>
<target>
<context value="obs"/>
<element value="encounter"/>
<transform value="copy"/>
<parameter>
<valueId value="e"/>
</parameter>
</target>
</rule>
<rule>
<name value="effective"/>
<source>
<context value="qr"/>
<element value="authored"/>
<variable value="t"/>
</source>
<target>
<context value="obs"/>
<element value="effective"/>
<transform value="copy"/>
<parameter>
<valueId value="t"/>
</parameter>
</target>
</rule>
<rule>
<name value="performerFromSource"/>
<source>
<context value="qr"/>
<element value="source"/>
<variable value="src"/>
<condition
value="(reference.exists() and (reference.startsWith('Organization/') or reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Organization') or ('/' + type).endsWith('/Patient')))"/>
</source>
<target>
<context value="obs"/>
<element value="performer"/>
<transform value="copy"/>
<parameter>
<valueId value="src"/>
</parameter>
</target>
</rule>
<rule>
<name value="performerFallback"/>
<source>
<context value="qr"/>
<condition
value="source.where(((reference.exists() and (reference.startsWith('Organization/') or reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Organization') or ('/' + type).endsWith('/Patient'))))).exists().not()"/>
</source>
<rule>
<name value="performerFromAuthor"/>
<source>
<context value="qr"/>
<element value="author"/>
<variable value="a"/>
<condition
value="(reference.exists() and (reference.startsWith('Organization/') or reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Organization') or ('/' + type).endsWith('/Patient')))"/>
</source>
<target>
<context value="obs"/>
<element value="performer"/>
<transform value="copy"/>
<parameter>
<valueId value="a"/>
</parameter>
</target>
</rule>
</rule>
<rule>
<name value="linkQuestionnaireResponse"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="obs"/>
<element value="derivedFrom"/>
<variable value="ref"/>
<transform value="create"/>
<parameter>
<valueString value="Reference"/>
</parameter>
</target>
<rule>
<name value="derivedFromRef"/>
<source>
<context value="qr"/>
<element value="id"/>
<variable value="qid"/>
</source>
<target>
<context value="ref"/>
<element value="reference"/>
<transform value="copy"/>
<parameter>
<valueId value="qid"/>
</parameter>
</target>
</rule>
</rule>
</group>
<group>
<name value="SetCodedValue"/>
<documentation
value="A coded answer becomes the Observation's value, coding and display intact, so
the record says both what was picked and how it read on screen."/>
<input>
<name value="a"/>
<mode value="source"/>
</input>
<input>
<name value="obs"/>
<type value="Observation"/>
<mode value="target"/>
</input>
<rule>
<name value="codedValue"/>
<source>
<context value="a"/>
<element value="value"/>
<variable value="cv"/>
</source>
<target>
<context value="obs"/>
<element value="value"/>
<variable value="cc"/>
<transform value="create"/>
<parameter>
<valueString value="CodeableConcept"/>
</parameter>
</target>
<rule>
<name value="valueCoding"/>
<source>
<context value="cv"/>
</source>
<target>
<context value="cc"/>
<element value="coding"/>
<transform value="copy"/>
<parameter>
<valueId value="cv"/>
</parameter>
</target>
</rule>
<rule>
<name value="valueText"/>
<source>
<context value="cv"/>
<element value="display"/>
<variable value="d"/>
</source>
<target>
<context value="cc"/>
<element value="text"/>
<transform value="copy"/>
<parameter>
<valueId value="d"/>
</parameter>
</target>
</rule>
</rule>
</group>
<group>
<name value="SetVitalSignsCategory"/>
<input>
<name value="qr"/>
<type value="QR"/>
<mode value="source"/>
</input>
<input>
<name value="obs"/>
<type value="Observation"/>
<mode value="target"/>
</input>
<rule>
<name value="category"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="obs"/>
<element value="category"/>
<variable value="cat"/>
</target>
<rule>
<name value="categoryCoding"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="cat"/>
<element value="coding"/>
<variable value="coding"/>
</target>
<rule>
<name value="categorySystem"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="system"/>
<transform value="copy"/>
<parameter>
<valueString
value="http://terminology.hl7.org/CodeSystem/observation-category"/>
</parameter>
</target>
</rule>
<rule>
<name value="categoryCode"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="code"/>
<transform value="copy"/>
<parameter>
<valueString value="vital-signs"/>
</parameter>
</target>
</rule>
<rule>
<name value="categoryDisplay"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="display"/>
<transform value="copy"/>
<parameter>
<valueString value="Vital Signs"/>
</parameter>
</target>
</rule>
</rule>
</rule>
</group>
<group>
<name value="SetSocialHistoryCategory"/>
<input>
<name value="qr"/>
<type value="QR"/>
<mode value="source"/>
</input>
<input>
<name value="obs"/>
<type value="Observation"/>
<mode value="target"/>
</input>
<rule>
<name value="category"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="obs"/>
<element value="category"/>
<variable value="cat"/>
</target>
<rule>
<name value="categoryCoding"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="cat"/>
<element value="coding"/>
<variable value="coding"/>
</target>
<rule>
<name value="categorySystem"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="system"/>
<transform value="copy"/>
<parameter>
<valueString
value="http://terminology.hl7.org/CodeSystem/observation-category"/>
</parameter>
</target>
</rule>
<rule>
<name value="categoryCode"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="code"/>
<transform value="copy"/>
<parameter>
<valueString value="social-history"/>
</parameter>
</target>
</rule>
<rule>
<name value="categoryDisplay"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="display"/>
<transform value="copy"/>
<parameter>
<valueString value="Social History"/>
</parameter>
</target>
</rule>
</rule>
</rule>
</group>
<group>
<name value="SetObservationFullUrl"/>
<input>
<name value="obs"/>
<type value="Observation"/>
<mode value="source"/>
</input>
<input>
<name value="entry"/>
<mode value="target"/>
</input>
<rule>
<name value="assignFullUrl"/>
<source>
<context value="obs"/>
<element value="id"/>
<variable value="id"/>
</source>
<target>
<context value="entry"/>
<element value="fullUrl"/>
<transform value="append"/>
<parameter>
<valueString value="https://fhir.slade360.co.ke/fhir/Observation/"/>
</parameter>
<parameter>
<valueId value="id"/>
</parameter>
</target>
</rule>
</group>
<group>
<name value="SetRelatedPersonFullUrl"/>
<input>
<name value="rp"/>
<type value="RelatedPerson"/>
<mode value="source"/>
</input>
<input>
<name value="entry"/>
<mode value="target"/>
</input>
<rule>
<name value="assignFullUrl"/>
<source>
<context value="rp"/>
<element value="id"/>
<variable value="id"/>
</source>
<target>
<context value="entry"/>
<element value="fullUrl"/>
<transform value="append"/>
<parameter>
<valueString
value="https://fhir.slade360.co.ke/fhir/RelatedPerson/"/>
</parameter>
<parameter>
<valueId value="id"/>
</parameter>
</target>
</rule>
</group>
<group>
<name value="CopyResponseTags"/>
<documentation
value="── Tenancy ──────────────────────────────────────────────────────────────────
Whose this is. The platform says which tenant a response belongs to with a
tag on the response, and every tag the response carries is copied onto
everything this map creates, as it is. Copied rather than named here, so the
map never has to know which tenant it is running for, nor which system the
tag is under: that system has moved more than once."/>
<input>
<name value="qr"/>
<type value="QR"/>
<mode value="source"/>
</input>
<input>
<name value="r"/>
<mode value="target"/>
</input>
<rule>
<name value="tenantTags"/>
<source>
<context value="qr"/>
<element value="meta"/>
<variable value="qm"/>
</source>
<rule>
<name value="copyTag"/>
<source>
<context value="qm"/>
<element value="tag"/>
<variable value="qt"/>
</source>
<target>
<context value="r"/>
<element value="meta"/>
<variable value="m"/>
</target>
<target>
<context value="m"/>
<element value="tag"/>
<transform value="copy"/>
<parameter>
<valueId value="qt"/>
</parameter>
</target>
</rule>
</rule>
</group>
</StructureMap>