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
| Draft 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/ExtractDeviceRequest> a fhir:StructureMap ; fhir:nodeRole fhir:treeRoot ; fhir:id [ fhir:v "ExtractDeviceRequest"] ; # 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 ExtractDeviceRequest</b></p><a name=\"ExtractDeviceRequest\"> </a><a name=\"hcExtractDeviceRequest\"> </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/ExtractDeviceRequest'</span>\r\n<span style=\"color: #cc00cc\">/// <b>name</b> = </span><span style=\"color: blue\">'ExtractDeviceRequest'</span>\r\n<span style=\"color: #cc00cc\">/// <b>status</b> = </span><span style=\"color: blue\">'draft'</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/devicerequest.html\" title=\"DeviceRequest\">http://hl7.org/fhir/StructureDefinition/DeviceRequest</a><span style=\"color: navy\">" </span><b>alias </b>DeviceRequest <b>as </b><b>target</b>\r\n\r\n<b>group </b>ExtractDeviceRequest<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\">Subject, encounter, authored date, requester, identifier and the device extension all</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">live on the response itself, so the whole of it is carried into the build group rather</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">than the answer group alone.</span>\r\n qr.item<b> as </b><span style=\"color: maroon\">requestGroup</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'the-request'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span> requestGroup<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\">'DeviceRequest'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">devReq</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span> devReq<span style=\"color: navy\">, </span> entry<b> then </b>BuildDeviceRequest<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">requestGroup</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">devReq</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span> <i>"buildDevReq"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"createDevReq"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"findRequestGroup"</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>BuildDeviceRequest<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">qr</span><span style=\"color: navy\"> : </span>QR, <b>source</b> <span style=\"color: maroon\">requestGroup</span>, <b>target</b> <span style=\"color: maroon\">devReq</span><span style=\"color: navy\"> : </span>DeviceRequest, <b>target</b> <span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span> <span style=\"color: navy\">// </span><span style=\"color: green\">The form has no sign-off step, so a submitted order is already actionable. If a</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">review step is added later this becomes 'draft', as it is on the medication order.</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>devReq.status = <span style=\"color: blue\">'active'</span> <i>"setStatus"</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>devReq.subject = <span style=\"color: maroon\">s</span> <i>"setSubject"</i><span style=\"color: navy\">;</span>\r\n qr.encounter<b> as </b><span style=\"color: maroon\">enc</span><span style=\"color: navy\"><b> -> </b></span>devReq.encounter = <span style=\"color: maroon\">enc</span> <i>"setEncounter"</i><span style=\"color: navy\">;</span>\r\n qr.authored<b> as </b><span style=\"color: maroon\">authored</span><span style=\"color: navy\"><b> -> </b></span>devReq.authoredOn = <span style=\"color: maroon\">authored</span> <i>"setAuthoredOn"</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>devReq.requester = <span style=\"color: maroon\">src</span> <i>"setRequester"</i><span style=\"color: navy\">;</span>\r\n qr.identifier first<b> as </b><span style=\"color: maroon\">qrIdent</span><span style=\"color: navy\"><b> -> </b></span>devReq.identifier = <span style=\"color: maroon\">qrIdent</span> <i>"copyIdentifier"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">Device as CodeableReference from the QR extension (using concept). The ordering</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">client sets the device there rather than answering a form item, so this reads exactly</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">as the medication order map reads its medication concept. Assigning the whole</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">CodeableConcept carries its codings and their systems, so nothing further is copied.</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">`value`, not `valueCodeableConcept`: this engine resolves the choice element by its</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">base name and rejects the typed one outright --</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">"Attempt to read invalid property 'valueCodeableConcept' on type Extension" -- which</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">fails the whole transform, not just this rule. Same accessor every answer below uses.</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">The url is matched on its tail rather than in full: a map is published once at the</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">production canonical while the extension url is built from each environment's own</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">base, so an equality test would hold in production alone. Matching beats taking the</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">first extension, which silently reads whichever one the client happened to put first.</span>\r\n qr.extension<b> as </b><span style=\"color: maroon\">ext</span><b> where </b><span style=\"color: navy\">(</span>url.endsWith('/StructureDefinition/device-reference')<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span> ext.value<b> as </b><span style=\"color: maroon\">deviceCC</span><span style=\"color: navy\"><b> -> </b></span>devReq.code<b> as </b><span style=\"color: maroon\">code</span><b> then</b><span style=\"color: navy\"> {\r\n</span> deviceCC<span style=\"color: navy\"><b> -> </b></span>code.concept = <span style=\"color: maroon\">deviceCC</span> <i>"setDeviceConcept"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"accessDevice"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"findDeviceExt"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">Intent. DeviceRequest.intent is a code, not a Coding: it takes the code alone and has</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">nowhere to record the system it came from.</span>\r\n requestGroup.item<b> as </b><span style=\"color: maroon\">intentItem</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'intent'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span> intentItem.answer first<b> as </b><span style=\"color: maroon\">intentAns</span><b> then</b><span style=\"color: navy\"> {\r\n</span> intentAns.value<b> as </b><span style=\"color: maroon\">intentCoding</span><b> then</b><span style=\"color: navy\"> {\r\n</span> intentCoding.code<b> as </b><span style=\"color: maroon\">intentCode</span><span style=\"color: navy\"><b> -> </b></span>devReq.intent = <span style=\"color: maroon\">intentCode</span> <i>"setIntentCode"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"extractIntentCode"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"extractIntent"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"findIntent"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">Priority. Same shape as intent, and same reason.</span>\r\n requestGroup.item<b> as </b><span style=\"color: maroon\">priorityItem</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'priority'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span> priorityItem.answer first<b> as </b><span style=\"color: maroon\">priorityAns</span><b> then</b><span style=\"color: navy\"> {\r\n</span> priorityAns.value<b> as </b><span style=\"color: maroon\">priorityCoding</span><b> then</b><span style=\"color: navy\"> {\r\n</span> priorityCoding.code<b> as </b><span style=\"color: maroon\">priorityCode</span><span style=\"color: navy\"><b> -> </b></span>devReq.priority = <span style=\"color: maroon\">priorityCode</span> <i>"setPriorityCode"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"extractPriorityCode"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"extractPriority"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"findPriority"</i><span style=\"color: navy\">;</span>\r\n requestGroup.item<b> as </b><span style=\"color: maroon\">qtyItem</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'quantity'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qtyItem.answer first<b> as </b><span style=\"color: maroon\">qtyAns</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qtyAns.value<b> as </b><span style=\"color: maroon\">qtyValue</span><span style=\"color: navy\"><b> -> </b></span>devReq.quantity = <span style=\"color: maroon\">qtyValue</span> <i>"setQuantity"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"extractQuantity"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"findQuantity"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">How it is supplied. DeviceRequest has no element for this, so it becomes a parameter:</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">parameter.code names the question, parameter.value carries the answer.</span>\r\n requestGroup.item<b> as </b><span style=\"color: maroon\">supplyItem</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'supply-method'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span> supplyItem.answer first<b> as </b><span style=\"color: maroon\">supplyAns</span><b> then</b><span style=\"color: navy\"> {\r\n</span> supplyAns.value<b> as </b><span style=\"color: maroon\">supplyCoding</span><span style=\"color: navy\"><b> -> </b></span>devReq.parameter<b> as </b><span style=\"color: maroon\">param</span><b> then</b><span style=\"color: navy\"> {\r\n</span> supplyCoding<span style=\"color: navy\"><b> -> </b></span>param.code = <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\">paramCode</span><b> then</b><span style=\"color: navy\"> {\r\n</span> supplyCoding<span style=\"color: navy\"><b> -> </b></span>paramCode.coding = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'Coding'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">paramCoding</span><b> then</b><span style=\"color: navy\"> {\r\n</span> supplyCoding<span style=\"color: navy\"><b> -> </b></span>paramCoding.system = <span style=\"color: blue\">'https://fhir.slade360.co.ke/fhir/CodeSystem/device-order-codesystem'</span> <i>"setParamSystem"</i><span style=\"color: navy\">;</span>\r\n supplyCoding<span style=\"color: navy\"><b> -> </b></span>paramCoding.code = <span style=\"color: blue\">'supply-method'</span> <i>"setParamCode"</i><span style=\"color: navy\">;</span>\r\n supplyCoding<span style=\"color: navy\"><b> -> </b></span>paramCoding.display = <span style=\"color: blue\">'How the device is supplied'</span> <i>"setParamDisplay"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"buildParamCoding"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"buildParamCode"</i><span style=\"color: navy\">;</span>\r\n supplyCoding<span style=\"color: navy\"><b> -> </b></span>param.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\">paramValue</span><b> then</b><span style=\"color: navy\"> {\r\n</span> supplyCoding<span style=\"color: navy\"><b> -> </b></span>paramValue.coding = <span style=\"color: maroon\">supplyCoding</span> <i>"setParamValueCoding"</i><span style=\"color: navy\">;</span>\r\n supplyCoding.display<b> as </b><span style=\"color: maroon\">supplyDisp</span><span style=\"color: navy\"><b> -> </b></span>paramValue.text = <span style=\"color: maroon\">supplyDisp</span> <i>"setParamValueText"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"buildParamValue"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"createParameter"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"extractSupply"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"findSupply"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">Reason is free text on the form, so it lands as CodeableReference.concept.text with</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">no coding. A coded reason would need a value set the form does not offer.</span>\r\n requestGroup.item<b> as </b><span style=\"color: maroon\">reasonItem</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'reason'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span> reasonItem.answer first<b> as </b><span style=\"color: maroon\">reasonAns</span><b> then</b><span style=\"color: navy\"> {\r\n</span> reasonAns.value<b> as </b><span style=\"color: maroon\">reasonText</span><span style=\"color: navy\"><b> -> </b></span> devReq.reason<b> as </b><span style=\"color: maroon\">reasonRef</span><span style=\"color: navy\">, </span> reasonRef.concept<b> as </b><span style=\"color: maroon\">reasonCC</span><b> then</b><span style=\"color: navy\"> {\r\n</span> reasonText<span style=\"color: navy\"><b> -> </b></span>reasonCC.text = <span style=\"color: maroon\">reasonText</span> <i>"setReasonText"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"setReason"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"extractReason"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"findReason"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">Patient instruction. DeviceRequest has no equivalent of Dosage.patientInstruction, so</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">this rides a local extension rather than collapsing into note alongside the message</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">written for the dispensing team.</span>\r\n requestGroup.item<b> as </b><span style=\"color: maroon\">instructionItem</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'patient-instructions'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span> instructionItem.answer first<b> as </b><span style=\"color: maroon\">instructionAns</span><b> then</b><span style=\"color: navy\"> {\r\n</span> instructionAns.value<b> as </b><span style=\"color: maroon\">instructionText</span><span style=\"color: navy\"><b> -> </b></span>devReq.extension<b> as </b><span style=\"color: maroon\">instructionExt</span><b> then</b><span style=\"color: navy\"> {\r\n</span> instructionText<span style=\"color: navy\"><b> -> </b></span>instructionExt.url = <span style=\"color: blue\">'https://fhir.slade360.co.ke/fhir/StructureDefinition/sghi-device-patient-instruction'</span> <i>"setInstructionExtUrl"</i><span style=\"color: navy\">;</span>\r\n instructionText<span style=\"color: navy\"><b> -> </b></span>instructionExt.value = <span style=\"color: maroon\">instructionText</span> <i>"setInstructionExtValue"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"createInstructionExt"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"extractInstruction"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"findInstruction"</i><span style=\"color: navy\">;</span>\r\n requestGroup.item<b> as </b><span style=\"color: maroon\">notesItem</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'notes'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span> notesItem.answer first<b> as </b><span style=\"color: maroon\">notesAns</span><b> then</b><span style=\"color: navy\"> {\r\n</span> notesAns.value<b> as </b><span style=\"color: maroon\">notesText</span><span style=\"color: navy\"><b> -> </b></span>devReq.note<b> as </b><span style=\"color: maroon\">note</span><b> then</b><span style=\"color: navy\"> {\r\n</span> notesText<span style=\"color: navy\"><b> -> </b></span>note.text = <span style=\"color: maroon\">notesText</span> <i>"setNoteText"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"createNote"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"extractNotes"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"findNotes"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>devReq.id = <b>uuid</b><span style=\"color: navy\">(</span><span style=\"color: navy\">)</span><b> then </b>SetDeviceRequestFullUrl<span style=\"color: navy\">(</span><span style=\"color: maroon\">devReq</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span> <i>"setDevReqIdAndFullUrl"</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>"reqMethod"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>request.url = <span style=\"color: blue\">'DeviceRequest'</span> <i>"reqUrl"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"entryRequest"</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>SetDeviceRequestFullUrl<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">devReq</span><span style=\"color: navy\"> : </span>DeviceRequest, <b>target</b> <span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span> devReq.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/DeviceRequest/'</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/ExtractDeviceRequest"^^xsd:anyURI] ; # fhir:version [ fhir:v "0.1.0"] ; # fhir:name [ fhir:v "ExtractDeviceRequest"] ; # fhir:status [ fhir:v "draft"] ; # 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: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/DeviceRequest"^^xsd:anyURI ; fhir:link <http://hl7.org/fhir/StructureDefinition/DeviceRequest> ] ; fhir:mode [ fhir:v "target" ] ; fhir:alias [ fhir:v "DeviceRequest" ] ] ) ; # fhir:group ( [ fhir:name [ fhir:v "ExtractDeviceRequest" ] ; 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 "findRequestGroup" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "requestGroup" ] ; fhir:condition [ fhir:v "linkId = 'the-request'" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "createDevReq" ] ; fhir:source ( [ fhir:context [ fhir:v "requestGroup" ] ] ) ; 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 "devReq" ] ; fhir:transform [ fhir:v "create" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "DeviceRequest" ] ] ) ] ) ; fhir:rule ( [ fhir:name [ fhir:v "buildDevReq" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "devReq" ] ] [ fhir:context [ fhir:v "entry" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "BuildDeviceRequest" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "qr" ] ] [ fhir:value [ a fhir:id ; fhir:v "requestGroup" ] ] [ fhir:value [ a fhir:id ; fhir:v "devReq" ] ] [ fhir:value [ a fhir:id ; fhir:v "entry" ] ] ) ] ) ] ) ] ) ; fhir:documentation [ fhir:v "Subject, encounter, authored date, requester, identifier and the device extension all\r\nlive on the response itself, so the whole of it is carried into the build group rather\r\nthan the answer group alone." ] ] ) ] [ fhir:name [ fhir:v "BuildDeviceRequest" ] ; fhir:input ( [ fhir:name [ fhir:v "qr" ] ; fhir:type [ fhir:v "QR" ] ; fhir:mode [ fhir:v "source" ] ] [ fhir:name [ fhir:v "requestGroup" ] ; fhir:mode [ fhir:v "source" ] ] [ fhir:name [ fhir:v "devReq" ] ; fhir:type [ fhir:v "DeviceRequest" ] ; fhir:mode [ fhir:v "target" ] ] [ fhir:name [ fhir:v "entry" ] ; fhir:mode [ fhir:v "target" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "setStatus" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "devReq" ] ; fhir:element [ fhir:v "status" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "active" ] ] ) ] ) ; fhir:documentation [ fhir:v "The form has no sign-off step, so a submitted order is already actionable. If a\r\nreview step is added later this becomes 'draft', as it is on the medication order." ] ] [ fhir:name [ fhir:v "setSubject" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "subject" ] ; fhir:variable [ fhir:v "s" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "devReq" ] ; fhir:element [ fhir:v "subject" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "s" ] ] ) ] ) ] [ fhir:name [ fhir:v "setEncounter" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "encounter" ] ; fhir:variable [ fhir:v "enc" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "devReq" ] ; fhir:element [ fhir:v "encounter" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "enc" ] ] ) ] ) ] [ fhir:name [ fhir:v "setAuthoredOn" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "authored" ] ; fhir:variable [ fhir:v "authored" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "devReq" ] ; fhir:element [ fhir:v "authoredOn" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "authored" ] ] ) ] ) ] [ fhir:name [ fhir:v "setRequester" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "source" ] ; fhir:variable [ fhir:v "src" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "devReq" ] ; fhir:element [ fhir:v "requester" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "src" ] ] ) ] ) ] [ fhir:name [ fhir:v "copyIdentifier" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "identifier" ] ; fhir:listMode [ fhir:v "first" ] ; fhir:variable [ fhir:v "qrIdent" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "devReq" ] ; fhir:element [ fhir:v "identifier" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "qrIdent" ] ] ) ] ) ] [ fhir:name [ fhir:v "findDeviceExt" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "extension" ] ; fhir:variable [ fhir:v "ext" ] ; fhir:condition [ fhir:v "url.endsWith('/StructureDefinition/device-reference')" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "accessDevice" ] ; fhir:source ( [ fhir:context [ fhir:v "ext" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "deviceCC" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "devReq" ] ; fhir:element [ fhir:v "code" ] ; fhir:variable [ fhir:v "code" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "setDeviceConcept" ] ; fhir:source ( [ fhir:context [ fhir:v "deviceCC" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "code" ] ; fhir:element [ fhir:v "concept" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "deviceCC" ] ] ) ] ) ] ) ] ) ; fhir:documentation [ fhir:v "Device as CodeableReference from the QR extension (using concept). The ordering\r\nclient sets the device there rather than answering a form item, so this reads exactly\r\nas the medication order map reads its medication concept. Assigning the whole\r\nCodeableConcept carries its codings and their systems, so nothing further is copied.\r\n`value`, not `valueCodeableConcept`: this engine resolves the choice element by its\r\nbase name and rejects the typed one outright --\r\n\"Attempt to read invalid property 'valueCodeableConcept' on type Extension\" -- which\r\nfails the whole transform, not just this rule. Same accessor every answer below uses.\r\nThe url is matched on its tail rather than in full: a map is published once at the\r\nproduction canonical while the extension url is built from each environment's own\r\nbase, so an equality test would hold in production alone. Matching beats taking the\r\nfirst extension, which silently reads whichever one the client happened to put first." ] ] [ fhir:name [ fhir:v "findIntent" ] ; fhir:source ( [ fhir:context [ fhir:v "requestGroup" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "intentItem" ] ; fhir:condition [ fhir:v "linkId = 'intent'" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "extractIntent" ] ; fhir:source ( [ fhir:context [ fhir:v "intentItem" ] ; fhir:element [ fhir:v "answer" ] ; fhir:listMode [ fhir:v "first" ] ; fhir:variable [ fhir:v "intentAns" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "extractIntentCode" ] ; fhir:source ( [ fhir:context [ fhir:v "intentAns" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "intentCoding" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "setIntentCode" ] ; fhir:source ( [ fhir:context [ fhir:v "intentCoding" ] ; fhir:element [ fhir:v "code" ] ; fhir:variable [ fhir:v "intentCode" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "devReq" ] ; fhir:element [ fhir:v "intent" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "intentCode" ] ] ) ] ) ] ) ] ) ] ) ; fhir:documentation [ fhir:v "Intent. DeviceRequest.intent is a code, not a Coding: it takes the code alone and has\r\nnowhere to record the system it came from." ] ] [ fhir:name [ fhir:v "findPriority" ] ; fhir:source ( [ fhir:context [ fhir:v "requestGroup" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "priorityItem" ] ; fhir:condition [ fhir:v "linkId = 'priority'" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "extractPriority" ] ; fhir:source ( [ fhir:context [ fhir:v "priorityItem" ] ; fhir:element [ fhir:v "answer" ] ; fhir:listMode [ fhir:v "first" ] ; fhir:variable [ fhir:v "priorityAns" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "extractPriorityCode" ] ; fhir:source ( [ fhir:context [ fhir:v "priorityAns" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "priorityCoding" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "setPriorityCode" ] ; fhir:source ( [ fhir:context [ fhir:v "priorityCoding" ] ; fhir:element [ fhir:v "code" ] ; fhir:variable [ fhir:v "priorityCode" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "devReq" ] ; fhir:element [ fhir:v "priority" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "priorityCode" ] ] ) ] ) ] ) ] ) ] ) ; fhir:documentation [ fhir:v "Priority. Same shape as intent, and same reason." ] ] [ fhir:name [ fhir:v "findQuantity" ] ; fhir:source ( [ fhir:context [ fhir:v "requestGroup" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "qtyItem" ] ; fhir:condition [ fhir:v "linkId = 'quantity'" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "extractQuantity" ] ; fhir:source ( [ fhir:context [ fhir:v "qtyItem" ] ; fhir:element [ fhir:v "answer" ] ; fhir:listMode [ fhir:v "first" ] ; fhir:variable [ fhir:v "qtyAns" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "setQuantity" ] ; fhir:source ( [ fhir:context [ fhir:v "qtyAns" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "qtyValue" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "devReq" ] ; fhir:element [ fhir:v "quantity" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "qtyValue" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "findSupply" ] ; fhir:source ( [ fhir:context [ fhir:v "requestGroup" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "supplyItem" ] ; fhir:condition [ fhir:v "linkId = 'supply-method'" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "extractSupply" ] ; fhir:source ( [ fhir:context [ fhir:v "supplyItem" ] ; fhir:element [ fhir:v "answer" ] ; fhir:listMode [ fhir:v "first" ] ; fhir:variable [ fhir:v "supplyAns" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "createParameter" ] ; fhir:source ( [ fhir:context [ fhir:v "supplyAns" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "supplyCoding" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "devReq" ] ; fhir:element [ fhir:v "parameter" ] ; fhir:variable [ fhir:v "param" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "buildParamCode" ] ; fhir:source ( [ fhir:context [ fhir:v "supplyCoding" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "param" ] ; fhir:element [ fhir:v "code" ] ; fhir:variable [ fhir:v "paramCode" ] ; fhir:transform [ fhir:v "create" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "CodeableConcept" ] ] ) ] ) ; fhir:rule ( [ fhir:name [ fhir:v "buildParamCoding" ] ; fhir:source ( [ fhir:context [ fhir:v "supplyCoding" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "paramCode" ] ; fhir:element [ fhir:v "coding" ] ; fhir:variable [ fhir:v "paramCoding" ] ; fhir:transform [ fhir:v "create" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Coding" ] ] ) ] ) ; fhir:rule ( [ fhir:name [ fhir:v "setParamSystem" ] ; fhir:source ( [ fhir:context [ fhir:v "supplyCoding" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "paramCoding" ] ; 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/device-order-codesystem" ] ] ) ] ) ] [ fhir:name [ fhir:v "setParamCode" ] ; fhir:source ( [ fhir:context [ fhir:v "supplyCoding" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "paramCoding" ] ; fhir:element [ fhir:v "code" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "supply-method" ] ] ) ] ) ] [ fhir:name [ fhir:v "setParamDisplay" ] ; fhir:source ( [ fhir:context [ fhir:v "supplyCoding" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "paramCoding" ] ; fhir:element [ fhir:v "display" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "How the device is supplied" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "buildParamValue" ] ; fhir:source ( [ fhir:context [ fhir:v "supplyCoding" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "param" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "paramValue" ] ; fhir:transform [ fhir:v "create" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "CodeableConcept" ] ] ) ] ) ; fhir:rule ( [ fhir:name [ fhir:v "setParamValueCoding" ] ; fhir:source ( [ fhir:context [ fhir:v "supplyCoding" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "paramValue" ] ; fhir:element [ fhir:v "coding" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "supplyCoding" ] ] ) ] ) ] [ fhir:name [ fhir:v "setParamValueText" ] ; fhir:source ( [ fhir:context [ fhir:v "supplyCoding" ] ; fhir:element [ fhir:v "display" ] ; fhir:variable [ fhir:v "supplyDisp" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "paramValue" ] ; fhir:element [ fhir:v "text" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "supplyDisp" ] ] ) ] ) ] ) ] ) ] ) ] ) ; fhir:documentation [ fhir:v "How it is supplied. DeviceRequest has no element for this, so it becomes a parameter:\r\nparameter.code names the question, parameter.value carries the answer." ] ] [ fhir:name [ fhir:v "findReason" ] ; fhir:source ( [ fhir:context [ fhir:v "requestGroup" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "reasonItem" ] ; fhir:condition [ fhir:v "linkId = 'reason'" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "extractReason" ] ; fhir:source ( [ fhir:context [ fhir:v "reasonItem" ] ; fhir:element [ fhir:v "answer" ] ; fhir:listMode [ fhir:v "first" ] ; fhir:variable [ fhir:v "reasonAns" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "setReason" ] ; fhir:source ( [ fhir:context [ fhir:v "reasonAns" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "reasonText" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "devReq" ] ; fhir:element [ fhir:v "reason" ] ; fhir:variable [ fhir:v "reasonRef" ] ] [ fhir:context [ fhir:v "reasonRef" ] ; fhir:element [ fhir:v "concept" ] ; fhir:variable [ fhir:v "reasonCC" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "setReasonText" ] ; fhir:source ( [ fhir:context [ fhir:v "reasonText" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "reasonCC" ] ; fhir:element [ fhir:v "text" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "reasonText" ] ] ) ] ) ] ) ] ) ] ) ; fhir:documentation [ fhir:v "Reason is free text on the form, so it lands as CodeableReference.concept.text with\r\nno coding. A coded reason would need a value set the form does not offer." ] ] [ fhir:name [ fhir:v "findInstruction" ] ; fhir:source ( [ fhir:context [ fhir:v "requestGroup" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "instructionItem" ] ; fhir:condition [ fhir:v "linkId = 'patient-instructions'" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "extractInstruction" ] ; fhir:source ( [ fhir:context [ fhir:v "instructionItem" ] ; fhir:element [ fhir:v "answer" ] ; fhir:listMode [ fhir:v "first" ] ; fhir:variable [ fhir:v "instructionAns" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "createInstructionExt" ] ; fhir:source ( [ fhir:context [ fhir:v "instructionAns" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "instructionText" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "devReq" ] ; fhir:element [ fhir:v "extension" ] ; fhir:variable [ fhir:v "instructionExt" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "setInstructionExtUrl" ] ; fhir:source ( [ fhir:context [ fhir:v "instructionText" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "instructionExt" ] ; fhir:element [ fhir:v "url" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "https://fhir.slade360.co.ke/fhir/StructureDefinition/sghi-device-patient-instruction" ] ] ) ] ) ] [ fhir:name [ fhir:v "setInstructionExtValue" ] ; fhir:source ( [ fhir:context [ fhir:v "instructionText" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "instructionExt" ] ; fhir:element [ fhir:v "value" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "instructionText" ] ] ) ] ) ] ) ] ) ] ) ; fhir:documentation [ fhir:v "Patient instruction. DeviceRequest has no equivalent of Dosage.patientInstruction, so\r\nthis rides a local extension rather than collapsing into note alongside the message\r\nwritten for the dispensing team." ] ] [ fhir:name [ fhir:v "findNotes" ] ; fhir:source ( [ fhir:context [ fhir:v "requestGroup" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "notesItem" ] ; fhir:condition [ fhir:v "linkId = 'notes'" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "extractNotes" ] ; fhir:source ( [ fhir:context [ fhir:v "notesItem" ] ; fhir:element [ fhir:v "answer" ] ; fhir:listMode [ fhir:v "first" ] ; fhir:variable [ fhir:v "notesAns" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "createNote" ] ; fhir:source ( [ fhir:context [ fhir:v "notesAns" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "notesText" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "devReq" ] ; fhir:element [ fhir:v "note" ] ; fhir:variable [ fhir:v "note" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "setNoteText" ] ; fhir:source ( [ fhir:context [ fhir:v "notesText" ] ] ) ; 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 "notesText" ] ] ) ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "setDevReqIdAndFullUrl" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "devReq" ] ; fhir:element [ fhir:v "id" ] ; fhir:transform [ fhir:v "uuid" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "SetDeviceRequestFullUrl" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "devReq" ] ] [ 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 "reqMethod" ] ; 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 "reqUrl" ] ; 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 "DeviceRequest" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "SetDeviceRequestFullUrl" ] ; fhir:input ( [ fhir:name [ fhir:v "devReq" ] ; fhir:type [ fhir:v "DeviceRequest" ] ; 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 "devReq" ] ; 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/DeviceRequest/" ] ] [ 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