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/ExtractBloodRequisition> a fhir:StructureMap ; fhir:nodeRole fhir:treeRoot ; fhir:id [ fhir:v "ExtractBloodRequisition"] ; # 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 ExtractBloodRequisition</b></p><a name=\"ExtractBloodRequisition\"> </a><a name=\"hcExtractBloodRequisition\"> </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/ExtractBloodRequisition'</span>\r\n<span style=\"color: #cc00cc\">/// <b>name</b> = </span><span style=\"color: blue\">'ExtractBloodRequisition'</span>\r\n<span style=\"color: #cc00cc\">/// <b>title</b> = </span><span style=\"color: blue\">'Blood Requisition Extraction'</span>\r\n<span style=\"color: #cc00cc\">/// <b>status</b> = </span><span style=\"color: blue\">'active'</span>\r\n<span style=\"color: #cc00cc\">/// <b>description</b> = </span><span style=\"color: blue\">'The requisition is the whole transfusion chain on one sheet, and it extracts as the chain: a ServiceRequest per product asked for, coded SNOMED 116859006 and carrying its own quantity and urgency, so two units of packed cells and one of platelets are two orders and not one; a Consent recording that the patient agreed; Observations for the recipient\\'s ABO and Rh under LOINC 883-9 and 10331-7 and for each issued unit\\'s group under the blood-product-unit codes 14578-9 and 14907-0, with the bag number as the specimen identity; the cross-match result per unit, interpreted abnormal when incompatible; and any transfusion reaction as an Observation coded SNOMED 82545002 and flagged abnormal. The two abnormal flags are the point: an incompatible cross-match and a reaction are the two findings on this form that have to be impossible to miss.'</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<b>uses</b><span style=\"color: navy\"> "</span><a href=\"http://hl7.org/fhir/R5/servicerequest.html\" title=\"ServiceRequest\">http://hl7.org/fhir/StructureDefinition/ServiceRequest</a><span style=\"color: navy\">" </span><b>alias </b>ServiceRequest <b>as </b><b>target</b>\r\n<b>uses</b><span style=\"color: navy\"> "</span><a href=\"http://hl7.org/fhir/R5/consent.html\" title=\"Consent\">http://hl7.org/fhir/StructureDefinition/Consent</a><span style=\"color: navy\">" </span><b>alias </b>Consent <b>as </b><b>target</b>\r\n\r\n<b>group </b>ExtractBloodRequisition<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\">── One order per product ───────────────────────────────────────────────</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">Per product row and not one order for the sheet. The units, the urgency</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">and the date required differ by product, and a single order could only</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">carry one set of them.</span>\r\n qr.item<b> as </b><span style=\"color: maroon\">p</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'product') and item.where(linkId = 'product/type').answer.value.exists()<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -> </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">entry</span><span style=\"color: navy\">, </span> entry.resource = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'ServiceRequest'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">sr</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span> sr<span style=\"color: navy\">, </span> entry<b> then </b>BuildServiceRequestBase<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">sr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span> <i>"base"</i><span style=\"color: navy\">;</span>\r\n p<span style=\"color: navy\"><b> -> </b></span>sr.status = <span style=\"color: blue\">'active'</span> <i>"status"</i><span style=\"color: navy\">;</span>\r\n p<span style=\"color: navy\"><b> -> </b></span>sr.intent = <span style=\"color: blue\">'order'</span> <i>"intent"</i><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>sr.encounter = <span style=\"color: maroon\">e</span><span style=\"color: navy\">;</span>\r\n qr.authored<b> as </b><span style=\"color: maroon\">t</span><span style=\"color: navy\"><b> -> </b></span>sr.authoredOn = <span style=\"color: maroon\">t</span> <i>"authoredOn"</i><span style=\"color: navy\">;</span>\r\n p<span style=\"color: navy\"><b> -> </b></span>sr.category<b> as </b><span style=\"color: maroon\">cat</span><b> then</b><span style=\"color: navy\"> {\r\n</span> p<span style=\"color: navy\"><b> -> </b></span>cat.coding<b> as </b><span style=\"color: maroon\">cg</span><b> then</b><span style=\"color: navy\"> {\r\n</span> p<span style=\"color: navy\"><b> -> </b></span>cg.system = <span style=\"color: blue\">'http://snomed.info/sct'</span> <i>"sys"</i><span style=\"color: navy\">;</span>\r\n p<span style=\"color: navy\"><b> -> </b></span>cg.code = <span style=\"color: blue\">'116859006'</span> <i>"cd"</i><span style=\"color: navy\">;</span>\r\n p<span style=\"color: navy\"><b> -> </b></span>cg.display = <span style=\"color: blue\">'Transfusion of blood product'</span> <i>"dsp"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"coding"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"category"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">The product's own coding travels, so a request for fresh frozen plasma</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">is coded as that and not as "blood".</span>\r\n p.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'product/type'<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.value<b> as </b><span style=\"color: maroon\">cv</span><span style=\"color: navy\"><b> -> </b></span> sr.code<b> as </b><span style=\"color: maroon\">cr</span><span style=\"color: navy\">, </span> cr.concept<b> as </b><span style=\"color: maroon\">cc</span><b> then</b><span style=\"color: navy\"> {\r\n</span> cv<span style=\"color: navy\"><b> -> </b></span>cc.coding = <span style=\"color: maroon\">cv</span> <i>"coding"</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>cc.text = <span style=\"color: maroon\">d</span> <i>"text"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"codeFromAnswer"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"productTypeRule"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">Units as the order quantity. A SimpleQuantity, and the unit is 'unit'</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">in the sense the blood bank means -- one bag -- not a UCUM measure.</span>\r\n p.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'product/units') 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.value<b> as </b><span style=\"color: maroon\">v</span><span style=\"color: navy\"><b> -> </b></span>sr.quantity = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'Quantity'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">q</span><b> then</b><span style=\"color: navy\"> {\r\n</span> v<span style=\"color: navy\"><b> -> </b></span>q.value = <span style=\"color: maroon\">v</span> <i>"qValue"</i><span style=\"color: navy\">;</span>\r\n v<span style=\"color: navy\"><b> -> </b></span>q.unit = <span style=\"color: blue\">'unit of blood product'</span> <i>"qUnit"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"quantity"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"unitsRule"</i><span style=\"color: navy\">;</span>\r\n p.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'product/date-required') 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.value<b> as </b><span style=\"color: maroon\">v</span><span style=\"color: navy\"><b> -> </b></span>sr.occurrence = <b>cast</b><span style=\"color: navy\">(</span><span style=\"color: maroon\">v</span><span style=\"color: navy\">, </span><span style=\"color: blue\">'dateTime'</span><span style=\"color: navy\">)</span> <i>"occurrence"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"dateRequiredRule"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>sr<b> then </b>SetBloodRequestCommon<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">sr</span><span style=\"color: navy\">)</span> <i>"common"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"productRequest"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">── Consent to transfusion ──────────────────────────────────────────────</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">decision follows the answer: 'permit' when the patient agreed, 'deny'</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">when they did not. A refused transfusion recorded as an absent consent</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">would be indistinguishable from one nobody asked about.</span>\r\n qr.item<b> as </b><span style=\"color: maroon\">g</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'consent'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span> g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'consent/given') and answer.value.exists()<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -> </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">entry</span><span style=\"color: navy\">, </span> entry.resource = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'Consent'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">con</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span> con<span style=\"color: navy\">, </span> entry<b> then </b>BuildConsentBase<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">con</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span> <i>"base"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>con.status = <span style=\"color: blue\">'active'</span> <i>"status"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>con.category<b> as </b><span style=\"color: maroon\">cat</span><b> then</b><span style=\"color: navy\"> {\r\n</span> it<span style=\"color: navy\"><b> -> </b></span>cat.coding<b> as </b><span style=\"color: maroon\">cg</span><b> then</b><span style=\"color: navy\"> {\r\n</span> it<span style=\"color: navy\"><b> -> </b></span>cg.system = <span style=\"color: blue\">'http://loinc.org'</span> <i>"sys"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>cg.code = <span style=\"color: blue\">'64293-4'</span> <i>"cd"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>cg.display = <span style=\"color: blue\">'Procedure consent Document'</span> <i>"dsp"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"coding"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"category"</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> con.period<b> as </b><span style=\"color: maroon\">per</span><span style=\"color: navy\">, </span> per.start = <span style=\"color: maroon\">t</span> <i>"periodStart"</i><span style=\"color: navy\">;</span>\r\n it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span> a.value<b> as </b><span style=\"color: maroon\">cv</span><b> where </b><span style=\"color: navy\">(</span>code = 'Y'<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -> </b></span>con.decision = <span style=\"color: blue\">'permit'</span> <i>"permit"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"permitRule"</i><span style=\"color: navy\">;</span>\r\n it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span> a.value<b> as </b><span style=\"color: maroon\">cv</span><b> where </b><span style=\"color: navy\">(</span>code = 'N'<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -> </b></span>con.decision = <span style=\"color: blue\">'deny'</span> <i>"deny"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"denyRule"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>con.provision<b> as </b><span style=\"color: maroon\">prov</span><b> then</b><span style=\"color: navy\"> {\r\n</span> it<span style=\"color: navy\"><b> -> </b></span>prov.code<b> as </b><span style=\"color: maroon\">pc</span><b> then</b><span style=\"color: navy\"> {\r\n</span> it<span style=\"color: navy\"><b> -> </b></span>pc.coding<b> as </b><span style=\"color: maroon\">cg</span><b> then</b><span style=\"color: navy\"> {\r\n</span> it<span style=\"color: navy\"><b> -> </b></span>cg.system = <span style=\"color: blue\">'http://snomed.info/sct'</span> <i>"sys"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>cg.code = <span style=\"color: blue\">'116859006'</span> <i>"cd"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>cg.display = <span style=\"color: blue\">'Transfusion of blood product'</span> <i>"dsp"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"coding"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>pc.text = <span style=\"color: blue\">'Transfusion of the blood products requested on this form'</span> <i>"provText"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"provCode"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"provision"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"transfusionConsent"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"consentGroup"</i><span style=\"color: navy\">;</span>\r\n qr.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'reason-for-transfusion') and answer.value.exists()<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -> </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">entry</span><span style=\"color: navy\">, </span> entry.resource = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'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>BuildObsBase<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span> <i>"base"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>obs<b> then </b>SetSurveyCategory<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">)</span> <i>"category"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>obs.code<b> as </b><span style=\"color: maroon\">cc</span><b> then</b><span style=\"color: navy\"> {\r\n</span> it<span style=\"color: navy\"><b> -> </b></span>cc.coding<b> as </b><span style=\"color: maroon\">cg</span><b> then</b><span style=\"color: navy\"> {\r\n</span> it<span style=\"color: navy\"><b> -> </b></span>cg.system = <span style=\"color: blue\">'https://fhir.slade360.co.ke/fhir/CodeSystem/concept-codesystem'</span> <i>"sys"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>cg.code = <span style=\"color: blue\">'transfusion-indication-for-transfusion'</span> <i>"cd"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>cg.display = <span style=\"color: blue\">'Indication for transfusion'</span> <i>"dsp"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"coding"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"code"</i><span style=\"color: navy\">;</span>\r\n it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span> a.value<b> as </b><span style=\"color: maroon\">txt</span><span style=\"color: navy\"><b> -> </b></span> obs.note<b> as </b><span style=\"color: maroon\">n</span><span style=\"color: navy\">, </span> n.text = <span style=\"color: maroon\">txt</span> <i>"text"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"narr_transfusion_indication_for_transfusion"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">── The recipient's group ───────────────────────────────────────────────</span>\r\n qr.item<b> as </b><span style=\"color: maroon\">g</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'recipient-group'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span> g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'recipient-group/abo') and answer.value.exists()<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -> </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">entry</span><span style=\"color: navy\">, </span> entry.resource = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'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>BuildObsBase<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span> <i>"base"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>obs<b> then </b>SetLaboratoryCategory<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">)</span> <i>"category"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>obs.code<b> as </b><span style=\"color: maroon\">cc</span><b> then</b><span style=\"color: navy\"> {\r\n</span> it<span style=\"color: navy\"><b> -> </b></span>cc.coding<b> as </b><span style=\"color: maroon\">cg</span><b> then</b><span style=\"color: navy\"> {\r\n</span> it<span style=\"color: navy\"><b> -> </b></span>cg.system = <span style=\"color: blue\">'http://loinc.org'</span> <i>"sys"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>cg.code = <span style=\"color: blue\">'883-9'</span> <i>"cd"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>cg.display = <span style=\"color: blue\">'ABO group [Type] in Blood'</span> <i>"dsp"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"coding"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"code"</i><span style=\"color: navy\">;</span>\r\n it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span> a.value<b> as </b><span style=\"color: maroon\">cv</span><span style=\"color: navy\"><b> -> </b></span>obs.value = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'CodeableConcept'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">cc</span><b> then</b><span style=\"color: navy\"> {\r\n</span> cv<span style=\"color: navy\"><b> -> </b></span>cc.coding = <span style=\"color: maroon\">cv</span> <i>"valueCoding"</i><span style=\"color: navy\">;</span>\r\n cv.display<b> as </b><span style=\"color: maroon\">d</span><span style=\"color: navy\"><b> -> </b></span>cc.text = <span style=\"color: maroon\">d</span> <i>"valueText"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"codedValue"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"coded_883_9"</i><span style=\"color: navy\">;</span>\r\n g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'recipient-group/rhesus') and answer.value.exists()<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -> </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">entry</span><span style=\"color: navy\">, </span> entry.resource = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'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>BuildObsBase<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span> <i>"base"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>obs<b> then </b>SetLaboratoryCategory<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">)</span> <i>"category"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>obs.code<b> as </b><span style=\"color: maroon\">cc</span><b> then</b><span style=\"color: navy\"> {\r\n</span> it<span style=\"color: navy\"><b> -> </b></span>cc.coding<b> as </b><span style=\"color: maroon\">cg</span><b> then</b><span style=\"color: navy\"> {\r\n</span> it<span style=\"color: navy\"><b> -> </b></span>cg.system = <span style=\"color: blue\">'http://loinc.org'</span> <i>"sys"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>cg.code = <span style=\"color: blue\">'10331-7'</span> <i>"cd"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>cg.display = <span style=\"color: blue\">'Rh [Type] in Blood'</span> <i>"dsp"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"coding"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"code"</i><span style=\"color: navy\">;</span>\r\n it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span> a.value<b> as </b><span style=\"color: maroon\">cv</span><span style=\"color: navy\"><b> -> </b></span>obs.value = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'CodeableConcept'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">cc</span><b> then</b><span style=\"color: navy\"> {\r\n</span> cv<span style=\"color: navy\"><b> -> </b></span>cc.coding = <span style=\"color: maroon\">cv</span> <i>"valueCoding"</i><span style=\"color: navy\">;</span>\r\n cv.display<b> as </b><span style=\"color: maroon\">d</span><span style=\"color: navy\"><b> -> </b></span>cc.text = <span style=\"color: maroon\">d</span> <i>"valueText"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"codedValue"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"coded_10331_7"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"recipientGroupGroup"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">── Each issued unit ────────────────────────────────────────────────────</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">Per bag. The bag number is the identity a look-back investigation starts</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">from, so it rides on every Observation about that unit rather than only on</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">the row -- an Observation that says "incompatible" and cannot say which bag</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">is not usable evidence.</span>\r\n qr.item<b> as </b><span style=\"color: maroon\">u</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'issued-unit') and item.where(linkId = 'issued-unit/bag-number').answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span> u.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'issued-unit/donor-abo') and answer.value.exists()<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -> </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">entry</span><span style=\"color: navy\">, </span> entry.resource = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'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>BuildObsBase<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span> <i>"base"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>obs<b> then </b>SetLaboratoryCategory<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">)</span> <i>"category"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>obs.code<b> as </b><span style=\"color: maroon\">cc</span><b> then</b><span style=\"color: navy\"> {\r\n</span> it<span style=\"color: navy\"><b> -> </b></span>cc.coding<b> as </b><span style=\"color: maroon\">cg</span><b> then</b><span style=\"color: navy\"> {\r\n</span> it<span style=\"color: navy\"><b> -> </b></span>cg.system = <span style=\"color: blue\">'http://loinc.org'</span> <i>"sys"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>cg.code = <span style=\"color: blue\">'14578-9'</span> <i>"cd"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>cg.display = <span style=\"color: blue\">'ABO group [Type] in Blood from Blood product unit'</span> <i>"dsp"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"coding"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"code"</i><span style=\"color: navy\">;</span>\r\n it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span> a.value<b> as </b><span style=\"color: maroon\">cv</span><span style=\"color: navy\"><b> -> </b></span>obs.value = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'CodeableConcept'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">cc</span><b> then</b><span style=\"color: navy\"> {\r\n</span> cv<span style=\"color: navy\"><b> -> </b></span>cc.coding = <span style=\"color: maroon\">cv</span> <i>"valueCoding"</i><span style=\"color: navy\">;</span>\r\n cv.display<b> as </b><span style=\"color: maroon\">d</span><span style=\"color: navy\"><b> -> </b></span>cc.text = <span style=\"color: maroon\">d</span> <i>"valueText"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"codedValue"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n u<span style=\"color: navy\"><b> -> </b></span>obs<b> then </b>SetUnitIdentity<span style=\"color: navy\">(</span><span style=\"color: maroon\">u</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">)</span> <i>"bagIdentity"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"unit_donor_abo"</i><span style=\"color: navy\">;</span>\r\n u.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'issued-unit/donor-rhesus') and answer.value.exists()<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -> </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">entry</span><span style=\"color: navy\">, </span> entry.resource = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'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>BuildObsBase<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span> <i>"base"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>obs<b> then </b>SetLaboratoryCategory<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">)</span> <i>"category"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>obs.code<b> as </b><span style=\"color: maroon\">cc</span><b> then</b><span style=\"color: navy\"> {\r\n</span> it<span style=\"color: navy\"><b> -> </b></span>cc.coding<b> as </b><span style=\"color: maroon\">cg</span><b> then</b><span style=\"color: navy\"> {\r\n</span> it<span style=\"color: navy\"><b> -> </b></span>cg.system = <span style=\"color: blue\">'http://loinc.org'</span> <i>"sys"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>cg.code = <span style=\"color: blue\">'14907-0'</span> <i>"cd"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>cg.display = <span style=\"color: blue\">'Rh [Type] in Blood from Blood product unit'</span> <i>"dsp"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"coding"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"code"</i><span style=\"color: navy\">;</span>\r\n it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span> a.value<b> as </b><span style=\"color: maroon\">cv</span><span style=\"color: navy\"><b> -> </b></span>obs.value = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'CodeableConcept'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">cc</span><b> then</b><span style=\"color: navy\"> {\r\n</span> cv<span style=\"color: navy\"><b> -> </b></span>cc.coding = <span style=\"color: maroon\">cv</span> <i>"valueCoding"</i><span style=\"color: navy\">;</span>\r\n cv.display<b> as </b><span style=\"color: maroon\">d</span><span style=\"color: navy\"><b> -> </b></span>cc.text = <span style=\"color: maroon\">d</span> <i>"valueText"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"codedValue"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n u<span style=\"color: navy\"><b> -> </b></span>obs<b> then </b>SetUnitIdentity<span style=\"color: navy\">(</span><span style=\"color: maroon\">u</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">)</span> <i>"bagIdentity"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"unit_donor_rhesus"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">── The cross-match result ────────────────────────────────────────────</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">Interpreted, not just recorded. An incompatible cross-match is the one</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">result on this sheet that must stop a transfusion, and leaving a reader</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">to notice the word is not good enough.</span>\r\n u.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'issued-unit/cross-match-result') and answer.value.exists()<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -> </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">entry</span><span style=\"color: navy\">, </span> entry.resource = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'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>BuildObsBase<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span> <i>"base"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>obs<b> then </b>SetLaboratoryCategory<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">)</span> <i>"category"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>obs.code<b> as </b><span style=\"color: maroon\">cc</span><b> then</b><span style=\"color: navy\"> {\r\n</span> it<span style=\"color: navy\"><b> -> </b></span>cc.coding<b> as </b><span style=\"color: maroon\">cg</span><b> then</b><span style=\"color: navy\"> {\r\n</span> it<span style=\"color: navy\"><b> -> </b></span>cg.system = <span style=\"color: blue\">'https://fhir.slade360.co.ke/fhir/CodeSystem/concept-codesystem'</span> <i>"sys"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>cg.code = <span style=\"color: blue\">'transfusion-cross-match-result'</span> <i>"cd"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>cg.display = <span style=\"color: blue\">'Cross-match result'</span> <i>"dsp"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"coding"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"code"</i><span style=\"color: navy\">;</span>\r\n it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span> a.value<b> as </b><span style=\"color: maroon\">cv</span><span style=\"color: navy\"><b> -> </b></span>obs.value = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'CodeableConcept'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">cc</span><b> then</b><span style=\"color: navy\"> {\r\n</span> cv<span style=\"color: navy\"><b> -> </b></span>cc.coding = <span style=\"color: maroon\">cv</span> <i>"valueCoding"</i><span style=\"color: navy\">;</span>\r\n cv.display<b> as </b><span style=\"color: maroon\">d</span><span style=\"color: navy\"><b> -> </b></span>cc.text = <span style=\"color: maroon\">d</span> <i>"valueText"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"codedValue"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span> a.value<b> as </b><span style=\"color: maroon\">cv</span><b> where </b><span style=\"color: navy\">(</span>code = 'xmatch-incompatible'<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -> </b></span>obs.interpretation<b> as </b><span style=\"color: maroon\">interp</span><b> then</b><span style=\"color: navy\"> {\r\n</span> cv<span style=\"color: navy\"><b> -> </b></span>interp.coding<b> as </b><span style=\"color: maroon\">icg</span><b> then</b><span style=\"color: navy\"> {\r\n</span> cv<span style=\"color: navy\"><b> -> </b></span>icg.system = <span style=\"color: blue\">'http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation'</span> <i>"sys"</i><span style=\"color: navy\">;</span>\r\n cv<span style=\"color: navy\"><b> -> </b></span>icg.code = <span style=\"color: blue\">'A'</span> <i>"cd"</i><span style=\"color: navy\">;</span>\r\n cv<span style=\"color: navy\"><b> -> </b></span>icg.display = <span style=\"color: blue\">'Abnormal'</span> <i>"dsp"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"coding"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"incompatibleInterp"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"interpretationRule"</i><span style=\"color: navy\">;</span>\r\n u<span style=\"color: navy\"><b> -> </b></span>obs<b> then </b>SetUnitIdentity<span style=\"color: navy\">(</span><span style=\"color: maroon\">u</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">)</span> <i>"bagIdentity"</i><span style=\"color: navy\">;</span>\r\n u.item<b> as </b><span style=\"color: maroon\">cb</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'issued-unit/collected-by') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span> cb.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span> a.value<b> as </b><span style=\"color: maroon\">ref</span><span style=\"color: navy\"><b> -> </b></span>obs.performer = <span style=\"color: maroon\">ref</span> <i>"collectedBy"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"collectedByRule"</i><span style=\"color: navy\">;</span>\r\n qr.item<b> as </b><span style=\"color: maroon\">lab</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'laboratory'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span> lab.item<b> as </b><span style=\"color: maroon\">xb</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'laboratory/cross-match-done-by') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span> xb.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span> a.value<b> as </b><span style=\"color: maroon\">ref</span><span style=\"color: navy\"><b> -> </b></span>obs.performer = <span style=\"color: maroon\">ref</span> <i>"crossMatchedBy"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"doneByRule"</i><span style=\"color: navy\">;</span>\r\n lab.item<b> as </b><span style=\"color: maroon\">xa</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'laboratory/cross-match-done-at') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span> xa.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span> a.value<b> as </b><span style=\"color: maroon\">v</span><span style=\"color: navy\"><b> -> </b></span>obs.effective = <span style=\"color: maroon\">v</span> <i>"crossMatchedAt"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"doneAtRule"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"labGroup"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"crossMatchObservation"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"issuedUnitGroup"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">── A transfusion reaction ──────────────────────────────────────────────</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">Flagged abnormal whenever one was observed. This is a haemovigilance</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">record: it has to be findable by anyone querying reactions across the</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">hospital, not only by whoever opens this form.</span>\r\n qr.item<b> as </b><span style=\"color: maroon\">g</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'reaction'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span> g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'reaction/observed') and answer.value.exists()<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -> </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">entry</span><span style=\"color: navy\">, </span> entry.resource = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'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>BuildObsBase<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span> <i>"base"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>obs<b> then </b>SetExamCategory<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">)</span> <i>"category"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>obs.code<b> as </b><span style=\"color: maroon\">cc</span><b> then</b><span style=\"color: navy\"> {\r\n</span> it<span style=\"color: navy\"><b> -> </b></span>cc.coding<b> as </b><span style=\"color: maroon\">cg</span><b> then</b><span style=\"color: navy\"> {\r\n</span> it<span style=\"color: navy\"><b> -> </b></span>cg.system = <span style=\"color: blue\">'http://snomed.info/sct'</span> <i>"sys"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>cg.code = <span style=\"color: blue\">'82545002'</span> <i>"cd"</i><span style=\"color: navy\">;</span>\r\n it<span style=\"color: navy\"><b> -> </b></span>cg.display = <span style=\"color: blue\">'Blood transfusion reaction'</span> <i>"dsp"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"coding"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"code"</i><span style=\"color: navy\">;</span>\r\n it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span> a.value<b> as </b><span style=\"color: maroon\">cv</span><span style=\"color: navy\"><b> -> </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\">vc</span><b> then</b><span style=\"color: navy\"> {\r\n</span> cv<span style=\"color: navy\"><b> -> </b></span>vc.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>vc.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\">}</span><span style=\"color: navy\">;</span>\r\n it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span> a.value<b> as </b><span style=\"color: maroon\">cv</span><b> where </b><span style=\"color: navy\">(</span>code = 'Y'<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -> </b></span>obs.interpretation<b> as </b><span style=\"color: maroon\">interp</span><b> then</b><span style=\"color: navy\"> {\r\n</span> cv<span style=\"color: navy\"><b> -> </b></span>interp.coding<b> as </b><span style=\"color: maroon\">icg</span><b> then</b><span style=\"color: navy\"> {\r\n</span> cv<span style=\"color: navy\"><b> -> </b></span>icg.system = <span style=\"color: blue\">'http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation'</span> <i>"sys"</i><span style=\"color: navy\">;</span>\r\n cv<span style=\"color: navy\"><b> -> </b></span>icg.code = <span style=\"color: blue\">'A'</span> <i>"cd"</i><span style=\"color: navy\">;</span>\r\n cv<span style=\"color: navy\"><b> -> </b></span>icg.display = <span style=\"color: blue\">'Abnormal'</span> <i>"dsp"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"coding"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"reactionInterp"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"interpretationRule"</i><span style=\"color: navy\">;</span>\r\n g.item<b> as </b><span style=\"color: maroon\">oa</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'reaction/observed-at') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span> oa.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span> a.value<b> as </b><span style=\"color: maroon\">v</span><span style=\"color: navy\"><b> -> </b></span>obs.effective = <span style=\"color: maroon\">v</span> <i>"observedAt"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"observedAtRule"</i><span style=\"color: navy\">;</span>\r\n g.item<b> as </b><span style=\"color: maroon\">ob</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'reaction/observed-by') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span> ob.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span> a.value<b> as </b><span style=\"color: maroon\">ref</span><span style=\"color: navy\"><b> -> </b></span>obs.performer = <span style=\"color: maroon\">ref</span> <i>"observedBy"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"observedByRule"</i><span style=\"color: navy\">;</span>\r\n g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'reaction/description'<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.value<b> as </b><span style=\"color: maroon\">txt</span><span style=\"color: navy\"><b> -> </b></span> obs.note<b> as </b><span style=\"color: maroon\">n</span><span style=\"color: navy\">, </span> n.text = <span style=\"color: maroon\">txt</span> <i>"text"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"note"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"reactionObservation"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"reactionGroup"</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><span style=\"color: navy\">// </span><span style=\"color: green\">The bag number, and how long the unit is good for, as identifiers and a note</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">on every Observation about that unit. Factored out because it is identical</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">for the ABO, the Rh and the cross-match, and a look-back investigation that</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">finds two of the three tagged is a look-back that failed.</span>\r\n<b>group </b>SetUnitIdentity<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">u</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> u.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'issued-unit/bag-number') 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.value<b> as </b><span style=\"color: maroon\">txt</span><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> txt<span style=\"color: navy\"><b> -> </b></span>ident.system = <span style=\"color: blue\">'https://fhir.slade360.co.ke/fhir/identifier/blood-bag-number'</span> <i>"identSystem"</i><span style=\"color: navy\">;</span>\r\n txt<span style=\"color: navy\"><b> -> </b></span>ident.value = <span style=\"color: maroon\">txt</span> <i>"identValue"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"bagIdentifier"</i><span style=\"color: navy\">;</span>\r\n a.value<b> as </b><span style=\"color: maroon\">txt</span><span style=\"color: navy\"><b> -> </b></span> obs.specimen = <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\">sref</span><span style=\"color: navy\">, </span> sref.display = <span style=\"color: maroon\">txt</span> <i>"specimenDisplay"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"bagNumberRule"</i><span style=\"color: navy\">;</span>\r\n u.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'issued-unit/expiry-date') 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.value<b> as </b><span style=\"color: maroon\">v</span><span style=\"color: navy\"><b> -> </b></span> obs.note<b> as </b><span style=\"color: maroon\">n</span><span style=\"color: navy\">, </span> n.text = <span style=\"color: blue\">'Unit expiry date recorded on the requisition'</span> <i>"expiryNote"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"expiryRule"</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\">Everything every product order on the sheet shares: who asked, from where,</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">how urgently, and when the blood is reserved until.</span>\r\n<b>group </b>SetBloodRequestCommon<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\">sr</span><span style=\"color: navy\"> : </span>ServiceRequest<span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span> qr.item<b> as </b><span style=\"color: maroon\">g</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'request'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span> g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'request/requester') 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.value<b> as </b><span style=\"color: maroon\">ref</span><span style=\"color: navy\"><b> -> </b></span>sr.requester = <span style=\"color: maroon\">ref</span> <i>"requester"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"requesterRule"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">Priority is a code, not a Coding. The form's urgency codes are local --</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">desperate, urgent, elective, as printed -- so they are mapped onto the</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">three request-priority codes rather than passed through.</span>\r\n g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'request/urgency') 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.value<b> as </b><span style=\"color: maroon\">cv</span><b> where </b><span style=\"color: navy\">(</span>code = 'urgency-desperate'<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -> </b></span>sr.priority = <span style=\"color: blue\">'stat'</span> <i>"stat"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"desperateRule"</i><span style=\"color: navy\">;</span>\r\n it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span> a.value<b> as </b><span style=\"color: maroon\">cv</span><b> where </b><span style=\"color: navy\">(</span>code = 'urgency-urgent'<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -> </b></span>sr.priority = <span style=\"color: blue\">'urgent'</span> <i>"urgent"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"urgentRule"</i><span style=\"color: navy\">;</span>\r\n it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span> a.value<b> as </b><span style=\"color: maroon\">cv</span><b> where </b><span style=\"color: navy\">(</span>code = 'urgency-elective'<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -> </b></span>sr.priority = <span style=\"color: blue\">'routine'</span> <i>"routine"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"electiveRule"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"urgencyRule"</i><span style=\"color: navy\">;</span>\r\n g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'request/department') 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.value<b> as </b><span style=\"color: maroon\">txt</span><span style=\"color: navy\"><b> -> </b></span> sr.note<b> as </b><span style=\"color: maroon\">n</span><span style=\"color: navy\">, </span> n.text = <span style=\"color: maroon\">txt</span> <i>"departmentNote"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"departmentRule"</i><span style=\"color: navy\">;</span>\r\n g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'request/room-number') 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.value<b> as </b><span style=\"color: maroon\">txt</span><span style=\"color: navy\"><b> -> </b></span> sr.note<b> as </b><span style=\"color: maroon\">n</span><span style=\"color: navy\">, </span> n.text = <span style=\"color: maroon\">txt</span> <i>"roomNote"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"roomRule"</i><span style=\"color: navy\">;</span>\r\n g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'request/bed-number') 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.value<b> as </b><span style=\"color: maroon\">txt</span><span style=\"color: navy\"><b> -> </b></span> sr.note<b> as </b><span style=\"color: maroon\">n</span><span style=\"color: navy\">, </span> n.text = <span style=\"color: maroon\">txt</span> <i>"bedNote"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"bedRule"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"requestGroup"</i><span style=\"color: navy\">;</span>\r\n qr.item<b> as </b><span style=\"color: maroon\">lab</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'laboratory'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span> lab.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'laboratory/lab-registration-number') 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.value<b> as </b><span style=\"color: maroon\">txt</span><span style=\"color: navy\"><b> -> </b></span>sr.identifier<b> as </b><span style=\"color: maroon\">ident</span><b> then</b><span style=\"color: navy\"> {\r\n</span> txt<span style=\"color: navy\"><b> -> </b></span>ident.system = <span style=\"color: blue\">'https://fhir.slade360.co.ke/fhir/identifier/blood-bank-registration'</span> <i>"identSystem"</i><span style=\"color: navy\">;</span>\r\n txt<span style=\"color: navy\"><b> -> </b></span>ident.value = <span style=\"color: maroon\">txt</span> <i>"identValue"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"labIdentifier"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"labRegRule"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"labGroup"</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><span style=\"color: navy\">// </span><span style=\"color: green\">─────────────────────────────────────────────────────────────────────────────</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">Shared scaffolding. Repeated in each map rather than imported: the transform</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">engine resolves `imports` against whatever StructureMaps happen to be on the</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">server, and a form that stops extracting because a shared map was not</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">uploaded is a worse failure than a duplicated group.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">Two notes on what the publisher's StructureMap validator says about this file.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">Source parameters below are left untyped on purpose. Writing `: Element` makes</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">the validator compare QuestionnaireResponse.item against the literal 'Element'</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">and report them as incompatible with each other, which is noise, not a finding.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">`evaluate(context, expression)` is flagged as "takes 1 parameter but 2 were</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">found". Leave it. The FML parser in the same jar refuses the one-argument form</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">outright -- it wants a parameter, a comma, then the FHIRPath -- so the</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">publisher is objecting to what its own compiler emits. Two arguments is the</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">only form that compiles, and it is what the R5 transform engine executes.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">─────────────────────────────────────────────────────────────────────────────</span>\r\n<b>group </b>BuildObsBase<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">qr</span><span style=\"color: navy\"> : </span>QR, <b>target</b> <span style=\"color: maroon\">obs</span><span style=\"color: navy\"> : </span>Observation, <b>target</b> <span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>obs<b> then </b>SetResponseProvenance<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">)</span> <i>"responseProvenance"</i><span style=\"color: navy\">;</span>\r\n 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.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 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.source<b> as </b><span style=\"color: maroon\">src</span><span style=\"color: navy\"><b> -> </b></span>obs.performer = <span style=\"color: maroon\">src</span> <i>"performerFromSource"</i><span style=\"color: navy\">;</span>\r\n qr<b> where </b><span style=\"color: navy\">(</span>source.exists().not()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr.author<b> as </b><span style=\"color: maroon\">a</span><span style=\"color: navy\"><b> -> </b></span>obs.performer = <span style=\"color: maroon\">a</span> <i>"performerFromAuthor"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"performerFallback"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">A stored response's id already reads "QuestionnaireResponse/<id>", so it is</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">a relative reference as it stands. The hasValue() guard is what stops an</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">unsaved response -- one posted straight to $extract rather than saved first</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">-- from writing "QuestionnaireResponse/null" into the record.</span>\r\n qr.id<b> as </b><span style=\"color: maroon\">qid</span><b> where </b><span style=\"color: navy\">(</span>$this.hasValue()<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -> </b></span> obs.derivedFrom = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'Reference'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">ref</span><span style=\"color: navy\">, </span> ref.reference = <span style=\"color: maroon\">qid</span> <i>"linkQuestionnaireResponse"</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><span style=\"color: navy\">// </span><span style=\"color: green\">The two answer shapes a component can carry. Both read the answer through the</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">untyped `.value` accessor: reading `valueCoding` or `valueQuantity` by its</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">typed property name fails at transform time on HAPI R5 with "Attempt to read</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">invalid property ... on QuestionnaireResponse.item.answer".</span>\r\n<b>group </b>SetComponentCodedValue<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">it</span>, <b>target</b> <span style=\"color: maroon\">comp</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span> it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span> a.value<b> as </b><span style=\"color: maroon\">cv</span><span style=\"color: navy\"><b> -> </b></span>comp.value = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'CodeableConcept'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">cc</span><b> then</b><span style=\"color: navy\"> {\r\n</span> cv<span style=\"color: navy\"><b> -> </b></span>cc.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>cc.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\">}</span> <i>"componentAnswer"</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>SetComponentValue<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">it</span>, <b>target</b> <span style=\"color: maroon\">comp</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span> it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span> a.value<b> as </b><span style=\"color: maroon\">v</span><span style=\"color: navy\"><b> -> </b></span>comp.value = <span style=\"color: maroon\">v</span> <i>"plainValue"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"componentAnswer"</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>SetSurveyCategory<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">qr</span><span style=\"color: navy\"> : </span>QR, <b>target</b> <span style=\"color: maroon\">obs</span><span style=\"color: navy\"> : </span>Observation<span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>obs.category<b> as </b><span style=\"color: maroon\">cat</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>cat.coding<b> as </b><span style=\"color: maroon\">coding</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>coding.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>coding.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>coding.display = <span style=\"color: blue\">'Survey'</span> <i>"categoryDisplay"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"categoryCoding"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"category"</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>SetLaboratoryCategory<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">qr</span><span style=\"color: navy\"> : </span>QR, <b>target</b> <span style=\"color: maroon\">obs</span><span style=\"color: navy\"> : </span>Observation<span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>obs.category<b> as </b><span style=\"color: maroon\">cat</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>cat.coding<b> as </b><span style=\"color: maroon\">coding</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>coding.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>coding.code = <span style=\"color: blue\">'laboratory'</span> <i>"categoryCode"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>coding.display = <span style=\"color: blue\">'Laboratory'</span> <i>"categoryDisplay"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"categoryCoding"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"category"</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>SetExamCategory<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">qr</span><span style=\"color: navy\"> : </span>QR, <b>target</b> <span style=\"color: maroon\">obs</span><span style=\"color: navy\"> : </span>Observation<span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>obs.category<b> as </b><span style=\"color: maroon\">cat</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>cat.coding<b> as </b><span style=\"color: maroon\">coding</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>coding.system = <span style=\"color: blue\">'http://terminology.hl7.org/CodeSystem/observation-category'</span> <i>"categorySystem"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>coding.code = <span style=\"color: blue\">'exam'</span> <i>"categoryCode"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>coding.display = <span style=\"color: blue\">'Exam'</span> <i>"categoryDisplay"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"categoryCoding"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"category"</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>BuildServiceRequestBase<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">qr</span><span style=\"color: navy\"> : </span>QR, <b>target</b> <span style=\"color: maroon\">r</span><span style=\"color: navy\"> : </span>ServiceRequest, <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>r<b> then </b>SetResponseProvenance<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">r</span><span style=\"color: navy\">)</span> <i>"responseProvenance"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>r.id = <b>uuid</b><span style=\"color: navy\">(</span><span style=\"color: navy\">)</span><b> then </b>SetServiceRequestFullUrl<span style=\"color: navy\">(</span><span style=\"color: maroon\">r</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\">'ServiceRequest'</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.subject<b> as </b><span style=\"color: maroon\">s</span><span style=\"color: navy\"><b> -> </b></span>r.subject = <span style=\"color: maroon\">s</span><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>SetServiceRequestFullUrl<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">r</span><span style=\"color: navy\"> : </span>ServiceRequest, <b>target</b> <span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span> r.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/ServiceRequest/'</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><b>group </b>BuildConsentBase<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">qr</span><span style=\"color: navy\"> : </span>QR, <b>target</b> <span style=\"color: maroon\">r</span><span style=\"color: navy\"> : </span>Consent, <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>r<b> then </b>SetResponseProvenance<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">r</span><span style=\"color: navy\">)</span> <i>"responseProvenance"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>r.id = <b>uuid</b><span style=\"color: navy\">(</span><span style=\"color: navy\">)</span><b> then </b>SetConsentFullUrl<span style=\"color: navy\">(</span><span style=\"color: maroon\">r</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\">'Consent'</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.subject<b> as </b><span style=\"color: maroon\">s</span><span style=\"color: navy\"><b> -> </b></span>r.subject = <span style=\"color: maroon\">s</span><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>SetConsentFullUrl<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">r</span><span style=\"color: navy\"> : </span>Consent, <b>target</b> <span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span> r.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/Consent/'</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><span style=\"color: navy\">// </span><span style=\"color: green\">── Provenance and tenancy ───────────────────────────────────────────────────</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">Two tags on everything this map creates. The first says which questionnaire</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">produced it, so a form that reopens mid-admission recalls its own earlier</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">entries and not another form's. The second copies the tenant tags off the</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">response, because nothing else on the path puts them there.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">The code is the form's document type, not the questionnaire's id: every</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">environment mints its own ids, and there is only one set of maps, so an id</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">here would tie the tag to whichever environment stamped it.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">── Provenance and tenancy ───────────────────────────────────────────────────</span>\r\n<b>group </b>SetResponseProvenance<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">qr</span><span style=\"color: navy\"> : </span>QR, <b>target</b> <span style=\"color: maroon\">r</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>r.meta<b> as </b><span style=\"color: maroon\">m</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>m.tag<b> as </b><span style=\"color: maroon\">t</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>t.system = <span style=\"color: blue\">'http://slade360edi.com/questionnaire-provenance'</span> <i>"provenanceSystem"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>t.code = <span style=\"color: blue\">'blood-requisition'</span> <i>"provenanceCode"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>t.display = <span style=\"color: blue\">'Blood requisition form'</span> <i>"provenanceDisplay"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"provenanceTag"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"provenanceMeta"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">Every tag the response carries, onto the resource. `meta` is 0..1, so this</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">lands on the same meta the rule above created rather than a second one.</span>\r\n qr.meta<b> as </b><span style=\"color: maroon\">qm</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qm.tag<b> as </b><span style=\"color: maroon\">qt</span><span style=\"color: navy\"><b> -> </b></span> r.meta<b> as </b><span style=\"color: maroon\">m</span><span style=\"color: navy\">, </span> m.tag = <span style=\"color: maroon\">qt</span> <i>"copyTag"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"tenantTags"</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/ExtractBloodRequisition"^^xsd:anyURI] ; # fhir:version [ fhir:v "0.1.0"] ; # fhir:name [ fhir:v "ExtractBloodRequisition"] ; # fhir:title [ fhir:v "Blood Requisition 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 "The requisition is the whole transfusion chain on one sheet, and it extracts as the chain: a ServiceRequest per product asked for, coded SNOMED 116859006 and carrying its own quantity and urgency, so two units of packed cells and one of platelets are two orders and not one; a Consent recording that the patient agreed; Observations for the recipient's ABO and Rh under LOINC 883-9 and 10331-7 and for each issued unit's group under the blood-product-unit codes 14578-9 and 14907-0, with the bag number as the specimen identity; the cross-match result per unit, interpreted abnormal when incompatible; and any transfusion reaction as an Observation coded SNOMED 82545002 and flagged abnormal. The two abnormal flags are the point: an incompatible cross-match and a reaction are the two findings on this form that have to be impossible to miss."] ; # 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:url [ fhir:v "http://hl7.org/fhir/StructureDefinition/ServiceRequest"^^xsd:anyURI ; fhir:link <http://hl7.org/fhir/StructureDefinition/ServiceRequest> ] ; fhir:mode [ fhir:v "target" ] ; fhir:alias [ fhir:v "ServiceRequest" ] ] [ fhir:url [ fhir:v "http://hl7.org/fhir/StructureDefinition/Consent"^^xsd:anyURI ; fhir:link <http://hl7.org/fhir/StructureDefinition/Consent> ] ; fhir:mode [ fhir:v "target" ] ; fhir:alias [ fhir:v "Consent" ] ] ) ; # fhir:group ( [ fhir:name [ fhir:v "ExtractBloodRequisition" ] ; 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 "productRequest" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "p" ] ; fhir:condition [ fhir:v "(linkId = 'product') and item.where(linkId = 'product/type').answer.value.exists()" ] ] ) ; 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 "sr" ] ; fhir:transform [ fhir:v "create" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "ServiceRequest" ] ] ) ] ) ; fhir:rule ( [ fhir:name [ fhir:v "base" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "sr" ] ] [ fhir:context [ fhir:v "entry" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "BuildServiceRequestBase" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "qr" ] ] [ fhir:value [ a fhir:id ; fhir:v "sr" ] ] [ fhir:value [ a fhir:id ; fhir:v "entry" ] ] ) ] ) ] [ fhir:name [ fhir:v "status" ] ; fhir:source ( [ fhir:context [ fhir:v "p" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "sr" ] ; fhir:element [ fhir:v "status" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "active" ] ] ) ] ) ] [ fhir:name [ fhir:v "intent" ] ; fhir:source ( [ fhir:context [ fhir:v "p" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "sr" ] ; fhir:element [ fhir:v "intent" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "order" ] ] ) ] ) ] [ 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 "sr" ] ; fhir:element [ fhir:v "encounter" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "e" ] ] ) ] ) ] [ fhir:name [ fhir:v "authoredOn" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "authored" ] ; fhir:variable [ fhir:v "t" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "sr" ] ; fhir:element [ fhir:v "authoredOn" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "t" ] ] ) ] ) ] [ fhir:name [ fhir:v "category" ] ; fhir:source ( [ fhir:context [ fhir:v "p" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "sr" ] ; fhir:element [ fhir:v "category" ] ; fhir:variable [ fhir:v "cat" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "coding" ] ; fhir:source ( [ fhir:context [ fhir:v "p" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cat" ] ; fhir:element [ fhir:v "coding" ] ; fhir:variable [ fhir:v "cg" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "sys" ] ; fhir:source ( [ fhir:context [ fhir:v "p" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "system" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "http://snomed.info/sct" ] ] ) ] ) ] [ fhir:name [ fhir:v "cd" ] ; fhir:source ( [ fhir:context [ fhir:v "p" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "code" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "116859006" ] ] ) ] ) ] [ fhir:name [ fhir:v "dsp" ] ; fhir:source ( [ fhir:context [ fhir:v "p" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "display" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Transfusion of blood product" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "productTypeRule" ] ; fhir:source ( [ fhir:context [ fhir:v "p" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "it" ] ; fhir:condition [ fhir:v "linkId = 'product/type'" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "answer" ] ; 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 "codeFromAnswer" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "cv" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "sr" ] ; fhir:element [ fhir:v "code" ] ; fhir:variable [ fhir:v "cr" ] ] [ fhir:context [ fhir:v "cr" ] ; fhir:element [ fhir:v "concept" ] ; fhir:variable [ fhir:v "cc" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "coding" ] ; fhir:source ( [ fhir:context [ fhir:v "cv" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cc" ] ; fhir:element [ fhir:v "coding" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "cv" ] ] ) ] ) ] [ fhir:name [ fhir:v "text" ] ; fhir:source ( [ fhir:context [ fhir:v "cv" ] ; fhir:element [ fhir:v "display" ] ; fhir:variable [ fhir:v "d" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cc" ] ; fhir:element [ fhir:v "text" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "d" ] ] ) ] ) ] ) ] ) ] ) ; fhir:documentation [ fhir:v "The product's own coding travels, so a request for fresh frozen plasma\r\nis coded as that and not as \"blood\"." ] ] [ fhir:name [ fhir:v "unitsRule" ] ; fhir:source ( [ fhir:context [ fhir:v "p" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "it" ] ; fhir:condition [ fhir:v "(linkId = 'product/units') and answer.value.exists()" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "answer" ] ; 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 "quantity" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "v" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "sr" ] ; fhir:element [ fhir:v "quantity" ] ; fhir:variable [ fhir:v "q" ] ; fhir:transform [ fhir:v "create" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Quantity" ] ] ) ] ) ; fhir:rule ( [ fhir:name [ fhir:v "qValue" ] ; fhir:source ( [ fhir:context [ fhir:v "v" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "q" ] ; fhir:element [ fhir:v "value" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "v" ] ] ) ] ) ] [ fhir:name [ fhir:v "qUnit" ] ; fhir:source ( [ fhir:context [ fhir:v "v" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "q" ] ; fhir:element [ fhir:v "unit" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "unit of blood product" ] ] ) ] ) ] ) ] ) ] ) ; fhir:documentation [ fhir:v "Units as the order quantity. A SimpleQuantity, and the unit is 'unit'\r\nin the sense the blood bank means -- one bag -- not a UCUM measure." ] ] [ fhir:name [ fhir:v "dateRequiredRule" ] ; fhir:source ( [ fhir:context [ fhir:v "p" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "it" ] ; fhir:condition [ fhir:v "(linkId = 'product/date-required') and answer.value.exists()" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "answer" ] ; 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 "occurrence" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "v" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "sr" ] ; fhir:element [ fhir:v "occurrence" ] ; fhir:transform [ fhir:v "cast" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "v" ] ] [ fhir:value [ a fhir:string ; fhir:v "dateTime" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "common" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "sr" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "SetBloodRequestCommon" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "qr" ] ] [ fhir:value [ a fhir:id ; fhir:v "sr" ] ] ) ] ) ] ) ; fhir:documentation [ fhir:v "── One order per product ───────────────────────────────────────────────\r\nPer product row and not one order for the sheet. The units, the urgency\r\nand the date required differ by product, and a single order could only\r\ncarry one set of them." ] ] [ fhir:name [ fhir:v "consentGroup" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "g" ] ; fhir:condition [ fhir:v "linkId = 'consent'" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "transfusionConsent" ] ; fhir:source ( [ fhir:context [ fhir:v "g" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "it" ] ; fhir:condition [ fhir:v "(linkId = 'consent/given') and answer.value.exists()" ] ] ) ; 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 "con" ] ; fhir:transform [ fhir:v "create" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Consent" ] ] ) ] ) ; fhir:rule ( [ fhir:name [ fhir:v "base" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "con" ] ] [ fhir:context [ fhir:v "entry" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "BuildConsentBase" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "qr" ] ] [ fhir:value [ a fhir:id ; fhir:v "con" ] ] [ fhir:value [ a fhir:id ; fhir:v "entry" ] ] ) ] ) ] [ fhir:name [ fhir:v "status" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "con" ] ; fhir:element [ fhir:v "status" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "active" ] ] ) ] ) ] [ fhir:name [ fhir:v "category" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "con" ] ; fhir:element [ fhir:v "category" ] ; fhir:variable [ fhir:v "cat" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "coding" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cat" ] ; fhir:element [ fhir:v "coding" ] ; fhir:variable [ fhir:v "cg" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "sys" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "system" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "http://loinc.org" ] ] ) ] ) ] [ fhir:name [ fhir:v "cd" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "code" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "64293-4" ] ] ) ] ) ] [ fhir:name [ fhir:v "dsp" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "display" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Procedure consent Document" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "periodStart" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "authored" ] ; fhir:variable [ fhir:v "t" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "con" ] ; fhir:element [ fhir:v "period" ] ; fhir:variable [ fhir:v "per" ] ] [ fhir:context [ fhir:v "per" ] ; fhir:element [ fhir:v "start" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "t" ] ] ) ] ) ] [ fhir:name [ fhir:v "permitRule" ] ; 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 "permit" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "cv" ] ; fhir:condition [ fhir:v "code = 'Y'" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "con" ] ; fhir:element [ fhir:v "decision" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "permit" ] ] ) ] ) ] ) ] [ fhir:name [ fhir:v "denyRule" ] ; 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 "deny" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "cv" ] ; fhir:condition [ fhir:v "code = 'N'" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "con" ] ; fhir:element [ fhir:v "decision" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "deny" ] ] ) ] ) ] ) ] [ fhir:name [ fhir:v "provision" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "con" ] ; fhir:element [ fhir:v "provision" ] ; fhir:variable [ fhir:v "prov" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "provCode" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "prov" ] ; fhir:element [ fhir:v "code" ] ; fhir:variable [ fhir:v "pc" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "coding" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "pc" ] ; fhir:element [ fhir:v "coding" ] ; fhir:variable [ fhir:v "cg" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "sys" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "system" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "http://snomed.info/sct" ] ] ) ] ) ] [ fhir:name [ fhir:v "cd" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "code" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "116859006" ] ] ) ] ) ] [ fhir:name [ fhir:v "dsp" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "display" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Transfusion of blood product" ] ] ) ] ) ] ) ] [ fhir:name [ fhir:v "provText" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "pc" ] ; fhir:element [ fhir:v "text" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Transfusion of the blood products requested on this form" ] ] ) ] ) ] ) ] ) ] ) ] ) ; fhir:documentation [ fhir:v "── Consent to transfusion ──────────────────────────────────────────────\r\ndecision follows the answer: 'permit' when the patient agreed, 'deny'\r\nwhen they did not. A refused transfusion recorded as an absent consent\r\nwould be indistinguishable from one nobody asked about." ] ] [ fhir:name [ fhir:v "narr_transfusion_indication_for_transfusion" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "it" ] ; fhir:condition [ fhir:v "(linkId = 'reason-for-transfusion') and answer.value.exists()" ] ] ) ; 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 "base" ] ; 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 "BuildObsBase" ] ; 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 "category" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "SetSurveyCategory" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "qr" ] ] [ fhir:value [ a fhir:id ; fhir:v "obs" ] ] ) ] ) ] [ fhir:name [ fhir:v "code" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "code" ] ; fhir:variable [ fhir:v "cc" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "coding" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cc" ] ; fhir:element [ fhir:v "coding" ] ; fhir:variable [ fhir:v "cg" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "sys" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; 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/concept-codesystem" ] ] ) ] ) ] [ fhir:name [ fhir:v "cd" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "code" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "transfusion-indication-for-transfusion" ] ] ) ] ) ] [ fhir:name [ fhir:v "dsp" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "display" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Indication for transfusion" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "answer" ] ; 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 "text" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "txt" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "note" ] ; fhir:variable [ fhir:v "n" ] ] [ fhir:context [ fhir:v "n" ] ; fhir:element [ fhir:v "text" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "txt" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "recipientGroupGroup" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "g" ] ; fhir:condition [ fhir:v "linkId = 'recipient-group'" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "coded_883_9" ] ; fhir:source ( [ fhir:context [ fhir:v "g" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "it" ] ; fhir:condition [ fhir:v "(linkId = 'recipient-group/abo') and answer.value.exists()" ] ] ) ; 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 "base" ] ; 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 "BuildObsBase" ] ; 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 "category" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "SetLaboratoryCategory" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "qr" ] ] [ fhir:value [ a fhir:id ; fhir:v "obs" ] ] ) ] ) ] [ fhir:name [ fhir:v "code" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "code" ] ; fhir:variable [ fhir:v "cc" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "coding" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cc" ] ; fhir:element [ fhir:v "coding" ] ; fhir:variable [ fhir:v "cg" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "sys" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "system" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "http://loinc.org" ] ] ) ] ) ] [ fhir:name [ fhir:v "cd" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "code" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "883-9" ] ] ) ] ) ] [ fhir:name [ fhir:v "dsp" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "display" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "ABO group [Type] in Blood" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "answer" ] ; 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 "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 "cc" ] ; 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 "cc" ] ; 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 "cc" ] ; fhir:element [ fhir:v "text" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "d" ] ] ) ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "coded_10331_7" ] ; fhir:source ( [ fhir:context [ fhir:v "g" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "it" ] ; fhir:condition [ fhir:v "(linkId = 'recipient-group/rhesus') and answer.value.exists()" ] ] ) ; 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 "base" ] ; 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 "BuildObsBase" ] ; 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 "category" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "SetLaboratoryCategory" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "qr" ] ] [ fhir:value [ a fhir:id ; fhir:v "obs" ] ] ) ] ) ] [ fhir:name [ fhir:v "code" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "code" ] ; fhir:variable [ fhir:v "cc" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "coding" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cc" ] ; fhir:element [ fhir:v "coding" ] ; fhir:variable [ fhir:v "cg" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "sys" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "system" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "http://loinc.org" ] ] ) ] ) ] [ fhir:name [ fhir:v "cd" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "code" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "10331-7" ] ] ) ] ) ] [ fhir:name [ fhir:v "dsp" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "display" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Rh [Type] in Blood" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "answer" ] ; 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 "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 "cc" ] ; 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 "cc" ] ; 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 "cc" ] ; fhir:element [ fhir:v "text" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "d" ] ] ) ] ) ] ) ] ) ] ) ] ) ; fhir:documentation [ fhir:v "── The recipient's group ───────────────────────────────────────────────" ] ] [ fhir:name [ fhir:v "issuedUnitGroup" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "u" ] ; fhir:condition [ fhir:v "(linkId = 'issued-unit') and item.where(linkId = 'issued-unit/bag-number').answer.value.exists()" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "unit_donor_abo" ] ; fhir:source ( [ fhir:context [ fhir:v "u" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "it" ] ; fhir:condition [ fhir:v "(linkId = 'issued-unit/donor-abo') and answer.value.exists()" ] ] ) ; 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 "base" ] ; 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 "BuildObsBase" ] ; 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 "category" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "SetLaboratoryCategory" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "qr" ] ] [ fhir:value [ a fhir:id ; fhir:v "obs" ] ] ) ] ) ] [ fhir:name [ fhir:v "code" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "code" ] ; fhir:variable [ fhir:v "cc" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "coding" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cc" ] ; fhir:element [ fhir:v "coding" ] ; fhir:variable [ fhir:v "cg" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "sys" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "system" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "http://loinc.org" ] ] ) ] ) ] [ fhir:name [ fhir:v "cd" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "code" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "14578-9" ] ] ) ] ) ] [ fhir:name [ fhir:v "dsp" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "display" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "ABO group [Type] in Blood from Blood product unit" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "answer" ] ; 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 "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 "cc" ] ; 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 "cc" ] ; 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 "cc" ] ; fhir:element [ fhir:v "text" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "d" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "bagIdentity" ] ; fhir:source ( [ fhir:context [ fhir:v "u" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "SetUnitIdentity" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "u" ] ] [ fhir:value [ a fhir:id ; fhir:v "obs" ] ] ) ] ) ] ) ] [ fhir:name [ fhir:v "unit_donor_rhesus" ] ; fhir:source ( [ fhir:context [ fhir:v "u" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "it" ] ; fhir:condition [ fhir:v "(linkId = 'issued-unit/donor-rhesus') and answer.value.exists()" ] ] ) ; 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 "base" ] ; 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 "BuildObsBase" ] ; 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 "category" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "SetLaboratoryCategory" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "qr" ] ] [ fhir:value [ a fhir:id ; fhir:v "obs" ] ] ) ] ) ] [ fhir:name [ fhir:v "code" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "code" ] ; fhir:variable [ fhir:v "cc" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "coding" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cc" ] ; fhir:element [ fhir:v "coding" ] ; fhir:variable [ fhir:v "cg" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "sys" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "system" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "http://loinc.org" ] ] ) ] ) ] [ fhir:name [ fhir:v "cd" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "code" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "14907-0" ] ] ) ] ) ] [ fhir:name [ fhir:v "dsp" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "display" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Rh [Type] in Blood from Blood product unit" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "answer" ] ; 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 "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 "cc" ] ; 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 "cc" ] ; 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 "cc" ] ; fhir:element [ fhir:v "text" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "d" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "bagIdentity" ] ; fhir:source ( [ fhir:context [ fhir:v "u" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "SetUnitIdentity" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "u" ] ] [ fhir:value [ a fhir:id ; fhir:v "obs" ] ] ) ] ) ] ) ] [ fhir:name [ fhir:v "crossMatchObservation" ] ; fhir:source ( [ fhir:context [ fhir:v "u" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "it" ] ; fhir:condition [ fhir:v "(linkId = 'issued-unit/cross-match-result') and answer.value.exists()" ] ] ) ; 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 "base" ] ; 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 "BuildObsBase" ] ; 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 "category" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "SetLaboratoryCategory" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "qr" ] ] [ fhir:value [ a fhir:id ; fhir:v "obs" ] ] ) ] ) ] [ fhir:name [ fhir:v "code" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "code" ] ; fhir:variable [ fhir:v "cc" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "coding" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cc" ] ; fhir:element [ fhir:v "coding" ] ; fhir:variable [ fhir:v "cg" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "sys" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; 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/concept-codesystem" ] ] ) ] ) ] [ fhir:name [ fhir:v "cd" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "code" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "transfusion-cross-match-result" ] ] ) ] ) ] [ fhir:name [ fhir:v "dsp" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "display" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Cross-match result" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "answer" ] ; 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 "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 "cc" ] ; 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 "cc" ] ; 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 "cc" ] ; fhir:element [ fhir:v "text" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "d" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "interpretationRule" ] ; 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 "incompatibleInterp" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "cv" ] ; fhir:condition [ fhir:v "code = 'xmatch-incompatible'" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "interpretation" ] ; fhir:variable [ fhir:v "interp" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "coding" ] ; fhir:source ( [ fhir:context [ fhir:v "cv" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "interp" ] ; fhir:element [ fhir:v "coding" ] ; fhir:variable [ fhir:v "icg" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "sys" ] ; fhir:source ( [ fhir:context [ fhir:v "cv" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "icg" ] ; fhir:element [ fhir:v "system" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation" ] ] ) ] ) ] [ fhir:name [ fhir:v "cd" ] ; fhir:source ( [ fhir:context [ fhir:v "cv" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "icg" ] ; fhir:element [ fhir:v "code" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "A" ] ] ) ] ) ] [ fhir:name [ fhir:v "dsp" ] ; fhir:source ( [ fhir:context [ fhir:v "cv" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "icg" ] ; fhir:element [ fhir:v "display" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Abnormal" ] ] ) ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "bagIdentity" ] ; fhir:source ( [ fhir:context [ fhir:v "u" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "SetUnitIdentity" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "u" ] ] [ fhir:value [ a fhir:id ; fhir:v "obs" ] ] ) ] ) ] [ fhir:name [ fhir:v "collectedByRule" ] ; fhir:source ( [ fhir:context [ fhir:v "u" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "cb" ] ; fhir:condition [ fhir:v "(linkId = 'issued-unit/collected-by') and answer.value.exists()" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "answer" ] ; fhir:source ( [ fhir:context [ fhir:v "cb" ] ; fhir:element [ fhir:v "answer" ] ; fhir:listMode [ fhir:v "first" ] ; fhir:variable [ fhir:v "a" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "collectedBy" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "ref" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "performer" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "ref" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "labGroup" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "lab" ] ; fhir:condition [ fhir:v "linkId = 'laboratory'" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "doneByRule" ] ; fhir:source ( [ fhir:context [ fhir:v "lab" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "xb" ] ; fhir:condition [ fhir:v "(linkId = 'laboratory/cross-match-done-by') and answer.value.exists()" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "answer" ] ; fhir:source ( [ fhir:context [ fhir:v "xb" ] ; fhir:element [ fhir:v "answer" ] ; fhir:listMode [ fhir:v "first" ] ; fhir:variable [ fhir:v "a" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "crossMatchedBy" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "ref" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "performer" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "ref" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "doneAtRule" ] ; fhir:source ( [ fhir:context [ fhir:v "lab" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "xa" ] ; fhir:condition [ fhir:v "(linkId = 'laboratory/cross-match-done-at') and answer.value.exists()" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "answer" ] ; fhir:source ( [ fhir:context [ fhir:v "xa" ] ; fhir:element [ fhir:v "answer" ] ; fhir:listMode [ fhir:v "first" ] ; fhir:variable [ fhir:v "a" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "crossMatchedAt" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "v" ] ] ) ; 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 "v" ] ] ) ] ) ] ) ] ) ] ) ] ) ; fhir:documentation [ fhir:v "── The cross-match result ────────────────────────────────────────────\r\nInterpreted, not just recorded. An incompatible cross-match is the one\r\nresult on this sheet that must stop a transfusion, and leaving a reader\r\nto notice the word is not good enough." ] ] ) ; fhir:documentation [ fhir:v "── Each issued unit ────────────────────────────────────────────────────\r\nPer bag. The bag number is the identity a look-back investigation starts\r\nfrom, so it rides on every Observation about that unit rather than only on\r\nthe row -- an Observation that says \"incompatible\" and cannot say which bag\r\nis not usable evidence." ] ] [ fhir:name [ fhir:v "reactionGroup" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "g" ] ; fhir:condition [ fhir:v "linkId = 'reaction'" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "reactionObservation" ] ; fhir:source ( [ fhir:context [ fhir:v "g" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "it" ] ; fhir:condition [ fhir:v "(linkId = 'reaction/observed') and answer.value.exists()" ] ] ) ; 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 "base" ] ; 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 "BuildObsBase" ] ; 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 "category" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "SetExamCategory" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "qr" ] ] [ fhir:value [ a fhir:id ; fhir:v "obs" ] ] ) ] ) ] [ fhir:name [ fhir:v "code" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "code" ] ; fhir:variable [ fhir:v "cc" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "coding" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cc" ] ; fhir:element [ fhir:v "coding" ] ; fhir:variable [ fhir:v "cg" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "sys" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "system" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "http://snomed.info/sct" ] ] ) ] ) ] [ fhir:name [ fhir:v "cd" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "code" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "82545002" ] ] ) ] ) ] [ fhir:name [ fhir:v "dsp" ] ; fhir:source ( [ fhir:context [ fhir:v "it" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cg" ] ; fhir:element [ fhir:v "display" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Blood transfusion reaction" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "answer" ] ; 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 "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 "vc" ] ; 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 "vc" ] ; 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 "vc" ] ; fhir:element [ fhir:v "text" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "d" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "interpretationRule" ] ; 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 "reactionInterp" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "cv" ] ; fhir:condition [ fhir:v "code = 'Y'" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "interpretation" ] ; fhir:variable [ fhir:v "interp" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "coding" ] ; fhir:source ( [ fhir:context [ fhir:v "cv" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "interp" ] ; fhir:element [ fhir:v "coding" ] ; fhir:variable [ fhir:v "icg" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "sys" ] ; fhir:source ( [ fhir:context [ fhir:v "cv" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "icg" ] ; fhir:element [ fhir:v "system" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation" ] ] ) ] ) ] [ fhir:name [ fhir:v "cd" ] ; fhir:source ( [ fhir:context [ fhir:v "cv" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "icg" ] ; fhir:element [ fhir:v "code" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "A" ] ] ) ] ) ] [ fhir:name [ fhir:v "dsp" ] ; fhir:source ( [ fhir:context [ fhir:v "cv" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "icg" ] ; fhir:element [ fhir:v "display" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Abnormal" ] ] ) ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "observedAtRule" ] ; fhir:source ( [ fhir:context [ fhir:v "g" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "oa" ] ; fhir:condition [ fhir:v "(linkId = 'reaction/observed-at') and answer.value.exists()" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "answer" ] ; fhir:source ( [ fhir:context [ fhir:v "oa" ] ; fhir:element [ fhir:v "answer" ] ; fhir:listMode [ fhir:v "first" ] ; fhir:variable [ fhir:v "a" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "observedAt" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "v" ] ] ) ; 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 "v" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "observedByRule" ] ; fhir:source ( [ fhir:context [ fhir:v "g" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "ob" ] ; fhir:condition [ fhir:v "(linkId = 'reaction/observed-by') and answer.value.exists()" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "answer" ] ; fhir:source ( [ fhir:context [ fhir:v "ob" ] ; fhir:element [ fhir:v "answer" ] ; fhir:listMode [ fhir:v "first" ] ; fhir:variable [ fhir:v "a" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "observedBy" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "ref" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "performer" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "ref" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "note" ] ; fhir:source ( [ fhir:context [ fhir:v "g" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "it" ] ; fhir:condition [ fhir:v "linkId = 'reaction/description'" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "answer" ] ; 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 "text" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "txt" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "note" ] ; fhir:variable [ fhir:v "n" ] ] [ fhir:context [ fhir:v "n" ] ; fhir:element [ fhir:v "text" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "txt" ] ] ) ] ) ] ) ] ) ] ) ] ) ; fhir:documentation [ fhir:v "── A transfusion reaction ──────────────────────────────────────────────\r\nFlagged abnormal whenever one was observed. This is a haemovigilance\r\nrecord: it has to be findable by anyone querying reactions across the\r\nhospital, not only by whoever opens this form." ] ] ) ] [ fhir:name [ fhir:v "SetUnitIdentity" ] ; fhir:documentation [ fhir:v "The bag number, and how long the unit is good for, as identifiers and a note\r\non every Observation about that unit. Factored out because it is identical\r\nfor the ABO, the Rh and the cross-match, and a look-back investigation that\r\nfinds two of the three tagged is a look-back that failed." ] ; fhir:input ( [ fhir:name [ fhir:v "u" ] ; 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 "bagNumberRule" ] ; fhir:source ( [ fhir:context [ fhir:v "u" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "it" ] ; fhir:condition [ fhir:v "(linkId = 'issued-unit/bag-number') and answer.value.exists()" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "answer" ] ; 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 "bagIdentifier" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "txt" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "identifier" ] ; fhir:variable [ fhir:v "ident" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "identSystem" ] ; fhir:source ( [ fhir:context [ fhir:v "txt" ] ] ) ; 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/identifier/blood-bag-number" ] ] ) ] ) ] [ fhir:name [ fhir:v "identValue" ] ; fhir:source ( [ fhir:context [ fhir:v "txt" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "ident" ] ; fhir:element [ fhir:v "value" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "txt" ] ] ) ] ) ] ) ] [ fhir:name [ fhir:v "specimenDisplay" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "txt" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "specimen" ] ; fhir:variable [ fhir:v "sref" ] ; fhir:transform [ fhir:v "create" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Reference" ] ] ) ] [ fhir:context [ fhir:v "sref" ] ; fhir:element [ fhir:v "display" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "txt" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "expiryRule" ] ; fhir:source ( [ fhir:context [ fhir:v "u" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "it" ] ; fhir:condition [ fhir:v "(linkId = 'issued-unit/expiry-date') and answer.value.exists()" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "answer" ] ; 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 "expiryNote" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "v" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "note" ] ; fhir:variable [ fhir:v "n" ] ] [ fhir:context [ fhir:v "n" ] ; fhir:element [ fhir:v "text" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Unit expiry date recorded on the requisition" ] ] ) ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "SetBloodRequestCommon" ] ; fhir:documentation [ fhir:v "Everything every product order on the sheet shares: who asked, from where,\r\nhow urgently, and when the blood is reserved until." ] ; fhir:input ( [ fhir:name [ fhir:v "qr" ] ; fhir:type [ fhir:v "QR" ] ; fhir:mode [ fhir:v "source" ] ] [ fhir:name [ fhir:v "sr" ] ; fhir:type [ fhir:v "ServiceRequest" ] ; fhir:mode [ fhir:v "target" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "requestGroup" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "g" ] ; fhir:condition [ fhir:v "linkId = 'request'" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "requesterRule" ] ; fhir:source ( [ fhir:context [ fhir:v "g" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "it" ] ; fhir:condition [ fhir:v "(linkId = 'request/requester') and answer.value.exists()" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "answer" ] ; 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 "requester" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "ref" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "sr" ] ; fhir:element [ fhir:v "requester" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "ref" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "urgencyRule" ] ; fhir:source ( [ fhir:context [ fhir:v "g" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "it" ] ; fhir:condition [ fhir:v "(linkId = 'request/urgency') and answer.value.exists()" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "desperateRule" ] ; 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 "stat" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "cv" ] ; fhir:condition [ fhir:v "code = 'urgency-desperate'" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "sr" ] ; fhir:element [ fhir:v "priority" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "stat" ] ] ) ] ) ] ) ] [ fhir:name [ fhir:v "urgentRule" ] ; 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 "urgent" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "cv" ] ; fhir:condition [ fhir:v "code = 'urgency-urgent'" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "sr" ] ; fhir:element [ fhir:v "priority" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "urgent" ] ] ) ] ) ] ) ] [ fhir:name [ fhir:v "electiveRule" ] ; 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 "routine" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "cv" ] ; fhir:condition [ fhir:v "code = 'urgency-elective'" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "sr" ] ; fhir:element [ fhir:v "priority" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "routine" ] ] ) ] ) ] ) ] ) ; fhir:documentation [ fhir:v "Priority is a code, not a Coding. The form's urgency codes are local --\r\ndesperate, urgent, elective, as printed -- so they are mapped onto the\r\nthree request-priority codes rather than passed through." ] ] [ fhir:name [ fhir:v "departmentRule" ] ; fhir:source ( [ fhir:context [ fhir:v "g" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "it" ] ; fhir:condition [ fhir:v "(linkId = 'request/department') and answer.value.exists()" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "answer" ] ; 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 "departmentNote" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "txt" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "sr" ] ; fhir:element [ fhir:v "note" ] ; fhir:variable [ fhir:v "n" ] ] [ fhir:context [ fhir:v "n" ] ; fhir:element [ fhir:v "text" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "txt" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "roomRule" ] ; fhir:source ( [ fhir:context [ fhir:v "g" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "it" ] ; fhir:condition [ fhir:v "(linkId = 'request/room-number') and answer.value.exists()" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "answer" ] ; 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 "roomNote" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "txt" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "sr" ] ; fhir:element [ fhir:v "note" ] ; fhir:variable [ fhir:v "n" ] ] [ fhir:context [ fhir:v "n" ] ; fhir:element [ fhir:v "text" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "txt" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "bedRule" ] ; fhir:source ( [ fhir:context [ fhir:v "g" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "it" ] ; fhir:condition [ fhir:v "(linkId = 'request/bed-number') and answer.value.exists()" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "answer" ] ; 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 "bedNote" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "txt" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "sr" ] ; fhir:element [ fhir:v "note" ] ; fhir:variable [ fhir:v "n" ] ] [ fhir:context [ fhir:v "n" ] ; fhir:element [ fhir:v "text" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "txt" ] ] ) ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "labGroup" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "lab" ] ; fhir:condition [ fhir:v "linkId = 'laboratory'" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "labRegRule" ] ; fhir:source ( [ fhir:context [ fhir:v "lab" ] ; fhir:element [ fhir:v "item" ] ; fhir:variable [ fhir:v "it" ] ; fhir:condition [ fhir:v "(linkId = 'laboratory/lab-registration-number') and answer.value.exists()" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "answer" ] ; 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 "labIdentifier" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "txt" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "sr" ] ; fhir:element [ fhir:v "identifier" ] ; fhir:variable [ fhir:v "ident" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "identSystem" ] ; fhir:source ( [ fhir:context [ fhir:v "txt" ] ] ) ; 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/identifier/blood-bank-registration" ] ] ) ] ) ] [ fhir:name [ fhir:v "identValue" ] ; fhir:source ( [ fhir:context [ fhir:v "txt" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "ident" ] ; fhir:element [ fhir:v "value" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "txt" ] ] ) ] ) ] ) ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "BuildObsBase" ] ; fhir:documentation [ fhir:v "─────────────────────────────────────────────────────────────────────────────\r\nShared scaffolding. Repeated in each map rather than imported: the transform\r\nengine resolves `imports` against whatever StructureMaps happen to be on the\r\nserver, and a form that stops extracting because a shared map was not\r\nuploaded is a worse failure than a duplicated group.\r\nTwo notes on what the publisher's StructureMap validator says about this file.\r\nSource parameters below are left untyped on purpose. Writing `: Element` makes\r\nthe validator compare QuestionnaireResponse.item against the literal 'Element'\r\nand report them as incompatible with each other, which is noise, not a finding.\r\n`evaluate(context, expression)` is flagged as \"takes 1 parameter but 2 were\r\nfound\". Leave it. The FML parser in the same jar refuses the one-argument form\r\noutright -- it wants a parameter, a comma, then the FHIRPath -- so the\r\npublisher is objecting to what its own compiler emits. Two arguments is the\r\nonly form that compiles, and it is what the R5 transform engine executes.\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 "responseProvenance" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "SetResponseProvenance" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "qr" ] ] [ fhir:value [ a fhir:id ; fhir:v "obs" ] ] ) ] ) ] [ 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 "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:name [ fhir:v "performerFromSource" ] ; 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:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "src" ] ] ) ] ) ] [ fhir:name [ fhir:v "performerFallback" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:condition [ fhir:v "source.exists().not()" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "performerFromAuthor" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "author" ] ; fhir:variable [ fhir:v "a" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "obs" ] ; fhir:element [ fhir:v "performer" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "a" ] ] ) ] ) ] ) ] [ fhir:name [ fhir:v "linkQuestionnaireResponse" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "id" ] ; fhir:variable [ fhir:v "qid" ] ; fhir:condition [ fhir:v "$this.hasValue()" ] ] ) ; 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: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 "A stored response's id already reads \"QuestionnaireResponse/<id>\", so it is\r\na relative reference as it stands. The hasValue() guard is what stops an\r\nunsaved response -- one posted straight to $extract rather than saved first\r\n-- from writing \"QuestionnaireResponse/null\" into the record." ] ] ) ] [ 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" ] ] ) ] ) ] ) ] [ fhir:name [ fhir:v "SetComponentCodedValue" ] ; fhir:documentation [ fhir:v "The two answer shapes a component can carry. Both read the answer through the\r\nuntyped `.value` accessor: reading `valueCoding` or `valueQuantity` by its\r\ntyped property name fails at transform time on HAPI R5 with \"Attempt to read\r\ninvalid property ... on QuestionnaireResponse.item.answer\"." ] ; fhir:input ( [ fhir:name [ fhir:v "it" ] ; fhir:mode [ fhir:v "source" ] ] [ fhir:name [ fhir:v "comp" ] ; fhir:mode [ fhir:v "target" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "componentAnswer" ] ; 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 "codedValue" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "cv" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "comp" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "cc" ] ; 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 "cc" ] ; 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 "cc" ] ; fhir:element [ fhir:v "text" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "d" ] ] ) ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "SetComponentValue" ] ; fhir:input ( [ fhir:name [ fhir:v "it" ] ; fhir:mode [ fhir:v "source" ] ] [ fhir:name [ fhir:v "comp" ] ; fhir:mode [ fhir:v "target" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "componentAnswer" ] ; 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 "plainValue" ] ; fhir:source ( [ fhir:context [ fhir:v "a" ] ; fhir:element [ fhir:v "value" ] ; fhir:variable [ fhir:v "v" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "comp" ] ; fhir:element [ fhir:v "value" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "v" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "SetSurveyCategory" ] ; 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:rule ( [ 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 "cat" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "categoryCoding" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cat" ] ; fhir:element [ fhir:v "coding" ] ; fhir:variable [ fhir:v "coding" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "categorySystem" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "coding" ] ; 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 "coding" ] ; 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 "coding" ] ; fhir:element [ fhir:v "display" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Survey" ] ] ) ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "SetLaboratoryCategory" ] ; 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:rule ( [ 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 "cat" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "categoryCoding" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cat" ] ; fhir:element [ fhir:v "coding" ] ; fhir:variable [ fhir:v "coding" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "categorySystem" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "coding" ] ; 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 "coding" ] ; fhir:element [ fhir:v "code" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "laboratory" ] ] ) ] ) ] [ fhir:name [ fhir:v "categoryDisplay" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "coding" ] ; fhir:element [ fhir:v "display" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Laboratory" ] ] ) ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "SetExamCategory" ] ; 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:rule ( [ 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 "cat" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "categoryCoding" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "cat" ] ; fhir:element [ fhir:v "coding" ] ; fhir:variable [ fhir:v "coding" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "categorySystem" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "coding" ] ; 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 "coding" ] ; fhir:element [ fhir:v "code" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "exam" ] ] ) ] ) ] [ fhir:name [ fhir:v "categoryDisplay" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "coding" ] ; fhir:element [ fhir:v "display" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Exam" ] ] ) ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "BuildServiceRequestBase" ] ; fhir:input ( [ fhir:name [ fhir:v "qr" ] ; fhir:type [ fhir:v "QR" ] ; fhir:mode [ fhir:v "source" ] ] [ fhir:name [ fhir:v "r" ] ; fhir:type [ fhir:v "ServiceRequest" ] ; fhir:mode [ fhir:v "target" ] ] [ fhir:name [ fhir:v "entry" ] ; fhir:mode [ fhir:v "target" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "responseProvenance" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "r" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "SetResponseProvenance" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "qr" ] ] [ fhir:value [ a fhir:id ; fhir:v "r" ] ] ) ] ) ] [ fhir:name [ fhir:v "idAndFullUrl" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "r" ] ; fhir:element [ fhir:v "id" ] ; fhir:transform [ fhir:v "uuid" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "SetServiceRequestFullUrl" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "r" ] ] [ 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 "ServiceRequest" ] ] ) ] ) ] ) ] [ 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 "r" ] ; fhir:element [ fhir:v "subject" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "s" ] ] ) ] ) ] ) ] [ fhir:name [ fhir:v "SetServiceRequestFullUrl" ] ; fhir:input ( [ fhir:name [ fhir:v "r" ] ; fhir:type [ fhir:v "ServiceRequest" ] ; 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 "r" ] ; 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/ServiceRequest/" ] ] [ fhir:value [ a fhir:id ; fhir:v "id" ] ] ) ] ) ] ) ] [ fhir:name [ fhir:v "BuildConsentBase" ] ; fhir:input ( [ fhir:name [ fhir:v "qr" ] ; fhir:type [ fhir:v "QR" ] ; fhir:mode [ fhir:v "source" ] ] [ fhir:name [ fhir:v "r" ] ; fhir:type [ fhir:v "Consent" ] ; fhir:mode [ fhir:v "target" ] ] [ fhir:name [ fhir:v "entry" ] ; fhir:mode [ fhir:v "target" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "responseProvenance" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "r" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "SetResponseProvenance" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "qr" ] ] [ fhir:value [ a fhir:id ; fhir:v "r" ] ] ) ] ) ] [ fhir:name [ fhir:v "idAndFullUrl" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "r" ] ; fhir:element [ fhir:v "id" ] ; fhir:transform [ fhir:v "uuid" ] ] ) ; fhir:dependent ( [ fhir:name [ fhir:v "SetConsentFullUrl" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "r" ] ] [ 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 "Consent" ] ] ) ] ) ] ) ] [ 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 "r" ] ; fhir:element [ fhir:v "subject" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "s" ] ] ) ] ) ] ) ] [ fhir:name [ fhir:v "SetConsentFullUrl" ] ; fhir:input ( [ fhir:name [ fhir:v "r" ] ; fhir:type [ fhir:v "Consent" ] ; 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 "r" ] ; 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/Consent/" ] ] [ fhir:value [ a fhir:id ; fhir:v "id" ] ] ) ] ) ] ) ] [ fhir:name [ fhir:v "SetResponseProvenance" ] ; fhir:documentation [ fhir:v "── Provenance and tenancy ───────────────────────────────────────────────────\r\nTwo tags on everything this map creates. The first says which questionnaire\r\nproduced it, so a form that reopens mid-admission recalls its own earlier\r\nentries and not another form's. The second copies the tenant tags off the\r\nresponse, because nothing else on the path puts them there.\r\nThe code is the form's document type, not the questionnaire's id: every\r\nenvironment mints its own ids, and there is only one set of maps, so an id\r\nhere would tie the tag to whichever environment stamped it.\r\n── Provenance and tenancy ───────────────────────────────────────────────────" ] ; fhir:input ( [ fhir:name [ fhir:v "qr" ] ; fhir:type [ fhir:v "QR" ] ; fhir:mode [ fhir:v "source" ] ] [ fhir:name [ fhir:v "r" ] ; fhir:mode [ fhir:v "target" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "provenanceMeta" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "r" ] ; fhir:element [ fhir:v "meta" ] ; fhir:variable [ fhir:v "m" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "provenanceTag" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "m" ] ; fhir:element [ fhir:v "tag" ] ; fhir:variable [ fhir:v "t" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "provenanceSystem" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "t" ] ; fhir:element [ fhir:v "system" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "http://slade360edi.com/questionnaire-provenance" ] ] ) ] ) ] [ fhir:name [ fhir:v "provenanceCode" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "t" ] ; fhir:element [ fhir:v "code" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "blood-requisition" ] ] ) ] ) ] [ fhir:name [ fhir:v "provenanceDisplay" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "t" ] ; fhir:element [ fhir:v "display" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:string ; fhir:v "Blood requisition form" ] ] ) ] ) ] ) ] ) ] [ fhir:name [ fhir:v "tenantTags" ] ; fhir:source ( [ fhir:context [ fhir:v "qr" ] ; fhir:element [ fhir:v "meta" ] ; fhir:variable [ fhir:v "qm" ] ] ) ; fhir:rule ( [ fhir:name [ fhir:v "copyTag" ] ; fhir:source ( [ fhir:context [ fhir:v "qm" ] ; fhir:element [ fhir:v "tag" ] ; fhir:variable [ fhir:v "qt" ] ] ) ; fhir:target ( [ fhir:context [ fhir:v "r" ] ; fhir:element [ fhir:v "meta" ] ; fhir:variable [ fhir:v "m" ] ] [ fhir:context [ fhir:v "m" ] ; fhir:element [ fhir:v "tag" ] ; fhir:transform [ fhir:v "copy" ] ; fhir:parameter ( [ fhir:value [ a fhir:id ; fhir:v "qt" ] ] ) ] ) ] ) ; fhir:documentation [ fhir:v "Every tag the response carries, onto the resource. `meta` is 0..1, so this\r\nlands on the same meta the rule above created rather than a second one." ] ] ) ] ) . #
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