SGHI FHIR Profile Implementation Guide
0.1.0 - ci-build
SGHI FHIR Profile Implementation Guide, published by Kathurima Kimathi. This guide is not an authorized publication; it is the continuous build for version 0.1.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/savannahghi/sil_fhir_profile_ig/ and changes regularly. See the Directory of published versions
| Active as of 2026-09-14 |
@prefix fhir: <http://hl7.org/fhir/> . @prefix owl: <http://www.w3.org/2002/07/owl#> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . # - resource ------------------------------------------------------------------- <http://hl7.org/fhir/StructureMap/ExtractDischargeClearanceClinicalReadiness> a fhir:StructureMap ; fhir:nodeRole fhir:treeRoot ; fhir:id [ fhir:v "ExtractDischargeClearanceClinicalReadiness"] ; # fhir:text [ fhir:status [ fhir:v "generated" ] ; fhir:div [ fhir:v "<div xmlns=\"http://www.w3.org/1999/xhtml\"><p class=\"res-header-id\"><b>Generated Narrative: StructureMap ExtractDischargeClearanceClinicalReadiness</b></p><a name=\"ExtractDischargeClearanceClinicalReadiness\"> </a><a name=\"hcExtractDischargeClearanceClinicalReadiness\"> </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/ExtractDischargeClearanceClinicalReadiness'</span>\r\n<span style=\"color: #cc00cc\">/// <b>name</b> = </span><span style=\"color: blue\">'ExtractDischargeClearanceClinicalReadiness'</span>\r\n<span style=\"color: #cc00cc\">/// <b>title</b> = </span><span style=\"color: blue\">'Discharge Clearance: Clinical Readiness 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\">'Turns the discharging clinician\\'s readiness attestation into four survey Observations: oral intake, mobility, pain control and the condition the patient is leaving in. Each is its own Observation because a clinician answers four separate questions and one flat resource would let an answer to one stand in for an answer to another. The handover sentence rides as a note on the condition Observation rather than becoming a fifth: it is prose about the discharge, and an Observation whose value is a paragraph answers no query. Nothing here writes to the Encounter -- closing the stay and recording the discharge disposition belong to the EMR\\'s discharge workflow, and the condition a patient leaves in is a different axis from where they went. The signature the form collects is a typed name, which SGHIObservation cannot carry as a performer, so it stays in the response and out of the extracted resources.'</span>\r\n\r\n<b>uses</b><span style=\"color: navy\"> "</span><a href=\"http://hl7.org/fhir/R5/questionnaireresponse.html\" title=\"QuestionnaireResponse\">http://hl7.org/fhir/StructureDefinition/QuestionnaireResponse</a><span style=\"color: navy\">" </span><b>alias </b>QR <b>as </b><b>source</b>\r\n<b>uses</b><span style=\"color: navy\"> "</span><a href=\"http://hl7.org/fhir/R5/bundle.html\" title=\"Bundle\">http://hl7.org/fhir/StructureDefinition/Bundle</a><span style=\"color: navy\">" </span><b>alias </b>Bundle <b>as </b><b>target</b>\r\n<b>uses</b><span style=\"color: navy\"> "</span><a href=\"http://hl7.org/fhir/R5/observation.html\" title=\"Observation\">http://hl7.org/fhir/StructureDefinition/Observation</a><span style=\"color: navy\">" </span><b>alias </b>Observation <b>as </b><b>target</b>\r\n\r\n<b>group </b>ExtractDischargeClearanceClinicalReadiness<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> -> </b></span>bundle.type = <span style=\"color: blue\">'transaction'</span> <i>"setBundleType"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">linkId 301989955559 — "Oral intake tolerated"</span>\r\n qr.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = '301989955559') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><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<span style=\"color: navy\"><b> -> </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">entry</span><span style=\"color: navy\">, </span> entry.resource = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'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> -> </b></span> obs<span style=\"color: navy\">, </span> entry<b> then </b>BuildClearanceObs<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>"oralIntakeBase"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>obs.code<b> as </b><span style=\"color: maroon\">oralIntakeCodeCc</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>oralIntakeCodeCc.coding<b> as </b><span style=\"color: maroon\">oralIntakeCodeCoding</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>oralIntakeCodeCoding.system = <span style=\"color: blue\">'https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem'</span> <i>"oralIntakeCodeSystem"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>oralIntakeCodeCoding.code = <span style=\"color: blue\">'oral-intake-at-discharge'</span> <i>"oralIntakeCodeCode"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>oralIntakeCodeCoding.display = <span style=\"color: blue\">'Oral intake tolerated at discharge'</span> <i>"oralIntakeCodeDisplay"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"oralIntakeCodeCodingRule"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"oralIntakeCode"</i><span style=\"color: navy\">;</span>\r\n a<span style=\"color: navy\"><b> -> </b></span>obs<b> then </b>SetCodedValue<span style=\"color: navy\">(</span><span style=\"color: maroon\">a</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">)</span> <i>"oralIntakeValue"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"oralIntakeObs"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"oralIntakeAnswer"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"oralIntakeRule"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">linkId 507198101338 — "Mobility"</span>\r\n qr.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = '507198101338') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><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<span style=\"color: navy\"><b> -> </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">entry</span><span style=\"color: navy\">, </span> entry.resource = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'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> -> </b></span> obs<span style=\"color: navy\">, </span> entry<b> then </b>BuildClearanceObs<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>"mobilityBase"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>obs.code<b> as </b><span style=\"color: maroon\">mobilityCodeCc</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>mobilityCodeCc.coding<b> as </b><span style=\"color: maroon\">mobilityCodeCoding</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>mobilityCodeCoding.system = <span style=\"color: blue\">'https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem'</span> <i>"mobilityCodeSystem"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>mobilityCodeCoding.code = <span style=\"color: blue\">'mobility-at-discharge'</span> <i>"mobilityCodeCode"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>mobilityCodeCoding.display = <span style=\"color: blue\">'Mobility at discharge'</span> <i>"mobilityCodeDisplay"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"mobilityCodeCodingRule"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"mobilityCode"</i><span style=\"color: navy\">;</span>\r\n a<span style=\"color: navy\"><b> -> </b></span>obs<b> then </b>SetCodedValue<span style=\"color: navy\">(</span><span style=\"color: maroon\">a</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">)</span> <i>"mobilityValue"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"mobilityObs"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"mobilityAnswer"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"mobilityRule"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">linkId 852812667233 — "Pain controlled"</span>\r\n qr.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = '852812667233') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><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<span style=\"color: navy\"><b> -> </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">entry</span><span style=\"color: navy\">, </span> entry.resource = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'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> -> </b></span> obs<span style=\"color: navy\">, </span> entry<b> then </b>BuildClearanceObs<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>"painControlBase"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>obs.code<b> as </b><span style=\"color: maroon\">painControlCodeCc</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>painControlCodeCc.coding<b> as </b><span style=\"color: maroon\">painControlCodeCoding</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>painControlCodeCoding.system = <span style=\"color: blue\">'https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem'</span> <i>"painControlCodeSystem"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>painControlCodeCoding.code = <span style=\"color: blue\">'pain-control-at-discharge'</span> <i>"painControlCodeCode"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>painControlCodeCoding.display = <span style=\"color: blue\">'Pain control at discharge'</span> <i>"painControlCodeDisplay"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"painControlCodeCodingRule"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"painControlCode"</i><span style=\"color: navy\">;</span>\r\n a<span style=\"color: navy\"><b> -> </b></span>obs<b> then </b>SetCodedValue<span style=\"color: navy\">(</span><span style=\"color: maroon\">a</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">)</span> <i>"painControlValue"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"painControlObs"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"painControlAnswer"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"painControlRule"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">linkId 108099570999 — "Condition at discharge". This one carries the</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">free-text handover as a note, so it is the Observation a reader lands on</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">when they want the clinician's own words.</span>\r\n qr.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = '108099570999') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><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<span style=\"color: navy\"><b> -> </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">entry</span><span style=\"color: navy\">, </span> entry.resource = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'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> -> </b></span> obs<span style=\"color: navy\">, </span> entry<b> then </b>BuildClearanceObs<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>"conditionBase"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>obs.code<b> as </b><span style=\"color: maroon\">conditionCodeCc</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>conditionCodeCc.coding<b> as </b><span style=\"color: maroon\">conditionCodeCoding</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>conditionCodeCoding.system = <span style=\"color: blue\">'https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem'</span> <i>"conditionCodeSystem"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>conditionCodeCoding.code = <span style=\"color: blue\">'patient-condition-at-discharge'</span> <i>"conditionCodeCode"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>conditionCodeCoding.display = <span style=\"color: blue\">'Condition at discharge'</span> <i>"conditionCodeDisplay"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"conditionCodeCodingRule"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"conditionCode"</i><span style=\"color: navy\">;</span>\r\n a<span style=\"color: navy\"><b> -> </b></span>obs<b> then </b>SetCodedValue<span style=\"color: navy\">(</span><span style=\"color: maroon\">a</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">)</span> <i>"conditionValue"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">linkId 474741611141 — "Anything the next clinician should know"</span>\r\n qr.item<b> as </b><span style=\"color: maroon\">itNote</span><b> where </b><span style=\"color: navy\">(</span>(linkId = '474741611141') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span> itNote.answer first<b> as </b><span style=\"color: maroon\">aNote</span><b> then</b><span style=\"color: navy\"> {\r\n</span> aNote.value<b> as </b><span style=\"color: maroon\">nv</span><span style=\"color: navy\"><b> -> </b></span>obs.note<b> as </b><span style=\"color: maroon\">note</span><b> then</b><span style=\"color: navy\"> {\r\n</span> nv<span style=\"color: navy\"><b> -> </b></span>note.text = <span style=\"color: maroon\">nv</span> <i>"handoverNoteText"</i><span style=\"color: navy\">;</span>\r\n qr.authored<b> as </b><span style=\"color: maroon\">t</span><span style=\"color: navy\"><b> -> </b></span>note.time = <span style=\"color: maroon\">t</span> <i>"handoverNoteTime"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"handoverNote"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"handoverNoteAnswer"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"handoverNoteRule"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"conditionObs"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"conditionAnswer"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"conditionRule"</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 clearance map rather than imported: the</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">transform engine resolves `imports` against whatever StructureMaps happen to</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">be on the server, and a clearance that stops extracting because a shared map</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">was not uploaded is a worse failure than a duplicated group.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">Source parameters are left untyped on purpose. Writing `: Element` makes the</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">publisher's StructureMap validator compare QuestionnaireResponse.item against</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">the literal 'Element' and report them as incompatible, which is noise.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">─────────────────────────────────────────────────────────────────────────────</span>\r\n<b>group </b>BuildClearanceObs<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> -> </b></span>obs.id = <b>uuid</b><span style=\"color: navy\">(</span><span style=\"color: navy\">)</span><b> then </b>SetObservationFullUrl<span style=\"color: navy\">(</span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span> <i>"idAndFullUrl"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>entry.request<b> as </b><span style=\"color: maroon\">request</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>request.method = <span style=\"color: blue\">'POST'</span> <i>"requestMethod"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>request.url = <span style=\"color: blue\">'Observation'</span> <i>"requestUrl"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"entryRequest"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>obs.status = <span style=\"color: blue\">'final'</span> <i>"status"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>obs.category<b> as </b><span style=\"color: maroon\">categoryCc</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>categoryCc.coding<b> as </b><span style=\"color: maroon\">categoryCoding</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>categoryCoding.system = <span style=\"color: blue\">'http://terminology.hl7.org/CodeSystem/observation-category'</span> <i>"categorySystem"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>categoryCoding.code = <span style=\"color: blue\">'survey'</span> <i>"categoryCode"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>categoryCoding.display = <span style=\"color: blue\">'Survey'</span> <i>"categoryDisplay"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"categoryCodingRule"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"category"</i><span style=\"color: navy\">;</span>\r\n qr.subject<b> as </b><span style=\"color: maroon\">s</span><span style=\"color: navy\"><b> -> </b></span>obs.subject = <span style=\"color: maroon\">s</span><span style=\"color: navy\">;</span>\r\n qr.encounter<b> as </b><span style=\"color: maroon\">e</span><span style=\"color: navy\"><b> -> </b></span>obs.encounter = <span style=\"color: maroon\">e</span><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">`effective`, not `effectiveInstant`: the R5 transform engine writes choice</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">elements by their base name and rejects the typed form.</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">Advantage stamps `authored` when the clearances are submitted, not when each</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">was signed, so a clearance signed at two in the morning and submitted at the</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">handover carries the handover time. Sending the signature time on the</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">response would fix it at the source; there is nothing on the response for a</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">map to read it from.</span>\r\n qr.authored<b> as </b><span style=\"color: maroon\">t</span><span style=\"color: navy\"><b> -> </b></span>obs.effective = <span style=\"color: maroon\">t</span> <i>"effective"</i><span style=\"color: navy\">;</span>\r\n qr.authored<b> as </b><span style=\"color: maroon\">t</span><span style=\"color: navy\"><b> -> </b></span>obs.issued = <b>cast</b><span style=\"color: navy\">(</span><span style=\"color: maroon\">t</span><span style=\"color: navy\">, </span><span style=\"color: blue\">'instant'</span><span style=\"color: navy\">)</span> <i>"issued"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">The facility, not the person who signed: SGHIObservation admits only an</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">Organization or a Patient as performer, and the form's signature is a typed</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">name that resolves to neither.</span>\r\n qr.source<b> as </b><span style=\"color: maroon\">src</span><span style=\"color: navy\"><b> -> </b></span>obs.performer = <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\">perf</span><b> then</b><span style=\"color: navy\"> {\r\n</span> src.reference<b> as </b><span style=\"color: maroon\">ref</span><span style=\"color: navy\"><b> -> </b></span>perf.reference = <span style=\"color: maroon\">ref</span> <i>"performerRef"</i><span style=\"color: navy\">;</span>\r\n src.display<b> as </b><span style=\"color: maroon\">disp</span><span style=\"color: navy\"><b> -> </b></span>perf.display = <span style=\"color: maroon\">disp</span> <i>"performerDisplay"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"performer"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">One identifier per resource. Copying the response's own would give every</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">Observation from a single form the same business identity.</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>obs.identifier<b> as </b><span style=\"color: maroon\">ident</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>ident.use = <span style=\"color: blue\">'official'</span> <i>"identifierUse"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>ident.type<b> as </b><span style=\"color: maroon\">identifierTypeCc</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>identifierTypeCc.coding<b> as </b><span style=\"color: maroon\">identifierTypeCoding</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>identifierTypeCoding.system = <span style=\"color: blue\">'https://fhir.slade360.co.ke/fhir/CodeSystem/default-identifier-codesystem'</span> <i>"identifierTypeSystem"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>identifierTypeCoding.code = <span style=\"color: blue\">'default-id'</span> <i>"identifierTypeCode"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>identifierTypeCoding.display = <span style=\"color: blue\">'Default Resource Identifier'</span> <i>"identifierTypeDisplay"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"identifierTypeCodingRule"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"identifierType"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>ident.system = <span style=\"color: blue\">'https://fhir.slade360.co.ke/fhir/CodeSystem/default-identifier-codesystem'</span> <i>"identifierSystem"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>ident.value = <b>uuid</b><span style=\"color: navy\">(</span><span style=\"color: navy\">)</span> <i>"identifierValue"</i><span style=\"color: navy\">;</span>\r\n qr.source<b> as </b><span style=\"color: maroon\">src</span><span style=\"color: navy\"><b> -> </b></span>ident.assigner = <span style=\"color: maroon\">src</span> <i>"identifierAssigner"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"identifier"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">No append: under this engine `qr.id` already resolves to the type-qualified</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">relative reference, so prefixing it again produces a reference to nothing.</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>obs.derivedFrom = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'Reference'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">ref</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr.id<b> as </b><span style=\"color: maroon\">qid</span><span style=\"color: navy\"><b> -> </b></span>ref.reference = <span style=\"color: maroon\">qid</span> <i>"derivedFromRef"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"linkQuestionnaireResponse"</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>SetCodedValue<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">a</span>, <b>target</b> <span style=\"color: maroon\">obs</span><span style=\"color: navy\"> : </span>Observation<span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span> a.value<b> as </b><span style=\"color: maroon\">cv</span><span style=\"color: navy\"><b> -> </b></span>obs.value = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'CodeableConcept'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">concept</span><b> then</b><span style=\"color: navy\"> {\r\n</span> cv<span style=\"color: navy\"><b> -> </b></span>concept.coding = <span style=\"color: maroon\">cv</span> <i>"valueCoding"</i><span style=\"color: navy\">;</span>\r\n cv.display<b> as </b><span style=\"color: maroon\">d</span><span style=\"color: navy\"><b> -> </b></span>concept.text = <span style=\"color: maroon\">d</span> <i>"valueText"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"codedValue"</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> -> </b></span>entry.fullUrl = <b>append</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'https://fhir.slade360.co.ke/fhir/Observation/'</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">id</span><span style=\"color: navy\">)</span> <i>"assignFullUrl"</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span></pre></div>"^^rdf:XMLLiteral ] ] ; # fhir:url [ fhir:v "https://fhir.slade360.co.ke/fhir/StructureMap/ExtractDischargeClearanceClinicalReadiness"^^xsd:anyURI] ; # fhir:version [ fhir:v "0.1.0"] ; # fhir:name [ fhir:v "ExtractDischargeClearanceClinicalReadiness"] ; # fhir:title [ fhir:v "Discharge Clearance: Clinical Readiness Extraction"] ; # fhir:status [ fhir:v "active"] ; # fhir:date [ fhir:v "2026-09-14T06:31:13+00:00"^^xsd:dateTime] ; # fhir:publisher [ fhir:v "Kathurima Kimathi"] ; # fhir:contact ( [ fhir:name [ fhir:v "Kathurima Kimathi" ] ; fhir:telecom ( [ fhir:system [ fhir:v "url" ] ; fhir:value [ fhir:v "https://www.linkedin.com/in/kathurima-kimathi/" ] ] [ fhir:system [ fhir:v "email" ] ; fhir:value [ fhir:v "kathurimakimathi415@gmail.com" ] ] ) ] [ fhir:name [ fhir:v "Oscar John" ] ; fhir:telecom ( [ fhir:system [ fhir:v "email" ] ; fhir:value [ fhir:v "oscarjohnotieno@gmail.com" ] ; fhir:use [ fhir:v "work" ] ] ) ] [ fhir:name [ fhir:v "Kennedy Omondi" ] ; fhir:telecom ( [ fhir:system [ fhir:v "email" ] ; fhir:value [ fhir:v "kennankole@gmail.com" ] ; fhir:use [ fhir:v "work" ] ] ) ] ) ; # fhir:description [ fhir:v "Turns the discharging clinician's readiness attestation into four survey Observations: oral intake, mobility, pain control and the condition the patient is leaving in. Each is its own Observation because a clinician answers four separate questions and one flat resource would let an answer to one stand in for an answer to another. The handover sentence rides as a note on the condition Observation rather than becoming a fifth: it is prose about the discharge, and an Observation whose value is a paragraph answers no query. Nothing here writes to the Encounter -- closing the stay and recording the discharge disposition belong to the EMR's discharge workflow, and the condition a patient leaves in is a different axis from where they went. The signature the form collects is a typed name, which SGHIObservation cannot carry as a performer, so it stays in the response and out of the extracted resources."] ; # fhir:structure ( [ fhir:url [ fhir:v "http://hl7.org/fhir/StructureDefinition/QuestionnaireResponse"^^xsd:anyURI ; fhir:link <http://hl7.org/fhir/StructureDefinition/QuestionnaireResponse> ] ; fhir:mode [ fhir:v "source" ] ; fhir:alias [ fhir:v "QR" ] ] [ fhir:url [ fhir:v "http://hl7.org/fhir/StructureDefinition/Bundle"^^xsd:anyURI ; fhir:link <http://hl7.org/fhir/StructureDefinition/Bundle> ] ; fhir:mode [ fhir:v "target" ] ; fhir:alias [ fhir:v "Bundle" ] ] [ fhir:url [ fhir:v "http://hl7.org/fhir/StructureDefinition/Observation"^^xsd:anyURI ; fhir:link <http://hl7.org/fhir/StructureDefinition/Observation> ] ; fhir:mode [ fhir:v "target" ] ; fhir:alias [ fhir:v "Observation" ] ] ) ; # fhir:group ( [ fhir:name [ fhir:v "ExtractDischargeClearanceClinicalReadiness" ] ; fhir:input ( [ fhir:name [ fhir:v "qr" ] ; fhir:type [ fhir:v "QR" ] ; fhir:mode [ fhir:v "source" ] ] [ fhir:name [ fhir:v "bundle" ] ; fhir:type [ fhir:v "Bundle" ] ; fhir:mode [ fhir:v "target" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "setBundleType" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "bundle" ] ; fhir:element [ fhir:v "type" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "transaction" ] ] ) ] ) ] [ fhir:name [ fhir:v "oralIntakeRule" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "it" ] ; fhir:condition [ fhir:v "(linkId = '301989955559') and answer.value.exists()" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "oralIntakeAnswer" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ; fhir:element [ fhir:v "answer" ] ; fhir:listMode [ fhir:v "first" ] ; fhir:variable [ fhir:v "a" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "oralIntakeObs" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "bundle" ] ; fhir:element [ fhir:v "entry" ] ; fhir:variable [ fhir:v "entry" ] ] [ fhir:context [ fhir:v "entry" ] ; fhir:element [ fhir:v "resource" ] ; fhir:variable [ fhir:v "obs" ] ; fhir:transform [ fhir:v "create" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Observation" ] ] ) ] ) ; fhir:rule ( [ fhir:name [ fhir:v "oralIntakeBase" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ] [ fhir:context [ fhir:v "entry" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "BuildClearanceObs" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "qr" ] ] [ fhir:value [ a fhir:id ; fhir:v "obs" ] ] [ fhir:value [ a fhir:id ; fhir:v "entry" ] ] ) ] ) ] [ fhir:name [ fhir:v "oralIntakeCode" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "code" ] ; fhir:variable [ fhir:v "oralIntakeCodeCc" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "oralIntakeCodeCodingRule" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "oralIntakeCodeCc" ] ; fhir:element [ fhir:v "coding" ] ; fhir:variable [ fhir:v "oralIntakeCodeCoding" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "oralIntakeCodeSystem" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "oralIntakeCodeCoding" ] ; fhir:element [ fhir:v "system" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem" ] ] ) ] ) ] [ fhir:name [ fhir:v "oralIntakeCodeCode" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "oralIntakeCodeCoding" ] ; fhir:element [ fhir:v "code" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "oral-intake-at-discharge" ] ] ) ] ) ] [ fhir:name [ fhir:v "oralIntakeCodeDisplay" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "oralIntakeCodeCoding" ] ; fhir:element [ fhir:v "display" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Oral intake tolerated at discharge" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "oralIntakeValue" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "SetCodedValue" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "a" ] ] [ fhir:value [ a fhir:id ; fhir:v "obs" ] ] ) ] ) ] ) ] ) ] ) ; fhir:documentation [ fhir:v "linkId 301989955559 — \"Oral intake tolerated\"" ] ] [ fhir:name [ fhir:v "mobilityRule" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "it" ] ; fhir:condition [ fhir:v "(linkId = '507198101338') and answer.value.exists()" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "mobilityAnswer" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ; fhir:element [ fhir:v "answer" ] ; fhir:listMode [ fhir:v "first" ] ; fhir:variable [ fhir:v "a" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "mobilityObs" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "bundle" ] ; fhir:element [ fhir:v "entry" ] ; fhir:variable [ fhir:v "entry" ] ] [ fhir:context [ fhir:v "entry" ] ; fhir:element [ fhir:v "resource" ] ; fhir:variable [ fhir:v "obs" ] ; fhir:transform [ fhir:v "create" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Observation" ] ] ) ] ) ; fhir:rule ( [ fhir:name [ fhir:v "mobilityBase" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ] [ fhir:context [ fhir:v "entry" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "BuildClearanceObs" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "qr" ] ] [ fhir:value [ a fhir:id ; fhir:v "obs" ] ] [ fhir:value [ a fhir:id ; fhir:v "entry" ] ] ) ] ) ] [ fhir:name [ fhir:v "mobilityCode" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "code" ] ; fhir:variable [ fhir:v "mobilityCodeCc" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "mobilityCodeCodingRule" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "mobilityCodeCc" ] ; fhir:element [ fhir:v "coding" ] ; fhir:variable [ fhir:v "mobilityCodeCoding" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "mobilityCodeSystem" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "mobilityCodeCoding" ] ; fhir:element [ fhir:v "system" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem" ] ] ) ] ) ] [ fhir:name [ fhir:v "mobilityCodeCode" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "mobilityCodeCoding" ] ; fhir:element [ fhir:v "code" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "mobility-at-discharge" ] ] ) ] ) ] [ fhir:name [ fhir:v "mobilityCodeDisplay" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "mobilityCodeCoding" ] ; fhir:element [ fhir:v "display" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Mobility at discharge" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "mobilityValue" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "SetCodedValue" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "a" ] ] [ fhir:value [ a fhir:id ; fhir:v "obs" ] ] ) ] ) ] ) ] ) ] ) ; fhir:documentation [ fhir:v "linkId 507198101338 — \"Mobility\"" ] ] [ fhir:name [ fhir:v "painControlRule" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "it" ] ; fhir:condition [ fhir:v "(linkId = '852812667233') and answer.value.exists()" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "painControlAnswer" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ; fhir:element [ fhir:v "answer" ] ; fhir:listMode [ fhir:v "first" ] ; fhir:variable [ fhir:v "a" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "painControlObs" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "bundle" ] ; fhir:element [ fhir:v "entry" ] ; fhir:variable [ fhir:v "entry" ] ] [ fhir:context [ fhir:v "entry" ] ; fhir:element [ fhir:v "resource" ] ; fhir:variable [ fhir:v "obs" ] ; fhir:transform [ fhir:v "create" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Observation" ] ] ) ] ) ; fhir:rule ( [ fhir:name [ fhir:v "painControlBase" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ] [ fhir:context [ fhir:v "entry" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "BuildClearanceObs" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "qr" ] ] [ fhir:value [ a fhir:id ; fhir:v "obs" ] ] [ fhir:value [ a fhir:id ; fhir:v "entry" ] ] ) ] ) ] [ fhir:name [ fhir:v "painControlCode" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "code" ] ; fhir:variable [ fhir:v "painControlCodeCc" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "painControlCodeCodingRule" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "painControlCodeCc" ] ; fhir:element [ fhir:v "coding" ] ; fhir:variable [ fhir:v "painControlCodeCoding" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "painControlCodeSystem" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "painControlCodeCoding" ] ; fhir:element [ fhir:v "system" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem" ] ] ) ] ) ] [ fhir:name [ fhir:v "painControlCodeCode" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "painControlCodeCoding" ] ; fhir:element [ fhir:v "code" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "pain-control-at-discharge" ] ] ) ] ) ] [ fhir:name [ fhir:v "painControlCodeDisplay" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "painControlCodeCoding" ] ; fhir:element [ fhir:v "display" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Pain control at discharge" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "painControlValue" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "SetCodedValue" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "a" ] ] [ fhir:value [ a fhir:id ; fhir:v "obs" ] ] ) ] ) ] ) ] ) ] ) ; fhir:documentation [ fhir:v "linkId 852812667233 — \"Pain controlled\"" ] ] [ fhir:name [ fhir:v "conditionRule" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "it" ] ; fhir:condition [ fhir:v "(linkId = '108099570999') and answer.value.exists()" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "conditionAnswer" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ; fhir:element [ fhir:v "answer" ] ; fhir:listMode [ fhir:v "first" ] ; fhir:variable [ fhir:v "a" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "conditionObs" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "bundle" ] ; fhir:element [ fhir:v "entry" ] ; fhir:variable [ fhir:v "entry" ] ] [ fhir:context [ fhir:v "entry" ] ; fhir:element [ fhir:v "resource" ] ; fhir:variable [ fhir:v "obs" ] ; fhir:transform [ fhir:v "create" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Observation" ] ] ) ] ) ; fhir:rule ( [ fhir:name [ fhir:v "conditionBase" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ] [ fhir:context [ fhir:v "entry" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "BuildClearanceObs" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "qr" ] ] [ fhir:value [ a fhir:id ; fhir:v "obs" ] ] [ fhir:value [ a fhir:id ; fhir:v "entry" ] ] ) ] ) ] [ fhir:name [ fhir:v "conditionCode" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "code" ] ; fhir:variable [ fhir:v "conditionCodeCc" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "conditionCodeCodingRule" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "conditionCodeCc" ] ; fhir:element [ fhir:v "coding" ] ; fhir:variable [ fhir:v "conditionCodeCoding" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "conditionCodeSystem" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "conditionCodeCoding" ] ; fhir:element [ fhir:v "system" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem" ] ] ) ] ) ] [ fhir:name [ fhir:v "conditionCodeCode" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "conditionCodeCoding" ] ; fhir:element [ fhir:v "code" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "patient-condition-at-discharge" ] ] ) ] ) ] [ fhir:name [ fhir:v "conditionCodeDisplay" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "conditionCodeCoding" ] ; fhir:element [ fhir:v "display" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Condition at discharge" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "conditionValue" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "SetCodedValue" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "a" ] ] [ fhir:value [ a fhir:id ; fhir:v "obs" ] ] ) ] ) ] [ fhir:name [ fhir:v "handoverNoteRule" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "itNote" ] ; fhir:condition [ fhir:v "(linkId = '474741611141') and answer.value.exists()" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "handoverNoteAnswer" ] ; fhir:source ( [ fhir:context [ fhir:v "itNote" ] ; fhir:element [ fhir:v "answer" ] ; fhir:listMode [ fhir:v "first" ] ; fhir:variable [ fhir:v "aNote" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "handoverNote" ] ; fhir:source ( [ fhir:context [ fhir:v "aNote" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "nv" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "note" ] ; fhir:variable [ fhir:v "note" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "handoverNoteText" ] ; fhir:source ( [ fhir:context [ fhir:v "nv" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "note" ] ; fhir:element [ fhir:v "text" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "nv" ] ] ) ] ) ] [ fhir:name [ fhir:v "handoverNoteTime" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "authored" ] ; fhir:variable [ fhir:v "t" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "note" ] ; fhir:element [ fhir:v "time" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "t" ] ] ) ] ) ] ) ] ) ] ) ; fhir:documentation [ fhir:v "linkId 474741611141 — \"Anything the next clinician should know\"" ] ] ) ] ) ] ) ; fhir:documentation [ fhir:v "linkId 108099570999 — \"Condition at discharge\". This one carries the\r\nfree-text handover as a note, so it is the Observation a reader lands on\r\nwhen they want the clinician's own words." ] ] ) ] [ fhir:name [ fhir:v "BuildClearanceObs" ] ; fhir:documentation [ fhir:v "─────────────────────────────────────────────────────────────────────────────\r\nShared scaffolding. Repeated in each clearance map rather than imported: the\r\ntransform engine resolves `imports` against whatever StructureMaps happen to\r\nbe on the server, and a clearance that stops extracting because a shared map\r\nwas not uploaded is a worse failure than a duplicated group.\r\nSource parameters are left untyped on purpose. Writing `: Element` makes the\r\npublisher's StructureMap validator compare QuestionnaireResponse.item against\r\nthe literal 'Element' and report them as incompatible, which is noise.\r\n─────────────────────────────────────────────────────────────────────────────" ] ; fhir:input ( [ fhir:name [ fhir:v "qr" ] ; fhir:type [ fhir:v "QR" ] ; fhir:mode [ fhir:v "source" ] ] [ fhir:name [ fhir:v "obs" ] ; fhir:type [ fhir:v "Observation" ] ; fhir:mode [ fhir:v "target" ] ] [ fhir:name [ fhir:v "entry" ] ; fhir:mode [ fhir:v "target" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "idAndFullUrl" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "id" ] ; fhir:transform [ fhir:v "uuid" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "SetObservationFullUrl" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "obs" ] ] [ fhir:value [ a fhir:id ; fhir:v "entry" ] ] ) ] ) ] [ fhir:name [ fhir:v "entryRequest" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "entry" ] ; fhir:element [ fhir:v "request" ] ; fhir:variable [ fhir:v "request" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "requestMethod" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "request" ] ; fhir:element [ fhir:v "method" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "POST" ] ] ) ] ) ] [ fhir:name [ fhir:v "requestUrl" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "request" ] ; fhir:element [ fhir:v "url" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Observation" ] ] ) ] ) ] ) ] [ fhir:name [ fhir:v "status" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "status" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "final" ] ] ) ] ) ] [ fhir:name [ fhir:v "category" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "category" ] ; fhir:variable [ fhir:v "categoryCc" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "categoryCodingRule" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "categoryCc" ] ; fhir:element [ fhir:v "coding" ] ; fhir:variable [ fhir:v "categoryCoding" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "categorySystem" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "categoryCoding" ] ; fhir:element [ fhir:v "system" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "http://terminology.hl7.org/CodeSystem/observation-category" ] ] ) ] ) ] [ fhir:name [ fhir:v "categoryCode" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "categoryCoding" ] ; fhir:element [ fhir:v "code" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "survey" ] ] ) ] ) ] [ fhir:name [ fhir:v "categoryDisplay" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "categoryCoding" ] ; fhir:element [ fhir:v "display" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Survey" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "subject" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "subject" ] ; fhir:variable [ fhir:v "s" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "subject" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "s" ] ] ) ] ) ] [ fhir:name [ fhir:v "encounter" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "encounter" ] ; fhir:variable [ fhir:v "e" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "encounter" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "e" ] ] ) ] ) ] [ fhir:name [ fhir:v "effective" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "authored" ] ; fhir:variable [ fhir:v "t" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "effective" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "t" ] ] ) ] ) ; fhir:documentation [ fhir:v "`effective`, not `effectiveInstant`: the R5 transform engine writes choice\r\nelements by their base name and rejects the typed form.\r\nAdvantage stamps `authored` when the clearances are submitted, not when each\r\nwas signed, so a clearance signed at two in the morning and submitted at the\r\nhandover carries the handover time. Sending the signature time on the\r\nresponse would fix it at the source; there is nothing on the response for a\r\nmap to read it from." ] ] [ fhir:name [ fhir:v "issued" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "authored" ] ; fhir:variable [ fhir:v "t" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "issued" ] ; fhir:transform [ fhir:v "cast" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "t" ] ] [ fhir:value [ a fhir:string ; fhir:v "instant" ] ] ) ] ) ] [ fhir:name [ fhir:v "performer" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "source" ] ; fhir:variable [ fhir:v "src" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "performer" ] ; fhir:variable [ fhir:v "perf" ] ; fhir:transform [ fhir:v "create" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Reference" ] ] ) ] ) ; fhir:rule ( [ fhir:name [ fhir:v "performerRef" ] ; fhir:source ( [ fhir:context [ fhir:v "src" ] ; fhir:element [ fhir:v "reference" ] ; fhir:variable [ fhir:v "ref" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "perf" ] ; fhir:element [ fhir:v "reference" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "ref" ] ] ) ] ) ] [ fhir:name [ fhir:v "performerDisplay" ] ; fhir:source ( [ fhir:context [ fhir:v "src" ] ; fhir:element [ fhir:v "display" ] ; fhir:variable [ fhir:v "disp" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "perf" ] ; fhir:element [ fhir:v "display" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "disp" ] ] ) ] ) ] ) ; fhir:documentation [ fhir:v "The facility, not the person who signed: SGHIObservation admits only an\r\nOrganization or a Patient as performer, and the form's signature is a typed\r\nname that resolves to neither." ] ] [ fhir:name [ fhir:v "identifier" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "identifier" ] ; fhir:variable [ fhir:v "ident" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "identifierUse" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "ident" ] ; fhir:element [ fhir:v "use" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "official" ] ] ) ] ) ] [ fhir:name [ fhir:v "identifierType" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "ident" ] ; fhir:element [ fhir:v "type" ] ; fhir:variable [ fhir:v "identifierTypeCc" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "identifierTypeCodingRule" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "identifierTypeCc" ] ; fhir:element [ fhir:v "coding" ] ; fhir:variable [ fhir:v "identifierTypeCoding" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "identifierTypeSystem" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "identifierTypeCoding" ] ; fhir:element [ fhir:v "system" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "https://fhir.slade360.co.ke/fhir/CodeSystem/default-identifier-codesystem" ] ] ) ] ) ] [ fhir:name [ fhir:v "identifierTypeCode" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "identifierTypeCoding" ] ; fhir:element [ fhir:v "code" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "default-id" ] ] ) ] ) ] [ fhir:name [ fhir:v "identifierTypeDisplay" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "identifierTypeCoding" ] ; fhir:element [ fhir:v "display" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Default Resource Identifier" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "identifierSystem" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "ident" ] ; fhir:element [ fhir:v "system" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "https://fhir.slade360.co.ke/fhir/CodeSystem/default-identifier-codesystem" ] ] ) ] ) ] [ fhir:name [ fhir:v "identifierValue" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "ident" ] ; fhir:element [ fhir:v "value" ] ; fhir:transform [ fhir:v "uuid" ] ] ) ] [ fhir:name [ fhir:v "identifierAssigner" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "source" ] ; fhir:variable [ fhir:v "src" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "ident" ] ; fhir:element [ fhir:v "assigner" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "src" ] ] ) ] ) ] ) ; fhir:documentation [ fhir:v "One identifier per resource. Copying the response's own would give every\r\nObservation from a single form the same business identity." ] ] [ fhir:name [ fhir:v "linkQuestionnaireResponse" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "derivedFrom" ] ; fhir:variable [ fhir:v "ref" ] ; fhir:transform [ fhir:v "create" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Reference" ] ] ) ] ) ; fhir:rule ( [ fhir:name [ fhir:v "derivedFromRef" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "id" ] ; fhir:variable [ fhir:v "qid" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "ref" ] ; fhir:element [ fhir:v "reference" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "qid" ] ] ) ] ) ] ) ; fhir:documentation [ fhir:v "No append: under this engine `qr.id` already resolves to the type-qualified\r\nrelative reference, so prefixing it again produces a reference to nothing." ] ] ) ] [ fhir:name [ fhir:v "SetCodedValue" ] ; fhir:input ( [ fhir:name [ fhir:v "a" ] ; fhir:mode [ fhir:v "source" ] ] [ fhir:name [ fhir:v "obs" ] ; fhir:type [ fhir:v "Observation" ] ; fhir:mode [ fhir:v "target" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "codedValue" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "cv" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "concept" ] ; fhir:transform [ fhir:v "create" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "CodeableConcept" ] ] ) ] ) ; fhir:rule ( [ fhir:name [ fhir:v "valueCoding" ] ; fhir:source ( [ fhir:context [ fhir:v "cv" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "concept" ] ; fhir:element [ fhir:v "coding" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "cv" ] ] ) ] ) ] [ fhir:name [ fhir:v "valueText" ] ; fhir:source ( [ fhir:context [ fhir:v "cv" ] ; fhir:element [ fhir:v "display" ] ; fhir:variable [ fhir:v "d" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "concept" ] ; fhir:element [ fhir:v "text" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "d" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "SetObservationFullUrl" ] ; fhir:input ( [ fhir:name [ fhir:v "obs" ] ; fhir:type [ fhir:v "Observation" ] ; fhir:mode [ fhir:v "source" ] ] [ fhir:name [ fhir:v "entry" ] ; fhir:mode [ fhir:v "target" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "assignFullUrl" ] ; fhir:source ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "id" ] ; fhir:variable [ fhir:v "id" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "entry" ] ; fhir:element [ fhir:v "fullUrl" ] ; fhir:transform [ fhir:v "append" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "https://fhir.slade360.co.ke/fhir/Observation/" ] ] [ fhir:value [ a fhir:id ; fhir:v "id" ] ] ) ] ) ] ) ] ) . #
IG © 2025+ Kathurima Kimathi. Package silfhirprofileig#0.1.0 based on FHIR 5.0.0. Generated 2026-09-14
Links: Table of Contents |
QA Report