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="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<b> then </b>CopyResponseTags<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>"responseTags"</i><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<b> then </b>CopyResponseTags<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>"responseTags"</i><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<b> then </b>CopyResponseTags<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> <i>"responseTags"</i><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<b> then </b>CopyResponseTags<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> <i>"responseTags"</i><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<b> then </b>CopyResponseTags<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> <i>"responseTags"</i><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<b> then </b>CopyResponseTags<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> <i>"responseTags"</i><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<b> then </b>CopyResponseTags<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">flag</span><span style="color: navy">)</span> <i>"responseTags"</i><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><b> where </b><span style="color: navy">(</span>(reference.exists() and (reference.startsWith('Patient/') or reference.startsWith('RelatedPerson/') or reference.startsWith('Location/') or reference.startsWith('Group/') or reference.startsWith('Organization/') or reference.startsWith('Practitioner/') or reference.startsWith('PractitionerRole/') or reference.startsWith('PlanDefinition/') or reference.startsWith('Medication/') or reference.startsWith('Procedure/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Patient') or ('/' + type).endsWith('/RelatedPerson') or ('/' + type).endsWith('/Location') or ('/' + type).endsWith('/Group') or ('/' + type).endsWith('/Organization') or ('/' + type).endsWith('/Practitioner') or ('/' + type).endsWith('/PractitionerRole') or ('/' + type).endsWith('/PlanDefinition') or ('/' + type).endsWith('/Medication') or ('/' + type).endsWith('/Procedure')))<span style="color: navy">)</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><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>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><b> where </b><span style="color: navy">(</span>(reference.exists() and (reference.startsWith('Device/') or reference.startsWith('Organization/') or reference.startsWith('Patient/') or reference.startsWith('RelatedPerson/') or reference.startsWith('Practitioner/') or reference.startsWith('PractitionerRole/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Device') or ('/' + type).endsWith('/Organization') or ('/' + type).endsWith('/Patient') or ('/' + type).endsWith('/RelatedPerson') or ('/' + type).endsWith('/Practitioner') or ('/' + type).endsWith('/PractitionerRole')))<span style="color: navy">)</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.where(((reference.exists() and (reference.startsWith('Device/') or reference.startsWith('Organization/') or reference.startsWith('Patient/') or reference.startsWith('RelatedPerson/') or reference.startsWith('Practitioner/') or reference.startsWith('PractitionerRole/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Device') or ('/' + type).endsWith('/Organization') or ('/' + type).endsWith('/Patient') or ('/' + type).endsWith('/RelatedPerson') or ('/' + type).endsWith('/Practitioner') or ('/' + type).endsWith('/PractitionerRole'))))).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><b> where </b><span style="color: navy">(</span>(reference.exists() and (reference.startsWith('Device/') or reference.startsWith('Organization/') or reference.startsWith('Patient/') or reference.startsWith('RelatedPerson/') or reference.startsWith('Practitioner/') or reference.startsWith('PractitionerRole/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Device') or ('/' + type).endsWith('/Organization') or ('/' + type).endsWith('/Patient') or ('/' + type).endsWith('/RelatedPerson') or ('/' + type).endsWith('/Practitioner') or ('/' + type).endsWith('/PractitionerRole')))<span style="color: navy">)</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><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">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><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>ra.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>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><b> where </b><span style="color: navy">(</span>(reference.exists() and (reference.startsWith('Patient/') or reference.startsWith('Practitioner/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Patient') or ('/' + type).endsWith('/Practitioner')))<span style="color: navy">)</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.where(((reference.exists() and (reference.startsWith('Patient/') or reference.startsWith('Practitioner/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Patient') or ('/' + type).endsWith('/Practitioner'))))).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><b> where </b><span style="color: navy">(</span>(reference.exists() and (reference.startsWith('Patient/') or reference.startsWith('Practitioner/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Patient') or ('/' + type).endsWith('/Practitioner')))<span style="color: navy">)</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><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/ExtractInpatientMentalHealthRiskAssessment"/>
<version value="0.1.0"/>
<name value="ExtractInpatientMentalHealthRiskAssessment"/>
<title value="Inpatient Mental Health Risk 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="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="responseTags"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="obsM"/>
</target>
<dependent>
<name value="CopyResponseTags"/>
<parameter>
<valueId value="qr"/>
</parameter>
<parameter>
<valueId value="obsM"/>
</parameter>
</dependent>
</rule>
<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="responseTags"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="obsC"/>
</target>
<dependent>
<name value="CopyResponseTags"/>
<parameter>
<valueId value="qr"/>
</parameter>
<parameter>
<valueId value="obsC"/>
</parameter>
</dependent>
</rule>
<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="responseTags"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="ra"/>
</target>
<dependent>
<name value="CopyResponseTags"/>
<parameter>
<valueId value="qr"/>
</parameter>
<parameter>
<valueId value="ra"/>
</parameter>
</dependent>
</rule>
<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="responseTags"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="ra"/>
</target>
<dependent>
<name value="CopyResponseTags"/>
<parameter>
<valueId value="qr"/>
</parameter>
<parameter>
<valueId value="ra"/>
</parameter>
</dependent>
</rule>
<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="responseTags"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="ra"/>
</target>
<dependent>
<name value="CopyResponseTags"/>
<parameter>
<valueId value="qr"/>
</parameter>
<parameter>
<valueId value="ra"/>
</parameter>
</dependent>
</rule>
<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="responseTags"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="ra"/>
</target>
<dependent>
<name value="CopyResponseTags"/>
<parameter>
<valueId value="qr"/>
</parameter>
<parameter>
<valueId value="ra"/>
</parameter>
</dependent>
</rule>
<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="responseTags"/>
<source>
<context value="qr"/>
</source>
<target>
<context value="flag"/>
</target>
<dependent>
<name value="CopyResponseTags"/>
<parameter>
<valueId value="qr"/>
</parameter>
<parameter>
<valueId value="flag"/>
</parameter>
</dependent>
</rule>
<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"/>
<condition
value="(reference.exists() and (reference.startsWith('Patient/') or reference.startsWith('RelatedPerson/') or reference.startsWith('Location/') or reference.startsWith('Group/') or reference.startsWith('Organization/') or reference.startsWith('Practitioner/') or reference.startsWith('PractitionerRole/') or reference.startsWith('PlanDefinition/') or reference.startsWith('Medication/') or reference.startsWith('Procedure/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Patient') or ('/' + type).endsWith('/RelatedPerson') or ('/' + type).endsWith('/Location') or ('/' + type).endsWith('/Group') or ('/' + type).endsWith('/Organization') or ('/' + type).endsWith('/Practitioner') or ('/' + type).endsWith('/PractitionerRole') or ('/' + type).endsWith('/PlanDefinition') or ('/' + type).endsWith('/Medication') or ('/' + type).endsWith('/Procedure')))"/>
</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"/>
<condition
value="(reference.exists() and (reference.startsWith('Encounter/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Encounter')))"/>
</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"/>
<condition
value="(reference.exists() and (reference.startsWith('Device/') or reference.startsWith('Organization/') or reference.startsWith('Patient/') or reference.startsWith('RelatedPerson/') or reference.startsWith('Practitioner/') or reference.startsWith('PractitionerRole/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Device') or ('/' + type).endsWith('/Organization') or ('/' + type).endsWith('/Patient') or ('/' + type).endsWith('/RelatedPerson') or ('/' + type).endsWith('/Practitioner') or ('/' + type).endsWith('/PractitionerRole')))"/>
</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.where(((reference.exists() and (reference.startsWith('Device/') or reference.startsWith('Organization/') or reference.startsWith('Patient/') or reference.startsWith('RelatedPerson/') or reference.startsWith('Practitioner/') or reference.startsWith('PractitionerRole/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Device') or ('/' + type).endsWith('/Organization') or ('/' + type).endsWith('/Patient') or ('/' + type).endsWith('/RelatedPerson') or ('/' + type).endsWith('/Practitioner') or ('/' + type).endsWith('/PractitionerRole'))))).exists().not()"/>
</source>
<rule>
<name value="authorFromSource"/>
<source>
<context value="qr"/>
<element value="source"/>
<variable value="src"/>
<condition
value="(reference.exists() and (reference.startsWith('Device/') or reference.startsWith('Organization/') or reference.startsWith('Patient/') or reference.startsWith('RelatedPerson/') or reference.startsWith('Practitioner/') or reference.startsWith('PractitionerRole/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Device') or ('/' + type).endsWith('/Organization') or ('/' + type).endsWith('/Patient') or ('/' + type).endsWith('/RelatedPerson') or ('/' + type).endsWith('/Practitioner') or ('/' + type).endsWith('/PractitionerRole')))"/>
</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"/>
<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="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"/>
<condition
value="(reference.exists() and (reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Patient')))"/>
</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"/>
<condition
value="(reference.exists() and (reference.startsWith('Encounter/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Encounter')))"/>
</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"/>
<condition
value="(reference.exists() and (reference.startsWith('Patient/') or reference.startsWith('Practitioner/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Patient') or ('/' + type).endsWith('/Practitioner')))"/>
</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.where(((reference.exists() and (reference.startsWith('Patient/') or reference.startsWith('Practitioner/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Patient') or ('/' + type).endsWith('/Practitioner'))))).exists().not()"/>
</source>
<rule>
<name value="performerFromSource"/>
<source>
<context value="qr"/>
<element value="source"/>
<variable value="src"/>
<condition
value="(reference.exists() and (reference.startsWith('Patient/') or reference.startsWith('Practitioner/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Patient') or ('/' + type).endsWith('/Practitioner')))"/>
</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>
<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>