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-10-06 |
{
"resourceType" : "StructureMap",
"id" : "ExtractInpatientObstetricAdmissionAssessment",
"text" : {
"status" : "generated",
"div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\"><p class=\"res-header-id\"><b>Generated Narrative: StructureMap ExtractInpatientObstetricAdmissionAssessment</b></p><a name=\"ExtractInpatientObstetricAdmissionAssessment\"> </a><a name=\"hcExtractInpatientObstetricAdmissionAssessment\"> </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/ExtractInpatientObstetricAdmissionAssessment'</span>\r\n<span style=\"color: #cc00cc\">/// <b>name</b> = </span><span style=\"color: blue\">'ExtractInpatientObstetricAdmissionAssessment'</span>\r\n<span style=\"color: #cc00cc\">/// <b>title</b> = </span><span style=\"color: blue\">'Inpatient Obstetric Admission Assessment 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\">'Four measurements out, four Observations. Gestation, fetal heart rate and cervical dilatation are readings taken at the bedside, so they carry category `exam`; the obstetric history is reported rather than measured, so it carries `social-history`. Every LOINC code here was checked against tx.fhir.org before use.'</span>\r\n\r\n<b>uses</b><span style=\"color: navy\"> "</span><a href=\"http://hl7.org/fhir/R5/questionnaireresponse.html\" title=\"QuestionnaireResponse\">http://hl7.org/fhir/StructureDefinition/QuestionnaireResponse</a><span style=\"color: navy\">" </span><b>alias </b>QR <b>as </b><b>source</b>\r\n<b>uses</b><span style=\"color: navy\"> "</span><a href=\"http://hl7.org/fhir/R5/bundle.html\" title=\"Bundle\">http://hl7.org/fhir/StructureDefinition/Bundle</a><span style=\"color: navy\">" </span><b>alias </b>Bundle <b>as </b><b>target</b>\r\n<b>uses</b><span style=\"color: navy\"> "</span><a href=\"http://hl7.org/fhir/R5/observation.html\" title=\"Observation\">http://hl7.org/fhir/StructureDefinition/Observation</a><span style=\"color: navy\">" </span><b>alias </b>Observation <b>as </b><b>target</b>\r\n\r\n<b>group </b>ExtractInpatientObstetricAdmissionAssessment<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 qr.item<b> as </b><span style=\"color: maroon\">itG</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'gestation') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span> itG.answer first<b> as </b><span style=\"color: maroon\">aG</span><b> then</b><span style=\"color: navy\"> {\r\n</span> aG<span style=\"color: navy\"><b> -> </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">entryG</span><span style=\"color: navy\">, </span> entryG.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\">obsG</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>obsG<b> then </b>CopyResponseTags<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obsG</span><span style=\"color: navy\">)</span> <i>"responseTags"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span> obsG<span style=\"color: navy\">, </span> entryG<b> then </b>BuildObsBase<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obsG</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entryG</span><span style=\"color: navy\">)</span> <i>"gestationBase"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>obsG<b> then </b>SetExamCategory<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obsG</span><span style=\"color: navy\">)</span> <i>"gestationCategory"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>obsG.code<b> as </b><span style=\"color: maroon\">code</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>code.coding<b> as </b><span style=\"color: maroon\">coding</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>coding.system = <span style=\"color: blue\">'http://loinc.org'</span> <i>"codeSystem"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>coding.code = <span style=\"color: blue\">'18185-9'</span> <i>"codeCode"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>coding.display = <span style=\"color: blue\">'Gestational age'</span> <i>"codeDisplay"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"codeCoding"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"gestationCode"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">The item is type `quantity` with a unitOption pinning weeks, so the</span>\r\n <span style=\"color: navy\">// </span><span style=\"color: green\">answer arrives as a Quantity and is copied through whole.</span>\r\n aG.value<b> as </b><span style=\"color: maroon\">v</span><span style=\"color: navy\"><b> -> </b></span>obsG.value = <span style=\"color: maroon\">v</span> <i>"gestationValue"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"gestationObservation"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"gestationAnswer"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"gestationRule"</i><span style=\"color: navy\">;</span>\r\n qr.item<b> as </b><span style=\"color: maroon\">itF</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'fhr') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span> itF.answer first<b> as </b><span style=\"color: maroon\">aF</span><b> then</b><span style=\"color: navy\"> {\r\n</span> aF<span style=\"color: navy\"><b> -> </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">entryF</span><span style=\"color: navy\">, </span> entryF.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\">obsF</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>obsF<b> then </b>CopyResponseTags<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obsF</span><span style=\"color: navy\">)</span> <i>"responseTags"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span> obsF<span style=\"color: navy\">, </span> entryF<b> then </b>BuildObsBase<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obsF</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entryF</span><span style=\"color: navy\">)</span> <i>"fhrBase"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>obsF<b> then </b>SetExamCategory<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obsF</span><span style=\"color: navy\">)</span> <i>"fhrCategory"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>obsF.code<b> as </b><span style=\"color: maroon\">code</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>code.coding<b> as </b><span style=\"color: maroon\">coding</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>coding.system = <span style=\"color: blue\">'http://loinc.org'</span> <i>"codeSystem"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>coding.code = <span style=\"color: blue\">'55283-6'</span> <i>"codeCode"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>coding.display = <span style=\"color: blue\">'Fetal Heart rate'</span> <i>"codeDisplay"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"codeCoding"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"fhrCode"</i><span style=\"color: navy\">;</span>\r\n aF.value<b> as </b><span style=\"color: maroon\">v</span><span style=\"color: navy\"><b> -> </b></span>obsF.value = <span style=\"color: maroon\">v</span> <i>"fhrValue"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"fhrObservation"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"fhrAnswer"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"fhrRule"</i><span style=\"color: navy\">;</span>\r\n qr.item<b> as </b><span style=\"color: maroon\">itD</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'dilatation') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span> itD.answer first<b> as </b><span style=\"color: maroon\">aD</span><b> then</b><span style=\"color: navy\"> {\r\n</span> aD<span style=\"color: navy\"><b> -> </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">entryD</span><span style=\"color: navy\">, </span> entryD.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\">obsD</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>obsD<b> then </b>CopyResponseTags<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obsD</span><span style=\"color: navy\">)</span> <i>"responseTags"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span> obsD<span style=\"color: navy\">, </span> entryD<b> then </b>BuildObsBase<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obsD</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entryD</span><span style=\"color: navy\">)</span> <i>"dilatationBase"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>obsD<b> then </b>SetExamCategory<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obsD</span><span style=\"color: navy\">)</span> <i>"dilatationCategory"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>obsD.code<b> as </b><span style=\"color: maroon\">code</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>code.coding<b> as </b><span style=\"color: maroon\">coding</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>coding.system = <span style=\"color: blue\">'http://loinc.org'</span> <i>"codeSystem"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>coding.code = <span style=\"color: blue\">'11784-6'</span> <i>"codeCode"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>coding.display = <span style=\"color: blue\">'Cervical canal external os Diameter palpation'</span> <i>"codeDisplay"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"codeCoding"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"dilatationCode"</i><span style=\"color: navy\">;</span>\r\n aD.value<b> as </b><span style=\"color: maroon\">v</span><span style=\"color: navy\"><b> -> </b></span>obsD.value = <span style=\"color: maroon\">v</span> <i>"dilatationValue"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"dilatationObservation"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"dilatationAnswer"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"dilatationRule"</i><span style=\"color: navy\">;</span>\r\n qr.item<b> as </b><span style=\"color: maroon\">itH</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'obsHistory') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span> itH.answer first<b> as </b><span style=\"color: maroon\">aH</span><b> then</b><span style=\"color: navy\"> {\r\n</span> aH<span style=\"color: navy\"><b> -> </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">entryH</span><span style=\"color: navy\">, </span> entryH.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\">obsH</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>obsH<b> then </b>CopyResponseTags<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obsH</span><span style=\"color: navy\">)</span> <i>"responseTags"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span> obsH<span style=\"color: navy\">, </span> entryH<b> then </b>BuildObsBase<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obsH</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entryH</span><span style=\"color: navy\">)</span> <i>"historyBase"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>obsH<b> then </b>SetSocialHistoryCategory<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obsH</span><span style=\"color: navy\">)</span> <i>"historyCategory"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>obsH.code<b> as </b><span style=\"color: maroon\">code</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>code.coding<b> as </b><span style=\"color: maroon\">coding</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr<span style=\"color: navy\"><b> -> </b></span>coding.system = <span style=\"color: blue\">'http://loinc.org'</span> <i>"codeSystem"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>coding.code = <span style=\"color: blue\">'89213-3'</span> <i>"codeCode"</i><span style=\"color: navy\">;</span>\r\n qr<span style=\"color: navy\"><b> -> </b></span>coding.display = <span style=\"color: blue\">'Obstetrics History and physical note'</span> <i>"codeDisplay"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"codeCoding"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"historyCode"</i><span style=\"color: navy\">;</span>\r\n aH.value<b> as </b><span style=\"color: maroon\">v</span><span style=\"color: navy\"><b> -> </b></span>obsH.value = <span style=\"color: maroon\">v</span> <i>"historyValue"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"historyObservation"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"historyAnswer"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"obsHistoryRule"</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><span style=\"color: navy\">// </span><span style=\"color: green\">─────────────────────────────────────────────────────────────────────────────</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">Shared scaffolding. Repeated in each map rather than imported: the transform</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">engine resolves `imports` against whatever StructureMaps happen to be on the</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">server, and a form that stops extracting because a shared map was not</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">uploaded is a worse failure than a duplicated group.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">─────────────────────────────────────────────────────────────────────────────</span>\r\n<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.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><b> where </b><span style=\"color: navy\">(</span>(reference.exists() and (reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Patient')))<span style=\"color: navy\">)</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><b> where </b><span style=\"color: navy\">(</span>(reference.exists() and (reference.startsWith('Encounter/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Encounter')))<span style=\"color: navy\">)</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><b> where </b><span style=\"color: navy\">(</span>(reference.exists() and (reference.startsWith('Organization/') or reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Organization') or ('/' + type).endsWith('/Patient')))<span style=\"color: navy\">)</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.where(((reference.exists() and (reference.startsWith('Organization/') or reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Organization') or ('/' + type).endsWith('/Patient'))))).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><b> where </b><span style=\"color: navy\">(</span>(reference.exists() and (reference.startsWith('Organization/') or reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Organization') or ('/' + type).endsWith('/Patient')))<span style=\"color: navy\">)</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 qr<span style=\"color: navy\"><b> -> </b></span>obs.derivedFrom = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'Reference'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">ref</span><b> then</b><span style=\"color: navy\"> {\r\n</span> qr.id<b> as </b><span style=\"color: maroon\">qid</span><span style=\"color: navy\"><b> -> </b></span>ref.reference = <span style=\"color: maroon\">qid</span> <i>"derivedFromRef"</i><span style=\"color: navy\">;</span>\r\n <span style=\"color: navy\">}</span> <i>"linkQuestionnaireResponse"</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>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>SetSocialHistoryCategory<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\">'social-history'</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\">'Social History'</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>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\">── Tenancy ──────────────────────────────────────────────────────────────────</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">Whose this is. The platform says which tenant a response belongs to with a</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">tag on the response, and every tag the response carries is copied onto</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">everything this map creates, as it is. Copied rather than named here, so the</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">map never has to know which tenant it is running for, nor which system the</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">tag is under: that system has moved more than once.</span>\r\n<b>group </b>CopyResponseTags<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.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>"
},
"url" : "https://fhir.slade360.co.ke/fhir/StructureMap/ExtractInpatientObstetricAdmissionAssessment",
"version" : "0.1.0",
"name" : "ExtractInpatientObstetricAdmissionAssessment",
"title" : "Inpatient Obstetric Admission Assessment Extraction",
"status" : "active",
"date" : "2026-10-06T18:48:22+00:00",
"publisher" : "Kathurima Kimathi",
"contact" : [
{
"name" : "Kathurima Kimathi",
"telecom" : [
{
"system" : "url",
"value" : "https://www.linkedin.com/in/kathurima-kimathi/"
},
{
"system" : "email",
"value" : "kathurimakimathi415@gmail.com"
}
]
},
{
"name" : "Oscar John",
"telecom" : [
{
"system" : "email",
"value" : "oscarjohnotieno@gmail.com",
"use" : "work"
}
]
},
{
"name" : "Kennedy Omondi",
"telecom" : [
{
"system" : "email",
"value" : "kennankole@gmail.com",
"use" : "work"
}
]
}
],
"description" : "Four measurements out, four Observations. Gestation, fetal heart rate and cervical dilatation are readings taken at the bedside, so they carry category `exam`; the obstetric history is reported rather than measured, so it carries `social-history`. Every LOINC code here was checked against tx.fhir.org before use.",
"structure" : [
{
"url" : "http://hl7.org/fhir/StructureDefinition/QuestionnaireResponse",
"mode" : "source",
"alias" : "QR"
},
{
"url" : "http://hl7.org/fhir/StructureDefinition/Bundle",
"mode" : "target",
"alias" : "Bundle"
},
{
"url" : "http://hl7.org/fhir/StructureDefinition/Observation",
"mode" : "target",
"alias" : "Observation"
}
],
"group" : [
{
"name" : "ExtractInpatientObstetricAdmissionAssessment",
"input" : [
{
"name" : "qr",
"type" : "QR",
"mode" : "source"
},
{
"name" : "bundle",
"type" : "Bundle",
"mode" : "target"
}
],
"rule" : [
{
"name" : "setBundleType",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "bundle",
"element" : "type",
"transform" : "copy",
"parameter" : [
{
"valueString" : "transaction"
}
]
}
]
},
{
"name" : "gestationRule",
"source" : [
{
"context" : "qr",
"element" : "item",
"variable" : "itG",
"condition" : "(linkId = 'gestation') and answer.value.exists()"
}
],
"rule" : [
{
"name" : "gestationAnswer",
"source" : [
{
"context" : "itG",
"element" : "answer",
"listMode" : "first",
"variable" : "aG"
}
],
"rule" : [
{
"name" : "gestationObservation",
"source" : [
{
"context" : "aG"
}
],
"target" : [
{
"context" : "bundle",
"element" : "entry",
"variable" : "entryG"
},
{
"context" : "entryG",
"element" : "resource",
"variable" : "obsG",
"transform" : "create",
"parameter" : [
{
"valueString" : "Observation"
}
]
}
],
"rule" : [
{
"name" : "responseTags",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "obsG"
}
],
"dependent" : [
{
"name" : "CopyResponseTags",
"parameter" : [
{
"valueId" : "qr"
},
{
"valueId" : "obsG"
}
]
}
]
},
{
"name" : "gestationBase",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "obsG"
},
{
"context" : "entryG"
}
],
"dependent" : [
{
"name" : "BuildObsBase",
"parameter" : [
{
"valueId" : "qr"
},
{
"valueId" : "obsG"
},
{
"valueId" : "entryG"
}
]
}
]
},
{
"name" : "gestationCategory",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "obsG"
}
],
"dependent" : [
{
"name" : "SetExamCategory",
"parameter" : [
{
"valueId" : "qr"
},
{
"valueId" : "obsG"
}
]
}
]
},
{
"name" : "gestationCode",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "obsG",
"element" : "code",
"variable" : "code"
}
],
"rule" : [
{
"name" : "codeCoding",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "code",
"element" : "coding",
"variable" : "coding"
}
],
"rule" : [
{
"name" : "codeSystem",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "coding",
"element" : "system",
"transform" : "copy",
"parameter" : [
{
"valueString" : "http://loinc.org"
}
]
}
]
},
{
"name" : "codeCode",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "coding",
"element" : "code",
"transform" : "copy",
"parameter" : [
{
"valueString" : "18185-9"
}
]
}
]
},
{
"name" : "codeDisplay",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "coding",
"element" : "display",
"transform" : "copy",
"parameter" : [
{
"valueString" : "Gestational age"
}
]
}
]
}
]
}
]
},
{
"name" : "gestationValue",
"source" : [
{
"context" : "aG",
"element" : "value",
"variable" : "v"
}
],
"target" : [
{
"context" : "obsG",
"element" : "value",
"transform" : "copy",
"parameter" : [
{
"valueId" : "v"
}
]
}
],
"documentation" : "The item is type `quantity` with a unitOption pinning weeks, so the\r\nanswer arrives as a Quantity and is copied through whole."
}
]
}
]
}
]
},
{
"name" : "fhrRule",
"source" : [
{
"context" : "qr",
"element" : "item",
"variable" : "itF",
"condition" : "(linkId = 'fhr') and answer.value.exists()"
}
],
"rule" : [
{
"name" : "fhrAnswer",
"source" : [
{
"context" : "itF",
"element" : "answer",
"listMode" : "first",
"variable" : "aF"
}
],
"rule" : [
{
"name" : "fhrObservation",
"source" : [
{
"context" : "aF"
}
],
"target" : [
{
"context" : "bundle",
"element" : "entry",
"variable" : "entryF"
},
{
"context" : "entryF",
"element" : "resource",
"variable" : "obsF",
"transform" : "create",
"parameter" : [
{
"valueString" : "Observation"
}
]
}
],
"rule" : [
{
"name" : "responseTags",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "obsF"
}
],
"dependent" : [
{
"name" : "CopyResponseTags",
"parameter" : [
{
"valueId" : "qr"
},
{
"valueId" : "obsF"
}
]
}
]
},
{
"name" : "fhrBase",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "obsF"
},
{
"context" : "entryF"
}
],
"dependent" : [
{
"name" : "BuildObsBase",
"parameter" : [
{
"valueId" : "qr"
},
{
"valueId" : "obsF"
},
{
"valueId" : "entryF"
}
]
}
]
},
{
"name" : "fhrCategory",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "obsF"
}
],
"dependent" : [
{
"name" : "SetExamCategory",
"parameter" : [
{
"valueId" : "qr"
},
{
"valueId" : "obsF"
}
]
}
]
},
{
"name" : "fhrCode",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "obsF",
"element" : "code",
"variable" : "code"
}
],
"rule" : [
{
"name" : "codeCoding",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "code",
"element" : "coding",
"variable" : "coding"
}
],
"rule" : [
{
"name" : "codeSystem",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "coding",
"element" : "system",
"transform" : "copy",
"parameter" : [
{
"valueString" : "http://loinc.org"
}
]
}
]
},
{
"name" : "codeCode",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "coding",
"element" : "code",
"transform" : "copy",
"parameter" : [
{
"valueString" : "55283-6"
}
]
}
]
},
{
"name" : "codeDisplay",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "coding",
"element" : "display",
"transform" : "copy",
"parameter" : [
{
"valueString" : "Fetal Heart rate"
}
]
}
]
}
]
}
]
},
{
"name" : "fhrValue",
"source" : [
{
"context" : "aF",
"element" : "value",
"variable" : "v"
}
],
"target" : [
{
"context" : "obsF",
"element" : "value",
"transform" : "copy",
"parameter" : [
{
"valueId" : "v"
}
]
}
]
}
]
}
]
}
]
},
{
"name" : "dilatationRule",
"source" : [
{
"context" : "qr",
"element" : "item",
"variable" : "itD",
"condition" : "(linkId = 'dilatation') and answer.value.exists()"
}
],
"rule" : [
{
"name" : "dilatationAnswer",
"source" : [
{
"context" : "itD",
"element" : "answer",
"listMode" : "first",
"variable" : "aD"
}
],
"rule" : [
{
"name" : "dilatationObservation",
"source" : [
{
"context" : "aD"
}
],
"target" : [
{
"context" : "bundle",
"element" : "entry",
"variable" : "entryD"
},
{
"context" : "entryD",
"element" : "resource",
"variable" : "obsD",
"transform" : "create",
"parameter" : [
{
"valueString" : "Observation"
}
]
}
],
"rule" : [
{
"name" : "responseTags",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "obsD"
}
],
"dependent" : [
{
"name" : "CopyResponseTags",
"parameter" : [
{
"valueId" : "qr"
},
{
"valueId" : "obsD"
}
]
}
]
},
{
"name" : "dilatationBase",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "obsD"
},
{
"context" : "entryD"
}
],
"dependent" : [
{
"name" : "BuildObsBase",
"parameter" : [
{
"valueId" : "qr"
},
{
"valueId" : "obsD"
},
{
"valueId" : "entryD"
}
]
}
]
},
{
"name" : "dilatationCategory",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "obsD"
}
],
"dependent" : [
{
"name" : "SetExamCategory",
"parameter" : [
{
"valueId" : "qr"
},
{
"valueId" : "obsD"
}
]
}
]
},
{
"name" : "dilatationCode",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "obsD",
"element" : "code",
"variable" : "code"
}
],
"rule" : [
{
"name" : "codeCoding",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "code",
"element" : "coding",
"variable" : "coding"
}
],
"rule" : [
{
"name" : "codeSystem",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "coding",
"element" : "system",
"transform" : "copy",
"parameter" : [
{
"valueString" : "http://loinc.org"
}
]
}
]
},
{
"name" : "codeCode",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "coding",
"element" : "code",
"transform" : "copy",
"parameter" : [
{
"valueString" : "11784-6"
}
]
}
]
},
{
"name" : "codeDisplay",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "coding",
"element" : "display",
"transform" : "copy",
"parameter" : [
{
"valueString" : "Cervical canal external os Diameter palpation"
}
]
}
]
}
]
}
]
},
{
"name" : "dilatationValue",
"source" : [
{
"context" : "aD",
"element" : "value",
"variable" : "v"
}
],
"target" : [
{
"context" : "obsD",
"element" : "value",
"transform" : "copy",
"parameter" : [
{
"valueId" : "v"
}
]
}
]
}
]
}
]
}
]
},
{
"name" : "obsHistoryRule",
"source" : [
{
"context" : "qr",
"element" : "item",
"variable" : "itH",
"condition" : "(linkId = 'obsHistory') and answer.value.exists()"
}
],
"rule" : [
{
"name" : "historyAnswer",
"source" : [
{
"context" : "itH",
"element" : "answer",
"listMode" : "first",
"variable" : "aH"
}
],
"rule" : [
{
"name" : "historyObservation",
"source" : [
{
"context" : "aH"
}
],
"target" : [
{
"context" : "bundle",
"element" : "entry",
"variable" : "entryH"
},
{
"context" : "entryH",
"element" : "resource",
"variable" : "obsH",
"transform" : "create",
"parameter" : [
{
"valueString" : "Observation"
}
]
}
],
"rule" : [
{
"name" : "responseTags",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "obsH"
}
],
"dependent" : [
{
"name" : "CopyResponseTags",
"parameter" : [
{
"valueId" : "qr"
},
{
"valueId" : "obsH"
}
]
}
]
},
{
"name" : "historyBase",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "obsH"
},
{
"context" : "entryH"
}
],
"dependent" : [
{
"name" : "BuildObsBase",
"parameter" : [
{
"valueId" : "qr"
},
{
"valueId" : "obsH"
},
{
"valueId" : "entryH"
}
]
}
]
},
{
"name" : "historyCategory",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "obsH"
}
],
"dependent" : [
{
"name" : "SetSocialHistoryCategory",
"parameter" : [
{
"valueId" : "qr"
},
{
"valueId" : "obsH"
}
]
}
]
},
{
"name" : "historyCode",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "obsH",
"element" : "code",
"variable" : "code"
}
],
"rule" : [
{
"name" : "codeCoding",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "code",
"element" : "coding",
"variable" : "coding"
}
],
"rule" : [
{
"name" : "codeSystem",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "coding",
"element" : "system",
"transform" : "copy",
"parameter" : [
{
"valueString" : "http://loinc.org"
}
]
}
]
},
{
"name" : "codeCode",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "coding",
"element" : "code",
"transform" : "copy",
"parameter" : [
{
"valueString" : "89213-3"
}
]
}
]
},
{
"name" : "codeDisplay",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "coding",
"element" : "display",
"transform" : "copy",
"parameter" : [
{
"valueString" : "Obstetrics History and physical note"
}
]
}
]
}
]
}
]
},
{
"name" : "historyValue",
"source" : [
{
"context" : "aH",
"element" : "value",
"variable" : "v"
}
],
"target" : [
{
"context" : "obsH",
"element" : "value",
"transform" : "copy",
"parameter" : [
{
"valueId" : "v"
}
]
}
]
}
]
}
]
}
]
}
]
},
{
"name" : "BuildObsBase",
"documentation" : "─────────────────────────────────────────────────────────────────────────────\r\nShared scaffolding. Repeated in each map rather than imported: the transform\r\nengine resolves `imports` against whatever StructureMaps happen to be on the\r\nserver, and a form that stops extracting because a shared map was not\r\nuploaded is a worse failure than a duplicated group.\r\n─────────────────────────────────────────────────────────────────────────────",
"input" : [
{
"name" : "qr",
"type" : "QR",
"mode" : "source"
},
{
"name" : "obs",
"type" : "Observation",
"mode" : "target"
},
{
"name" : "entry",
"mode" : "target"
}
],
"rule" : [
{
"name" : "idAndFullUrl",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "obs",
"element" : "id",
"transform" : "uuid"
}
],
"dependent" : [
{
"name" : "SetObservationFullUrl",
"parameter" : [
{
"valueId" : "obs"
},
{
"valueId" : "entry"
}
]
}
]
},
{
"name" : "entryRequest",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "entry",
"element" : "request",
"variable" : "request"
}
],
"rule" : [
{
"name" : "requestMethod",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "request",
"element" : "method",
"transform" : "copy",
"parameter" : [
{
"valueString" : "POST"
}
]
}
]
},
{
"name" : "requestUrl",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "request",
"element" : "url",
"transform" : "copy",
"parameter" : [
{
"valueString" : "Observation"
}
]
}
]
}
]
},
{
"name" : "status",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "obs",
"element" : "status",
"transform" : "copy",
"parameter" : [
{
"valueString" : "final"
}
]
}
]
},
{
"name" : "subject",
"source" : [
{
"context" : "qr",
"element" : "subject",
"variable" : "s",
"condition" : "(reference.exists() and (reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Patient')))"
}
],
"target" : [
{
"context" : "obs",
"element" : "subject",
"transform" : "copy",
"parameter" : [
{
"valueId" : "s"
}
]
}
]
},
{
"name" : "encounter",
"source" : [
{
"context" : "qr",
"element" : "encounter",
"variable" : "e",
"condition" : "(reference.exists() and (reference.startsWith('Encounter/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Encounter')))"
}
],
"target" : [
{
"context" : "obs",
"element" : "encounter",
"transform" : "copy",
"parameter" : [
{
"valueId" : "e"
}
]
}
]
},
{
"name" : "effective",
"source" : [
{
"context" : "qr",
"element" : "authored",
"variable" : "t"
}
],
"target" : [
{
"context" : "obs",
"element" : "effective",
"transform" : "copy",
"parameter" : [
{
"valueId" : "t"
}
]
}
]
},
{
"name" : "performerFromSource",
"source" : [
{
"context" : "qr",
"element" : "source",
"variable" : "src",
"condition" : "(reference.exists() and (reference.startsWith('Organization/') or reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Organization') or ('/' + type).endsWith('/Patient')))"
}
],
"target" : [
{
"context" : "obs",
"element" : "performer",
"transform" : "copy",
"parameter" : [
{
"valueId" : "src"
}
]
}
]
},
{
"name" : "performerFallback",
"source" : [
{
"context" : "qr",
"condition" : "source.where(((reference.exists() and (reference.startsWith('Organization/') or reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Organization') or ('/' + type).endsWith('/Patient'))))).exists().not()"
}
],
"rule" : [
{
"name" : "performerFromAuthor",
"source" : [
{
"context" : "qr",
"element" : "author",
"variable" : "a",
"condition" : "(reference.exists() and (reference.startsWith('Organization/') or reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Organization') or ('/' + type).endsWith('/Patient')))"
}
],
"target" : [
{
"context" : "obs",
"element" : "performer",
"transform" : "copy",
"parameter" : [
{
"valueId" : "a"
}
]
}
]
}
]
},
{
"name" : "linkQuestionnaireResponse",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "obs",
"element" : "derivedFrom",
"variable" : "ref",
"transform" : "create",
"parameter" : [
{
"valueString" : "Reference"
}
]
}
],
"rule" : [
{
"name" : "derivedFromRef",
"source" : [
{
"context" : "qr",
"element" : "id",
"variable" : "qid"
}
],
"target" : [
{
"context" : "ref",
"element" : "reference",
"transform" : "copy",
"parameter" : [
{
"valueId" : "qid"
}
]
}
]
}
]
}
]
},
{
"name" : "SetExamCategory",
"input" : [
{
"name" : "qr",
"type" : "QR",
"mode" : "source"
},
{
"name" : "obs",
"type" : "Observation",
"mode" : "target"
}
],
"rule" : [
{
"name" : "category",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "obs",
"element" : "category",
"variable" : "cat"
}
],
"rule" : [
{
"name" : "categoryCoding",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "cat",
"element" : "coding",
"variable" : "coding"
}
],
"rule" : [
{
"name" : "categorySystem",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "coding",
"element" : "system",
"transform" : "copy",
"parameter" : [
{
"valueString" : "http://terminology.hl7.org/CodeSystem/observation-category"
}
]
}
]
},
{
"name" : "categoryCode",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "coding",
"element" : "code",
"transform" : "copy",
"parameter" : [
{
"valueString" : "exam"
}
]
}
]
},
{
"name" : "categoryDisplay",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "coding",
"element" : "display",
"transform" : "copy",
"parameter" : [
{
"valueString" : "Exam"
}
]
}
]
}
]
}
]
}
]
},
{
"name" : "SetSocialHistoryCategory",
"input" : [
{
"name" : "qr",
"type" : "QR",
"mode" : "source"
},
{
"name" : "obs",
"type" : "Observation",
"mode" : "target"
}
],
"rule" : [
{
"name" : "category",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "obs",
"element" : "category",
"variable" : "cat"
}
],
"rule" : [
{
"name" : "categoryCoding",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "cat",
"element" : "coding",
"variable" : "coding"
}
],
"rule" : [
{
"name" : "categorySystem",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "coding",
"element" : "system",
"transform" : "copy",
"parameter" : [
{
"valueString" : "http://terminology.hl7.org/CodeSystem/observation-category"
}
]
}
]
},
{
"name" : "categoryCode",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "coding",
"element" : "code",
"transform" : "copy",
"parameter" : [
{
"valueString" : "social-history"
}
]
}
]
},
{
"name" : "categoryDisplay",
"source" : [
{
"context" : "qr"
}
],
"target" : [
{
"context" : "coding",
"element" : "display",
"transform" : "copy",
"parameter" : [
{
"valueString" : "Social History"
}
]
}
]
}
]
}
]
}
]
},
{
"name" : "SetObservationFullUrl",
"input" : [
{
"name" : "obs",
"type" : "Observation",
"mode" : "source"
},
{
"name" : "entry",
"mode" : "target"
}
],
"rule" : [
{
"name" : "assignFullUrl",
"source" : [
{
"context" : "obs",
"element" : "id",
"variable" : "id"
}
],
"target" : [
{
"context" : "entry",
"element" : "fullUrl",
"transform" : "append",
"parameter" : [
{
"valueString" : "https://fhir.slade360.co.ke/fhir/Observation/"
},
{
"valueId" : "id"
}
]
}
]
}
]
},
{
"name" : "CopyResponseTags",
"documentation" : "── Tenancy ──────────────────────────────────────────────────────────────────\r\nWhose this is. The platform says which tenant a response belongs to with a\r\ntag on the response, and every tag the response carries is copied onto\r\neverything this map creates, as it is. Copied rather than named here, so the\r\nmap never has to know which tenant it is running for, nor which system the\r\ntag is under: that system has moved more than once.",
"input" : [
{
"name" : "qr",
"type" : "QR",
"mode" : "source"
},
{
"name" : "r",
"mode" : "target"
}
],
"rule" : [
{
"name" : "tenantTags",
"source" : [
{
"context" : "qr",
"element" : "meta",
"variable" : "qm"
}
],
"rule" : [
{
"name" : "copyTag",
"source" : [
{
"context" : "qm",
"element" : "tag",
"variable" : "qt"
}
],
"target" : [
{
"context" : "r",
"element" : "meta",
"variable" : "m"
},
{
"context" : "m",
"element" : "tag",
"transform" : "copy",
"parameter" : [
{
"valueId" : "qt"
}
]
}
]
}
]
}
]
}
]
}