{
  "resourceType" : "StructureMap",
  "id" : "ExtractMorseFallScale",
  "text" : {
    "status" : "generated",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\"><p class=\"res-header-id\"><b>Generated Narrative: StructureMap ExtractMorseFallScale</b></p><a name=\"ExtractMorseFallScale\"> </a><a name=\"hcExtractMorseFallScale\"> </a><pre class=\"fml\">\r\n<span style=\"color: #cc00cc\">/// <b>url</b> = </span><span style=\"color: blue\">'https://fhir.slade360.co.ke/fhir/StructureMap/ExtractMorseFallScale'</span>\r\n<span style=\"color: #cc00cc\">/// <b>name</b> = </span><span style=\"color: blue\">'ExtractMorseFallScale'</span>\r\n<span style=\"color: #cc00cc\">/// <b>title</b> = </span><span style=\"color: blue\">'Morse Fall Scale Extraction'</span>\r\n<span style=\"color: #cc00cc\">/// <b>status</b> = </span><span style=\"color: blue\">'active'</span>\r\n<span style=\"color: #cc00cc\">/// <b>description</b> = </span><span style=\"color: blue\">'The LOINC Morse Fall Scale panel out as one Observation carrying the total, with the six weighted questions as components, plus a RiskAssessment for the band the total falls in. The total prefers what the form submitted and otherwise sums the answers itself, and it only extracts when all six questions have been answered: a Morse score short of an item is not a Morse score, and banding one puts a number a nurse can act on next to a risk tier that is wrong.'</span>\r\n\r\n<b>uses</b><span style=\"color: navy\"> &quot;</span><a href=\"http://hl7.org/fhir/R5/questionnaireresponse.html\" title=\"QuestionnaireResponse\">http://hl7.org/fhir/StructureDefinition/QuestionnaireResponse</a><span style=\"color: navy\">&quot; </span><b>alias </b>QR <b>as </b><b>source</b>\r\n<b>uses</b><span style=\"color: navy\"> &quot;</span><a href=\"http://hl7.org/fhir/R5/bundle.html\" title=\"Bundle\">http://hl7.org/fhir/StructureDefinition/Bundle</a><span style=\"color: navy\">&quot; </span><b>alias </b>Bundle <b>as </b><b>target</b>\r\n<b>uses</b><span style=\"color: navy\"> &quot;</span><a href=\"http://hl7.org/fhir/R5/observation.html\" title=\"Observation\">http://hl7.org/fhir/StructureDefinition/Observation</a><span style=\"color: navy\">&quot; </span><b>alias </b>Observation <b>as </b><b>target</b>\r\n<b>uses</b><span style=\"color: navy\"> &quot;</span><a href=\"http://hl7.org/fhir/R5/riskassessment.html\" title=\"RiskAssessment\">http://hl7.org/fhir/StructureDefinition/RiskAssessment</a><span style=\"color: navy\">&quot; </span><b>alias </b>RiskAssessment <b>as </b><b>target</b>\r\n\r\n<b>group </b>ExtractMorseFallScale<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">qr</span><span style=\"color: navy\"> : </span>QR, <b>target</b> <span style=\"color: maroon\">bundle</span><span style=\"color: navy\"> : </span>Bundle<span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  qr<span style=\"color: navy\"><b> -&gt; </b></span>bundle.type = <span style=\"color: blue\">'transaction'</span> <i>&quot;setBundleType&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">LOINC publishes this panel flat -- the six questions, the total and the risk</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">level are all top-level items keyed by their own LOINC code -- so there is no</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">group to hang the Observation off and the response itself is the anchor.</span>\r\n  qr<b> where </b><span style=\"color: navy\">(</span>item.where(linkId in ('59454-9' | '59455-6' | '59456-4' | '59457-2' | '59458-0' | '59459-8')).answer.value.ofType(Coding).exists()<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -&gt; </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">entry</span><span style=\"color: navy\">, </span> entry.resource = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'Observation'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">obs</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    qr<span style=\"color: navy\"><b> -&gt; </b></span> obs<span style=\"color: navy\">, </span> entry<b> then </b>BuildObsBase<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span> <i>&quot;base&quot;</i><span style=\"color: navy\">;</span>\r\n    qr<span style=\"color: navy\"><b> -&gt; </b></span>obs<b> then </b>SetSurveyCategory<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">)</span> <i>&quot;category&quot;</i><span style=\"color: navy\">;</span>\r\n    qr<span style=\"color: navy\"><b> -&gt; </b></span>obs.code<b> as </b><span style=\"color: maroon\">code</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      qr<span style=\"color: navy\"><b> -&gt; </b></span>code.coding<b> as </b><span style=\"color: maroon\">coding</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.system = <span style=\"color: blue\">'http://loinc.org'</span> <i>&quot;codeSystem&quot;</i><span style=\"color: navy\">;</span>\r\n        qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.code = <span style=\"color: blue\">'59460-6'</span> <i>&quot;codeCode&quot;</i><span style=\"color: navy\">;</span>\r\n        qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.display = <span style=\"color: blue\">'Fall risk total [Morse Fall Scale]'</span> <i>&quot;codeDisplay&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;codeCoding&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;code&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">The submitted total wins; otherwise sum the answers.</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">The weights have to be resolved question by question rather than from one</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">lookup, because Morse reuses LOINC's plain yes/no pair across three</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">questions at three different weights: LA33-6 &quot;Yes&quot; is worth 25 on the</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">history of falling, 15 on a secondary diagnosis and 20 on an intravenous</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">line. A global code-to-weight table would silently score all three the</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">same. The weights are Morse's own, as printed on the form.</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">truncate(), not toInteger(): the form types the total `decimal`, and this</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">engine's toInteger() returns empty for anything with a fractional part.</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">Observation.value has no decimal choice, so it has to land as an integer.</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">Guarded on all six questions being answered.</span>\r\n    qr<b> where </b><span style=\"color: navy\">(</span>item.where(linkId in ('59454-9' | '59455-6' | '59456-4' | '59457-2' | '59458-0' | '59459-8')).answer.value.ofType(Coding).count() = 6<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      qr<span style=\"color: navy\"><b> -&gt; </b></span>obs.value = evaluate<span style=\"color: navy\">(</span>qr<span style=\"color: navy\">, </span>iif(item.where(linkId = '59460-6').answer.value.exists(), item.where(linkId = '59460-6').answer.value.truncate(), iif(item.where(linkId = '59454-9').answer.value.ofType(Coding).code = 'LA33-6', 25, 0) + iif(item.where(linkId = '59455-6').answer.value.ofType(Coding).code = 'LA33-6', 15, 0) + iif(item.where(linkId = '59456-4').answer.value.ofType(Coding).code = 'LA13031-2', 15, iif(item.where(linkId = '59456-4').answer.value.ofType(Coding).code = 'LA13032-0', 30, 0)) + iif(item.where(linkId = '59457-2').answer.value.ofType(Coding).code = 'LA33-6', 20, 0) + iif(item.where(linkId = '59458-0').answer.value.ofType(Coding).code = 'LA13034-6', 10, iif(item.where(linkId = '59458-0').answer.value.ofType(Coding).code = 'LA13035-3', 20, 0)) + iif(item.where(linkId = '59459-8').answer.value.ofType(Coding).code = 'LA13037-9', 15, 0))<span style=\"color: navy\">)</span> <i>&quot;totalValue&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;totalRule&quot;</i><span style=\"color: navy\">;</span>\r\n    qr.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = '59454-9') and answer.value.exists()<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -&gt; </b></span>obs.component<b> as </b><span style=\"color: maroon\">comp</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      it<span style=\"color: navy\"><b> -&gt; </b></span>comp.code<b> as </b><span style=\"color: maroon\">code</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        it<span style=\"color: navy\"><b> -&gt; </b></span>code.coding<b> as </b><span style=\"color: maroon\">coding</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          it<span style=\"color: navy\"><b> -&gt; </b></span>coding.system = <span style=\"color: blue\">'http://loinc.org'</span> <i>&quot;codeSystem&quot;</i><span style=\"color: navy\">;</span>\r\n          it<span style=\"color: navy\"><b> -&gt; </b></span>coding.code = <span style=\"color: blue\">'59454-9'</span> <i>&quot;codeCode&quot;</i><span style=\"color: navy\">;</span>\r\n          it<span style=\"color: navy\"><b> -&gt; </b></span>coding.display = <span style=\"color: blue\">'History of falling; immediate or within 3 months [Morse Fall Scale]'</span> <i>&quot;codeDisplay&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span> <i>&quot;codeCoding&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;historyCode&quot;</i><span style=\"color: navy\">;</span>\r\n      it<span style=\"color: navy\"><b> -&gt; </b></span>comp<b> then </b>SetComponentCodedValue<span style=\"color: navy\">(</span><span style=\"color: maroon\">it</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">comp</span><span style=\"color: navy\">)</span> <i>&quot;historyValue&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;historyRule&quot;</i><span style=\"color: navy\">;</span>\r\n    qr.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = '59455-6') and answer.value.exists()<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -&gt; </b></span>obs.component<b> as </b><span style=\"color: maroon\">comp</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      it<span style=\"color: navy\"><b> -&gt; </b></span>comp.code<b> as </b><span style=\"color: maroon\">code</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        it<span style=\"color: navy\"><b> -&gt; </b></span>code.coding<b> as </b><span style=\"color: maroon\">coding</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          it<span style=\"color: navy\"><b> -&gt; </b></span>coding.system = <span style=\"color: blue\">'http://loinc.org'</span> <i>&quot;codeSystem&quot;</i><span style=\"color: navy\">;</span>\r\n          it<span style=\"color: navy\"><b> -&gt; </b></span>coding.code = <span style=\"color: blue\">'59455-6'</span> <i>&quot;codeCode&quot;</i><span style=\"color: navy\">;</span>\r\n          it<span style=\"color: navy\"><b> -&gt; </b></span>coding.display = <span style=\"color: blue\">'Secondary diagnosis is present'</span> <i>&quot;codeDisplay&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span> <i>&quot;codeCoding&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;diagnosisCode&quot;</i><span style=\"color: navy\">;</span>\r\n      it<span style=\"color: navy\"><b> -&gt; </b></span>comp<b> then </b>SetComponentCodedValue<span style=\"color: navy\">(</span><span style=\"color: maroon\">it</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">comp</span><span style=\"color: navy\">)</span> <i>&quot;diagnosisValue&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;diagnosisRule&quot;</i><span style=\"color: navy\">;</span>\r\n    qr.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = '59456-4') and answer.value.exists()<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -&gt; </b></span>obs.component<b> as </b><span style=\"color: maroon\">comp</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      it<span style=\"color: navy\"><b> -&gt; </b></span>comp.code<b> as </b><span style=\"color: maroon\">code</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        it<span style=\"color: navy\"><b> -&gt; </b></span>code.coding<b> as </b><span style=\"color: maroon\">coding</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          it<span style=\"color: navy\"><b> -&gt; </b></span>coding.system = <span style=\"color: blue\">'http://loinc.org'</span> <i>&quot;codeSystem&quot;</i><span style=\"color: navy\">;</span>\r\n          it<span style=\"color: navy\"><b> -&gt; </b></span>coding.code = <span style=\"color: blue\">'59456-4'</span> <i>&quot;codeCode&quot;</i><span style=\"color: navy\">;</span>\r\n          it<span style=\"color: navy\"><b> -&gt; </b></span>coding.display = <span style=\"color: blue\">'Ambulatory aid [Morse Fall Scale]'</span> <i>&quot;codeDisplay&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span> <i>&quot;codeCoding&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;aidCode&quot;</i><span style=\"color: navy\">;</span>\r\n      it<span style=\"color: navy\"><b> -&gt; </b></span>comp<b> then </b>SetComponentCodedValue<span style=\"color: navy\">(</span><span style=\"color: maroon\">it</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">comp</span><span style=\"color: navy\">)</span> <i>&quot;aidValue&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;aidRule&quot;</i><span style=\"color: navy\">;</span>\r\n    qr.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = '59457-2') and answer.value.exists()<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -&gt; </b></span>obs.component<b> as </b><span style=\"color: maroon\">comp</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      it<span style=\"color: navy\"><b> -&gt; </b></span>comp.code<b> as </b><span style=\"color: maroon\">code</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        it<span style=\"color: navy\"><b> -&gt; </b></span>code.coding<b> as </b><span style=\"color: maroon\">coding</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          it<span style=\"color: navy\"><b> -&gt; </b></span>coding.system = <span style=\"color: blue\">'http://loinc.org'</span> <i>&quot;codeSystem&quot;</i><span style=\"color: navy\">;</span>\r\n          it<span style=\"color: navy\"><b> -&gt; </b></span>coding.code = <span style=\"color: blue\">'59457-2'</span> <i>&quot;codeCode&quot;</i><span style=\"color: navy\">;</span>\r\n          it<span style=\"color: navy\"><b> -&gt; </b></span>coding.display = <span style=\"color: blue\">'Intravenous apparatus [Morse Fall Scale]'</span> <i>&quot;codeDisplay&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span> <i>&quot;codeCoding&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;ivCode&quot;</i><span style=\"color: navy\">;</span>\r\n      it<span style=\"color: navy\"><b> -&gt; </b></span>comp<b> then </b>SetComponentCodedValue<span style=\"color: navy\">(</span><span style=\"color: maroon\">it</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">comp</span><span style=\"color: navy\">)</span> <i>&quot;ivValue&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;ivRule&quot;</i><span style=\"color: navy\">;</span>\r\n    qr.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = '59458-0') and answer.value.exists()<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -&gt; </b></span>obs.component<b> as </b><span style=\"color: maroon\">comp</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      it<span style=\"color: navy\"><b> -&gt; </b></span>comp.code<b> as </b><span style=\"color: maroon\">code</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        it<span style=\"color: navy\"><b> -&gt; </b></span>code.coding<b> as </b><span style=\"color: maroon\">coding</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          it<span style=\"color: navy\"><b> -&gt; </b></span>coding.system = <span style=\"color: blue\">'http://loinc.org'</span> <i>&quot;codeSystem&quot;</i><span style=\"color: navy\">;</span>\r\n          it<span style=\"color: navy\"><b> -&gt; </b></span>coding.code = <span style=\"color: blue\">'59458-0'</span> <i>&quot;codeCode&quot;</i><span style=\"color: navy\">;</span>\r\n          it<span style=\"color: navy\"><b> -&gt; </b></span>coding.display = <span style=\"color: blue\">'Gait [Morse Fall Scale]'</span> <i>&quot;codeDisplay&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span> <i>&quot;codeCoding&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;gaitCode&quot;</i><span style=\"color: navy\">;</span>\r\n      it<span style=\"color: navy\"><b> -&gt; </b></span>comp<b> then </b>SetComponentCodedValue<span style=\"color: navy\">(</span><span style=\"color: maroon\">it</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">comp</span><span style=\"color: navy\">)</span> <i>&quot;gaitValue&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;gaitRule&quot;</i><span style=\"color: navy\">;</span>\r\n    qr.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = '59459-8') and answer.value.exists()<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -&gt; </b></span>obs.component<b> as </b><span style=\"color: maroon\">comp</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      it<span style=\"color: navy\"><b> -&gt; </b></span>comp.code<b> as </b><span style=\"color: maroon\">code</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        it<span style=\"color: navy\"><b> -&gt; </b></span>code.coding<b> as </b><span style=\"color: maroon\">coding</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          it<span style=\"color: navy\"><b> -&gt; </b></span>coding.system = <span style=\"color: blue\">'http://loinc.org'</span> <i>&quot;codeSystem&quot;</i><span style=\"color: navy\">;</span>\r\n          it<span style=\"color: navy\"><b> -&gt; </b></span>coding.code = <span style=\"color: blue\">'59459-8'</span> <i>&quot;codeCode&quot;</i><span style=\"color: navy\">;</span>\r\n          it<span style=\"color: navy\"><b> -&gt; </b></span>coding.display = <span style=\"color: blue\">'Mental status [Morse Fall Scale]'</span> <i>&quot;codeDisplay&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span> <i>&quot;codeCoding&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;mentalCode&quot;</i><span style=\"color: navy\">;</span>\r\n      it<span style=\"color: navy\"><b> -&gt; </b></span>comp<b> then </b>SetComponentCodedValue<span style=\"color: navy\">(</span><span style=\"color: maroon\">it</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">comp</span><span style=\"color: navy\">)</span> <i>&quot;mentalValue&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;mentalRule&quot;</i><span style=\"color: navy\">;</span>\r\n    qr<span style=\"color: navy\"><b> -&gt; </b></span> obs<span style=\"color: navy\">, </span> bundle<b> then </b>AddMorseRiskAssessment<span style=\"color: navy\">(</span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">bundle</span><span style=\"color: navy\">)</span> <i>&quot;band&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;morseRule&quot;</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><span style=\"color: navy\">// </span><span style=\"color: green\">─────────────────────────────────────────────────────────────────────────────</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">The band</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">These are the tiers LOINC's own answer list for 59461-4 carries, which is the</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">three-tier reading of Morse in general use and the list printed on this form:</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">0-24 low, 25-45 moderate, 50 and over high. Higher is worse.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">Two things to know about it.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">The published list leaves 46 to 49 unnamed. A computed total never lands</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">there -- every one of Morse's item weights is a multiple of five, so the sum</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">is too -- but a total the form submits can, since that item is a free decimal.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">It is folded into moderate, because the alternative is a score that extracts a</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">number and no band at all.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">It is not the banding `ExtractInpatientFallsAndPressureUlcerRiskAssessment`</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">uses. That map scores the same six items from a hand-built form and bands them</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">on Morse's original paper -- 0-24 no risk, 25-50 low, 51 and over high -- so</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">the two maps can disagree between 25 and 50. The divergence is deliberate: a</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">band that contradicts the pick list on the form in front of the nurse is worse</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">than a band that differs from another form's. Reconciling them means agreeing</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">one Morse banding for the IG and changing whichever form loses.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">qualitativeRisk carries two codings and a text. HL7's risk-probability is what</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">a consumer escalates on; LOINC's answer code is the tier exactly as the form</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">states it, ranges and all; the text is the plain wording.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">The band is derived from the total rather than copied from the form's own</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">risk-level item. That item is a free pick list with nothing calculating it, so</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">deriving is the only way the number and the tier are guaranteed to agree.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">─────────────────────────────────────────────────────────────────────────────</span>\r\n<b>group </b>AddMorseRiskAssessment<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">obs</span><span style=\"color: navy\"> : </span>Observation, <b>source</b> <span style=\"color: maroon\">qr</span><span style=\"color: navy\"> : </span>QR, <b>target</b> <span style=\"color: maroon\">bundle</span><span style=\"color: navy\"> : </span>Bundle<span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  obs<b> where </b><span style=\"color: navy\">(</span>value.ofType(integer) &lt;= 24<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -&gt; </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">entry</span><span style=\"color: navy\">, </span> entry.resource = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'RiskAssessment'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">ra</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    qr<span style=\"color: navy\"><b> -&gt; </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\">obs</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>&quot;riskBase&quot;</i><span style=\"color: navy\">;</span>\r\n    qr<span style=\"color: navy\"><b> -&gt; </b></span>ra<b> then </b>SetMorseRiskCode<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>&quot;riskCode&quot;</i><span style=\"color: navy\">;</span>\r\n    qr<span style=\"color: navy\"><b> -&gt; </b></span>ra.prediction<b> as </b><span style=\"color: maroon\">pred</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      qr<span style=\"color: navy\"><b> -&gt; </b></span>pred.qualitativeRisk<b> as </b><span style=\"color: maroon\">risk</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        qr<span style=\"color: navy\"><b> -&gt; </b></span>risk.coding<b> as </b><span style=\"color: maroon\">coding</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.system = <span style=\"color: blue\">'http://terminology.hl7.org/CodeSystem/risk-probability'</span> <i>&quot;riskSystem&quot;</i><span style=\"color: navy\">;</span>\r\n          qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.code = <span style=\"color: blue\">'low'</span> <i>&quot;riskCode&quot;</i><span style=\"color: navy\">;</span>\r\n          qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.display = <span style=\"color: blue\">'Low likelihood'</span> <i>&quot;riskDisplay&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span> <i>&quot;hl7Coding&quot;</i><span style=\"color: navy\">;</span>\r\n        qr<span style=\"color: navy\"><b> -&gt; </b></span>risk.coding<b> as </b><span style=\"color: maroon\">loinc</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          qr<span style=\"color: navy\"><b> -&gt; </b></span>loinc.system = <span style=\"color: blue\">'http://loinc.org'</span> <i>&quot;loincSystem&quot;</i><span style=\"color: navy\">;</span>\r\n          qr<span style=\"color: navy\"><b> -&gt; </b></span>loinc.code = <span style=\"color: blue\">'LA13038-7'</span> <i>&quot;loincCode&quot;</i><span style=\"color: navy\">;</span>\r\n          qr<span style=\"color: navy\"><b> -&gt; </b></span>loinc.display = <span style=\"color: blue\">'Low Risk (MFS Score 0 - 24)'</span> <i>&quot;loincDisplay&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span> <i>&quot;loincCoding&quot;</i><span style=\"color: navy\">;</span>\r\n        qr<span style=\"color: navy\"><b> -&gt; </b></span>risk.text = <span style=\"color: blue\">'Low risk'</span> <i>&quot;riskText&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;qualitativeRisk&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;prediction&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;morseLow&quot;</i><span style=\"color: navy\">;</span>\r\n  obs<b> where </b><span style=\"color: navy\">(</span>(value.ofType(integer) &gt;= 25) and (value.ofType(integer) &lt;= 49)<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -&gt; </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">entry</span><span style=\"color: navy\">, </span> entry.resource = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'RiskAssessment'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">ra</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    qr<span style=\"color: navy\"><b> -&gt; </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\">obs</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>&quot;riskBase&quot;</i><span style=\"color: navy\">;</span>\r\n    qr<span style=\"color: navy\"><b> -&gt; </b></span>ra<b> then </b>SetMorseRiskCode<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>&quot;riskCode&quot;</i><span style=\"color: navy\">;</span>\r\n    qr<span style=\"color: navy\"><b> -&gt; </b></span>ra.prediction<b> as </b><span style=\"color: maroon\">pred</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      qr<span style=\"color: navy\"><b> -&gt; </b></span>pred.qualitativeRisk<b> as </b><span style=\"color: maroon\">risk</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        qr<span style=\"color: navy\"><b> -&gt; </b></span>risk.coding<b> as </b><span style=\"color: maroon\">coding</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.system = <span style=\"color: blue\">'http://terminology.hl7.org/CodeSystem/risk-probability'</span> <i>&quot;riskSystem&quot;</i><span style=\"color: navy\">;</span>\r\n          qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.code = <span style=\"color: blue\">'moderate'</span> <i>&quot;riskCode&quot;</i><span style=\"color: navy\">;</span>\r\n          qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.display = <span style=\"color: blue\">'Moderate likelihood'</span> <i>&quot;riskDisplay&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span> <i>&quot;hl7Coding&quot;</i><span style=\"color: navy\">;</span>\r\n        qr<span style=\"color: navy\"><b> -&gt; </b></span>risk.coding<b> as </b><span style=\"color: maroon\">loinc</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          qr<span style=\"color: navy\"><b> -&gt; </b></span>loinc.system = <span style=\"color: blue\">'http://loinc.org'</span> <i>&quot;loincSystem&quot;</i><span style=\"color: navy\">;</span>\r\n          qr<span style=\"color: navy\"><b> -&gt; </b></span>loinc.code = <span style=\"color: blue\">'LA13039-5'</span> <i>&quot;loincCode&quot;</i><span style=\"color: navy\">;</span>\r\n          qr<span style=\"color: navy\"><b> -&gt; </b></span>loinc.display = <span style=\"color: blue\">'Moderate Risk (MFS Score 25 - 45)'</span> <i>&quot;loincDisplay&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span> <i>&quot;loincCoding&quot;</i><span style=\"color: navy\">;</span>\r\n        qr<span style=\"color: navy\"><b> -&gt; </b></span>risk.text = <span style=\"color: blue\">'Moderate risk'</span> <i>&quot;riskText&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;qualitativeRisk&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;prediction&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;morseModerate&quot;</i><span style=\"color: navy\">;</span>\r\n  obs<b> where </b><span style=\"color: navy\">(</span>value.ofType(integer) &gt;= 50<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -&gt; </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">entry</span><span style=\"color: navy\">, </span> entry.resource = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'RiskAssessment'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">ra</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    qr<span style=\"color: navy\"><b> -&gt; </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\">obs</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>&quot;riskBase&quot;</i><span style=\"color: navy\">;</span>\r\n    qr<span style=\"color: navy\"><b> -&gt; </b></span>ra<b> then </b>SetMorseRiskCode<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>&quot;riskCode&quot;</i><span style=\"color: navy\">;</span>\r\n    qr<span style=\"color: navy\"><b> -&gt; </b></span>ra.prediction<b> as </b><span style=\"color: maroon\">pred</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      qr<span style=\"color: navy\"><b> -&gt; </b></span>pred.qualitativeRisk<b> as </b><span style=\"color: maroon\">risk</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        qr<span style=\"color: navy\"><b> -&gt; </b></span>risk.coding<b> as </b><span style=\"color: maroon\">coding</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.system = <span style=\"color: blue\">'http://terminology.hl7.org/CodeSystem/risk-probability'</span> <i>&quot;riskSystem&quot;</i><span style=\"color: navy\">;</span>\r\n          qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.code = <span style=\"color: blue\">'high'</span> <i>&quot;riskCode&quot;</i><span style=\"color: navy\">;</span>\r\n          qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.display = <span style=\"color: blue\">'High likelihood'</span> <i>&quot;riskDisplay&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span> <i>&quot;hl7Coding&quot;</i><span style=\"color: navy\">;</span>\r\n        qr<span style=\"color: navy\"><b> -&gt; </b></span>risk.coding<b> as </b><span style=\"color: maroon\">loinc</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          qr<span style=\"color: navy\"><b> -&gt; </b></span>loinc.system = <span style=\"color: blue\">'http://loinc.org'</span> <i>&quot;loincSystem&quot;</i><span style=\"color: navy\">;</span>\r\n          qr<span style=\"color: navy\"><b> -&gt; </b></span>loinc.code = <span style=\"color: blue\">'LA13040-3'</span> <i>&quot;loincCode&quot;</i><span style=\"color: navy\">;</span>\r\n          qr<span style=\"color: navy\"><b> -&gt; </b></span>loinc.display = <span style=\"color: blue\">'High Risk (MFS Score 50+)'</span> <i>&quot;loincDisplay&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span> <i>&quot;loincCoding&quot;</i><span style=\"color: navy\">;</span>\r\n        qr<span style=\"color: navy\"><b> -&gt; </b></span>risk.text = <span style=\"color: blue\">'High risk'</span> <i>&quot;riskText&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;qualitativeRisk&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;prediction&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;morseHigh&quot;</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>SetMorseRiskCode<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<span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  qr<span style=\"color: navy\"><b> -&gt; </b></span>ra.code<b> as </b><span style=\"color: maroon\">code</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    qr<span style=\"color: navy\"><b> -&gt; </b></span>code.coding<b> as </b><span style=\"color: maroon\">coding</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.system = <span style=\"color: blue\">'http://loinc.org'</span> <i>&quot;codeSystem&quot;</i><span style=\"color: navy\">;</span>\r\n      qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.code = <span style=\"color: blue\">'59461-4'</span> <i>&quot;codeCode&quot;</i><span style=\"color: navy\">;</span>\r\n      qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.display = <span style=\"color: blue\">'Fall risk level [Morse Fall Scale]'</span> <i>&quot;codeDisplay&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;codeCoding&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;code&quot;</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><span style=\"color: navy\">// </span><span style=\"color: green\">─────────────────────────────────────────────────────────────────────────────</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">Shared scaffolding. Repeated in each map rather than imported: the transform</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">engine resolves `imports` against whatever StructureMaps happen to be on the</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">server, and a form that stops extracting because a shared map was not</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">uploaded is a worse failure than a duplicated group.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">─────────────────────────────────────────────────────────────────────────────</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">Two notes on what the publisher's StructureMap validator says about this file.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">Source parameters below are left untyped on purpose. Writing `: Element` makes</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">the validator compare QuestionnaireResponse.item against the literal 'Element'</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">and report them as incompatible with each other, which is noise, not a finding.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">Untyped, it says only that it cannot check the paths.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">`evaluate(context, expression)` is flagged as &quot;takes 1 parameter but 2 were</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">found&quot;. Leave it. The FML parser in the same jar refuses the one-argument form</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">outright -- it wants a parameter, a comma, then the FHIRPath -- so the publisher</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">is objecting to what its own compiler emits. Two arguments is the only form that</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">compiles, and it is what the R5 transform engine executes.</span>\r\n<b>group </b>BuildObsBase<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">qr</span><span style=\"color: navy\"> : </span>QR, <b>target</b> <span style=\"color: maroon\">obs</span><span style=\"color: navy\"> : </span>Observation, <b>target</b> <span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  qr<span style=\"color: navy\"><b> -&gt; </b></span>obs.id = <b>uuid</b><span style=\"color: navy\">(</span><span style=\"color: navy\">)</span><b> then </b>SetObservationFullUrl<span style=\"color: navy\">(</span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span> <i>&quot;idAndFullUrl&quot;</i><span style=\"color: navy\">;</span>\r\n  qr<span style=\"color: navy\"><b> -&gt; </b></span>entry.request<b> as </b><span style=\"color: maroon\">request</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    qr<span style=\"color: navy\"><b> -&gt; </b></span>request.method = <span style=\"color: blue\">'POST'</span> <i>&quot;requestMethod&quot;</i><span style=\"color: navy\">;</span>\r\n    qr<span style=\"color: navy\"><b> -&gt; </b></span>request.url = <span style=\"color: blue\">'Observation'</span> <i>&quot;requestUrl&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;entryRequest&quot;</i><span style=\"color: navy\">;</span>\r\n  qr<span style=\"color: navy\"><b> -&gt; </b></span>obs.status = <span style=\"color: blue\">'final'</span> <i>&quot;status&quot;</i><span style=\"color: navy\">;</span>\r\n  qr.subject<b> as </b><span style=\"color: maroon\">s</span><span style=\"color: navy\"><b> -&gt; </b></span>obs.subject = <span style=\"color: maroon\">s</span><span style=\"color: navy\">;</span>\r\n  qr.encounter<b> as </b><span style=\"color: maroon\">e</span><span style=\"color: navy\"><b> -&gt; </b></span>obs.encounter = <span style=\"color: maroon\">e</span><span style=\"color: navy\">;</span>\r\n  qr.authored<b> as </b><span style=\"color: maroon\">t</span><span style=\"color: navy\"><b> -&gt; </b></span>obs.effective = <span style=\"color: maroon\">t</span> <i>&quot;effective&quot;</i><span style=\"color: navy\">;</span>\r\n  qr.source<b> as </b><span style=\"color: maroon\">src</span><span style=\"color: navy\"><b> -&gt; </b></span>obs.performer = <span style=\"color: maroon\">src</span> <i>&quot;performerFromSource&quot;</i><span style=\"color: navy\">;</span>\r\n  qr<b> where </b><span style=\"color: navy\">(</span>source.exists().not()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    qr.author<b> as </b><span style=\"color: maroon\">a</span><span style=\"color: navy\"><b> -&gt; </b></span>obs.performer = <span style=\"color: maroon\">a</span> <i>&quot;performerFromAuthor&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;performerFallback&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">A stored response's id already reads &quot;QuestionnaireResponse/&lt;id&gt;&quot;, so it is a</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">relative reference as it stands. The hasValue() guard is what stops an</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">unsaved response -- one posted straight to $extract rather than saved first --</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">from writing &quot;QuestionnaireResponse/null&quot; into the record.</span>\r\n  qr.id<b> as </b><span style=\"color: maroon\">qid</span><b> where </b><span style=\"color: navy\">(</span>$this.hasValue()<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -&gt; </b></span> obs.derivedFrom = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'Reference'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">ref</span><span style=\"color: navy\">, </span> ref.reference = <span style=\"color: maroon\">qid</span> <i>&quot;linkQuestionnaireResponse&quot;</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><span style=\"color: navy\">// </span><span style=\"color: green\">The RiskAssessment stands on two things: the response that was filled in and</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">the Observation that holds the number. Both go in basis, which is what the</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">SGHI RiskAssessment profile binds to a QuestionnaireResponse.</span>\r\n<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>source</b> <span style=\"color: maroon\">obs</span><span style=\"color: navy\"> : </span>Observation, <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\"> {\r\n</span>  qr<span style=\"color: navy\"><b> -&gt; </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>&quot;idAndFullUrl&quot;</i><span style=\"color: navy\">;</span>\r\n  qr<span style=\"color: navy\"><b> -&gt; </b></span>entry.request<b> as </b><span style=\"color: maroon\">request</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    qr<span style=\"color: navy\"><b> -&gt; </b></span>request.method = <span style=\"color: blue\">'POST'</span> <i>&quot;requestMethod&quot;</i><span style=\"color: navy\">;</span>\r\n    qr<span style=\"color: navy\"><b> -&gt; </b></span>request.url = <span style=\"color: blue\">'RiskAssessment'</span> <i>&quot;requestUrl&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;entryRequest&quot;</i><span style=\"color: navy\">;</span>\r\n  qr<span style=\"color: navy\"><b> -&gt; </b></span>ra.status = <span style=\"color: blue\">'final'</span> <i>&quot;status&quot;</i><span style=\"color: navy\">;</span>\r\n  qr.subject<b> as </b><span style=\"color: maroon\">s</span><span style=\"color: navy\"><b> -&gt; </b></span>ra.subject = <span style=\"color: maroon\">s</span><span style=\"color: navy\">;</span>\r\n  qr.encounter<b> as </b><span style=\"color: maroon\">e</span><span style=\"color: navy\"><b> -&gt; </b></span>ra.encounter = <span style=\"color: maroon\">e</span><span style=\"color: navy\">;</span>\r\n  qr.authored<b> as </b><span style=\"color: maroon\">t</span><span style=\"color: navy\"><b> -&gt; </b></span>ra.occurrence = <span style=\"color: maroon\">t</span> <i>&quot;occurrence&quot;</i><span style=\"color: navy\">;</span>\r\n  qr.author<b> as </b><span style=\"color: maroon\">a</span><span style=\"color: navy\"><b> -&gt; </b></span>ra.performer = <span style=\"color: maroon\">a</span> <i>&quot;performerFromAuthor&quot;</i><span style=\"color: navy\">;</span>\r\n  qr<b> where </b><span style=\"color: navy\">(</span>author.exists().not()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    qr.source<b> as </b><span style=\"color: maroon\">src</span><span style=\"color: navy\"><b> -&gt; </b></span>ra.performer = <span style=\"color: maroon\">src</span> <i>&quot;performerFromSource&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;performerFallback&quot;</i><span style=\"color: navy\">;</span>\r\n  qr.id<b> as </b><span style=\"color: maroon\">qid</span><b> where </b><span style=\"color: navy\">(</span>$this.hasValue()<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -&gt; </b></span> 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><span style=\"color: navy\">, </span> qref.reference = <span style=\"color: maroon\">qid</span> <i>&quot;basisResponse&quot;</i><span style=\"color: navy\">;</span>\r\n  obs.id<b> as </b><span style=\"color: maroon\">oid</span><span style=\"color: navy\"><b> -&gt; </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\">oref</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    oid<span style=\"color: navy\"><b> -&gt; </b></span>oref.reference = <b>append</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'Observation/'</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">oid</span><span style=\"color: navy\">)</span> <i>&quot;basisObservationRef&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;basisObservation&quot;</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>SetComponentCodedValue<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">it</span>, <b>target</b> <span style=\"color: maroon\">comp</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    a.value<b> as </b><span style=\"color: maroon\">cv</span><span style=\"color: navy\"><b> -&gt; </b></span>comp.value = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'CodeableConcept'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">cc</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      cv<span style=\"color: navy\"><b> -&gt; </b></span>cc.coding = <span style=\"color: maroon\">cv</span> <i>&quot;valueCoding&quot;</i><span style=\"color: navy\">;</span>\r\n      cv.display<b> as </b><span style=\"color: maroon\">d</span><span style=\"color: navy\"><b> -&gt; </b></span>cc.text = <span style=\"color: maroon\">d</span> <i>&quot;valueText&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;codedValue&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;componentAnswer&quot;</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>SetSurveyCategory<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">qr</span><span style=\"color: navy\"> : </span>QR, <b>target</b> <span style=\"color: maroon\">obs</span><span style=\"color: navy\"> : </span>Observation<span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  qr<span style=\"color: navy\"><b> -&gt; </b></span>obs.category<b> as </b><span style=\"color: maroon\">cat</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    qr<span style=\"color: navy\"><b> -&gt; </b></span>cat.coding<b> as </b><span style=\"color: maroon\">coding</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.system = <span style=\"color: blue\">'http://terminology.hl7.org/CodeSystem/observation-category'</span> <i>&quot;categorySystem&quot;</i><span style=\"color: navy\">;</span>\r\n      qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.code = <span style=\"color: blue\">'survey'</span> <i>&quot;categoryCode&quot;</i><span style=\"color: navy\">;</span>\r\n      qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.display = <span style=\"color: blue\">'Survey'</span> <i>&quot;categoryDisplay&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;categoryCoding&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;category&quot;</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>SetObservationFullUrl<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">obs</span><span style=\"color: navy\"> : </span>Observation, <b>target</b> <span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  obs.id<b> as </b><span style=\"color: maroon\">id</span><span style=\"color: navy\"><b> -&gt; </b></span>entry.fullUrl = <b>append</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'https://fhir.slade360.co.ke/fhir/Observation/'</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">id</span><span style=\"color: navy\">)</span> <i>&quot;assignFullUrl&quot;</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>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\"> {\r\n</span>  ra.id<b> as </b><span style=\"color: maroon\">id</span><span style=\"color: navy\"><b> -&gt; </b></span>entry.fullUrl = <b>append</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'https://fhir.slade360.co.ke/fhir/RiskAssessment/'</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">id</span><span style=\"color: navy\">)</span> <i>&quot;assignFullUrl&quot;</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span></pre></div>"
  },
  "url" : "https://fhir.slade360.co.ke/fhir/StructureMap/ExtractMorseFallScale",
  "version" : "0.1.0",
  "name" : "ExtractMorseFallScale",
  "title" : "Morse Fall Scale Extraction",
  "status" : "active",
  "date" : "2026-09-14T06:31:13+00:00",
  "publisher" : "Kathurima Kimathi",
  "contact" : [{
    "name" : "Kathurima Kimathi",
    "telecom" : [{
      "system" : "url",
      "value" : "https://www.linkedin.com/in/kathurima-kimathi/"
    },
    {
      "system" : "email",
      "value" : "kathurimakimathi415@gmail.com"
    }]
  },
  {
    "name" : "Oscar John",
    "telecom" : [{
      "system" : "email",
      "value" : "oscarjohnotieno@gmail.com",
      "use" : "work"
    }]
  },
  {
    "name" : "Kennedy Omondi",
    "telecom" : [{
      "system" : "email",
      "value" : "kennankole@gmail.com",
      "use" : "work"
    }]
  }],
  "description" : "The LOINC Morse Fall Scale panel out as one Observation carrying the total, with the six weighted questions as components, plus a RiskAssessment for the band the total falls in. The total prefers what the form submitted and otherwise sums the answers itself, and it only extracts when all six questions have been answered: a Morse score short of an item is not a Morse score, and banding one puts a number a nurse can act on next to a risk tier that is wrong.",
  "structure" : [{
    "url" : "http://hl7.org/fhir/StructureDefinition/QuestionnaireResponse",
    "mode" : "source",
    "alias" : "QR"
  },
  {
    "url" : "http://hl7.org/fhir/StructureDefinition/Bundle",
    "mode" : "target",
    "alias" : "Bundle"
  },
  {
    "url" : "http://hl7.org/fhir/StructureDefinition/Observation",
    "mode" : "target",
    "alias" : "Observation"
  },
  {
    "url" : "http://hl7.org/fhir/StructureDefinition/RiskAssessment",
    "mode" : "target",
    "alias" : "RiskAssessment"
  }],
  "group" : [{
    "name" : "ExtractMorseFallScale",
    "input" : [{
      "name" : "qr",
      "type" : "QR",
      "mode" : "source"
    },
    {
      "name" : "bundle",
      "type" : "Bundle",
      "mode" : "target"
    }],
    "rule" : [{
      "name" : "setBundleType",
      "source" : [{
        "context" : "qr"
      }],
      "target" : [{
        "context" : "bundle",
        "element" : "type",
        "transform" : "copy",
        "parameter" : [{
          "valueString" : "transaction"
        }]
      }]
    },
    {
      "name" : "morseRule",
      "source" : [{
        "context" : "qr",
        "condition" : "item.where(linkId in ('59454-9' | '59455-6' | '59456-4' | '59457-2' | '59458-0' | '59459-8')).answer.value.ofType(Coding).exists()"
      }],
      "target" : [{
        "context" : "bundle",
        "element" : "entry",
        "variable" : "entry"
      },
      {
        "context" : "entry",
        "element" : "resource",
        "variable" : "obs",
        "transform" : "create",
        "parameter" : [{
          "valueString" : "Observation"
        }]
      }],
      "rule" : [{
        "name" : "base",
        "source" : [{
          "context" : "qr"
        }],
        "target" : [{
          "context" : "obs"
        },
        {
          "context" : "entry"
        }],
        "dependent" : [{
          "name" : "BuildObsBase",
          "parameter" : [{
            "valueId" : "qr"
          },
          {
            "valueId" : "obs"
          },
          {
            "valueId" : "entry"
          }]
        }]
      },
      {
        "name" : "category",
        "source" : [{
          "context" : "qr"
        }],
        "target" : [{
          "context" : "obs"
        }],
        "dependent" : [{
          "name" : "SetSurveyCategory",
          "parameter" : [{
            "valueId" : "qr"
          },
          {
            "valueId" : "obs"
          }]
        }]
      },
      {
        "name" : "code",
        "source" : [{
          "context" : "qr"
        }],
        "target" : [{
          "context" : "obs",
          "element" : "code",
          "variable" : "code"
        }],
        "rule" : [{
          "name" : "codeCoding",
          "source" : [{
            "context" : "qr"
          }],
          "target" : [{
            "context" : "code",
            "element" : "coding",
            "variable" : "coding"
          }],
          "rule" : [{
            "name" : "codeSystem",
            "source" : [{
              "context" : "qr"
            }],
            "target" : [{
              "context" : "coding",
              "element" : "system",
              "transform" : "copy",
              "parameter" : [{
                "valueString" : "http://loinc.org"
              }]
            }]
          },
          {
            "name" : "codeCode",
            "source" : [{
              "context" : "qr"
            }],
            "target" : [{
              "context" : "coding",
              "element" : "code",
              "transform" : "copy",
              "parameter" : [{
                "valueString" : "59460-6"
              }]
            }]
          },
          {
            "name" : "codeDisplay",
            "source" : [{
              "context" : "qr"
            }],
            "target" : [{
              "context" : "coding",
              "element" : "display",
              "transform" : "copy",
              "parameter" : [{
                "valueString" : "Fall risk total [Morse Fall Scale]"
              }]
            }]
          }]
        }]
      },
      {
        "name" : "totalRule",
        "source" : [{
          "context" : "qr",
          "condition" : "item.where(linkId in ('59454-9' | '59455-6' | '59456-4' | '59457-2' | '59458-0' | '59459-8')).answer.value.ofType(Coding).count() = 6"
        }],
        "rule" : [{
          "name" : "totalValue",
          "source" : [{
            "context" : "qr"
          }],
          "target" : [{
            "context" : "obs",
            "element" : "value",
            "transform" : "evaluate",
            "parameter" : [{
              "valueId" : "qr"
            },
            {
              "valueString" : "iif(item.where(linkId = '59460-6').answer.value.exists(), item.where(linkId = '59460-6').answer.value.truncate(), iif(item.where(linkId = '59454-9').answer.value.ofType(Coding).code = 'LA33-6', 25, 0) + iif(item.where(linkId = '59455-6').answer.value.ofType(Coding).code = 'LA33-6', 15, 0) + iif(item.where(linkId = '59456-4').answer.value.ofType(Coding).code = 'LA13031-2', 15, iif(item.where(linkId = '59456-4').answer.value.ofType(Coding).code = 'LA13032-0', 30, 0)) + iif(item.where(linkId = '59457-2').answer.value.ofType(Coding).code = 'LA33-6', 20, 0) + iif(item.where(linkId = '59458-0').answer.value.ofType(Coding).code = 'LA13034-6', 10, iif(item.where(linkId = '59458-0').answer.value.ofType(Coding).code = 'LA13035-3', 20, 0)) + iif(item.where(linkId = '59459-8').answer.value.ofType(Coding).code = 'LA13037-9', 15, 0))"
            }]
          }]
        }],
        "documentation" : "The submitted total wins; otherwise sum the answers.\r\nThe weights have to be resolved question by question rather than from one\r\nlookup, because Morse reuses LOINC's plain yes/no pair across three\r\nquestions at three different weights: LA33-6 \"Yes\" is worth 25 on the\r\nhistory of falling, 15 on a secondary diagnosis and 20 on an intravenous\r\nline. A global code-to-weight table would silently score all three the\r\nsame. The weights are Morse's own, as printed on the form.\r\ntruncate(), not toInteger(): the form types the total `decimal`, and this\r\nengine's toInteger() returns empty for anything with a fractional part.\r\nObservation.value has no decimal choice, so it has to land as an integer.\r\nGuarded on all six questions being answered."
      },
      {
        "name" : "historyRule",
        "source" : [{
          "context" : "qr",
          "element" : "item",
          "variable" : "it",
          "condition" : "(linkId = '59454-9') and answer.value.exists()"
        }],
        "target" : [{
          "context" : "obs",
          "element" : "component",
          "variable" : "comp"
        }],
        "rule" : [{
          "name" : "historyCode",
          "source" : [{
            "context" : "it"
          }],
          "target" : [{
            "context" : "comp",
            "element" : "code",
            "variable" : "code"
          }],
          "rule" : [{
            "name" : "codeCoding",
            "source" : [{
              "context" : "it"
            }],
            "target" : [{
              "context" : "code",
              "element" : "coding",
              "variable" : "coding"
            }],
            "rule" : [{
              "name" : "codeSystem",
              "source" : [{
                "context" : "it"
              }],
              "target" : [{
                "context" : "coding",
                "element" : "system",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "http://loinc.org"
                }]
              }]
            },
            {
              "name" : "codeCode",
              "source" : [{
                "context" : "it"
              }],
              "target" : [{
                "context" : "coding",
                "element" : "code",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "59454-9"
                }]
              }]
            },
            {
              "name" : "codeDisplay",
              "source" : [{
                "context" : "it"
              }],
              "target" : [{
                "context" : "coding",
                "element" : "display",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "History of falling; immediate or within 3 months [Morse Fall Scale]"
                }]
              }]
            }]
          }]
        },
        {
          "name" : "historyValue",
          "source" : [{
            "context" : "it"
          }],
          "target" : [{
            "context" : "comp"
          }],
          "dependent" : [{
            "name" : "SetComponentCodedValue",
            "parameter" : [{
              "valueId" : "it"
            },
            {
              "valueId" : "comp"
            }]
          }]
        }]
      },
      {
        "name" : "diagnosisRule",
        "source" : [{
          "context" : "qr",
          "element" : "item",
          "variable" : "it",
          "condition" : "(linkId = '59455-6') and answer.value.exists()"
        }],
        "target" : [{
          "context" : "obs",
          "element" : "component",
          "variable" : "comp"
        }],
        "rule" : [{
          "name" : "diagnosisCode",
          "source" : [{
            "context" : "it"
          }],
          "target" : [{
            "context" : "comp",
            "element" : "code",
            "variable" : "code"
          }],
          "rule" : [{
            "name" : "codeCoding",
            "source" : [{
              "context" : "it"
            }],
            "target" : [{
              "context" : "code",
              "element" : "coding",
              "variable" : "coding"
            }],
            "rule" : [{
              "name" : "codeSystem",
              "source" : [{
                "context" : "it"
              }],
              "target" : [{
                "context" : "coding",
                "element" : "system",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "http://loinc.org"
                }]
              }]
            },
            {
              "name" : "codeCode",
              "source" : [{
                "context" : "it"
              }],
              "target" : [{
                "context" : "coding",
                "element" : "code",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "59455-6"
                }]
              }]
            },
            {
              "name" : "codeDisplay",
              "source" : [{
                "context" : "it"
              }],
              "target" : [{
                "context" : "coding",
                "element" : "display",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "Secondary diagnosis is present"
                }]
              }]
            }]
          }]
        },
        {
          "name" : "diagnosisValue",
          "source" : [{
            "context" : "it"
          }],
          "target" : [{
            "context" : "comp"
          }],
          "dependent" : [{
            "name" : "SetComponentCodedValue",
            "parameter" : [{
              "valueId" : "it"
            },
            {
              "valueId" : "comp"
            }]
          }]
        }]
      },
      {
        "name" : "aidRule",
        "source" : [{
          "context" : "qr",
          "element" : "item",
          "variable" : "it",
          "condition" : "(linkId = '59456-4') and answer.value.exists()"
        }],
        "target" : [{
          "context" : "obs",
          "element" : "component",
          "variable" : "comp"
        }],
        "rule" : [{
          "name" : "aidCode",
          "source" : [{
            "context" : "it"
          }],
          "target" : [{
            "context" : "comp",
            "element" : "code",
            "variable" : "code"
          }],
          "rule" : [{
            "name" : "codeCoding",
            "source" : [{
              "context" : "it"
            }],
            "target" : [{
              "context" : "code",
              "element" : "coding",
              "variable" : "coding"
            }],
            "rule" : [{
              "name" : "codeSystem",
              "source" : [{
                "context" : "it"
              }],
              "target" : [{
                "context" : "coding",
                "element" : "system",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "http://loinc.org"
                }]
              }]
            },
            {
              "name" : "codeCode",
              "source" : [{
                "context" : "it"
              }],
              "target" : [{
                "context" : "coding",
                "element" : "code",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "59456-4"
                }]
              }]
            },
            {
              "name" : "codeDisplay",
              "source" : [{
                "context" : "it"
              }],
              "target" : [{
                "context" : "coding",
                "element" : "display",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "Ambulatory aid [Morse Fall Scale]"
                }]
              }]
            }]
          }]
        },
        {
          "name" : "aidValue",
          "source" : [{
            "context" : "it"
          }],
          "target" : [{
            "context" : "comp"
          }],
          "dependent" : [{
            "name" : "SetComponentCodedValue",
            "parameter" : [{
              "valueId" : "it"
            },
            {
              "valueId" : "comp"
            }]
          }]
        }]
      },
      {
        "name" : "ivRule",
        "source" : [{
          "context" : "qr",
          "element" : "item",
          "variable" : "it",
          "condition" : "(linkId = '59457-2') and answer.value.exists()"
        }],
        "target" : [{
          "context" : "obs",
          "element" : "component",
          "variable" : "comp"
        }],
        "rule" : [{
          "name" : "ivCode",
          "source" : [{
            "context" : "it"
          }],
          "target" : [{
            "context" : "comp",
            "element" : "code",
            "variable" : "code"
          }],
          "rule" : [{
            "name" : "codeCoding",
            "source" : [{
              "context" : "it"
            }],
            "target" : [{
              "context" : "code",
              "element" : "coding",
              "variable" : "coding"
            }],
            "rule" : [{
              "name" : "codeSystem",
              "source" : [{
                "context" : "it"
              }],
              "target" : [{
                "context" : "coding",
                "element" : "system",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "http://loinc.org"
                }]
              }]
            },
            {
              "name" : "codeCode",
              "source" : [{
                "context" : "it"
              }],
              "target" : [{
                "context" : "coding",
                "element" : "code",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "59457-2"
                }]
              }]
            },
            {
              "name" : "codeDisplay",
              "source" : [{
                "context" : "it"
              }],
              "target" : [{
                "context" : "coding",
                "element" : "display",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "Intravenous apparatus [Morse Fall Scale]"
                }]
              }]
            }]
          }]
        },
        {
          "name" : "ivValue",
          "source" : [{
            "context" : "it"
          }],
          "target" : [{
            "context" : "comp"
          }],
          "dependent" : [{
            "name" : "SetComponentCodedValue",
            "parameter" : [{
              "valueId" : "it"
            },
            {
              "valueId" : "comp"
            }]
          }]
        }]
      },
      {
        "name" : "gaitRule",
        "source" : [{
          "context" : "qr",
          "element" : "item",
          "variable" : "it",
          "condition" : "(linkId = '59458-0') and answer.value.exists()"
        }],
        "target" : [{
          "context" : "obs",
          "element" : "component",
          "variable" : "comp"
        }],
        "rule" : [{
          "name" : "gaitCode",
          "source" : [{
            "context" : "it"
          }],
          "target" : [{
            "context" : "comp",
            "element" : "code",
            "variable" : "code"
          }],
          "rule" : [{
            "name" : "codeCoding",
            "source" : [{
              "context" : "it"
            }],
            "target" : [{
              "context" : "code",
              "element" : "coding",
              "variable" : "coding"
            }],
            "rule" : [{
              "name" : "codeSystem",
              "source" : [{
                "context" : "it"
              }],
              "target" : [{
                "context" : "coding",
                "element" : "system",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "http://loinc.org"
                }]
              }]
            },
            {
              "name" : "codeCode",
              "source" : [{
                "context" : "it"
              }],
              "target" : [{
                "context" : "coding",
                "element" : "code",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "59458-0"
                }]
              }]
            },
            {
              "name" : "codeDisplay",
              "source" : [{
                "context" : "it"
              }],
              "target" : [{
                "context" : "coding",
                "element" : "display",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "Gait [Morse Fall Scale]"
                }]
              }]
            }]
          }]
        },
        {
          "name" : "gaitValue",
          "source" : [{
            "context" : "it"
          }],
          "target" : [{
            "context" : "comp"
          }],
          "dependent" : [{
            "name" : "SetComponentCodedValue",
            "parameter" : [{
              "valueId" : "it"
            },
            {
              "valueId" : "comp"
            }]
          }]
        }]
      },
      {
        "name" : "mentalRule",
        "source" : [{
          "context" : "qr",
          "element" : "item",
          "variable" : "it",
          "condition" : "(linkId = '59459-8') and answer.value.exists()"
        }],
        "target" : [{
          "context" : "obs",
          "element" : "component",
          "variable" : "comp"
        }],
        "rule" : [{
          "name" : "mentalCode",
          "source" : [{
            "context" : "it"
          }],
          "target" : [{
            "context" : "comp",
            "element" : "code",
            "variable" : "code"
          }],
          "rule" : [{
            "name" : "codeCoding",
            "source" : [{
              "context" : "it"
            }],
            "target" : [{
              "context" : "code",
              "element" : "coding",
              "variable" : "coding"
            }],
            "rule" : [{
              "name" : "codeSystem",
              "source" : [{
                "context" : "it"
              }],
              "target" : [{
                "context" : "coding",
                "element" : "system",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "http://loinc.org"
                }]
              }]
            },
            {
              "name" : "codeCode",
              "source" : [{
                "context" : "it"
              }],
              "target" : [{
                "context" : "coding",
                "element" : "code",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "59459-8"
                }]
              }]
            },
            {
              "name" : "codeDisplay",
              "source" : [{
                "context" : "it"
              }],
              "target" : [{
                "context" : "coding",
                "element" : "display",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "Mental status [Morse Fall Scale]"
                }]
              }]
            }]
          }]
        },
        {
          "name" : "mentalValue",
          "source" : [{
            "context" : "it"
          }],
          "target" : [{
            "context" : "comp"
          }],
          "dependent" : [{
            "name" : "SetComponentCodedValue",
            "parameter" : [{
              "valueId" : "it"
            },
            {
              "valueId" : "comp"
            }]
          }]
        }]
      },
      {
        "name" : "band",
        "source" : [{
          "context" : "qr"
        }],
        "target" : [{
          "context" : "obs"
        },
        {
          "context" : "bundle"
        }],
        "dependent" : [{
          "name" : "AddMorseRiskAssessment",
          "parameter" : [{
            "valueId" : "obs"
          },
          {
            "valueId" : "qr"
          },
          {
            "valueId" : "bundle"
          }]
        }]
      }],
      "documentation" : "LOINC publishes this panel flat -- the six questions, the total and the risk\r\nlevel are all top-level items keyed by their own LOINC code -- so there is no\r\ngroup to hang the Observation off and the response itself is the anchor."
    }]
  },
  {
    "name" : "AddMorseRiskAssessment",
    "documentation" : "─────────────────────────────────────────────────────────────────────────────\r\nThe band\r\nThese are the tiers LOINC's own answer list for 59461-4 carries, which is the\r\nthree-tier reading of Morse in general use and the list printed on this form:\r\n0-24 low, 25-45 moderate, 50 and over high. Higher is worse.\r\nTwo things to know about it.\r\nThe published list leaves 46 to 49 unnamed. A computed total never lands\r\nthere -- every one of Morse's item weights is a multiple of five, so the sum\r\nis too -- but a total the form submits can, since that item is a free decimal.\r\nIt is folded into moderate, because the alternative is a score that extracts a\r\nnumber and no band at all.\r\nIt is not the banding `ExtractInpatientFallsAndPressureUlcerRiskAssessment`\r\nuses. That map scores the same six items from a hand-built form and bands them\r\non Morse's original paper -- 0-24 no risk, 25-50 low, 51 and over high -- so\r\nthe two maps can disagree between 25 and 50. The divergence is deliberate: a\r\nband that contradicts the pick list on the form in front of the nurse is worse\r\nthan a band that differs from another form's. Reconciling them means agreeing\r\none Morse banding for the IG and changing whichever form loses.\r\nqualitativeRisk carries two codings and a text. HL7's risk-probability is what\r\na consumer escalates on; LOINC's answer code is the tier exactly as the form\r\nstates it, ranges and all; the text is the plain wording.\r\nThe band is derived from the total rather than copied from the form's own\r\nrisk-level item. That item is a free pick list with nothing calculating it, so\r\nderiving is the only way the number and the tier are guaranteed to agree.\r\n─────────────────────────────────────────────────────────────────────────────",
    "input" : [{
      "name" : "obs",
      "type" : "Observation",
      "mode" : "source"
    },
    {
      "name" : "qr",
      "type" : "QR",
      "mode" : "source"
    },
    {
      "name" : "bundle",
      "type" : "Bundle",
      "mode" : "target"
    }],
    "rule" : [{
      "name" : "morseLow",
      "source" : [{
        "context" : "obs",
        "condition" : "value.ofType(integer) <= 24"
      }],
      "target" : [{
        "context" : "bundle",
        "element" : "entry",
        "variable" : "entry"
      },
      {
        "context" : "entry",
        "element" : "resource",
        "variable" : "ra",
        "transform" : "create",
        "parameter" : [{
          "valueString" : "RiskAssessment"
        }]
      }],
      "rule" : [{
        "name" : "riskBase",
        "source" : [{
          "context" : "qr"
        }],
        "target" : [{
          "context" : "ra"
        },
        {
          "context" : "entry"
        }],
        "dependent" : [{
          "name" : "BuildRiskBase",
          "parameter" : [{
            "valueId" : "qr"
          },
          {
            "valueId" : "obs"
          },
          {
            "valueId" : "ra"
          },
          {
            "valueId" : "entry"
          }]
        }]
      },
      {
        "name" : "riskCode",
        "source" : [{
          "context" : "qr"
        }],
        "target" : [{
          "context" : "ra"
        }],
        "dependent" : [{
          "name" : "SetMorseRiskCode",
          "parameter" : [{
            "valueId" : "qr"
          },
          {
            "valueId" : "ra"
          }]
        }]
      },
      {
        "name" : "prediction",
        "source" : [{
          "context" : "qr"
        }],
        "target" : [{
          "context" : "ra",
          "element" : "prediction",
          "variable" : "pred"
        }],
        "rule" : [{
          "name" : "qualitativeRisk",
          "source" : [{
            "context" : "qr"
          }],
          "target" : [{
            "context" : "pred",
            "element" : "qualitativeRisk",
            "variable" : "risk"
          }],
          "rule" : [{
            "name" : "hl7Coding",
            "source" : [{
              "context" : "qr"
            }],
            "target" : [{
              "context" : "risk",
              "element" : "coding",
              "variable" : "coding"
            }],
            "rule" : [{
              "name" : "riskSystem",
              "source" : [{
                "context" : "qr"
              }],
              "target" : [{
                "context" : "coding",
                "element" : "system",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "http://terminology.hl7.org/CodeSystem/risk-probability"
                }]
              }]
            },
            {
              "name" : "riskCode",
              "source" : [{
                "context" : "qr"
              }],
              "target" : [{
                "context" : "coding",
                "element" : "code",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "low"
                }]
              }]
            },
            {
              "name" : "riskDisplay",
              "source" : [{
                "context" : "qr"
              }],
              "target" : [{
                "context" : "coding",
                "element" : "display",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "Low likelihood"
                }]
              }]
            }]
          },
          {
            "name" : "loincCoding",
            "source" : [{
              "context" : "qr"
            }],
            "target" : [{
              "context" : "risk",
              "element" : "coding",
              "variable" : "loinc"
            }],
            "rule" : [{
              "name" : "loincSystem",
              "source" : [{
                "context" : "qr"
              }],
              "target" : [{
                "context" : "loinc",
                "element" : "system",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "http://loinc.org"
                }]
              }]
            },
            {
              "name" : "loincCode",
              "source" : [{
                "context" : "qr"
              }],
              "target" : [{
                "context" : "loinc",
                "element" : "code",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "LA13038-7"
                }]
              }]
            },
            {
              "name" : "loincDisplay",
              "source" : [{
                "context" : "qr"
              }],
              "target" : [{
                "context" : "loinc",
                "element" : "display",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "Low Risk (MFS Score 0 - 24)"
                }]
              }]
            }]
          },
          {
            "name" : "riskText",
            "source" : [{
              "context" : "qr"
            }],
            "target" : [{
              "context" : "risk",
              "element" : "text",
              "transform" : "copy",
              "parameter" : [{
                "valueString" : "Low risk"
              }]
            }]
          }]
        }]
      }]
    },
    {
      "name" : "morseModerate",
      "source" : [{
        "context" : "obs",
        "condition" : "(value.ofType(integer) >= 25) and (value.ofType(integer) <= 49)"
      }],
      "target" : [{
        "context" : "bundle",
        "element" : "entry",
        "variable" : "entry"
      },
      {
        "context" : "entry",
        "element" : "resource",
        "variable" : "ra",
        "transform" : "create",
        "parameter" : [{
          "valueString" : "RiskAssessment"
        }]
      }],
      "rule" : [{
        "name" : "riskBase",
        "source" : [{
          "context" : "qr"
        }],
        "target" : [{
          "context" : "ra"
        },
        {
          "context" : "entry"
        }],
        "dependent" : [{
          "name" : "BuildRiskBase",
          "parameter" : [{
            "valueId" : "qr"
          },
          {
            "valueId" : "obs"
          },
          {
            "valueId" : "ra"
          },
          {
            "valueId" : "entry"
          }]
        }]
      },
      {
        "name" : "riskCode",
        "source" : [{
          "context" : "qr"
        }],
        "target" : [{
          "context" : "ra"
        }],
        "dependent" : [{
          "name" : "SetMorseRiskCode",
          "parameter" : [{
            "valueId" : "qr"
          },
          {
            "valueId" : "ra"
          }]
        }]
      },
      {
        "name" : "prediction",
        "source" : [{
          "context" : "qr"
        }],
        "target" : [{
          "context" : "ra",
          "element" : "prediction",
          "variable" : "pred"
        }],
        "rule" : [{
          "name" : "qualitativeRisk",
          "source" : [{
            "context" : "qr"
          }],
          "target" : [{
            "context" : "pred",
            "element" : "qualitativeRisk",
            "variable" : "risk"
          }],
          "rule" : [{
            "name" : "hl7Coding",
            "source" : [{
              "context" : "qr"
            }],
            "target" : [{
              "context" : "risk",
              "element" : "coding",
              "variable" : "coding"
            }],
            "rule" : [{
              "name" : "riskSystem",
              "source" : [{
                "context" : "qr"
              }],
              "target" : [{
                "context" : "coding",
                "element" : "system",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "http://terminology.hl7.org/CodeSystem/risk-probability"
                }]
              }]
            },
            {
              "name" : "riskCode",
              "source" : [{
                "context" : "qr"
              }],
              "target" : [{
                "context" : "coding",
                "element" : "code",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "moderate"
                }]
              }]
            },
            {
              "name" : "riskDisplay",
              "source" : [{
                "context" : "qr"
              }],
              "target" : [{
                "context" : "coding",
                "element" : "display",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "Moderate likelihood"
                }]
              }]
            }]
          },
          {
            "name" : "loincCoding",
            "source" : [{
              "context" : "qr"
            }],
            "target" : [{
              "context" : "risk",
              "element" : "coding",
              "variable" : "loinc"
            }],
            "rule" : [{
              "name" : "loincSystem",
              "source" : [{
                "context" : "qr"
              }],
              "target" : [{
                "context" : "loinc",
                "element" : "system",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "http://loinc.org"
                }]
              }]
            },
            {
              "name" : "loincCode",
              "source" : [{
                "context" : "qr"
              }],
              "target" : [{
                "context" : "loinc",
                "element" : "code",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "LA13039-5"
                }]
              }]
            },
            {
              "name" : "loincDisplay",
              "source" : [{
                "context" : "qr"
              }],
              "target" : [{
                "context" : "loinc",
                "element" : "display",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "Moderate Risk (MFS Score 25 - 45)"
                }]
              }]
            }]
          },
          {
            "name" : "riskText",
            "source" : [{
              "context" : "qr"
            }],
            "target" : [{
              "context" : "risk",
              "element" : "text",
              "transform" : "copy",
              "parameter" : [{
                "valueString" : "Moderate risk"
              }]
            }]
          }]
        }]
      }]
    },
    {
      "name" : "morseHigh",
      "source" : [{
        "context" : "obs",
        "condition" : "value.ofType(integer) >= 50"
      }],
      "target" : [{
        "context" : "bundle",
        "element" : "entry",
        "variable" : "entry"
      },
      {
        "context" : "entry",
        "element" : "resource",
        "variable" : "ra",
        "transform" : "create",
        "parameter" : [{
          "valueString" : "RiskAssessment"
        }]
      }],
      "rule" : [{
        "name" : "riskBase",
        "source" : [{
          "context" : "qr"
        }],
        "target" : [{
          "context" : "ra"
        },
        {
          "context" : "entry"
        }],
        "dependent" : [{
          "name" : "BuildRiskBase",
          "parameter" : [{
            "valueId" : "qr"
          },
          {
            "valueId" : "obs"
          },
          {
            "valueId" : "ra"
          },
          {
            "valueId" : "entry"
          }]
        }]
      },
      {
        "name" : "riskCode",
        "source" : [{
          "context" : "qr"
        }],
        "target" : [{
          "context" : "ra"
        }],
        "dependent" : [{
          "name" : "SetMorseRiskCode",
          "parameter" : [{
            "valueId" : "qr"
          },
          {
            "valueId" : "ra"
          }]
        }]
      },
      {
        "name" : "prediction",
        "source" : [{
          "context" : "qr"
        }],
        "target" : [{
          "context" : "ra",
          "element" : "prediction",
          "variable" : "pred"
        }],
        "rule" : [{
          "name" : "qualitativeRisk",
          "source" : [{
            "context" : "qr"
          }],
          "target" : [{
            "context" : "pred",
            "element" : "qualitativeRisk",
            "variable" : "risk"
          }],
          "rule" : [{
            "name" : "hl7Coding",
            "source" : [{
              "context" : "qr"
            }],
            "target" : [{
              "context" : "risk",
              "element" : "coding",
              "variable" : "coding"
            }],
            "rule" : [{
              "name" : "riskSystem",
              "source" : [{
                "context" : "qr"
              }],
              "target" : [{
                "context" : "coding",
                "element" : "system",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "http://terminology.hl7.org/CodeSystem/risk-probability"
                }]
              }]
            },
            {
              "name" : "riskCode",
              "source" : [{
                "context" : "qr"
              }],
              "target" : [{
                "context" : "coding",
                "element" : "code",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "high"
                }]
              }]
            },
            {
              "name" : "riskDisplay",
              "source" : [{
                "context" : "qr"
              }],
              "target" : [{
                "context" : "coding",
                "element" : "display",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "High likelihood"
                }]
              }]
            }]
          },
          {
            "name" : "loincCoding",
            "source" : [{
              "context" : "qr"
            }],
            "target" : [{
              "context" : "risk",
              "element" : "coding",
              "variable" : "loinc"
            }],
            "rule" : [{
              "name" : "loincSystem",
              "source" : [{
                "context" : "qr"
              }],
              "target" : [{
                "context" : "loinc",
                "element" : "system",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "http://loinc.org"
                }]
              }]
            },
            {
              "name" : "loincCode",
              "source" : [{
                "context" : "qr"
              }],
              "target" : [{
                "context" : "loinc",
                "element" : "code",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "LA13040-3"
                }]
              }]
            },
            {
              "name" : "loincDisplay",
              "source" : [{
                "context" : "qr"
              }],
              "target" : [{
                "context" : "loinc",
                "element" : "display",
                "transform" : "copy",
                "parameter" : [{
                  "valueString" : "High Risk (MFS Score 50+)"
                }]
              }]
            }]
          },
          {
            "name" : "riskText",
            "source" : [{
              "context" : "qr"
            }],
            "target" : [{
              "context" : "risk",
              "element" : "text",
              "transform" : "copy",
              "parameter" : [{
                "valueString" : "High risk"
              }]
            }]
          }]
        }]
      }]
    }]
  },
  {
    "name" : "SetMorseRiskCode",
    "input" : [{
      "name" : "qr",
      "type" : "QR",
      "mode" : "source"
    },
    {
      "name" : "ra",
      "type" : "RiskAssessment",
      "mode" : "target"
    }],
    "rule" : [{
      "name" : "code",
      "source" : [{
        "context" : "qr"
      }],
      "target" : [{
        "context" : "ra",
        "element" : "code",
        "variable" : "code"
      }],
      "rule" : [{
        "name" : "codeCoding",
        "source" : [{
          "context" : "qr"
        }],
        "target" : [{
          "context" : "code",
          "element" : "coding",
          "variable" : "coding"
        }],
        "rule" : [{
          "name" : "codeSystem",
          "source" : [{
            "context" : "qr"
          }],
          "target" : [{
            "context" : "coding",
            "element" : "system",
            "transform" : "copy",
            "parameter" : [{
              "valueString" : "http://loinc.org"
            }]
          }]
        },
        {
          "name" : "codeCode",
          "source" : [{
            "context" : "qr"
          }],
          "target" : [{
            "context" : "coding",
            "element" : "code",
            "transform" : "copy",
            "parameter" : [{
              "valueString" : "59461-4"
            }]
          }]
        },
        {
          "name" : "codeDisplay",
          "source" : [{
            "context" : "qr"
          }],
          "target" : [{
            "context" : "coding",
            "element" : "display",
            "transform" : "copy",
            "parameter" : [{
              "valueString" : "Fall risk level [Morse Fall Scale]"
            }]
          }]
        }]
      }]
    }]
  },
  {
    "name" : "BuildObsBase",
    "documentation" : "─────────────────────────────────────────────────────────────────────────────\r\nShared scaffolding. Repeated in each map rather than imported: the transform\r\nengine resolves `imports` against whatever StructureMaps happen to be on the\r\nserver, and a form that stops extracting because a shared map was not\r\nuploaded is a worse failure than a duplicated group.\r\n─────────────────────────────────────────────────────────────────────────────\r\nTwo notes on what the publisher's StructureMap validator says about this file.\r\nSource parameters below are left untyped on purpose. Writing `: Element` makes\r\nthe validator compare QuestionnaireResponse.item against the literal 'Element'\r\nand report them as incompatible with each other, which is noise, not a finding.\r\nUntyped, it says only that it cannot check the paths.\r\n`evaluate(context, expression)` is flagged as \"takes 1 parameter but 2 were\r\nfound\". Leave it. The FML parser in the same jar refuses the one-argument form\r\noutright -- it wants a parameter, a comma, then the FHIRPath -- so the publisher\r\nis objecting to what its own compiler emits. Two arguments is the only form that\r\ncompiles, and it is what the R5 transform engine executes.",
    "input" : [{
      "name" : "qr",
      "type" : "QR",
      "mode" : "source"
    },
    {
      "name" : "obs",
      "type" : "Observation",
      "mode" : "target"
    },
    {
      "name" : "entry",
      "mode" : "target"
    }],
    "rule" : [{
      "name" : "idAndFullUrl",
      "source" : [{
        "context" : "qr"
      }],
      "target" : [{
        "context" : "obs",
        "element" : "id",
        "transform" : "uuid"
      }],
      "dependent" : [{
        "name" : "SetObservationFullUrl",
        "parameter" : [{
          "valueId" : "obs"
        },
        {
          "valueId" : "entry"
        }]
      }]
    },
    {
      "name" : "entryRequest",
      "source" : [{
        "context" : "qr"
      }],
      "target" : [{
        "context" : "entry",
        "element" : "request",
        "variable" : "request"
      }],
      "rule" : [{
        "name" : "requestMethod",
        "source" : [{
          "context" : "qr"
        }],
        "target" : [{
          "context" : "request",
          "element" : "method",
          "transform" : "copy",
          "parameter" : [{
            "valueString" : "POST"
          }]
        }]
      },
      {
        "name" : "requestUrl",
        "source" : [{
          "context" : "qr"
        }],
        "target" : [{
          "context" : "request",
          "element" : "url",
          "transform" : "copy",
          "parameter" : [{
            "valueString" : "Observation"
          }]
        }]
      }]
    },
    {
      "name" : "status",
      "source" : [{
        "context" : "qr"
      }],
      "target" : [{
        "context" : "obs",
        "element" : "status",
        "transform" : "copy",
        "parameter" : [{
          "valueString" : "final"
        }]
      }]
    },
    {
      "name" : "subject",
      "source" : [{
        "context" : "qr",
        "element" : "subject",
        "variable" : "s"
      }],
      "target" : [{
        "context" : "obs",
        "element" : "subject",
        "transform" : "copy",
        "parameter" : [{
          "valueId" : "s"
        }]
      }]
    },
    {
      "name" : "encounter",
      "source" : [{
        "context" : "qr",
        "element" : "encounter",
        "variable" : "e"
      }],
      "target" : [{
        "context" : "obs",
        "element" : "encounter",
        "transform" : "copy",
        "parameter" : [{
          "valueId" : "e"
        }]
      }]
    },
    {
      "name" : "effective",
      "source" : [{
        "context" : "qr",
        "element" : "authored",
        "variable" : "t"
      }],
      "target" : [{
        "context" : "obs",
        "element" : "effective",
        "transform" : "copy",
        "parameter" : [{
          "valueId" : "t"
        }]
      }]
    },
    {
      "name" : "performerFromSource",
      "source" : [{
        "context" : "qr",
        "element" : "source",
        "variable" : "src"
      }],
      "target" : [{
        "context" : "obs",
        "element" : "performer",
        "transform" : "copy",
        "parameter" : [{
          "valueId" : "src"
        }]
      }]
    },
    {
      "name" : "performerFallback",
      "source" : [{
        "context" : "qr",
        "condition" : "source.exists().not()"
      }],
      "rule" : [{
        "name" : "performerFromAuthor",
        "source" : [{
          "context" : "qr",
          "element" : "author",
          "variable" : "a"
        }],
        "target" : [{
          "context" : "obs",
          "element" : "performer",
          "transform" : "copy",
          "parameter" : [{
            "valueId" : "a"
          }]
        }]
      }]
    },
    {
      "name" : "linkQuestionnaireResponse",
      "source" : [{
        "context" : "qr",
        "element" : "id",
        "variable" : "qid",
        "condition" : "$this.hasValue()"
      }],
      "target" : [{
        "context" : "obs",
        "element" : "derivedFrom",
        "variable" : "ref",
        "transform" : "create",
        "parameter" : [{
          "valueString" : "Reference"
        }]
      },
      {
        "context" : "ref",
        "element" : "reference",
        "transform" : "copy",
        "parameter" : [{
          "valueId" : "qid"
        }]
      }],
      "documentation" : "A stored response's id already reads \"QuestionnaireResponse/<id>\", so it is a\r\nrelative reference as it stands. The hasValue() guard is what stops an\r\nunsaved response -- one posted straight to $extract rather than saved first --\r\nfrom writing \"QuestionnaireResponse/null\" into the record."
    }]
  },
  {
    "name" : "BuildRiskBase",
    "documentation" : "The RiskAssessment stands on two things: the response that was filled in and\r\nthe Observation that holds the number. Both go in basis, which is what the\r\nSGHI RiskAssessment profile binds to a QuestionnaireResponse.",
    "input" : [{
      "name" : "qr",
      "type" : "QR",
      "mode" : "source"
    },
    {
      "name" : "obs",
      "type" : "Observation",
      "mode" : "source"
    },
    {
      "name" : "ra",
      "type" : "RiskAssessment",
      "mode" : "target"
    },
    {
      "name" : "entry",
      "mode" : "target"
    }],
    "rule" : [{
      "name" : "idAndFullUrl",
      "source" : [{
        "context" : "qr"
      }],
      "target" : [{
        "context" : "ra",
        "element" : "id",
        "transform" : "uuid"
      }],
      "dependent" : [{
        "name" : "SetRiskAssessmentFullUrl",
        "parameter" : [{
          "valueId" : "ra"
        },
        {
          "valueId" : "entry"
        }]
      }]
    },
    {
      "name" : "entryRequest",
      "source" : [{
        "context" : "qr"
      }],
      "target" : [{
        "context" : "entry",
        "element" : "request",
        "variable" : "request"
      }],
      "rule" : [{
        "name" : "requestMethod",
        "source" : [{
          "context" : "qr"
        }],
        "target" : [{
          "context" : "request",
          "element" : "method",
          "transform" : "copy",
          "parameter" : [{
            "valueString" : "POST"
          }]
        }]
      },
      {
        "name" : "requestUrl",
        "source" : [{
          "context" : "qr"
        }],
        "target" : [{
          "context" : "request",
          "element" : "url",
          "transform" : "copy",
          "parameter" : [{
            "valueString" : "RiskAssessment"
          }]
        }]
      }]
    },
    {
      "name" : "status",
      "source" : [{
        "context" : "qr"
      }],
      "target" : [{
        "context" : "ra",
        "element" : "status",
        "transform" : "copy",
        "parameter" : [{
          "valueString" : "final"
        }]
      }]
    },
    {
      "name" : "subject",
      "source" : [{
        "context" : "qr",
        "element" : "subject",
        "variable" : "s"
      }],
      "target" : [{
        "context" : "ra",
        "element" : "subject",
        "transform" : "copy",
        "parameter" : [{
          "valueId" : "s"
        }]
      }]
    },
    {
      "name" : "encounter",
      "source" : [{
        "context" : "qr",
        "element" : "encounter",
        "variable" : "e"
      }],
      "target" : [{
        "context" : "ra",
        "element" : "encounter",
        "transform" : "copy",
        "parameter" : [{
          "valueId" : "e"
        }]
      }]
    },
    {
      "name" : "occurrence",
      "source" : [{
        "context" : "qr",
        "element" : "authored",
        "variable" : "t"
      }],
      "target" : [{
        "context" : "ra",
        "element" : "occurrence",
        "transform" : "copy",
        "parameter" : [{
          "valueId" : "t"
        }]
      }]
    },
    {
      "name" : "performerFromAuthor",
      "source" : [{
        "context" : "qr",
        "element" : "author",
        "variable" : "a"
      }],
      "target" : [{
        "context" : "ra",
        "element" : "performer",
        "transform" : "copy",
        "parameter" : [{
          "valueId" : "a"
        }]
      }]
    },
    {
      "name" : "performerFallback",
      "source" : [{
        "context" : "qr",
        "condition" : "author.exists().not()"
      }],
      "rule" : [{
        "name" : "performerFromSource",
        "source" : [{
          "context" : "qr",
          "element" : "source",
          "variable" : "src"
        }],
        "target" : [{
          "context" : "ra",
          "element" : "performer",
          "transform" : "copy",
          "parameter" : [{
            "valueId" : "src"
          }]
        }]
      }]
    },
    {
      "name" : "basisResponse",
      "source" : [{
        "context" : "qr",
        "element" : "id",
        "variable" : "qid",
        "condition" : "$this.hasValue()"
      }],
      "target" : [{
        "context" : "ra",
        "element" : "basis",
        "variable" : "qref",
        "transform" : "create",
        "parameter" : [{
          "valueString" : "Reference"
        }]
      },
      {
        "context" : "qref",
        "element" : "reference",
        "transform" : "copy",
        "parameter" : [{
          "valueId" : "qid"
        }]
      }]
    },
    {
      "name" : "basisObservation",
      "source" : [{
        "context" : "obs",
        "element" : "id",
        "variable" : "oid"
      }],
      "target" : [{
        "context" : "ra",
        "element" : "basis",
        "variable" : "oref",
        "transform" : "create",
        "parameter" : [{
          "valueString" : "Reference"
        }]
      }],
      "rule" : [{
        "name" : "basisObservationRef",
        "source" : [{
          "context" : "oid"
        }],
        "target" : [{
          "context" : "oref",
          "element" : "reference",
          "transform" : "append",
          "parameter" : [{
            "valueString" : "Observation/"
          },
          {
            "valueId" : "oid"
          }]
        }]
      }]
    }]
  },
  {
    "name" : "SetComponentCodedValue",
    "input" : [{
      "name" : "it",
      "mode" : "source"
    },
    {
      "name" : "comp",
      "mode" : "target"
    }],
    "rule" : [{
      "name" : "componentAnswer",
      "source" : [{
        "context" : "it",
        "element" : "answer",
        "listMode" : "first",
        "variable" : "a"
      }],
      "rule" : [{
        "name" : "codedValue",
        "source" : [{
          "context" : "a",
          "element" : "value",
          "variable" : "cv"
        }],
        "target" : [{
          "context" : "comp",
          "element" : "value",
          "variable" : "cc",
          "transform" : "create",
          "parameter" : [{
            "valueString" : "CodeableConcept"
          }]
        }],
        "rule" : [{
          "name" : "valueCoding",
          "source" : [{
            "context" : "cv"
          }],
          "target" : [{
            "context" : "cc",
            "element" : "coding",
            "transform" : "copy",
            "parameter" : [{
              "valueId" : "cv"
            }]
          }]
        },
        {
          "name" : "valueText",
          "source" : [{
            "context" : "cv",
            "element" : "display",
            "variable" : "d"
          }],
          "target" : [{
            "context" : "cc",
            "element" : "text",
            "transform" : "copy",
            "parameter" : [{
              "valueId" : "d"
            }]
          }]
        }]
      }]
    }]
  },
  {
    "name" : "SetSurveyCategory",
    "input" : [{
      "name" : "qr",
      "type" : "QR",
      "mode" : "source"
    },
    {
      "name" : "obs",
      "type" : "Observation",
      "mode" : "target"
    }],
    "rule" : [{
      "name" : "category",
      "source" : [{
        "context" : "qr"
      }],
      "target" : [{
        "context" : "obs",
        "element" : "category",
        "variable" : "cat"
      }],
      "rule" : [{
        "name" : "categoryCoding",
        "source" : [{
          "context" : "qr"
        }],
        "target" : [{
          "context" : "cat",
          "element" : "coding",
          "variable" : "coding"
        }],
        "rule" : [{
          "name" : "categorySystem",
          "source" : [{
            "context" : "qr"
          }],
          "target" : [{
            "context" : "coding",
            "element" : "system",
            "transform" : "copy",
            "parameter" : [{
              "valueString" : "http://terminology.hl7.org/CodeSystem/observation-category"
            }]
          }]
        },
        {
          "name" : "categoryCode",
          "source" : [{
            "context" : "qr"
          }],
          "target" : [{
            "context" : "coding",
            "element" : "code",
            "transform" : "copy",
            "parameter" : [{
              "valueString" : "survey"
            }]
          }]
        },
        {
          "name" : "categoryDisplay",
          "source" : [{
            "context" : "qr"
          }],
          "target" : [{
            "context" : "coding",
            "element" : "display",
            "transform" : "copy",
            "parameter" : [{
              "valueString" : "Survey"
            }]
          }]
        }]
      }]
    }]
  },
  {
    "name" : "SetObservationFullUrl",
    "input" : [{
      "name" : "obs",
      "type" : "Observation",
      "mode" : "source"
    },
    {
      "name" : "entry",
      "mode" : "target"
    }],
    "rule" : [{
      "name" : "assignFullUrl",
      "source" : [{
        "context" : "obs",
        "element" : "id",
        "variable" : "id"
      }],
      "target" : [{
        "context" : "entry",
        "element" : "fullUrl",
        "transform" : "append",
        "parameter" : [{
          "valueString" : "https://fhir.slade360.co.ke/fhir/Observation/"
        },
        {
          "valueId" : "id"
        }]
      }]
    }]
  },
  {
    "name" : "SetRiskAssessmentFullUrl",
    "input" : [{
      "name" : "ra",
      "type" : "RiskAssessment",
      "mode" : "source"
    },
    {
      "name" : "entry",
      "mode" : "target"
    }],
    "rule" : [{
      "name" : "assignFullUrl",
      "source" : [{
        "context" : "ra",
        "element" : "id",
        "variable" : "id"
      }],
      "target" : [{
        "context" : "entry",
        "element" : "fullUrl",
        "transform" : "append",
        "parameter" : [{
          "valueString" : "https://fhir.slade360.co.ke/fhir/RiskAssessment/"
        },
        {
          "valueId" : "id"
        }]
      }]
    }]
  }]
}