SGHI FHIR Profile Implementation Guide
0.1.0 - ci-build

SGHI FHIR Profile Implementation Guide, published by Kathurima Kimathi. This guide is not an authorized publication; it is the continuous build for version 0.1.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/savannahghi/sil_fhir_profile_ig/ and changes regularly. See the Directory of published versions

: Checklist of Nonverbal Pain Indicators Extraction - JSON Representation

Active as of 2026-09-14

Raw json | Download

{
  "resourceType" : "StructureMap",
  "id" : "ExtractCNPIPainAssessment",
  "text" : {
    "status" : "generated",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\"><p class=\"res-header-id\"><b>Generated Narrative: StructureMap ExtractCNPIPainAssessment</b></p><a name=\"ExtractCNPIPainAssessment\"> </a><a name=\"hcExtractCNPIPainAssessment\"> </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/ExtractCNPIPainAssessment'</span>\r\n<span style=\"color: #cc00cc\">/// <b>name</b> = </span><span style=\"color: blue\">'ExtractCNPIPainAssessment'</span>\r\n<span style=\"color: #cc00cc\">/// <b>title</b> = </span><span style=\"color: blue\">'Checklist of Nonverbal Pain Indicators 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 CNPI panel out as one Observation carrying the total, with the with-movement and at-rest scores and all twelve observed behaviours as components, and whether any pain behaviour was seen at all as its interpretation. Each score prefers what the form submitted and otherwise counts the behaviours itself, and a score only extracts when all six of its behaviours have been answered.'</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\r\n<b>group </b>ExtractCNPIPainAssessment<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\">Unlike Braden and Morse, LOINC nests this one: the six behaviours watched for</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">during movement sit under /99288-3 and the six watched for at rest under</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">/99296-6, each group ending in its own score, with the total on its own at the</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">top. The response itself is still the anchor for the Observation.</span>\r\n  qr<b> where </b><span style=\"color: navy\">(</span>item.item.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\">'99304-8'</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\">'Total score [CNPI]'</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 count the behaviours.</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">No weight lookup is needed here and none should be invented: every one of</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">the twelve behaviours is worth one if it was seen and nothing if it was</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">not, so the score is a count of LA33-6 &quot;Yes&quot; answers. Feldt scores the</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">instrument exactly that way.</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">Guarded on all twelve behaviours being answered. A CNPI of 4 out of the six</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">that were watched for reads as a patient in less distress than a CNPI of 4</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">out of twelve, and nothing in the resource would say which it was.</span>\r\n    qr<b> where </b><span style=\"color: navy\">(</span>item.item.answer.value.ofType(Coding).count() = 12<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 = '/99304-8').answer.value.exists(), item.where(linkId = '/99304-8').answer.value.truncate(), item.item.answer.value.ofType(Coding).where(code = 'LA33-6').count())<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<b> where </b><span style=\"color: navy\">(</span>item.where(linkId = '/99288-3').item.answer.value.ofType(Coding).count() = 6<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>      qr<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>        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\">'99295-8'</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\">'With movement score [CNPI]'</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;movementScoreCode&quot;</i><span style=\"color: navy\">;</span>\r\n      qr<span style=\"color: navy\"><b> -&gt; </b></span>comp.value = evaluate<span style=\"color: navy\">(</span>qr<span style=\"color: navy\">, </span>iif(item.where(linkId = '/99288-3').item.where(linkId = '/99288-3/99295-8').answer.value.exists(), item.where(linkId = '/99288-3').item.where(linkId = '/99288-3/99295-8').answer.value.truncate(), item.where(linkId = '/99288-3').item.answer.value.ofType(Coding).where(code = 'LA33-6').count())<span style=\"color: navy\">)</span> <i>&quot;movementScoreValue&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;movementScoreRule&quot;</i><span style=\"color: navy\">;</span>\r\n    qr<b> where </b><span style=\"color: navy\">(</span>item.where(linkId = '/99296-6').item.answer.value.ofType(Coding).count() = 6<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>      qr<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>        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\">'99303-0'</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\">'At rest score [CNPI]'</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;restScoreCode&quot;</i><span style=\"color: navy\">;</span>\r\n      qr<span style=\"color: navy\"><b> -&gt; </b></span>comp.value = evaluate<span style=\"color: navy\">(</span>qr<span style=\"color: navy\">, </span>iif(item.where(linkId = '/99296-6').item.where(linkId = '/99296-6/99303-0').answer.value.exists(), item.where(linkId = '/99296-6').item.where(linkId = '/99296-6/99303-0').answer.value.truncate(), item.where(linkId = '/99296-6').item.answer.value.ofType(Coding).where(code = 'LA33-6').count())<span style=\"color: navy\">)</span> <i>&quot;restScoreValue&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;restScoreRule&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">── The six behaviours watched for during movement ───────────────────────</span>\r\n    qr.item<b> as </b><span style=\"color: maroon\">g</span><b> where </b><span style=\"color: navy\">(</span>linkId = '/99288-3'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = '/99288-3/99289-1') 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\">'99289-1'</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\">'Nonverbal vocal complaints during movement'</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;vocalMovementCode&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;vocalMovementValue&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;vocalMovementRule&quot;</i><span style=\"color: navy\">;</span>\r\n      g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = '/99288-3/99290-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\">'99290-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\">'Facial grimaces or winces during movement'</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;grimaceMovementCode&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;grimaceMovementValue&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;grimaceMovementRule&quot;</i><span style=\"color: navy\">;</span>\r\n      g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = '/99288-3/99291-7') 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\">'99291-7'</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\">'Bracing during movement'</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;bracingMovementCode&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;bracingMovementValue&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;bracingMovementRule&quot;</i><span style=\"color: navy\">;</span>\r\n      g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = '/99288-3/99292-5') 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\">'99292-5'</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\">'Rubbing during movement'</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;rubbingMovementCode&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;rubbingMovementValue&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;rubbingMovementRule&quot;</i><span style=\"color: navy\">;</span>\r\n      g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = '/99288-3/99293-3') 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\">'99293-3'</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\">'Restlessness during movement'</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;restlessMovementCode&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;restlessMovementValue&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;restlessMovementRule&quot;</i><span style=\"color: navy\">;</span>\r\n      g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = '/99288-3/99294-1') 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\">'99294-1'</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\">'Verbal complaints during movement'</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;verbalMovementCode&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;verbalMovementValue&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;verbalMovementRule&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;movementBehaviours&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">── The same six watched for again at rest ───────────────────────────────</span>\r\n    qr.item<b> as </b><span style=\"color: maroon\">g</span><b> where </b><span style=\"color: navy\">(</span>linkId = '/99296-6'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = '/99296-6/99297-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\">'99297-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\">'Nonverbal vocal complaints while at rest'</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;vocalRestCode&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;vocalRestValue&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;vocalRestRule&quot;</i><span style=\"color: navy\">;</span>\r\n      g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = '/99296-6/99298-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\">'99298-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\">'Facial grimaces or winces while at rest'</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;grimaceRestCode&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;grimaceRestValue&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;grimaceRestRule&quot;</i><span style=\"color: navy\">;</span>\r\n      g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = '/99296-6/99299-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\">'99299-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\">'Bracing while at rest'</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;bracingRestCode&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;bracingRestValue&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;bracingRestRule&quot;</i><span style=\"color: navy\">;</span>\r\n      g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = '/99296-6/99300-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\">'99300-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\">'Restlessness while at rest'</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;restlessRestCode&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;restlessRestValue&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;restlessRestRule&quot;</i><span style=\"color: navy\">;</span>\r\n      g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = '/99296-6/99301-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\">'99301-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\">'Rubbing while at rest'</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;rubbingRestCode&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;rubbingRestValue&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;rubbingRestRule&quot;</i><span style=\"color: navy\">;</span>\r\n      g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = '/99296-6/99302-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\">'99302-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\">'Verbal complaints while at rest'</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;verbalRestCode&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;verbalRestValue&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;verbalRestRule&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;restBehaviours&quot;</i><span style=\"color: navy\">;</span>\r\n    qr<span style=\"color: navy\"><b> -&gt; </b></span>obs<b> then </b>AddCNPIInterpretation<span style=\"color: navy\">(</span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">)</span> <i>&quot;interpretation&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;cnpiRule&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\">CNPI publishes no tiers. Feldt validated it as a count of pain behaviours in a</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">patient who cannot say they are in pain, and the guidance that comes with it is</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">that any behaviour seen is worth investigating -- not that four is twice as bad</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">as two. So this is two states, not a scale: none observed, or some observed.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">Inventing cut-points to make it read like Braden and Morse would be putting</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">numbers in a clinician's hands that nobody published.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">It is an Observation.interpretation and not a RiskAssessment. Pain behaviour</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">seen at the bedside is a finding about the patient now, and RiskAssessment</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">models the likelihood of a future outcome. Braden and Morse do predict one --</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">a pressure injury, a fall -- and keep their RiskAssessments; this does not.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">N and A come from SGHIObservationInterpretation, the value set this IG binds</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">Observation.interpretation to, and they carry the two states exactly. Nothing</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">needed minting: unlike a severity scale, present-or-absent is what the</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">normality axis is for.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">─────────────────────────────────────────────────────────────────────────────</span>\r\n<b>group </b>AddCNPIInterpretation<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\">tgt</span><span style=\"color: navy\"> : </span>Observation<span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  obs<b> where </b><span style=\"color: navy\">(</span>value.ofType(integer) = 0<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -&gt; </b></span>tgt.interpretation<b> as </b><span style=\"color: maroon\">interp</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    obs<span style=\"color: navy\"><b> -&gt; </b></span>interp.coding<b> as </b><span style=\"color: maroon\">coding</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      obs<span style=\"color: navy\"><b> -&gt; </b></span>coding.system = <span style=\"color: blue\">'http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation'</span> <i>&quot;interpSystem&quot;</i><span style=\"color: navy\">;</span>\r\n      obs<span style=\"color: navy\"><b> -&gt; </b></span>coding.code = <span style=\"color: blue\">'N'</span> <i>&quot;interpCode&quot;</i><span style=\"color: navy\">;</span>\r\n      obs<span style=\"color: navy\"><b> -&gt; </b></span>coding.display = <span style=\"color: blue\">'Normal'</span> <i>&quot;interpDisplay&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;interpCoding&quot;</i><span style=\"color: navy\">;</span>\r\n    obs<span style=\"color: navy\"><b> -&gt; </b></span>interp.text = <span style=\"color: blue\">'No pain behaviours observed'</span> <i>&quot;interpText&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;cnpiNone&quot;</i><span style=\"color: navy\">;</span>\r\n  obs<b> where </b><span style=\"color: navy\">(</span>value.ofType(integer) &gt;= 1<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -&gt; </b></span>tgt.interpretation<b> as </b><span style=\"color: maroon\">interp</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    obs<span style=\"color: navy\"><b> -&gt; </b></span>interp.coding<b> as </b><span style=\"color: maroon\">coding</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      obs<span style=\"color: navy\"><b> -&gt; </b></span>coding.system = <span style=\"color: blue\">'http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation'</span> <i>&quot;interpSystem&quot;</i><span style=\"color: navy\">;</span>\r\n      obs<span style=\"color: navy\"><b> -&gt; </b></span>coding.code = <span style=\"color: blue\">'A'</span> <i>&quot;interpCode&quot;</i><span style=\"color: navy\">;</span>\r\n      obs<span style=\"color: navy\"><b> -&gt; </b></span>coding.display = <span style=\"color: blue\">'Abnormal'</span> <i>&quot;interpDisplay&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;interpCoding&quot;</i><span style=\"color: navy\">;</span>\r\n    obs<span style=\"color: navy\"><b> -&gt; </b></span>interp.text = <span style=\"color: blue\">'Pain behaviours observed - further assessment indicated'</span> <i>&quot;interpText&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;cnpiPresent&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><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></pre></div>"
  },
  "url" : "https://fhir.slade360.co.ke/fhir/StructureMap/ExtractCNPIPainAssessment",
  "version" : "0.1.0",
  "name" : "ExtractCNPIPainAssessment",
  "title" : "Checklist of Nonverbal Pain Indicators 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 CNPI panel out as one Observation carrying the total, with the with-movement and at-rest scores and all twelve observed behaviours as components, and whether any pain behaviour was seen at all as its interpretation. Each score prefers what the form submitted and otherwise counts the behaviours itself, and a score only extracts when all six of its behaviours have been answered.",
  "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"
    }
  ],
  "group" : [
    {
      "name" : "ExtractCNPIPainAssessment",
      "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" : "cnpiRule",
          "source" : [
            {
              "context" : "qr",
              "condition" : "item.item.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" : "99304-8"
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "name" : "codeDisplay",
                      "source" : [
                        {
                          "context" : "qr"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "coding",
                          "element" : "display",
                          "transform" : "copy",
                          "parameter" : [
                            {
                              "valueString" : "Total score [CNPI]"
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "name" : "totalRule",
              "source" : [
                {
                  "context" : "qr",
                  "condition" : "item.item.answer.value.ofType(Coding).count() = 12"
                }
              ],
              "rule" : [
                {
                  "name" : "totalValue",
                  "source" : [
                    {
                      "context" : "qr"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "obs",
                      "element" : "value",
                      "transform" : "evaluate",
                      "parameter" : [
                        {
                          "valueId" : "qr"
                        },
                        {
                          "valueString" : "iif(item.where(linkId = '/99304-8').answer.value.exists(), item.where(linkId = '/99304-8').answer.value.truncate(), item.item.answer.value.ofType(Coding).where(code = 'LA33-6').count())"
                        }
                      ]
                    }
                  ]
                }
              ],
              "documentation" : "The submitted total wins; otherwise count the behaviours.\r\nNo weight lookup is needed here and none should be invented: every one of\r\nthe twelve behaviours is worth one if it was seen and nothing if it was\r\nnot, so the score is a count of LA33-6 \"Yes\" answers. Feldt scores the\r\ninstrument exactly that way.\r\nGuarded on all twelve behaviours being answered. A CNPI of 4 out of the six\r\nthat were watched for reads as a patient in less distress than a CNPI of 4\r\nout of twelve, and nothing in the resource would say which it was."
            },
            {
              "name" : "movementScoreRule",
              "source" : [
                {
                  "context" : "qr",
                  "condition" : "item.where(linkId = '/99288-3').item.answer.value.ofType(Coding).count() = 6"
                }
              ],
              "target" : [
                {
                  "context" : "obs",
                  "element" : "component",
                  "variable" : "comp"
                }
              ],
              "rule" : [
                {
                  "name" : "movementScoreCode",
                  "source" : [
                    {
                      "context" : "qr"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "comp",
                      "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" : "99295-8"
                                }
                              ]
                            }
                          ]
                        },
                        {
                          "name" : "codeDisplay",
                          "source" : [
                            {
                              "context" : "qr"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "coding",
                              "element" : "display",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueString" : "With movement score [CNPI]"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "movementScoreValue",
                  "source" : [
                    {
                      "context" : "qr"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "comp",
                      "element" : "value",
                      "transform" : "evaluate",
                      "parameter" : [
                        {
                          "valueId" : "qr"
                        },
                        {
                          "valueString" : "iif(item.where(linkId = '/99288-3').item.where(linkId = '/99288-3/99295-8').answer.value.exists(), item.where(linkId = '/99288-3').item.where(linkId = '/99288-3/99295-8').answer.value.truncate(), item.where(linkId = '/99288-3').item.answer.value.ofType(Coding).where(code = 'LA33-6').count())"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "name" : "restScoreRule",
              "source" : [
                {
                  "context" : "qr",
                  "condition" : "item.where(linkId = '/99296-6').item.answer.value.ofType(Coding).count() = 6"
                }
              ],
              "target" : [
                {
                  "context" : "obs",
                  "element" : "component",
                  "variable" : "comp"
                }
              ],
              "rule" : [
                {
                  "name" : "restScoreCode",
                  "source" : [
                    {
                      "context" : "qr"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "comp",
                      "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" : "99303-0"
                                }
                              ]
                            }
                          ]
                        },
                        {
                          "name" : "codeDisplay",
                          "source" : [
                            {
                              "context" : "qr"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "coding",
                              "element" : "display",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueString" : "At rest score [CNPI]"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "restScoreValue",
                  "source" : [
                    {
                      "context" : "qr"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "comp",
                      "element" : "value",
                      "transform" : "evaluate",
                      "parameter" : [
                        {
                          "valueId" : "qr"
                        },
                        {
                          "valueString" : "iif(item.where(linkId = '/99296-6').item.where(linkId = '/99296-6/99303-0').answer.value.exists(), item.where(linkId = '/99296-6').item.where(linkId = '/99296-6/99303-0').answer.value.truncate(), item.where(linkId = '/99296-6').item.answer.value.ofType(Coding).where(code = 'LA33-6').count())"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "name" : "movementBehaviours",
              "source" : [
                {
                  "context" : "qr",
                  "element" : "item",
                  "variable" : "g",
                  "condition" : "linkId = '/99288-3'"
                }
              ],
              "rule" : [
                {
                  "name" : "vocalMovementRule",
                  "source" : [
                    {
                      "context" : "g",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = '/99288-3/99289-1') and answer.value.exists()"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "obs",
                      "element" : "component",
                      "variable" : "comp"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "vocalMovementCode",
                      "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" : "99289-1"
                                    }
                                  ]
                                }
                              ]
                            },
                            {
                              "name" : "codeDisplay",
                              "source" : [
                                {
                                  "context" : "it"
                                }
                              ],
                              "target" : [
                                {
                                  "context" : "coding",
                                  "element" : "display",
                                  "transform" : "copy",
                                  "parameter" : [
                                    {
                                      "valueString" : "Nonverbal vocal complaints during movement"
                                    }
                                  ]
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "name" : "vocalMovementValue",
                      "source" : [
                        {
                          "context" : "it"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "comp"
                        }
                      ],
                      "dependent" : [
                        {
                          "name" : "SetComponentCodedValue",
                          "parameter" : [
                            {
                              "valueId" : "it"
                            },
                            {
                              "valueId" : "comp"
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "grimaceMovementRule",
                  "source" : [
                    {
                      "context" : "g",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = '/99288-3/99290-9') and answer.value.exists()"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "obs",
                      "element" : "component",
                      "variable" : "comp"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "grimaceMovementCode",
                      "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" : "99290-9"
                                    }
                                  ]
                                }
                              ]
                            },
                            {
                              "name" : "codeDisplay",
                              "source" : [
                                {
                                  "context" : "it"
                                }
                              ],
                              "target" : [
                                {
                                  "context" : "coding",
                                  "element" : "display",
                                  "transform" : "copy",
                                  "parameter" : [
                                    {
                                      "valueString" : "Facial grimaces or winces during movement"
                                    }
                                  ]
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "name" : "grimaceMovementValue",
                      "source" : [
                        {
                          "context" : "it"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "comp"
                        }
                      ],
                      "dependent" : [
                        {
                          "name" : "SetComponentCodedValue",
                          "parameter" : [
                            {
                              "valueId" : "it"
                            },
                            {
                              "valueId" : "comp"
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "bracingMovementRule",
                  "source" : [
                    {
                      "context" : "g",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = '/99288-3/99291-7') and answer.value.exists()"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "obs",
                      "element" : "component",
                      "variable" : "comp"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "bracingMovementCode",
                      "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" : "99291-7"
                                    }
                                  ]
                                }
                              ]
                            },
                            {
                              "name" : "codeDisplay",
                              "source" : [
                                {
                                  "context" : "it"
                                }
                              ],
                              "target" : [
                                {
                                  "context" : "coding",
                                  "element" : "display",
                                  "transform" : "copy",
                                  "parameter" : [
                                    {
                                      "valueString" : "Bracing during movement"
                                    }
                                  ]
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "name" : "bracingMovementValue",
                      "source" : [
                        {
                          "context" : "it"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "comp"
                        }
                      ],
                      "dependent" : [
                        {
                          "name" : "SetComponentCodedValue",
                          "parameter" : [
                            {
                              "valueId" : "it"
                            },
                            {
                              "valueId" : "comp"
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "rubbingMovementRule",
                  "source" : [
                    {
                      "context" : "g",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = '/99288-3/99292-5') and answer.value.exists()"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "obs",
                      "element" : "component",
                      "variable" : "comp"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "rubbingMovementCode",
                      "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" : "99292-5"
                                    }
                                  ]
                                }
                              ]
                            },
                            {
                              "name" : "codeDisplay",
                              "source" : [
                                {
                                  "context" : "it"
                                }
                              ],
                              "target" : [
                                {
                                  "context" : "coding",
                                  "element" : "display",
                                  "transform" : "copy",
                                  "parameter" : [
                                    {
                                      "valueString" : "Rubbing during movement"
                                    }
                                  ]
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "name" : "rubbingMovementValue",
                      "source" : [
                        {
                          "context" : "it"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "comp"
                        }
                      ],
                      "dependent" : [
                        {
                          "name" : "SetComponentCodedValue",
                          "parameter" : [
                            {
                              "valueId" : "it"
                            },
                            {
                              "valueId" : "comp"
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "restlessMovementRule",
                  "source" : [
                    {
                      "context" : "g",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = '/99288-3/99293-3') and answer.value.exists()"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "obs",
                      "element" : "component",
                      "variable" : "comp"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "restlessMovementCode",
                      "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" : "99293-3"
                                    }
                                  ]
                                }
                              ]
                            },
                            {
                              "name" : "codeDisplay",
                              "source" : [
                                {
                                  "context" : "it"
                                }
                              ],
                              "target" : [
                                {
                                  "context" : "coding",
                                  "element" : "display",
                                  "transform" : "copy",
                                  "parameter" : [
                                    {
                                      "valueString" : "Restlessness during movement"
                                    }
                                  ]
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "name" : "restlessMovementValue",
                      "source" : [
                        {
                          "context" : "it"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "comp"
                        }
                      ],
                      "dependent" : [
                        {
                          "name" : "SetComponentCodedValue",
                          "parameter" : [
                            {
                              "valueId" : "it"
                            },
                            {
                              "valueId" : "comp"
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "verbalMovementRule",
                  "source" : [
                    {
                      "context" : "g",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = '/99288-3/99294-1') and answer.value.exists()"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "obs",
                      "element" : "component",
                      "variable" : "comp"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "verbalMovementCode",
                      "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" : "99294-1"
                                    }
                                  ]
                                }
                              ]
                            },
                            {
                              "name" : "codeDisplay",
                              "source" : [
                                {
                                  "context" : "it"
                                }
                              ],
                              "target" : [
                                {
                                  "context" : "coding",
                                  "element" : "display",
                                  "transform" : "copy",
                                  "parameter" : [
                                    {
                                      "valueString" : "Verbal complaints during movement"
                                    }
                                  ]
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "name" : "verbalMovementValue",
                      "source" : [
                        {
                          "context" : "it"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "comp"
                        }
                      ],
                      "dependent" : [
                        {
                          "name" : "SetComponentCodedValue",
                          "parameter" : [
                            {
                              "valueId" : "it"
                            },
                            {
                              "valueId" : "comp"
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ],
              "documentation" : "── The six behaviours watched for during movement ───────────────────────"
            },
            {
              "name" : "restBehaviours",
              "source" : [
                {
                  "context" : "qr",
                  "element" : "item",
                  "variable" : "g",
                  "condition" : "linkId = '/99296-6'"
                }
              ],
              "rule" : [
                {
                  "name" : "vocalRestRule",
                  "source" : [
                    {
                      "context" : "g",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = '/99296-6/99297-4') and answer.value.exists()"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "obs",
                      "element" : "component",
                      "variable" : "comp"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "vocalRestCode",
                      "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" : "99297-4"
                                    }
                                  ]
                                }
                              ]
                            },
                            {
                              "name" : "codeDisplay",
                              "source" : [
                                {
                                  "context" : "it"
                                }
                              ],
                              "target" : [
                                {
                                  "context" : "coding",
                                  "element" : "display",
                                  "transform" : "copy",
                                  "parameter" : [
                                    {
                                      "valueString" : "Nonverbal vocal complaints while at rest"
                                    }
                                  ]
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "name" : "vocalRestValue",
                      "source" : [
                        {
                          "context" : "it"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "comp"
                        }
                      ],
                      "dependent" : [
                        {
                          "name" : "SetComponentCodedValue",
                          "parameter" : [
                            {
                              "valueId" : "it"
                            },
                            {
                              "valueId" : "comp"
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "grimaceRestRule",
                  "source" : [
                    {
                      "context" : "g",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = '/99296-6/99298-2') and answer.value.exists()"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "obs",
                      "element" : "component",
                      "variable" : "comp"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "grimaceRestCode",
                      "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" : "99298-2"
                                    }
                                  ]
                                }
                              ]
                            },
                            {
                              "name" : "codeDisplay",
                              "source" : [
                                {
                                  "context" : "it"
                                }
                              ],
                              "target" : [
                                {
                                  "context" : "coding",
                                  "element" : "display",
                                  "transform" : "copy",
                                  "parameter" : [
                                    {
                                      "valueString" : "Facial grimaces or winces while at rest"
                                    }
                                  ]
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "name" : "grimaceRestValue",
                      "source" : [
                        {
                          "context" : "it"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "comp"
                        }
                      ],
                      "dependent" : [
                        {
                          "name" : "SetComponentCodedValue",
                          "parameter" : [
                            {
                              "valueId" : "it"
                            },
                            {
                              "valueId" : "comp"
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "bracingRestRule",
                  "source" : [
                    {
                      "context" : "g",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = '/99296-6/99299-0') and answer.value.exists()"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "obs",
                      "element" : "component",
                      "variable" : "comp"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "bracingRestCode",
                      "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" : "99299-0"
                                    }
                                  ]
                                }
                              ]
                            },
                            {
                              "name" : "codeDisplay",
                              "source" : [
                                {
                                  "context" : "it"
                                }
                              ],
                              "target" : [
                                {
                                  "context" : "coding",
                                  "element" : "display",
                                  "transform" : "copy",
                                  "parameter" : [
                                    {
                                      "valueString" : "Bracing while at rest"
                                    }
                                  ]
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "name" : "bracingRestValue",
                      "source" : [
                        {
                          "context" : "it"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "comp"
                        }
                      ],
                      "dependent" : [
                        {
                          "name" : "SetComponentCodedValue",
                          "parameter" : [
                            {
                              "valueId" : "it"
                            },
                            {
                              "valueId" : "comp"
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "restlessRestRule",
                  "source" : [
                    {
                      "context" : "g",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = '/99296-6/99300-6') and answer.value.exists()"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "obs",
                      "element" : "component",
                      "variable" : "comp"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "restlessRestCode",
                      "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" : "99300-6"
                                    }
                                  ]
                                }
                              ]
                            },
                            {
                              "name" : "codeDisplay",
                              "source" : [
                                {
                                  "context" : "it"
                                }
                              ],
                              "target" : [
                                {
                                  "context" : "coding",
                                  "element" : "display",
                                  "transform" : "copy",
                                  "parameter" : [
                                    {
                                      "valueString" : "Restlessness while at rest"
                                    }
                                  ]
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "name" : "restlessRestValue",
                      "source" : [
                        {
                          "context" : "it"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "comp"
                        }
                      ],
                      "dependent" : [
                        {
                          "name" : "SetComponentCodedValue",
                          "parameter" : [
                            {
                              "valueId" : "it"
                            },
                            {
                              "valueId" : "comp"
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "rubbingRestRule",
                  "source" : [
                    {
                      "context" : "g",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = '/99296-6/99301-4') and answer.value.exists()"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "obs",
                      "element" : "component",
                      "variable" : "comp"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "rubbingRestCode",
                      "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" : "99301-4"
                                    }
                                  ]
                                }
                              ]
                            },
                            {
                              "name" : "codeDisplay",
                              "source" : [
                                {
                                  "context" : "it"
                                }
                              ],
                              "target" : [
                                {
                                  "context" : "coding",
                                  "element" : "display",
                                  "transform" : "copy",
                                  "parameter" : [
                                    {
                                      "valueString" : "Rubbing while at rest"
                                    }
                                  ]
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "name" : "rubbingRestValue",
                      "source" : [
                        {
                          "context" : "it"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "comp"
                        }
                      ],
                      "dependent" : [
                        {
                          "name" : "SetComponentCodedValue",
                          "parameter" : [
                            {
                              "valueId" : "it"
                            },
                            {
                              "valueId" : "comp"
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "verbalRestRule",
                  "source" : [
                    {
                      "context" : "g",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = '/99296-6/99302-2') and answer.value.exists()"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "obs",
                      "element" : "component",
                      "variable" : "comp"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "verbalRestCode",
                      "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" : "99302-2"
                                    }
                                  ]
                                }
                              ]
                            },
                            {
                              "name" : "codeDisplay",
                              "source" : [
                                {
                                  "context" : "it"
                                }
                              ],
                              "target" : [
                                {
                                  "context" : "coding",
                                  "element" : "display",
                                  "transform" : "copy",
                                  "parameter" : [
                                    {
                                      "valueString" : "Verbal complaints while at rest"
                                    }
                                  ]
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "name" : "verbalRestValue",
                      "source" : [
                        {
                          "context" : "it"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "comp"
                        }
                      ],
                      "dependent" : [
                        {
                          "name" : "SetComponentCodedValue",
                          "parameter" : [
                            {
                              "valueId" : "it"
                            },
                            {
                              "valueId" : "comp"
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ],
              "documentation" : "── The same six watched for again at rest ───────────────────────────────"
            },
            {
              "name" : "interpretation",
              "source" : [
                {
                  "context" : "qr"
                }
              ],
              "target" : [
                {
                  "context" : "obs"
                }
              ],
              "dependent" : [
                {
                  "name" : "AddCNPIInterpretation",
                  "parameter" : [
                    {
                      "valueId" : "obs"
                    },
                    {
                      "valueId" : "obs"
                    }
                  ]
                }
              ]
            }
          ],
          "documentation" : "Unlike Braden and Morse, LOINC nests this one: the six behaviours watched for\r\nduring movement sit under /99288-3 and the six watched for at rest under\r\n/99296-6, each group ending in its own score, with the total on its own at the\r\ntop. The response itself is still the anchor for the Observation."
        }
      ]
    },
    {
      "name" : "AddCNPIInterpretation",
      "documentation" : "─────────────────────────────────────────────────────────────────────────────\r\nThe band\r\nCNPI publishes no tiers. Feldt validated it as a count of pain behaviours in a\r\npatient who cannot say they are in pain, and the guidance that comes with it is\r\nthat any behaviour seen is worth investigating -- not that four is twice as bad\r\nas two. So this is two states, not a scale: none observed, or some observed.\r\nInventing cut-points to make it read like Braden and Morse would be putting\r\nnumbers in a clinician's hands that nobody published.\r\nIt is an Observation.interpretation and not a RiskAssessment. Pain behaviour\r\nseen at the bedside is a finding about the patient now, and RiskAssessment\r\nmodels the likelihood of a future outcome. Braden and Morse do predict one --\r\na pressure injury, a fall -- and keep their RiskAssessments; this does not.\r\nN and A come from SGHIObservationInterpretation, the value set this IG binds\r\nObservation.interpretation to, and they carry the two states exactly. Nothing\r\nneeded minting: unlike a severity scale, present-or-absent is what the\r\nnormality axis is for.\r\n─────────────────────────────────────────────────────────────────────────────",
      "input" : [
        {
          "name" : "obs",
          "type" : "Observation",
          "mode" : "source"
        },
        {
          "name" : "tgt",
          "type" : "Observation",
          "mode" : "target"
        }
      ],
      "rule" : [
        {
          "name" : "cnpiNone",
          "source" : [
            {
              "context" : "obs",
              "condition" : "value.ofType(integer) = 0"
            }
          ],
          "target" : [
            {
              "context" : "tgt",
              "element" : "interpretation",
              "variable" : "interp"
            }
          ],
          "rule" : [
            {
              "name" : "interpCoding",
              "source" : [
                {
                  "context" : "obs"
                }
              ],
              "target" : [
                {
                  "context" : "interp",
                  "element" : "coding",
                  "variable" : "coding"
                }
              ],
              "rule" : [
                {
                  "name" : "interpSystem",
                  "source" : [
                    {
                      "context" : "obs"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "coding",
                      "element" : "system",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueString" : "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "interpCode",
                  "source" : [
                    {
                      "context" : "obs"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "coding",
                      "element" : "code",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueString" : "N"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "interpDisplay",
                  "source" : [
                    {
                      "context" : "obs"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "coding",
                      "element" : "display",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueString" : "Normal"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "name" : "interpText",
              "source" : [
                {
                  "context" : "obs"
                }
              ],
              "target" : [
                {
                  "context" : "interp",
                  "element" : "text",
                  "transform" : "copy",
                  "parameter" : [
                    {
                      "valueString" : "No pain behaviours observed"
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "name" : "cnpiPresent",
          "source" : [
            {
              "context" : "obs",
              "condition" : "value.ofType(integer) >= 1"
            }
          ],
          "target" : [
            {
              "context" : "tgt",
              "element" : "interpretation",
              "variable" : "interp"
            }
          ],
          "rule" : [
            {
              "name" : "interpCoding",
              "source" : [
                {
                  "context" : "obs"
                }
              ],
              "target" : [
                {
                  "context" : "interp",
                  "element" : "coding",
                  "variable" : "coding"
                }
              ],
              "rule" : [
                {
                  "name" : "interpSystem",
                  "source" : [
                    {
                      "context" : "obs"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "coding",
                      "element" : "system",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueString" : "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "interpCode",
                  "source" : [
                    {
                      "context" : "obs"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "coding",
                      "element" : "code",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueString" : "A"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "interpDisplay",
                  "source" : [
                    {
                      "context" : "obs"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "coding",
                      "element" : "display",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueString" : "Abnormal"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "name" : "interpText",
              "source" : [
                {
                  "context" : "obs"
                }
              ],
              "target" : [
                {
                  "context" : "interp",
                  "element" : "text",
                  "transform" : "copy",
                  "parameter" : [
                    {
                      "valueString" : "Pain behaviours observed - further assessment indicated"
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "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" : "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"
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}