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-09-14 |
<StructureMap xmlns="http://hl7.org/fhir">
<id value="ExtractInpatientMentalHealthRiskAssessment"/>
<text>
<status value="generated"/>
<div xmlns="http://www.w3.org/1999/xhtml"><p class="res-header-id"><b>Generated Narrative: StructureMap ExtractInpatientMentalHealthRiskAssessment</b></p><a name="ExtractInpatientMentalHealthRiskAssessment"> </a><a name="hcExtractInpatientMentalHealthRiskAssessment"> </a><pre class="fml">
<span style="color: #cc00cc">/// <b>url</b> = </span><span style="color: blue">'https://fhir.slade360.co.ke/fhir/StructureMap/ExtractInpatientMentalHealthRiskAssessment'</span>
<span style="color: #cc00cc">/// <b>name</b> = </span><span style="color: blue">'ExtractInpatientMentalHealthRiskAssessment'</span>
<span style="color: #cc00cc">/// <b>title</b> = </span><span style="color: blue">'Inpatient Mental Health Risk 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">'Mood and capacity become Observations, the risk of self-harm becomes a RiskAssessment carrying what the patient said as its note, and a safeguarding concern becomes a Flag on the patient. This is the one instrument here that is not scored: the band comes from which of four answers was picked, not from arithmetic, so each answer is banded explicitly. The answer\'s own coding and wording ride along in qualitativeRisk, so a reader never has to infer what was said from a risk tier.'</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/riskassessment.html" title="RiskAssessment">http://hl7.org/fhir/StructureDefinition/RiskAssessment</a><span style="color: navy">" </span><b>alias </b>RiskAssessment <b>as </b><b>target</b>
<b>uses</b><span style="color: navy"> "</span><a href="http://hl7.org/fhir/R5/flag.html" title="Flag">http://hl7.org/fhir/StructureDefinition/Flag</a><span style="color: navy">" </span><b>alias </b>Flag <b>as </b><b>target</b>
<b>group </b>ExtractInpatientMentalHealthRiskAssessment<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>
<span style="color: navy">// </span><span style="color: green">── Mood and affect ────────────────────────────────────────────────────────</span>
<span style="color: navy">// </span><span style="color: green">No LOINC concept for the mood and affect line of a mental state</span>
<span style="color: navy">// </span><span style="color: green">examination, so a local code. See SGHIInpatientClinicalConceptCodeSystem.</span>
qr.item<b> as </b><span style="color: maroon">itM</span><b> where </b><span style="color: navy">(</span>(linkId = 'mood') and answer.value.exists()<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span> itM.answer first<b> as </b><span style="color: maroon">aM</span><b> then</b><span style="color: navy"> {
</span> aM<span style="color: navy"><b> -> </b></span> bundle.entry<b> as </b><span style="color: maroon">entryM</span><span style="color: navy">, </span> entryM.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">obsM</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span> obsM<span style="color: navy">, </span> entryM<b> then </b>BuildObsBase<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">obsM</span><span style="color: navy">, </span><span style="color: maroon">entryM</span><span style="color: navy">)</span> <i>"moodBase"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>obsM<b> then </b>SetExamCategory<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">obsM</span><span style="color: navy">)</span> <i>"moodCategory"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>obsM.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">'mood-and-affect'</span> <i>"codeCode"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>coding.display = <span style="color: blue">'Mood and affect'</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">'Mood and affect'</span> <i>"codeText"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"moodCode"</i><span style="color: navy">;</span>
aM.value<b> as </b><span style="color: maroon">v</span><span style="color: navy"><b> -> </b></span>obsM.value = <span style="color: maroon">v</span> <i>"moodValue"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"moodObservation"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"moodAnswer"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"moodRule"</i><span style="color: navy">;</span>
<span style="color: navy">// </span><span style="color: green">── Capacity to consent ────────────────────────────────────────────────────</span>
qr.item<b> as </b><span style="color: maroon">itC</span><b> where </b><span style="color: navy">(</span>(linkId = 'capacity') and answer.value.exists()<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span> itC.answer first<b> as </b><span style="color: maroon">aC</span><b> then</b><span style="color: navy"> {
</span> aC<span style="color: navy"><b> -> </b></span> bundle.entry<b> as </b><span style="color: maroon">entryC</span><span style="color: navy">, </span> entryC.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">obsC</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span> obsC<span style="color: navy">, </span> entryC<b> then </b>BuildObsBase<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">obsC</span><span style="color: navy">, </span><span style="color: maroon">entryC</span><span style="color: navy">)</span> <i>"capacityBase"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>obsC<b> then </b>SetExamCategory<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">obsC</span><span style="color: navy">)</span> <i>"capacityCategory"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>obsC.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">'capacity-to-consent'</span> <i>"codeCode"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>coding.display = <span style="color: blue">'Capacity to consent'</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">'Capacity to consent'</span> <i>"codeText"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"capacityCode"</i><span style="color: navy">;</span>
aC<span style="color: navy"><b> -> </b></span>obsC<b> then </b>SetCodedValue<span style="color: navy">(</span><span style="color: maroon">aC</span><span style="color: navy">, </span><span style="color: maroon">obsC</span><span style="color: navy">)</span> <i>"capacityValue"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"capacityObservation"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"capacityAnswer"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"capacityRule"</i><span style="color: navy">;</span>
<span style="color: navy">// </span><span style="color: green">── Risk of self-harm ──────────────────────────────────────────────────────</span>
<span style="color: navy">// </span><span style="color: green">Four answers, four bands. Passive ideation is banded `moderate` rather than</span>
<span style="color: navy">// </span><span style="color: green">`low`: on a ward, thoughts of self-harm without a plan still warrant</span>
<span style="color: navy">// </span><span style="color: green">observation, and the cost of over-flagging here is smaller than the cost of</span>
<span style="color: navy">// </span><span style="color: green">under-flagging.</span>
qr.item<b> as </b><span style="color: maroon">itS</span><b> where </b><span style="color: navy">(</span>(linkId = 'selfHarm') and (answer.value.ofType(Coding).code = 'self-harm-none')<span style="color: navy">)</span><span style="color: navy"><b> -> </b></span> bundle.entry<b> as </b><span style="color: maroon">entry</span><span style="color: navy">, </span> entry.resource = <b>create</b><span style="color: navy">(</span><span style="color: blue">'RiskAssessment'</span><span style="color: navy">)</span><b> as </b><span style="color: maroon">ra</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span> ra<span style="color: navy">, </span> entry<b> then </b>BuildRiskBase<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">ra</span><span style="color: navy">, </span><span style="color: maroon">entry</span><span style="color: navy">)</span> <i>"riskBase"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>ra.prediction<b> as </b><span style="color: maroon">pred</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span>pred.outcome<b> as </b><span style="color: maroon">outcome</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span>outcome.text = <span style="color: blue">'Self-harm'</span> <i>"outcomeText"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"outcome"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>pred.qualitativeRisk<b> as </b><span style="color: maroon">risk</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span>risk.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/risk-probability'</span> <i>"riskSystem"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>coding.code = <span style="color: blue">'negligible'</span> <i>"riskCode"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>coding.display = <span style="color: blue">'Negligible likelihood'</span> <i>"riskDisplay"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"riskCoding"</i><span style="color: navy">;</span>
itS<span style="color: navy"><b> -> </b></span>risk<b> then </b>AddAnswerCodingAndText<span style="color: navy">(</span><span style="color: maroon">itS</span><span style="color: navy">, </span><span style="color: maroon">risk</span><span style="color: navy">)</span> <i>"answerCoding"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"qualitativeRisk"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"prediction"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"selfHarmNoneRule"</i><span style="color: navy">;</span>
qr.item<b> as </b><span style="color: maroon">itS</span><b> where </b><span style="color: navy">(</span>(linkId = 'selfHarm') and (answer.value.ofType(Coding).code = 'self-harm-passive')<span style="color: navy">)</span><span style="color: navy"><b> -> </b></span> bundle.entry<b> as </b><span style="color: maroon">entry</span><span style="color: navy">, </span> entry.resource = <b>create</b><span style="color: navy">(</span><span style="color: blue">'RiskAssessment'</span><span style="color: navy">)</span><b> as </b><span style="color: maroon">ra</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span> ra<span style="color: navy">, </span> entry<b> then </b>BuildRiskBase<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">ra</span><span style="color: navy">, </span><span style="color: maroon">entry</span><span style="color: navy">)</span> <i>"riskBase"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>ra.prediction<b> as </b><span style="color: maroon">pred</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span>pred.outcome<b> as </b><span style="color: maroon">outcome</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span>outcome.text = <span style="color: blue">'Self-harm'</span> <i>"outcomeText"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"outcome"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>pred.qualitativeRisk<b> as </b><span style="color: maroon">risk</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span>risk.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/risk-probability'</span> <i>"riskSystem"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>coding.code = <span style="color: blue">'moderate'</span> <i>"riskCode"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>coding.display = <span style="color: blue">'Moderate likelihood'</span> <i>"riskDisplay"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"riskCoding"</i><span style="color: navy">;</span>
itS<span style="color: navy"><b> -> </b></span>risk<b> then </b>AddAnswerCodingAndText<span style="color: navy">(</span><span style="color: maroon">itS</span><span style="color: navy">, </span><span style="color: maroon">risk</span><span style="color: navy">)</span> <i>"answerCoding"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"qualitativeRisk"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"prediction"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"selfHarmPassiveRule"</i><span style="color: navy">;</span>
qr.item<b> as </b><span style="color: maroon">itS</span><b> where </b><span style="color: navy">(</span>(linkId = 'selfHarm') and (answer.value.ofType(Coding).code = 'self-harm-active-plan')<span style="color: navy">)</span><span style="color: navy"><b> -> </b></span> bundle.entry<b> as </b><span style="color: maroon">entry</span><span style="color: navy">, </span> entry.resource = <b>create</b><span style="color: navy">(</span><span style="color: blue">'RiskAssessment'</span><span style="color: navy">)</span><b> as </b><span style="color: maroon">ra</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span> ra<span style="color: navy">, </span> entry<b> then </b>BuildRiskBase<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">ra</span><span style="color: navy">, </span><span style="color: maroon">entry</span><span style="color: navy">)</span> <i>"riskBase"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>ra.prediction<b> as </b><span style="color: maroon">pred</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span>pred.outcome<b> as </b><span style="color: maroon">outcome</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span>outcome.text = <span style="color: blue">'Self-harm'</span> <i>"outcomeText"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"outcome"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>pred.qualitativeRisk<b> as </b><span style="color: maroon">risk</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span>risk.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/risk-probability'</span> <i>"riskSystem"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>coding.code = <span style="color: blue">'high'</span> <i>"riskCode"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>coding.display = <span style="color: blue">'High likelihood'</span> <i>"riskDisplay"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"riskCoding"</i><span style="color: navy">;</span>
itS<span style="color: navy"><b> -> </b></span>risk<b> then </b>AddAnswerCodingAndText<span style="color: navy">(</span><span style="color: maroon">itS</span><span style="color: navy">, </span><span style="color: maroon">risk</span><span style="color: navy">)</span> <i>"answerCoding"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"qualitativeRisk"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"prediction"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"selfHarmActivePlanRule"</i><span style="color: navy">;</span>
qr.item<b> as </b><span style="color: maroon">itS</span><b> where </b><span style="color: navy">(</span>(linkId = 'selfHarm') and (answer.value.ofType(Coding).code = 'self-harm-recent-act')<span style="color: navy">)</span><span style="color: navy"><b> -> </b></span> bundle.entry<b> as </b><span style="color: maroon">entry</span><span style="color: navy">, </span> entry.resource = <b>create</b><span style="color: navy">(</span><span style="color: blue">'RiskAssessment'</span><span style="color: navy">)</span><b> as </b><span style="color: maroon">ra</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span> ra<span style="color: navy">, </span> entry<b> then </b>BuildRiskBase<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">ra</span><span style="color: navy">, </span><span style="color: maroon">entry</span><span style="color: navy">)</span> <i>"riskBase"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>ra.prediction<b> as </b><span style="color: maroon">pred</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span>pred.outcome<b> as </b><span style="color: maroon">outcome</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span>outcome.text = <span style="color: blue">'Self-harm'</span> <i>"outcomeText"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"outcome"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>pred.qualitativeRisk<b> as </b><span style="color: maroon">risk</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span>risk.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/risk-probability'</span> <i>"riskSystem"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>coding.code = <span style="color: blue">'high'</span> <i>"riskCode"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>coding.display = <span style="color: blue">'High likelihood'</span> <i>"riskDisplay"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"riskCoding"</i><span style="color: navy">;</span>
itS<span style="color: navy"><b> -> </b></span>risk<b> then </b>AddAnswerCodingAndText<span style="color: navy">(</span><span style="color: maroon">itS</span><span style="color: navy">, </span><span style="color: maroon">risk</span><span style="color: navy">)</span> <i>"answerCoding"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"qualitativeRisk"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"prediction"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"selfHarmRecentActRule"</i><span style="color: navy">;</span>
<span style="color: navy">// </span><span style="color: green">── Safeguarding ───────────────────────────────────────────────────────────</span>
<span style="color: navy">// </span><span style="color: green">Flag has no element that points back at the response it came from, so this</span>
<span style="color: navy">// </span><span style="color: green">is the one resource the map emits with no link home. Category `safety` is</span>
<span style="color: navy">// </span><span style="color: green">what makes it show up wherever the ward surfaces safety flags.</span>
qr.item<b> as </b><span style="color: maroon">itSg</span><b> where </b><span style="color: navy">(</span>(linkId = 'safeguarding') and answer.value.exists()<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span> itSg.answer first<b> as </b><span style="color: maroon">aSg</span><b> then</b><span style="color: navy"> {
</span> aSg<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">'Flag'</span><span style="color: navy">)</span><b> as </b><span style="color: maroon">flag</span><b> then</b><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </b></span>flag.id = <b>uuid</b><span style="color: navy">(</span><span style="color: navy">)</span><b> then </b>SetFlagFullUrl<span style="color: navy">(</span><span style="color: maroon">flag</span><span style="color: navy">, </span><span style="color: maroon">entryF</span><span style="color: navy">)</span> <i>"idAndFullUrl"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>entryF.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">'Flag'</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>flag.status = <span style="color: blue">'active'</span> <i>"status"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>flag.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/flag-category'</span> <i>"categorySystem"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>coding.code = <span style="color: blue">'safety'</span> <i>"categoryCode"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>coding.display = <span style="color: blue">'Safety'</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><span style="color: green">The concern as written. Flag.code is 1..1 and there is no code system</span>
<span style="color: navy">// </span><span style="color: green">for "what a nurse is worried about", so the wording is the concept.</span>
aSg.value<b> as </b><span style="color: maroon">v</span><span style="color: navy"><b> -> </b></span>flag.code<b> as </b><span style="color: maroon">code</span><b> then</b><span style="color: navy"> {
</span> v<span style="color: navy"><b> -> </b></span>code.text = <span style="color: maroon">v</span> <i>"codeText"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"flagCode"</i><span style="color: navy">;</span>
qr.subject<b> as </b><span style="color: maroon">s</span><span style="color: navy"><b> -> </b></span>flag.subject = <span style="color: maroon">s</span><span style="color: navy">;</span>
qr.encounter<b> as </b><span style="color: maroon">e</span><span style="color: navy"><b> -> </b></span>flag.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>flag.period<b> as </b><span style="color: maroon">period</span><b> then</b><span style="color: navy"> {
</span> t<span style="color: navy"><b> -> </b></span>period.start = <span style="color: maroon">t</span> <i>"periodStart"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"period"</i><span style="color: navy">;</span>
qr.author<b> as </b><span style="color: maroon">a</span><span style="color: navy"><b> -> </b></span>flag.author = <span style="color: maroon">a</span> <i>"authorFromAuthor"</i><span style="color: navy">;</span>
qr<b> where </b><span style="color: navy">(</span>author.exists().not()<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span> qr.source<b> as </b><span style="color: maroon">src</span><span style="color: navy"><b> -> </b></span>flag.author = <span style="color: maroon">src</span> <i>"authorFromSource"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"authorFallback"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"flag"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"safeguardingAnswer"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"safeguardingRule"</i><span style="color: navy">;</span>
<span style="color: navy">}
</span><span style="color: navy">// </span><span style="color: green">The chosen answer, coding and wording intact, alongside the risk-probability</span>
<span style="color: navy">// </span><span style="color: green">code. risk-probability has five concepts and the form has four answers, so</span>
<span style="color: navy">// </span><span style="color: green">two of them share `high`; the answer coding is what tells them apart.</span>
<b>group </b>AddAnswerCodingAndText<span style="color: navy">(</span><b>source</b> <span style="color: maroon">it</span>, <b>target</b> <span style="color: maroon">risk</span><span style="color: navy">)</span><span style="color: navy"> {
</span> it.answer first<b> as </b><span style="color: maroon">a</span><b> then</b><span style="color: navy"> {
</span> a.value<b> as </b><span style="color: maroon">cv</span><span style="color: navy"><b> -> </b></span>risk.coding = <span style="color: maroon">cv</span> <i>"answerCoding"</i><span style="color: navy">;</span>
a.value<b> as </b><span style="color: maroon">cv</span><b> then</b><span style="color: navy"> {
</span> cv.display<b> as </b><span style="color: maroon">d</span><span style="color: navy"><b> -> </b></span>risk.text = <span style="color: maroon">d</span> <i>"answerText"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"answerDisplay"</i><span style="color: navy">;</span>
<span style="color: navy">}</span><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><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><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><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.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><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">No Observation to stand on here -- the self-harm answer is a judgement, not a</span>
<span style="color: navy">// </span><span style="color: green">measurement -- so basis carries the response alone, and "What was said" comes</span>
<span style="color: navy">// </span><span style="color: green">through as the assessment's note.</span>
<b>group </b>BuildRiskBase<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">ra</span><span style="color: navy"> : </span>RiskAssessment, <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>ra.id = <b>uuid</b><span style="color: navy">(</span><span style="color: navy">)</span><b> then </b>SetRiskAssessmentFullUrl<span style="color: navy">(</span><span style="color: maroon">ra</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">'RiskAssessment'</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>ra.status = <span style="color: blue">'final'</span> <i>"status"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>ra.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">'self-harm-risk'</span> <i>"codeCode"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>coding.display = <span style="color: blue">'Risk of self-harm'</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">'Risk of self-harm'</span> <i>"codeText"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"code"</i><span style="color: navy">;</span>
qr.subject<b> as </b><span style="color: maroon">s</span><span style="color: navy"><b> -> </b></span>ra.subject = <span style="color: maroon">s</span><span style="color: navy">;</span>
qr.encounter<b> as </b><span style="color: maroon">e</span><span style="color: navy"><b> -> </b></span>ra.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>ra.occurrence = <span style="color: maroon">t</span> <i>"occurrence"</i><span style="color: navy">;</span>
qr.author<b> as </b><span style="color: maroon">a</span><span style="color: navy"><b> -> </b></span>ra.performer = <span style="color: maroon">a</span> <i>"performerFromAuthor"</i><span style="color: navy">;</span>
qr<b> where </b><span style="color: navy">(</span>author.exists().not()<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span> qr.source<b> as </b><span style="color: maroon">src</span><span style="color: navy"><b> -> </b></span>ra.performer = <span style="color: maroon">src</span> <i>"performerFromSource"</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>ra.basis = <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">qref</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>qref.reference = <span style="color: maroon">qid</span> <i>"basisQuestionnaireResponse"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"basisResponse"</i><span style="color: navy">;</span>
qr.item<b> as </b><span style="color: maroon">itD</span><b> where </b><span style="color: navy">(</span>(linkId = 'selfHarmDetail') and answer.value.exists()<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span> itD.answer first<b> as </b><span style="color: maroon">aD</span><b> then</b><span style="color: navy"> {
</span> aD.value<b> as </b><span style="color: maroon">v</span><span style="color: navy"><b> -> </b></span>ra.note<b> as </b><span style="color: maroon">note</span><b> then</b><span style="color: navy"> {
</span> v<span style="color: navy"><b> -> </b></span>note.text = <span style="color: maroon">v</span> <i>"noteText"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"note"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"detailAnswer"</i><span style="color: navy">;</span>
<span style="color: navy">}</span> <i>"whatWasSaidRule"</i><span style="color: navy">;</span>
<span style="color: navy">}
</span><b>group </b>SetCodedValue<span style="color: navy">(</span><b>source</b> <span style="color: maroon">a</span>, <b>target</b> <span style="color: maroon">obs</span><span style="color: navy"> : </span>Observation<span style="color: navy">)</span><span style="color: navy"> {
</span> a.value<b> as </b><span style="color: maroon">cv</span><span style="color: navy"><b> -> </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>SetExamCategory<span style="color: navy">(</span><b>source</b> <span style="color: maroon">qr</span><span style="color: navy"> : </span>QR, <b>target</b> <span style="color: maroon">obs</span><span style="color: navy"> : </span>Observation<span style="color: navy">)</span><span style="color: navy"> {
</span> qr<span style="color: navy"><b> -> </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">'exam'</span> <i>"categoryCode"</i><span style="color: navy">;</span>
qr<span style="color: navy"><b> -> </b></span>coding.display = <span style="color: blue">'Exam'</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>SetRiskAssessmentFullUrl<span style="color: navy">(</span><b>source</b> <span style="color: maroon">ra</span><span style="color: navy"> : </span>RiskAssessment, <b>target</b> <span style="color: maroon">entry</span><span style="color: navy">)</span><span style="color: navy"> {
</span> ra.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/RiskAssessment/'</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>SetFlagFullUrl<span style="color: navy">(</span><b>source</b> <span style="color: maroon">flag</span><span style="color: navy"> : </span>Flag, <b>target</b> <span style="color: maroon">entry</span><span style="color: navy">)</span><span style="color: navy"> {
</span> flag.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/Flag/'</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></pre></div>
</text>
<url
value="https://fhir.slade360.co.ke/fhir/StructureMap/ExtractInpatientMentalHealthRiskAssessment"/>
<version value="0.1.0"/>
<name value="ExtractInpatientMentalHealthRiskAssessment"/>
<title value="Inpatient Mental Health Risk Assessment Extraction"/>
<status value="active"/>
<date value="2026-09-14T06:31:13+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="Mood and capacity become Observations, the risk of self-harm becomes a RiskAssessment carrying what the patient said as its note, and a safeguarding concern becomes a Flag on the patient. This is the one instrument here that is not scored: the band comes from which of four answers was picked, not from arithmetic, so each answer is banded explicitly. The answer's own coding and wording ride along in qualitativeRisk, so a reader never has to infer what was said from a risk tier."/>
<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/RiskAssessment"/>
<mode value="target"/>
<alias value="RiskAssessment"/>
</structure>
<structure>
<url value="http://hl7.org/fhir/StructureDefinition/Flag"/>
<mode value="target"/>
<alias value="Flag"/>
</structure>
<group>
<name value="ExtractInpatientMentalHealthRiskAssessment"/>
<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="moodRule"/>
<source>
<context value="qr"/>
<element value="item"/>
<variable value="itM"/>
<condition value="(linkId = 'mood') and answer.value.exists()"/>
</source>
<rule>
<name value="moodAnswer"/>
<source>
<context value="itM"/>
<element value="answer"/>
<listMode value="first"/>
<variable value="aM"/>
</source>
<rule>
<name value="moodObservation"/>
<source>
<context value="aM"/>
</source>
<target>
<context value="bundle"/>
<element value="entry"/>
<variable value="entryM"/>
</target>
<target>
<context value="entryM"/>
<element value="resource"/>
<variable value="obsM"/>
<transform value="create"/>
<parameter>
<valueString value="Observation"/>
</parameter>
</target>
<rule>
<name value="moodBase"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="obsM"/>
</target>
<target>
<context value="entryM"/>
</target>
<dependent>
<name value="BuildObsBase"/>
<parameter>
<valueId value="qr"/>
</parameter>
<parameter>
<valueId value="obsM"/>
</parameter>
<parameter>
<valueId value="entryM"/>
</parameter>
</dependent>
</rule>
<rule>
<name value="moodCategory"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="obsM"/>
</target>
<dependent>
<name value="SetExamCategory"/>
<parameter>
<valueId value="qr"/>
</parameter>
<parameter>
<valueId value="obsM"/>
</parameter>
</dependent>
</rule>
<rule>
<name value="moodCode"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="obsM"/>
<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="mood-and-affect"/>
</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="Mood and affect"/>
</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="Mood and affect"/>
</parameter>
</target>
</rule>
</rule>
<rule>
<name value="moodValue"/>
<source>
<context value="aM"/>
<element value="value"/>
<variable value="v"/>
</source>
<target>
<context value="obsM"/>
<element value="value"/>
<transform value="copy"/>
<parameter>
<valueId value="v"/>
</parameter>
</target>
</rule>
</rule>
</rule>
<documentation
value="── Mood and affect ────────────────────────────────────────────────────────
No LOINC concept for the mood and affect line of a mental state
examination, so a local code. See SGHIInpatientClinicalConceptCodeSystem."/>
</rule>
<rule>
<name value="capacityRule"/>
<source>
<context value="qr"/>
<element value="item"/>
<variable value="itC"/>
<condition value="(linkId = 'capacity') and answer.value.exists()"/>
</source>
<rule>
<name value="capacityAnswer"/>
<source>
<context value="itC"/>
<element value="answer"/>
<listMode value="first"/>
<variable value="aC"/>
</source>
<rule>
<name value="capacityObservation"/>
<source>
<context value="aC"/>
</source>
<target>
<context value="bundle"/>
<element value="entry"/>
<variable value="entryC"/>
</target>
<target>
<context value="entryC"/>
<element value="resource"/>
<variable value="obsC"/>
<transform value="create"/>
<parameter>
<valueString value="Observation"/>
</parameter>
</target>
<rule>
<name value="capacityBase"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="obsC"/>
</target>
<target>
<context value="entryC"/>
</target>
<dependent>
<name value="BuildObsBase"/>
<parameter>
<valueId value="qr"/>
</parameter>
<parameter>
<valueId value="obsC"/>
</parameter>
<parameter>
<valueId value="entryC"/>
</parameter>
</dependent>
</rule>
<rule>
<name value="capacityCategory"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="obsC"/>
</target>
<dependent>
<name value="SetExamCategory"/>
<parameter>
<valueId value="qr"/>
</parameter>
<parameter>
<valueId value="obsC"/>
</parameter>
</dependent>
</rule>
<rule>
<name value="capacityCode"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="obsC"/>
<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="capacity-to-consent"/>
</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="Capacity to consent"/>
</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="Capacity to consent"/>
</parameter>
</target>
</rule>
</rule>
<rule>
<name value="capacityValue"/>
<source>
<context value="aC"/>
</source>
<target>
<context value="obsC"/>
</target>
<dependent>
<name value="SetCodedValue"/>
<parameter>
<valueId value="aC"/>
</parameter>
<parameter>
<valueId value="obsC"/>
</parameter>
</dependent>
</rule>
</rule>
</rule>
<documentation
value="── Capacity to consent ────────────────────────────────────────────────────"/>
</rule>
<rule>
<name value="selfHarmNoneRule"/>
<source>
<context value="qr"/>
<element value="item"/>
<variable value="itS"/>
<condition
value="(linkId = 'selfHarm') and (answer.value.ofType(Coding).code = 'self-harm-none')"/>
</source>
<target>
<context value="bundle"/>
<element value="entry"/>
<variable value="entry"/>
</target>
<target>
<context value="entry"/>
<element value="resource"/>
<variable value="ra"/>
<transform value="create"/>
<parameter>
<valueString value="RiskAssessment"/>
</parameter>
</target>
<rule>
<name value="riskBase"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="ra"/>
</target>
<target>
<context value="entry"/>
</target>
<dependent>
<name value="BuildRiskBase"/>
<parameter>
<valueId value="qr"/>
</parameter>
<parameter>
<valueId value="ra"/>
</parameter>
<parameter>
<valueId value="entry"/>
</parameter>
</dependent>
</rule>
<rule>
<name value="prediction"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="ra"/>
<element value="prediction"/>
<variable value="pred"/>
</target>
<rule>
<name value="outcome"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="pred"/>
<element value="outcome"/>
<variable value="outcome"/>
</target>
<rule>
<name value="outcomeText"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="outcome"/>
<element value="text"/>
<transform value="copy"/>
<parameter>
<valueString value="Self-harm"/>
</parameter>
</target>
</rule>
</rule>
<rule>
<name value="qualitativeRisk"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="pred"/>
<element value="qualitativeRisk"/>
<variable value="risk"/>
</target>
<rule>
<name value="riskCoding"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="risk"/>
<element value="coding"/>
<variable value="coding"/>
</target>
<rule>
<name value="riskSystem"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="system"/>
<transform value="copy"/>
<parameter>
<valueString
value="http://terminology.hl7.org/CodeSystem/risk-probability"/>
</parameter>
</target>
</rule>
<rule>
<name value="riskCode"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="code"/>
<transform value="copy"/>
<parameter>
<valueString value="negligible"/>
</parameter>
</target>
</rule>
<rule>
<name value="riskDisplay"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="display"/>
<transform value="copy"/>
<parameter>
<valueString value="Negligible likelihood"/>
</parameter>
</target>
</rule>
</rule>
<rule>
<name value="answerCoding"/>
<source>
<context value="itS"/>
</source>
<target>
<context value="risk"/>
</target>
<dependent>
<name value="AddAnswerCodingAndText"/>
<parameter>
<valueId value="itS"/>
</parameter>
<parameter>
<valueId value="risk"/>
</parameter>
</dependent>
</rule>
</rule>
</rule>
<documentation
value="── Risk of self-harm ──────────────────────────────────────────────────────
Four answers, four bands. Passive ideation is banded `moderate` rather than
`low`: on a ward, thoughts of self-harm without a plan still warrant
observation, and the cost of over-flagging here is smaller than the cost of
under-flagging."/>
</rule>
<rule>
<name value="selfHarmPassiveRule"/>
<source>
<context value="qr"/>
<element value="item"/>
<variable value="itS"/>
<condition
value="(linkId = 'selfHarm') and (answer.value.ofType(Coding).code = 'self-harm-passive')"/>
</source>
<target>
<context value="bundle"/>
<element value="entry"/>
<variable value="entry"/>
</target>
<target>
<context value="entry"/>
<element value="resource"/>
<variable value="ra"/>
<transform value="create"/>
<parameter>
<valueString value="RiskAssessment"/>
</parameter>
</target>
<rule>
<name value="riskBase"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="ra"/>
</target>
<target>
<context value="entry"/>
</target>
<dependent>
<name value="BuildRiskBase"/>
<parameter>
<valueId value="qr"/>
</parameter>
<parameter>
<valueId value="ra"/>
</parameter>
<parameter>
<valueId value="entry"/>
</parameter>
</dependent>
</rule>
<rule>
<name value="prediction"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="ra"/>
<element value="prediction"/>
<variable value="pred"/>
</target>
<rule>
<name value="outcome"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="pred"/>
<element value="outcome"/>
<variable value="outcome"/>
</target>
<rule>
<name value="outcomeText"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="outcome"/>
<element value="text"/>
<transform value="copy"/>
<parameter>
<valueString value="Self-harm"/>
</parameter>
</target>
</rule>
</rule>
<rule>
<name value="qualitativeRisk"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="pred"/>
<element value="qualitativeRisk"/>
<variable value="risk"/>
</target>
<rule>
<name value="riskCoding"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="risk"/>
<element value="coding"/>
<variable value="coding"/>
</target>
<rule>
<name value="riskSystem"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="system"/>
<transform value="copy"/>
<parameter>
<valueString
value="http://terminology.hl7.org/CodeSystem/risk-probability"/>
</parameter>
</target>
</rule>
<rule>
<name value="riskCode"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="code"/>
<transform value="copy"/>
<parameter>
<valueString value="moderate"/>
</parameter>
</target>
</rule>
<rule>
<name value="riskDisplay"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="display"/>
<transform value="copy"/>
<parameter>
<valueString value="Moderate likelihood"/>
</parameter>
</target>
</rule>
</rule>
<rule>
<name value="answerCoding"/>
<source>
<context value="itS"/>
</source>
<target>
<context value="risk"/>
</target>
<dependent>
<name value="AddAnswerCodingAndText"/>
<parameter>
<valueId value="itS"/>
</parameter>
<parameter>
<valueId value="risk"/>
</parameter>
</dependent>
</rule>
</rule>
</rule>
</rule>
<rule>
<name value="selfHarmActivePlanRule"/>
<source>
<context value="qr"/>
<element value="item"/>
<variable value="itS"/>
<condition
value="(linkId = 'selfHarm') and (answer.value.ofType(Coding).code = 'self-harm-active-plan')"/>
</source>
<target>
<context value="bundle"/>
<element value="entry"/>
<variable value="entry"/>
</target>
<target>
<context value="entry"/>
<element value="resource"/>
<variable value="ra"/>
<transform value="create"/>
<parameter>
<valueString value="RiskAssessment"/>
</parameter>
</target>
<rule>
<name value="riskBase"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="ra"/>
</target>
<target>
<context value="entry"/>
</target>
<dependent>
<name value="BuildRiskBase"/>
<parameter>
<valueId value="qr"/>
</parameter>
<parameter>
<valueId value="ra"/>
</parameter>
<parameter>
<valueId value="entry"/>
</parameter>
</dependent>
</rule>
<rule>
<name value="prediction"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="ra"/>
<element value="prediction"/>
<variable value="pred"/>
</target>
<rule>
<name value="outcome"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="pred"/>
<element value="outcome"/>
<variable value="outcome"/>
</target>
<rule>
<name value="outcomeText"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="outcome"/>
<element value="text"/>
<transform value="copy"/>
<parameter>
<valueString value="Self-harm"/>
</parameter>
</target>
</rule>
</rule>
<rule>
<name value="qualitativeRisk"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="pred"/>
<element value="qualitativeRisk"/>
<variable value="risk"/>
</target>
<rule>
<name value="riskCoding"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="risk"/>
<element value="coding"/>
<variable value="coding"/>
</target>
<rule>
<name value="riskSystem"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="system"/>
<transform value="copy"/>
<parameter>
<valueString
value="http://terminology.hl7.org/CodeSystem/risk-probability"/>
</parameter>
</target>
</rule>
<rule>
<name value="riskCode"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="code"/>
<transform value="copy"/>
<parameter>
<valueString value="high"/>
</parameter>
</target>
</rule>
<rule>
<name value="riskDisplay"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="display"/>
<transform value="copy"/>
<parameter>
<valueString value="High likelihood"/>
</parameter>
</target>
</rule>
</rule>
<rule>
<name value="answerCoding"/>
<source>
<context value="itS"/>
</source>
<target>
<context value="risk"/>
</target>
<dependent>
<name value="AddAnswerCodingAndText"/>
<parameter>
<valueId value="itS"/>
</parameter>
<parameter>
<valueId value="risk"/>
</parameter>
</dependent>
</rule>
</rule>
</rule>
</rule>
<rule>
<name value="selfHarmRecentActRule"/>
<source>
<context value="qr"/>
<element value="item"/>
<variable value="itS"/>
<condition
value="(linkId = 'selfHarm') and (answer.value.ofType(Coding).code = 'self-harm-recent-act')"/>
</source>
<target>
<context value="bundle"/>
<element value="entry"/>
<variable value="entry"/>
</target>
<target>
<context value="entry"/>
<element value="resource"/>
<variable value="ra"/>
<transform value="create"/>
<parameter>
<valueString value="RiskAssessment"/>
</parameter>
</target>
<rule>
<name value="riskBase"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="ra"/>
</target>
<target>
<context value="entry"/>
</target>
<dependent>
<name value="BuildRiskBase"/>
<parameter>
<valueId value="qr"/>
</parameter>
<parameter>
<valueId value="ra"/>
</parameter>
<parameter>
<valueId value="entry"/>
</parameter>
</dependent>
</rule>
<rule>
<name value="prediction"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="ra"/>
<element value="prediction"/>
<variable value="pred"/>
</target>
<rule>
<name value="outcome"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="pred"/>
<element value="outcome"/>
<variable value="outcome"/>
</target>
<rule>
<name value="outcomeText"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="outcome"/>
<element value="text"/>
<transform value="copy"/>
<parameter>
<valueString value="Self-harm"/>
</parameter>
</target>
</rule>
</rule>
<rule>
<name value="qualitativeRisk"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="pred"/>
<element value="qualitativeRisk"/>
<variable value="risk"/>
</target>
<rule>
<name value="riskCoding"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="risk"/>
<element value="coding"/>
<variable value="coding"/>
</target>
<rule>
<name value="riskSystem"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="system"/>
<transform value="copy"/>
<parameter>
<valueString
value="http://terminology.hl7.org/CodeSystem/risk-probability"/>
</parameter>
</target>
</rule>
<rule>
<name value="riskCode"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="code"/>
<transform value="copy"/>
<parameter>
<valueString value="high"/>
</parameter>
</target>
</rule>
<rule>
<name value="riskDisplay"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="display"/>
<transform value="copy"/>
<parameter>
<valueString value="High likelihood"/>
</parameter>
</target>
</rule>
</rule>
<rule>
<name value="answerCoding"/>
<source>
<context value="itS"/>
</source>
<target>
<context value="risk"/>
</target>
<dependent>
<name value="AddAnswerCodingAndText"/>
<parameter>
<valueId value="itS"/>
</parameter>
<parameter>
<valueId value="risk"/>
</parameter>
</dependent>
</rule>
</rule>
</rule>
</rule>
<rule>
<name value="safeguardingRule"/>
<source>
<context value="qr"/>
<element value="item"/>
<variable value="itSg"/>
<condition
value="(linkId = 'safeguarding') and answer.value.exists()"/>
</source>
<rule>
<name value="safeguardingAnswer"/>
<source>
<context value="itSg"/>
<element value="answer"/>
<listMode value="first"/>
<variable value="aSg"/>
</source>
<rule>
<name value="flag"/>
<source>
<context value="aSg"/>
</source>
<target>
<context value="bundle"/>
<element value="entry"/>
<variable value="entryF"/>
</target>
<target>
<context value="entryF"/>
<element value="resource"/>
<variable value="flag"/>
<transform value="create"/>
<parameter>
<valueString value="Flag"/>
</parameter>
</target>
<rule>
<name value="idAndFullUrl"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="flag"/>
<element value="id"/>
<transform value="uuid"/>
</target>
<dependent>
<name value="SetFlagFullUrl"/>
<parameter>
<valueId value="flag"/>
</parameter>
<parameter>
<valueId value="entryF"/>
</parameter>
</dependent>
</rule>
<rule>
<name value="entryRequest"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="entryF"/>
<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="Flag"/>
</parameter>
</target>
</rule>
</rule>
<rule>
<name value="status"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="flag"/>
<element value="status"/>
<transform value="copy"/>
<parameter>
<valueString value="active"/>
</parameter>
</target>
</rule>
<rule>
<name value="category"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="flag"/>
<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/flag-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="safety"/>
</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="Safety"/>
</parameter>
</target>
</rule>
</rule>
</rule>
<rule>
<name value="flagCode"/>
<source>
<context value="aSg"/>
<element value="value"/>
<variable value="v"/>
</source>
<target>
<context value="flag"/>
<element value="code"/>
<variable value="code"/>
</target>
<rule>
<name value="codeText"/>
<source>
<context value="v"/>
</source>
<target>
<context value="code"/>
<element value="text"/>
<transform value="copy"/>
<parameter>
<valueId value="v"/>
</parameter>
</target>
</rule>
<documentation
value="The concern as written. Flag.code is 1..1 and there is no code system
for "what a nurse is worried about", so the wording is the concept."/>
</rule>
<rule>
<name value="subject"/>
<source>
<context value="qr"/>
<element value="subject"/>
<variable value="s"/>
</source>
<target>
<context value="flag"/>
<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"/>
</source>
<target>
<context value="flag"/>
<element value="encounter"/>
<transform value="copy"/>
<parameter>
<valueId value="e"/>
</parameter>
</target>
</rule>
<rule>
<name value="period"/>
<source>
<context value="qr"/>
<element value="authored"/>
<variable value="t"/>
</source>
<target>
<context value="flag"/>
<element value="period"/>
<variable value="period"/>
</target>
<rule>
<name value="periodStart"/>
<source>
<context value="t"/>
</source>
<target>
<context value="period"/>
<element value="start"/>
<transform value="copy"/>
<parameter>
<valueId value="t"/>
</parameter>
</target>
</rule>
</rule>
<rule>
<name value="authorFromAuthor"/>
<source>
<context value="qr"/>
<element value="author"/>
<variable value="a"/>
</source>
<target>
<context value="flag"/>
<element value="author"/>
<transform value="copy"/>
<parameter>
<valueId value="a"/>
</parameter>
</target>
</rule>
<rule>
<name value="authorFallback"/>
<source>
<context value="qr"/>
<condition value="author.exists().not()"/>
</source>
<rule>
<name value="authorFromSource"/>
<source>
<context value="qr"/>
<element value="source"/>
<variable value="src"/>
</source>
<target>
<context value="flag"/>
<element value="author"/>
<transform value="copy"/>
<parameter>
<valueId value="src"/>
</parameter>
</target>
</rule>
</rule>
</rule>
</rule>
<documentation
value="── Safeguarding ───────────────────────────────────────────────────────────
Flag has no element that points back at the response it came from, so this
is the one resource the map emits with no link home. Category `safety` is
what makes it show up wherever the ward surfaces safety flags."/>
</rule>
</group>
<group>
<name value="AddAnswerCodingAndText"/>
<documentation
value="The chosen answer, coding and wording intact, alongside the risk-probability
code. risk-probability has five concepts and the form has four answers, so
two of them share `high`; the answer coding is what tells them apart."/>
<input>
<name value="it"/>
<mode value="source"/>
</input>
<input>
<name value="risk"/>
<mode value="target"/>
</input>
<rule>
<name value="answer"/>
<source>
<context value="it"/>
<element value="answer"/>
<listMode value="first"/>
<variable value="a"/>
</source>
<rule>
<name value="answerCoding"/>
<source>
<context value="a"/>
<element value="value"/>
<variable value="cv"/>
</source>
<target>
<context value="risk"/>
<element value="coding"/>
<transform value="copy"/>
<parameter>
<valueId value="cv"/>
</parameter>
</target>
</rule>
<rule>
<name value="answerDisplay"/>
<source>
<context value="a"/>
<element value="value"/>
<variable value="cv"/>
</source>
<rule>
<name value="answerText"/>
<source>
<context value="cv"/>
<element value="display"/>
<variable value="d"/>
</source>
<target>
<context value="risk"/>
<element value="text"/>
<transform value="copy"/>
<parameter>
<valueId value="d"/>
</parameter>
</target>
</rule>
</rule>
</rule>
</group>
<group>
<name value="BuildObsBase"/>
<documentation
value="─────────────────────────────────────────────────────────────────────────────
Shared scaffolding. Repeated in each map rather than imported: the transform
engine resolves `imports` against whatever StructureMaps happen to be on the
server, and a form that stops extracting because a shared map was not
uploaded is a worse failure than a duplicated group.
─────────────────────────────────────────────────────────────────────────────
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"/>
</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"/>
</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"/>
</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.exists().not()"/>
</source>
<rule>
<name value="performerFromAuthor"/>
<source>
<context value="qr"/>
<element value="author"/>
<variable value="a"/>
</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="BuildRiskBase"/>
<documentation
value="No Observation to stand on here -- the self-harm answer is a judgement, not a
measurement -- so basis carries the response alone, and "What was said" comes
through as the assessment's note."/>
<input>
<name value="qr"/>
<type value="QR"/>
<mode value="source"/>
</input>
<input>
<name value="ra"/>
<type value="RiskAssessment"/>
<mode value="target"/>
</input>
<input>
<name value="entry"/>
<mode value="target"/>
</input>
<rule>
<name value="idAndFullUrl"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="ra"/>
<element value="id"/>
<transform value="uuid"/>
</target>
<dependent>
<name value="SetRiskAssessmentFullUrl"/>
<parameter>
<valueId value="ra"/>
</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="RiskAssessment"/>
</parameter>
</target>
</rule>
</rule>
<rule>
<name value="status"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="ra"/>
<element value="status"/>
<transform value="copy"/>
<parameter>
<valueString value="final"/>
</parameter>
</target>
</rule>
<rule>
<name value="code"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="ra"/>
<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="self-harm-risk"/>
</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="Risk of self-harm"/>
</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="Risk of self-harm"/>
</parameter>
</target>
</rule>
</rule>
<rule>
<name value="subject"/>
<source>
<context value="qr"/>
<element value="subject"/>
<variable value="s"/>
</source>
<target>
<context value="ra"/>
<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"/>
</source>
<target>
<context value="ra"/>
<element value="encounter"/>
<transform value="copy"/>
<parameter>
<valueId value="e"/>
</parameter>
</target>
</rule>
<rule>
<name value="occurrence"/>
<source>
<context value="qr"/>
<element value="authored"/>
<variable value="t"/>
</source>
<target>
<context value="ra"/>
<element value="occurrence"/>
<transform value="copy"/>
<parameter>
<valueId value="t"/>
</parameter>
</target>
</rule>
<rule>
<name value="performerFromAuthor"/>
<source>
<context value="qr"/>
<element value="author"/>
<variable value="a"/>
</source>
<target>
<context value="ra"/>
<element value="performer"/>
<transform value="copy"/>
<parameter>
<valueId value="a"/>
</parameter>
</target>
</rule>
<rule>
<name value="performerFallback"/>
<source>
<context value="qr"/>
<condition value="author.exists().not()"/>
</source>
<rule>
<name value="performerFromSource"/>
<source>
<context value="qr"/>
<element value="source"/>
<variable value="src"/>
</source>
<target>
<context value="ra"/>
<element value="performer"/>
<transform value="copy"/>
<parameter>
<valueId value="src"/>
</parameter>
</target>
</rule>
</rule>
<rule>
<name value="basisResponse"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="ra"/>
<element value="basis"/>
<variable value="qref"/>
<transform value="create"/>
<parameter>
<valueString value="Reference"/>
</parameter>
</target>
<rule>
<name value="basisQuestionnaireResponse"/>
<source>
<context value="qr"/>
<element value="id"/>
<variable value="qid"/>
</source>
<target>
<context value="qref"/>
<element value="reference"/>
<transform value="copy"/>
<parameter>
<valueId value="qid"/>
</parameter>
</target>
</rule>
</rule>
<rule>
<name value="whatWasSaidRule"/>
<source>
<context value="qr"/>
<element value="item"/>
<variable value="itD"/>
<condition
value="(linkId = 'selfHarmDetail') and answer.value.exists()"/>
</source>
<rule>
<name value="detailAnswer"/>
<source>
<context value="itD"/>
<element value="answer"/>
<listMode value="first"/>
<variable value="aD"/>
</source>
<rule>
<name value="note"/>
<source>
<context value="aD"/>
<element value="value"/>
<variable value="v"/>
</source>
<target>
<context value="ra"/>
<element value="note"/>
<variable value="note"/>
</target>
<rule>
<name value="noteText"/>
<source>
<context value="v"/>
</source>
<target>
<context value="note"/>
<element value="text"/>
<transform value="copy"/>
<parameter>
<valueId value="v"/>
</parameter>
</target>
</rule>
</rule>
</rule>
</rule>
</group>
<group>
<name value="SetCodedValue"/>
<input>
<name value="a"/>
<mode value="source"/>
</input>
<input>
<name value="obs"/>
<type value="Observation"/>
<mode value="target"/>
</input>
<rule>
<name value="codedValue"/>
<source>
<context value="a"/>
<element value="value"/>
<variable value="cv"/>
</source>
<target>
<context value="obs"/>
<element value="value"/>
<variable value="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="SetExamCategory"/>
<input>
<name value="qr"/>
<type value="QR"/>
<mode value="source"/>
</input>
<input>
<name value="obs"/>
<type value="Observation"/>
<mode value="target"/>
</input>
<rule>
<name value="category"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="obs"/>
<element value="category"/>
<variable value="cat"/>
</target>
<rule>
<name value="categoryCoding"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="cat"/>
<element value="coding"/>
<variable value="coding"/>
</target>
<rule>
<name value="categorySystem"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="system"/>
<transform value="copy"/>
<parameter>
<valueString
value="http://terminology.hl7.org/CodeSystem/observation-category"/>
</parameter>
</target>
</rule>
<rule>
<name value="categoryCode"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="code"/>
<transform value="copy"/>
<parameter>
<valueString value="exam"/>
</parameter>
</target>
</rule>
<rule>
<name value="categoryDisplay"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="coding"/>
<element value="display"/>
<transform value="copy"/>
<parameter>
<valueString value="Exam"/>
</parameter>
</target>
</rule>
</rule>
</rule>
</group>
<group>
<name value="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="SetRiskAssessmentFullUrl"/>
<input>
<name value="ra"/>
<type value="RiskAssessment"/>
<mode value="source"/>
</input>
<input>
<name value="entry"/>
<mode value="target"/>
</input>
<rule>
<name value="assignFullUrl"/>
<source>
<context value="ra"/>
<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/RiskAssessment/"/>
</parameter>
<parameter>
<valueId value="id"/>
</parameter>
</target>
</rule>
</group>
<group>
<name value="SetFlagFullUrl"/>
<input>
<name value="flag"/>
<type value="Flag"/>
<mode value="source"/>
</input>
<input>
<name value="entry"/>
<mode value="target"/>
</input>
<rule>
<name value="assignFullUrl"/>
<source>
<context value="flag"/>
<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/Flag/"/>
</parameter>
<parameter>
<valueId value="id"/>
</parameter>
</target>
</rule>
</group>
</StructureMap>